历史上的今天
今天是:2024年12月06日(星期五)
2019年12月06日 | 51单片机控制DHT11在1602上显示温湿度的程序
2019-12-06 来源:51hei
单片机源程序如下:
#include #define uint unsigned int #define uchar unsigned char typedef bit BOOL; sbit io = P2^0; sbit rs = P2^6; sbit rw = P2^5; sbit ep = P2^7; uchar data_byte; uchar RH,RL,TH,TL; /********延时模块***********/ void delay(uchar ms) { // 延时子程序 uchar i; while(ms--) { for(i = 0;i<250;i++); } } void delay1()//延时10us { uchar i; i--; i--; i--; i--; i--; i--; } void longdelay(uchar s) //长延时 { while(s--) { delay(60); } } BOOL lcd_bz()//测试LCD忙碌状态 { BOOL result; rs = 0; rw = 1; ep = 1; result = (BOOL)(P0 & 0x80); ep = 0; return result; } void write_cmd(uchar cmd)// 写指令 { while(lcd_bz()); rs = 0; rw = 0; ep = 0; P0 = cmd; ep = 1; ep = 0; } void write_addr(uchar addr)//写地址 { write_cmd(addr|0x80); } void write_byte(uchar dat)//写字节 { while(lcd_bz()); rs = 1; rw = 0; ep = 0; P0 = dat; ep = 1; ep = 0; } void lcd_init()// 初始化 { write_cmd(0x38); delay(1); write_cmd(0x08); delay(1); write_cmd(0x01); delay(1); write_cmd(0x06); delay(1); write_cmd(0x0c); delay(1); } void display(uchar addr, uchar q)//在某一地址上显示一字节 { delay(10); write_addr(addr); write_byte(q); longdelay(2); } void start()//开始信号 { io=1; delay1(); io=0; delay(20);//>18ms io=1; delay1();//20-40us delay1(); delay1(); delay1(); delay1(); } uchar receive_byte()//接收一个字节 { uchar i,temp,count; for(i=0;i<8;i++) { count=2; while((!io)&&count++)//等待50us低电平结束 temp=0; delay1(); delay1(); delay1(); delay1(); if(io==1) temp=1; count=2; while((io)&&count++); if(count==1)break; data_byte<<=1; data_byte|=temp; } return data_byte; } void receive()//接收数据 { uchar T_H,T_L,R_H,R_L,check,num_check; uchar count; start();//开始信号 io=1; if(!io)//读取DHT11响应信号 { count=2; while((!io)&&count++);//DHT11高电平80us是否结束 count=2; while((io)&&count++); R_H=receive_byte(); R_L=receive_byte(); T_H=receive_byte(); T_L=receive_byte(); check=receive_byte(); io=0;//拉低延时50us delay1(); delay1(); delay1(); delay1(); delay1(); io=1; num_check=R_H+R_L+T_H+T_L; if(num_check=check) { RH=R_H; RL=R_L; TH=T_H; TL=T_L; check=num_check; } } } void main() { lcd_init(); delay(10); while(1) { receive(); delay(100); display(0x00,'R'); display(0x01,':'); display(0x02,RH/10+0x30); display(0x03,RH%10+0x30); display(0x04,'%'); display(0x40,'T'); display(0x41,':'); display(0x42,TH/10+0x30); display(0x43,TH%10+0x30); display(0x44,0xdf); display(0x45,0x43); } }
史海拾趣
|
随着Altera推出65nm工艺的FPGA,全球两大FPGA巨头又开始在65nm节点开始了新一轮的竞争。不过,近日赛灵思公司亚太区市场营销总监郑馨南透露:赛灵思将会有新的举措-加强FPGA在传统的通信、消费领域以及新兴汽车电子、医疗电子等领域的渗透。 与ASI ...… 查看全部问答> |
|
节能灯光源频闪的危害与对策 一、什麼是光源频闪? 这里需要区别一下频闪与频闪效应: 1、频闪:光源频闪就是光源发出的光随时间呈快速、重复的变化,使得光源跳动和不稳定。是指电光源光通量波动的深度。光通量波动深度越大,频闪越严重。而电 ...… 查看全部问答> |
|
驱动运行输出 FSDMGR!StoreDisk_t::MountStore:Opened the Store\"Dsk1\" hstore=0xd0970d90 FSDMGR!StoreDisk_t::MountStore:Genometry:NumSec=991232 BytesPerSec=512 FreeSec=0 BiggestGreatable=0 WinCE中没有SD卡的盘符,可能是驱动问题,还 ...… 查看全部问答> |
|
FileMapping读取size<=4096的文件后异常! 步骤: 1) FileMapping读取size 4096的文件2 3) FileMapping读取另一个文件3, MapViewOfFile()返回地址中的内容是文件2的. 不知道是不是driver层的问题?… 查看全部问答> |
|
我的光驱是PIONEER DVD-ROM DVD-122. 最近买了个刻录机,刻了几张CD-R格式的盘和DVD-R格式的盘, 结果发现光驱不能读这几张DVD-R格式的碟,但刻好的CD-R格式的盘都可读; 买来的CD碟,普通DVD的电影碟和买的DVD游戏碟也都行。 我Nero InfoTool测 ...… 查看全部问答> |
|
一个人的奋斗历程 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望 能够为国内it的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有 方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友 ...… 查看全部问答> |
|
随着可编程逻辑门阵列(FPGA,Field Programmanle Gate Array)应用的不断普及,便携式设备和无线设备的涌现,过去对于FPGA主要关心的速度、单片容量、费用以及可靠性等,现在对于低功耗FPGA的需 求,与速度、容量、费用等到了一样的高度,成为FPG ...… 查看全部问答> |
|
想请高手指点下 1)开发zigbee协议栈要掌握到什么程度? 2)z-stack2007中有个GenericAPP应用例子,关于绑定那里不太明白,希望能指点下,在处理函数里面主要 3)要开发一些应用,是不是还要了解开发板硬件方面的东西? … 查看全部问答> |




