求一个DHT11温湿度传感器用LCD1602液晶显示的C程序,谢谢大家!

2019-07-15 15:12发布

求一个DHT11温湿度传感器用LCD1602液晶显示的C程序,显示的温湿度在LCD液晶显示最后几位,如图(在附件里)。哪位大神会写程序,发我QQ上面823952664@qq.com
}F1)`2MK9S74}A]@26VI1R4.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
来自***我2
1楼-- · 2019-07-16 12:11
我也要,2250139954@qq.com
14**bc
2楼-- · 2019-07-16 13:46
有没有得到仿真图的给我一份,楼主能给最好了  1040835273
夜行者灬
3楼-- · 2019-07-16 17:08
哈哈,楼主你问对人了,我正巧也做这个
#include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar DHT11[5],RTflag=0; uchar  FLAG;   //超时标志位 uchar a;
sbit dat=P1^0; sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2;  uchar table[5]; uint wd,sd; void Delay_t(uint j) {      uchar i;             for(;j>0;j--)           {                          for(i=0;i<27;i++);                   } } void  Delay_10us(void) //10us延时函数 {         uchar i;          i--;          i--;          i--;          i--;          i--;          i--; }  void delay(uint z)//1毫秒延时函数 {    uint x,y;    for(x=z;x>0;x--)     for(y=110;y>0;y--); }  void lcd_write_com(uchar com) //1602写指令 {    RS=0;    RW=0;    EN=1;    P0=com;    delay(1);    EN=0;  } void lcd_init()        //1602初始化 {    lcd_write_com(0x38);    delay(1);   lcd_write_com(0x08);   delay(1);   lcd_write_com(0x01);//1602清屏指令   delay(1);   lcd_write_com(0x06);   delay(1);   lcd_write_com(0x0C);   delay(1);  } void lcd_write_data(uchar date)//1602写数据 {    RS=1;    RW=0;    EN=1;    P0=date;    delay(1);    EN=0; } void write_str(uchar x,uchar y,uchar *s)//在任意地址写符号字母或数字 {           if(y==0)                                                                                             lcd_write_com(0x80+x);           else           lcd_write_com(0xc0+x);          while(*s)         {            lcd_write_data(*s);            s++;         } } void write_shu(uchar x,uchar y,uchar num)//数据显示函数 {                      uchar s,g;           if(y==0)           lcd_write_com(0x80+x);           else           lcd_write_com(0xc0+x);           s=num/10;// 数据分离显示           lcd_write_data(0x30+s);           g=num%10;//数据分离显示           lcd_write_data(0x30+g); }  uchar  write_byte1() //读一个字节 {            uchar i,comdata,temp1;        for(i=0;i<8;i++)                        {                        FLAG=2;                            while((!dat)&&FLAG++);//判断数据位是0还是1                         Delay_10us();                     Delay_10us();                         Delay_10us();                           temp1=0;              if(dat)temp1=1;        // 如果高电平高过预定0高电平值则数据位为 1                      FLAG=2;                  while((dat)&&FLAG++);//flag先与后加1 如果dat一直为1   uchar型变量 flag  溢出变为0  再自加1                                             if(FLAG==1)break;                //超时则跳出for循环                               comdata<<=1;//左移一位   高位在前  低位在后                       comdata|=temp1;              }                  return (comdata);   } void DHT11_5() //读5个字节数据  两个字节为温度数据  两个字节为湿度数据 最后一个字节为校验 {           uchar i,temp;           //主机拉低18ms         dat=0;            Delay_t(180);            dat=1;          //总线由上拉电阻拉高 主机延时20us            Delay_10us();            Delay_10us();            Delay_10us();            Delay_10us();          //主机设为输入 判断从机响应信号             dat=1;          //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行                      if(!dat)                 //T !                      {                 FLAG=2;           //超时标志位                                                   while((!dat)&&FLAG++);//判断从机是否发出 80us 的低电平响应信号是否结束                         FLAG=2;                                          while((dat)&&FLAG++); //判断从机拉高80us是否结束                         for(i=0;i<5;i++)//数据接收状态                         {                                 DHT11[i]=write_byte1();                                 }                                          dat=1;        //释放数据总线  为下一次读取做好准备                                            temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);                         if(temp==DHT11[4])        //数据校验                                  {                                                        RTflag=1;                                           }                         if(RTflag==1) //如果RTflag=1 说明读取到得数据正确                    {                                                           RTflag=0;                         //        tm[0]=DATARHT[0]/10;                         //        tm[1]=DATARHT[0]%10;                         //        tm[2]=DATARHT[1]/10; //湿度                                                    //        tm[3]=DATARHT[2]/10;                         //        tm[4]=DATARHT[2]%10;                         //        tm[5]=DATARHT[3]/10; //温度                                                                    write_str(0,0,"measurement ");//第一行显示湿度                                 write_shu(12,0,DHT11[0]);                                 write_str(14,0,"RH");                                 write_str(0,1,"Temperature ");//第二行为显示温度                                     write_shu(12,1,DHT11[2]);                             write_str(14,1,"^C");                                                    }                  }  }   void main() {   lcd_init();  //1602初始化   delay(1000); //等待DHT11温湿度传感器数据稳定  开始激活DHT11    while(1)//循环读取  并更新数据显示   {     delay(1000);//等待DHT11温湿度传感器数据稳定  开始激活DHT11    write_byte1();//读一个字节    DHT11_5(); //读数据   delay(1000); //延时等待 }
夜行者灬
4楼-- · 2019-07-16 20:41
可能要改一下管脚,毕竟我们的电路图不一样
yasky
5楼-- · 2019-07-17 01:23
 精彩回答 2  元偷偷看……
清竹水韵
6楼-- · 2019-07-17 02:08
夜行者灬 发表于 2016-5-19 23:50
哈哈,楼主你问对人了,我正巧也做这个
#include #define uint unsigned int #define uchar unsigned char uchar DHT11[5],RTflag=0; uchar  FLAG;   //超时标志位 uchar a;
sbit dat=P1^0; sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2;  uchar table[5]; uint wd,sd; void Delay_t(uint j) {      uchar i;             for(;j>0;j ...

为什么有那么多错,还不能运行

一周热门 更多>