#include#include<12864.h>#includesbit DHT = P0^0; //管脚定义,DHT11 总线输入输出;uchar data_byte;uchar Tem_Z,Tem_X,Hum_Z,Hum_X,Check;void LCD_Display(); //声明 LCD_Display 液晶显示函数;void Rec_DHT(); //声明 Rec_DHT,DHT11 接收数据函数;void receive();//主函数void main(){lcd_init(); while(1) { Rec_DHT(); LCD_Display(); delayms(1000); }}//延时函数,//延时 msvoid delays()//12.000MHz{ uchar i, j, k;i = 1;j = 234;k = 113;do{do{while (--k);} while (--j);} while (--i);}//延时 iusvoid delay10us(){ uchar i; for(i=0;i<6;i++) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }}/********主机发出开始信号*******/ void DHT11_Start() { DHT=1; delay10us(); DHT=0; delays(); //保持电平常间大于 18ms,延时 20ms DHT=1; delay10us(); //延迟等待 20-40us,延时 20us delay10us(); delay10us(); delay10us(); DHT=1; //拉高等待 DHT11 响应}//DHT11 接收一个字节数据uchar receive_data(){ uchar i,temp,count; data_byte=0; for(i=0;i<8;i++) { count=2; while((!DHT)&&count++); //等待 50us 低电平完毕 delay10us(); //等待 40us 高电平,后推断电平高低,高:DHT为 1,低:DHT 为 0 delay10us(); delay10us(); delay10us(); temp=0; if(DHT==1) temp=1; //DHT 为高:1,位为 1 count=2; while((DHT)&&count++); //等待 DHT 高电平完毕 if(count==1) break; //DHT 为低:0,位为 0 data_byte<<=1; //字节左移 data_byte|=temp; } return data_byte; //返回读取值}//DHT11 接收数据void Rec_DHT(){ uchar flag; uchar T_H,T_L,H_H,H_L,check,num_check; //定义采集参数中间变量 DHT11_Start(); //主机发出开始信号 if(!DHT) //等待从机响应信号输出低电平 { flag = 2; while((!DHT) && flag++); //推断从机是否发出 80us 的低电平响应信号是否完毕 flag = 2; while(DHT && flag++); //推断从机是否发出 80us 的高电平,若发出则开始采集数据 H_H=receive_data(); //采集湿度整数部分 H_L=receive_data(); //采集湿度小数部分 T_H=receive_data(); //采集温度整数部分 T_L=receive_data(); //采集...