完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我最近要做一个东西,就是4路温湿度采集数据,然后把采集到的数据显示在1602上。
温湿度传感器驱动程序 ***it dht11_data1 = P3^0; ***it dht11_data2 = P3^1; ***it dht11_data3 = P3^2; ***it dht11_data4 = P3^3; struct dht11 { dht11_data1; dht11_data2; dht11_data3; dht11_data4; }dht11_data; uchar dht11_flag = 0; uchar dht11_temp; uchar dht11_hum_H, dht11_hum_L, dht11_tep_H, dht11_tep_L; uchar dht11_hum_tempH, dht11_hum_tempL, dht11_tep_tempH, dht11_tep_tempL; uchar U8comdata, U8check_data, U8check_data1; void delay_10us() { U8 i; i--; i--; i--; i--; i--; i--; } void Delay_time(uint z) { uint x,y; for(x=z;x>0;x--) { for(y=110;y>0;y--); } } /*检测发送的数据位是0还是1*/ void Check0_1() { uchar i; for(i=0;i<8;i++) { dht11_flag = 2; while((!dht11_data1) && dht11_flag++); //1bit是否结束 delay_10us(); delay_10us(); delay_10us(); dht11_temp=0;// 26us~28us 表示为0 if(dht11_data1) { dht11_temp=1; // 超过28us依然为高电平 表示为1 } dht11_flag = 2; while((dht11_data1) && dht11_flag++); if(dht11_flag==1) break;//U8FLAG溢出超时则跳出for循环 //判断数据位是0还是1 // 如果高电平高过预定0高电平值则数据位为 1 U8comdata <<= 1; U8comdata|= dht11_temp; } } /*温湿度读取子程序*/ void rechive_data(data11 x) //传入参数 { //dht11_data1 = 0; x = 0; Delay(34); //主机拉低高于18ms x = 1; //dht11_data1 = 1; //总线由上拉电阻拉高 主机延时20us delay_10us(); delay_10us(); delay_10us(); delay_10us(); d //dht11_data1 = 1;//主机设为输入 判断从机响应信号 x = 1; if(!x)//if(!dht11_data1)//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 { dht11_flag = 2; while((!x) && dht11_flag++); //while((!dht11_data1) && dht11_flag++);//判断从机是否发出 80us 的低电平响应信号是否结束 dht11_flag = 2; while((x) && dht11_flag++); //while((dht11_data1) && dht11_flag++);//判断从机是否发出 80us 的高电平, 如发出则进入数据接收状态 Check0_1();//数据接收状态 dht11_hum_H = U8comdata; //湿度整数8位 Check0_1(); dht11_hum_L = U8comdata; //湿度小数8位 Check0_1(); dht11_tep_H = U8comdata; //温度整数8位 Check0_1(); dht11_tep_L = U8comdata; //温度小数8位 Check0_1(); U8check_data=U8comdata; //校验位 P1_0=1; dht11_temp = (dht11_hum_H + dht11_hum_L + dht11_tep_H + dht11_tep_L); if(dht11_temp == U8check_data) //数据校验 正确执行 { dht11_hum_tempH = dht11_hum_H; dht11_hum_tempL = dht11_hum_L; dht11_tep_tempH = dht11_tep_H; dht11_tep_tempL = dht11_tep_L; U8check_data1 = U8check_data; } } } 1602写程序函数 write_data(table[num]); 怎么样利用传函把4路采集的数据显示在一行上,求大仙指导。 |
|
相关推荐
1个回答
|
|
不错呀。。。顶
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
503 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1756 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1183 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1053 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1287 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12022 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 22:03 , Processed in 0.601007 second(s), Total 69, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号