完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
求一个DHT11温湿度传感器用LCD1602液晶显示的C程序,显示的温湿度在LCD液晶显示最后几位,如图(在附件里)。哪位大神会写程序,发我QQ上面823952664@qq.com
|
|
相关推荐
2 条评论
16个回答
|
|
同求,2496491882@qq.com,谢谢
|
|
|
|
百度文库有很多
|
|
|
|
DHT11例子有很多。。。
|
|
|
|
能把你的仿真图(.DSN)文件发到2132895360@qq.com
|
|
|
|
代做 1002925094
|
|
|
|
我也想要1178061837@qq.com还有仿真图
|
|
|
|
|
|
有没有得到仿真图的给我一份,楼主能给最好了 1040835273
|
|
|
|
哈哈,楼主你问对人了,我正巧也做这个
#include ***it dat=P1^0; ***it RS=P2^0; ***it RW=P2^1; ***it 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); //延时等待 } |
|
|
|
可能要改一下管脚,毕竟我们的电路图不一样
|
|
|
|
帖子很不错,值得一看
|
|
|
|
夜行者灬 发表于 2016-5-19 23:50 为什么有那么多错,还不能运行 |
|
|
|
学习学习
|
|
|
|
看起来很不错的样子
|
|
|
|
看起来很不错的样子
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
489 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
498 浏览 0 评论
655 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1329 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
558 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11752 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 17:15 , Processed in 0.869401 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号