|
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit Data=P1^0;
- uchar rec_dat[13]="123695669999";
- extern void InitLcd1602();
- uchar showset[16]="12369566999999";
- int wendu=0;
- int shidu=0;
- sbit shezhi=P2^0; //定义按键引脚
- sbit jia=P2^1;
- sbit jian=P2^2;
- sbit beep=P3^7; //定义蜂鸣器引脚
- int wendul=5; //温度下限值
- int wenduh=30; //温度上限值
- int shidul=30; //湿度下限值
- int shiduh=60; //湿度上限值
- int change=0;
- uchar key_can; //按键值
- extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
- void DHT11_delay_us(uchar n)
- {
- while(--n);
- }
- void DHT11_delay_ms(uint z)
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- /************DHT11函数*********/
- void DHT11_start()
- {
- Data=1;
- DHT11_delay_us(2);
- Data=0;
- DHT11_delay_ms(20);
- Data=1;
- DHT11_delay_us(30);
- }
- uchar DHT11_rec_byte()
- {
- uchar i,dat=0;
- for(i=0;i<8;i++)
- {
- while(!Data);
- DHT11_delay_us(8);
- dat<<=1;
- if(Data==1)
- dat+=1;
- while(Data);
- }
- return dat;
- }
- void DHT11_receive()
- {
- uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
- DHT11_start();
- if(Data==0)
- {
- while(Data==0); //等待数据
- DHT11_delay_us(40); //延时80us
- R_H=DHT11_rec_byte(); //湿度高位
- R_L=DHT11_rec_byte(); //湿度低位
- T_H=DHT11_rec_byte(); //温度高位
- T_L=DHT11_rec_byte(); //温度低位
- revise=DHT11_rec_byte(); //获取数据
- DHT11_delay_us(25); //延时
- if((R_H+R_L+T_H+T_L)==revise) //校验
- {
- RH=R_H;
- RL=R_L;
- TH=T_H;
- TL=T_L;
- }
- /*数据分解*0-9*/
-
- // rec_dat[0]='0'+(RH/10);
- // rec_dat[1]='0'+(RH%10);
- // rec_dat[2]='R';
- // rec_dat[3]='H';
- // rec_dat[4]=' ';
- // rec_dat[5]=' ';
- // rec_dat[6]='0'+(TH/10);
- // rec_dat[7]='0'+(TH%10);
- // rec_dat[8]='C';
- shidu=RH;
- wendu=TH;
- rec_dat[0]='H';
- rec_dat[1]=':';
- rec_dat[2]='0'+(RH/10);
- rec_dat[3]='0'+(RH%10);
- rec_dat[4]='R';
- rec_dat[5]='H';
- rec_dat[6]=' ';
- rec_dat[7]=' ';
-
- rec_dat[8]='T';
- rec_dat[9]=':';
- rec_dat[10]='0'+(TH/10);
- rec_dat[11]='0'+(TH%10);
- rec_dat[12]='C';
- }
- }
- /**********主函数***********/
- void main()
- {
- InitLcd1602(); //1602初始化
- while(1)
- {
- DHT11_delay_ms(500); //DHT11初始1S延时1500
- DHT11_receive();
-
- if(shezhi==0)
- {
- DHT11_delay_ms(2);
- if(shezhi==0)
- {
- change++;
- if(change>3)
- {
- change=0;
-
- }
-
- }
- }
-
- if(change==0)
- {
- if(jia==0)
- {
- DHT11_delay_ms(2);
- if(jia==0)
- {
- shidul++;
- if(shidul>99)
- {
- shidul=99;
-
- }
-
- }
- }
-
- if(jian==0)
- {
- DHT11_delay_ms(2);
- if(jian==0)
- {
- shidul--;
- if(shidul<0)
- {
- shidul=0;
-
- }
-
- }
- }
- }
-
- if(change==1)
- {
- if(jia==0)
- {
- DHT11_delay_ms(2);
- if(jia==0)
- {
- shiduh++;
- if(shiduh>99)
- {
- shiduh=99;
-
- }
-
- }
- }
-
- if(jian==0)
- {
- DHT11_delay_ms(2);
- if(jian==0)
- {
- shiduh--;
- if(shiduh<0)
- {
- shiduh=0;
-
- }
-
- }
- }
- }
-
-
-
- if(change==2)
- {
- if(jia==0)
- {
- DHT11_delay_ms(2);
- if(jia==0)
- {
- wendul++;
- if(wendul>99)
- {
- wendul=99;
-
- }
-
- }
- }
-
- if(jian==0)
- {
- DHT11_delay_ms(2);
- if(jian==0)
- {
- wendul--;
- if(wendul<0)
- {
- wendul=0;
-
- }
-
- }
- }
- }
-
- if(change==3)
- {
- if(jia==0)
- {
- DHT11_delay_ms(2);
- if(jia==0)
- {
- wenduh++;
- if(wenduh>99)
- {
- wenduh=99;
-
- }
-
- }
- }
-
- if(jian==0)
- {
- DHT11_delay_ms(2);
- if(jian==0)
- {
- wenduh--;
- if(wenduh<0)
- {
- wenduh=0;
-
- }
-
- }
- }
- }
-
- showset[0]='L';
- showset[1]=':';
- showset[2]='0'+(shidul/10);
- showset[3]='0'+(shidul%10);
-
- showset[4]='H';
- showset[5]=':';
- showset[6]='0'+(shiduh/10);
- showset[7]='0'+(shiduh%10);
-
- showset[8]='L';
- showset[9]=':';
- showset[10]='0'+(wendul/10);
- showset[11]='0'+(wendul%10);
- showset[12]='L';
- showset[13]=':';
- showset[14]='0'+(wenduh/10);
- showset[15]='0'+(wenduh%10);
-
- if((shidu< shidul )|| (shidu>shiduh))
- {
- beep=0;
-
- }
- else if((wendu< wendul )|| (wendu>wenduh))
- {
- beep=0;
- }
- else
- {
- beep=1;
- }
- LcdShowStr(0,1,showset); //显示温湿度设置
- LcdShowStr(0,0,rec_dat); //显示温湿度
- }
- }
复制代码
|
|