历史上的今天
今天是:2024年12月29日(星期日)
2020年12月29日 | 基于51单片机的dht11温湿度数码管显示
2020-12-29 来源:51hei

按button1可以切换模式
模式0 只显示温度
模式1 只显示湿度
模式2 动态显示温度和湿度,每5s切换一次
实物如下
温度显示

湿度显示 小数

模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。
单片机源程序如下:
#include bit DHT_Start(); bit DHT_ByteRead(unsigned char *dat); void ConfigTimer0(unsigned int ms); void Display_hum(unsigned char *num); void Display_temp(unsigned char *num); unsigned char T0RH = 0; //T0重载值的高字节 unsigned char T0RL = 0; //T0重载值的低字节 unsigned char str=88; unsigned char DHT[5]; unsigned int tmr1s = 0; unsigned int tmr10ms = 0; unsigned char st=0; unsigned int sdd=0; unsigned char td=0; unsigned char mode=0; bit flag1s = 0; bit flag10ms = 0; int x; sbit button1=P0^0; sbit dot=P1^3; //数码管小数点 void delay(unsigned char x) //延时ms { unsigned char a,b,c; for(c=x;c>0;c--) { for(b=102;b>0;b--) for(a=3;a>0;a--); } } void main() { bit tmp; dot=0; EA = 1; //开总中断 ConfigTimer0(10); //T0定时10ms // M1=0; M1=0;M2=0;M3=0;D1=0;D2=0; DHT_Start(); delay(5); while (1) { if(flag10ms) //数码管刷新频率 { if(st==0){ Display_temp(&str); flag10ms=0; } else if(st==1) { Display_hum(&str); flag10ms=0; } } else if (flag1s) //每秒更新一次温度、湿度 { DHT_Start(); tmp=DHT_ByteRead(&DHT); if(tmp==1) { if(st==0) { str = DHT[2] ; //温度 Display_temp(&str); flag1s =0; //标志位清零 } else if(st==1){ str = DHT[0] ; //湿度 Display_hum(&str); flag1s =0; //标志位清零 } } } if(button1==0) { delay(2); if(button1==0) { mode++; switch(mode) { case 0: st=0; break; case 1: st=1; break; case 2: td=1; break; default: break; } if(mode>=3) { td=0; mode=0; } while(button1==0) { } } } } } /* 配置并启动T0,ms-T0定时时间 */ void ConfigTimer0(unsigned int ms) { unsigned long tmp; //临时变量 tmp = 11059200 / 12; //定时器计数频率 tmp = (tmp * ms) / 1000; //计算所需的计数值 tmp = 65536 - tmp; //计算定时器重载值 tmp = tmp + 12; //补偿中断响应延时造成的误差 T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节 T0RL = (unsigned char)tmp; TMOD &= 0xF0; //清零T0的控制位 TMOD |= 0x01; //配置T0为模式1 TH0 = T0RH; //加载T0重载值 TL0 = T0RL; ET0 = 1; //使能T0中断 TR0 = 1; //启动T0 } /* T0中断服务函数,完成1秒定时 */ void InterruptTimer0() interrupt 1 { TH0 = T0RH; //重新加载重载值 TL0 = T0RL; tmr1s++; sdd++; tmr10ms++; if(tmr10ms>=1) // 数码管刷新频率 { tmr10ms=0; flag10ms = 1; } if(td==1) { if(sdd>=500) //温度显示5s 、湿度显示5s { sdd=0; if(st==0) { st=1; } else st=0; } } if (tmr1s >= 200) //1s 数据更新频率 { tmr1s = 0; flag1s = 1; } }
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 7月12日消息,据国外媒体报道,本周二,时代华纳表示计划于8月初公布旗下互联网部门AOL的商业战略计划,并否认了《华尔街日报》此前的一份报道,该报道称由于AOL打算提供免费服务,因此到2009 ...… 查看全部问答> |
|
汽车环境对电子产品而言是非常苛刻的:任何连接到12V电源上的电路都必须工作在9V至16V的标称电压范围内,其它需要迫切应对的问题包括负载突降、冷车发动、电池反向、双电池助推、尖峰信号、噪声和极宽的温度范围。在负载突降时,交流发电机的输出电 ...… 查看全部问答> |
|
项目经理掌控着产品从立项、开发到市场,到技术支持等整个环节。硬件工程师要想成为一个项目经理除了要拓宽自己的知识面,提高自己的技术外,要锻炼出良好的沟通能力,面对压力的调节能力,同一时间处理多个事务的协调和决断能力和良好平和的心态等 ...… 查看全部问答> |
|
从加入安防的那天起,有种如鱼得水的感觉。一转眼几个年头过去了,感受颇深。安防行业跟其他行业一样,职位很多,销售、技术、工程管理、调试、研发(个人一直认为研发不该属于安防,应属于电子或软件),你对哪个有兴趣?如果你选择了销售,那么恭 ...… 查看全部问答> |
|
公司历经三年,耗资3000万始终没有解决问题。我们系统中GPRS wifi 等大功率大电流的模块都是实时工作 在他们工作的时候 系统中模拟电路 始终受到大功率模块的 辐射干扰和传导干扰导致系统无**常工作。 现在我们系统重新架构如上图所示。所有模块 ...… 查看全部问答> |
|
同步连接问题: 请问谁用过串口或以太网实现过ActiveSync连接啊,我的USB从接口有问题了,所以想改用那些串口,但不知道要修改或设置什么参数,请用过的大虾多指教一下,谢了。… 查看全部问答> |
|
单片机的各种应用产品设计中,LCD和触摸屏作为人机交换的界面使其应用越来越广泛,但在实际应用中单片机要去直接控制大尺寸的彩色LCD(5.6寸以上)是比较困难的。我公司推出的智能显示产品正是为了单片机可以直接控制大尺寸LCD和触摸屏而 ...… 查看全部问答> |
|
接上arm板,可以接收到armlinux启动的信息,但是arm却无法接受键盘的信息!再其他电脑测试下,arm正常 就是串口无法接受信息 这是什么问题??会是串口烧掉了么?烧掉了 为什么还可以发送信息?? 需要换串口芯片??… 查看全部问答> |




