#include #define uint unsigned int#define uchar unsigned chartypedef bit BOOL ;sbit io = P1^0 ;sbit rs = P2^4 ;sbit rw = P2^5 ;sbit ep = P2^6 ;uchar data_byte;uchar RH,RL,TH,TL;/************************************************延時模塊***************************************************/void delay(uchar ms){ // 延時子程序uchar i ;while(ms--){for(i = 0 ; i<250;i++) ;}}void delay1()//延時10us{uchar i;i--;i--;i--;i--;i--;i--;}void longdelay(uchar s) //長延時{while(s--){delay(60) ;}}/***********************************************LCD模塊********************************************************/BOOL lcd_bz()//測試LCD忙碌狀態(tài){ BOOL result ;rs = 0 ;rw = 1 ;ep = 1 ;result = (BOOL)(P0 & 0x80) ;ep = 0 ;return result ;}void write_cmd(uchar cmd)// 寫指令{ while(lcd_bz()) ;rs = 0 ;rw = 0 ;ep = 0 ;P0 = cmd ;ep = 1 ;ep = 0 ; }void write_addr(uchar addr)//寫地址{ write_cmd(addr|0x80) ;}void write_byte(uchar dat)//寫字節(jié){ while(lcd_bz()) ;rs = 1 ;rw = 0 ;ep = 0 ;P0 = dat ;ep = 1 ;ep = 0 ;}void lcd_init()// 初始化{ write_cmd(0x38) ;delay(1);write_cmd(0x08) ; delay(1);write_cmd(0x01) ;delay(1);write_cmd(0x06) ;delay(1);write_cmd(0x0c) ;delay(1);}void display(uchar addr, uchar q)//在某一地址上顯示一字節(jié){ delay(10) ;write_addr(addr) ;write_byte(q) ;longdelay(2) ;}/************************************************ DHT11測試模塊***********************************************/void start()//開始信號{io=1;delay1();io=0;delay(20);//>18msio=1;delay1();//20-40usdelay1();delay1();delay1();delay1();}uchar receive_byte()//接收一個字節(jié){uchar i,temp,count;for(i=0;i<8;i++){count=2;while((!io)&&count++)//等待50us低電平結(jié)束temp=0;delay1();delay1();delay1();delay1();if(io==1)temp=1;count=2;while((io)&&count++);if(count==1)break;data_byte<<=1; data_byte|=temp;}return data_byte;}void receive()//接收數(shù)據(jù){uchar T_H,T_L,R_H,R_L,check,num_check;uchar count;start();//開始信號io=1;if(!io)//讀取DHT11響應(yīng)信號{count=2;while((!io)&&count++);//DHT11高電平80us是否結(jié)束count=2;while((io)&&count++);R_H=receive_byte();R_L=receive_byte();T_H=receive_byte();T_L=receive_byte();check=receive_byte();io=0;//拉低延時50usdelay1();delay1();delay1();delay1();delay1();io=1;num_check=R_H+R_L+T_H+T_L;if(num_check=check){RH=R_H;RL=R_L;TH=T_H;TL=T_L;check=num_check;}}}/********************************************************主函數(shù)****/void main(){lcd_init();delay(10);while(1){receive();delay(100);display(0x00,R) ;display(0x01,:);display(0x02,RH/10+0x30);display(0x03,RH%10+0x30);display(0x04,%);display(0x40,T) ;display(0x41,:);display(0x42,TH/10+0x30);display(0x43,TH%10+0x30);display(0x44,0xdf);display(0x45,0x43);}}/**********************************************/
評論