资讯详情

蓝桥杯赛后总结

蓝桥杯单片机比赛必须代码

(代码是我自己写的,有问题可以直接提出) 串口,超声波一般省赛不考;建议其他省赛前熟练敲出。

串口

void Rsevies_Uart() interrupt 4  //接收 { 
            if(RI == 1)    { 
              Rsevies_dat=SBUF;   RI = 0;     } } void Send_Uart(unsigned char Send_dat)   //发送 { 
          SBUF = Send_dat;  while(TI == 0);  TI = 0; } void Send_string(unsigned char *str) { 
          while(*str != '\0')  { 
           Send_Uart(*str );  } } 

超声波测距

sbit TX=P1^0; sbit RX=P1^1; void Delay14us()  //@12.000MHz 14us { 
          unsigned char i;  _nop_();  _nop_();  i = 39;  while (--i); } void inte()       ///定时器1初始化 { 
           TMOD ∓= 0x0f;
  TH1=0X00;
  TL1=0X00;
}
void send_wave()     //产生8个脉冲信号
{ 
        
    u8 i;
	for(i=0;i<7;i++)
	{ 
        
	  TX=1;
	  Delay14us();
	  TX=0;
     Delay14us();
	}
}
void measure()
{ 
        
	u16 time;
	send_wave();
	TR1=1;
	while((RX==1)&&(TF1==0))
	{ 
        
	  flag=1;        
	  SMG();
	}
	flag=0;
	TR1=0;
	if(TF1==0)
	{ 
        
	 time=TH1;
	 time=(time<<8)|TL1;
	 distance = ((time/10)*17)/100;       //距离
	}
	else
	{ 
        
	 TF1=0;
	 distance= 999;         //测距跑飞标志
	}
	TH1=0X00;
	TL1=0X00;
}

PCF8591-光敏:

void read_rd1()
{ 
        
  IIC_Start();
  IIC_SendByte(0x90);
  IIC_WaitAck();
  IIC_SendByte(0x01);
  IIC_WaitAck();
  IIC_Start();
  IIC_SendByte(0x91);
  IIC_WaitAck();
  rb1=IIC_RecByte();
  IIC_SendAck(1);
  IIC_Stop();
}

PCF8591-可调电阻

void read_rb3()
{ 
        
  IIC_Start();
  IIC_SendByte(0x90);
  IIC_WaitAck();
  IIC_SendByte(0x03);
  IIC_WaitAck();
  
  IIC_Start();
  IIC_SendByte(0x91);
  IIC_WaitAck();
  rb2=IIC_RecByte();
  IIC_SendAck(1);
  IIC_Stop();
}

DS18B20温度传感器

float ds18b20_read(void)
{ 
        
 unsigned char tml,tmh;
	init_ds18b20();
// Delay_OneWire(1);
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	
	init_ds18b20();
// Delay_OneWire(1);
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	tml=Read_DS18B20();
	tmh=Read_DS18B20();	

	temp=(tmh<<8|tml)*0.625;
	temp_r=(unsigned int)temp;
	return temp;
}

DS1302实时时钟:

unsigned char code write[7]={ 
        0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char code read[7]={ 
        0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
unsigned char time[4]={ 
        0x55,0x23,0x23};//秒,分,时,日,月,周,年
void ds1302write()
{ 
        
 unsigned char i;
 Write_Ds1302_Byte(0x8e,0x00);
  for(i=0;i<7;i++)
  { 
        
   Write_Ds1302_Byte(write[i],time[i]);
  }	
    Write_Ds1302_Byte(0x8e,0x80);
}

void ds1302read()
{ 
        
  unsigned char i;
	for(i=0;i<7;i++)
	{ 
        
		time[i]=Read_Ds1302_Byte(read[i]);	
	}
}

24C02 外部储存器

void write_e2prom(unsigned char pom,unsigned char dat)
{ 
        
  IIC_Start();
  IIC_SendByte(0xa0);
  IIC_WaitAck();
  IIC_SendByte(pom);
  IIC_WaitAck();
  IIC_SendByte(dat);
  IIC_WaitAck();
  IIC_Stop();
}

unsigned char read_e2prom(unsigned char pom)
{ 
        
  unsigned char dat;
  IIC_Start();
  IIC_SendByte(0xa0);
  IIC_WaitAck();
  IIC_SendByte(pom);
  IIC_WaitAck();

  IIC_Start();
  IIC_SendByte(0xa1);
  IIC_WaitAck();
  dat=IIC_RecByte();
  IIC_SendAck(1);
  IIC_Stop();
  return dat;
}

PCF8591-DAC输出:

void out_dac(unsigned char dat)
{ 
        
  IIC_Start();
  IIC_SendByte(0x90);
  IIC_WaitAck();
  IIC_SendByte(0x40);
  IIC_WaitAck();
  IIC_SendByte(dat);
  IIC_WaitAck();
  IIC_Stop();
}

NE555测频率:

void Init_Timer()
{ 
        
	TH0 = 0xff;        
	TL0 = 0xff;
	TH1 = (65536 - 50000) / 256;        
	TL1 = (65536 - 50000) % 256;
	TMOD = 0x16;     //定时器1用方式1,定时;定时器0用方式2,计数
    ET0 = 1;
    ET1 = 1;
	EA = 1;
	
	TR0 = 1;
	TR1 = 1;
}
void Service_T0() interrupt 1
{ 
        
	count_f++;
}
void Service_T1() interrupt 3
{ 
        
    TH1 = (65536 - 50000) / 256;        
    TL1 = (65536 - 50000) % 256;     
	count_t++;
	if(count_t == 20)       //1s
	{ 
        
		dat_f = count_f;
		count_f = 0;
		count_t = 0;
	}
}

标签: 温度传感器ne1617ds

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台