DHT11温湿度传感器51单片机在LCD1602显示程序

上传人:小** 文档编号:158224453 上传时间:2022-10-03 格式:DOC 页数:9 大小:95.50KB
收藏 版权申诉 举报 下载
DHT11温湿度传感器51单片机在LCD1602显示程序_第1页
第1页 / 共9页
DHT11温湿度传感器51单片机在LCD1602显示程序_第2页
第2页 / 共9页
DHT11温湿度传感器51单片机在LCD1602显示程序_第3页
第3页 / 共9页
资源描述:

《DHT11温湿度传感器51单片机在LCD1602显示程序》由会员分享,可在线阅读,更多相关《DHT11温湿度传感器51单片机在LCD1602显示程序(9页珍藏版)》请在装配图网上搜索。

1、51单片机控制温湿度传感器DHT11然后在LCD1602上显示当前的温湿度及单位其中湿度在第一行显示温度在第二行显示。单片机为YL-9最小系统。# includevreg51.h# includevintrins.htypedefunsignedcharBYTE;typedefunsignedintWORD;#defineuintunsignedint#defineucharunsignedcharsbitio=P1A0;/dht11data端接单片机的P1A0口sbitrw=P2A1;/一下三行是设置lcd1602的使能端sbitrs=P2A0;sbitep=P2A2;typedefbitB

2、OOL;/此声明一个布尔型变量即真或假uchardata_byte;ucharRH,RL,TH,TL;/*延时函数*voiddelay(ucharms)延时模块uchari;while(ms-)for(i=0;iv100;i+);晶振为12MHzvoiddelay1()/一个for循环大概需要8个多机器周期一个机器周期为1us也就是说本函数延时8us多此延时函数必须德稍微精确一点uchari;for(i=0;ivl;i+);/led模块BOOLlcd_bz()测试led忙碌状态返回值为布尔型数值真或假l.OBOOLresult;rs=0;/读忙信号rw=1;ep=1;_nop_();_nop_

3、();_nop_();_nop_();result=(BOOL)(P2&0x80);ep=0;result;voidwrite_cmd(ucharcmd)写指令while(lcd_bz();rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;voidwrite_addr(ucharaddr)/写地址/write_cmd(addrl0x80);/LCD第一行的首地址为0x80第二行的首地址为0x80+0x40=0xc0void

4、write_byte(uchardat)写字节while(lcd_bz();rs=1;rw=0;ep=0;_nop_();_nop_();P0=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=O;voidlcd_init()/led初始化/write_cmd(0x38);设置LCD两行显示一个数据由5*7点阵表示,数据由8跟线传输delay(l);write_cmd(0x0c);清除屏幕显示delay(1);write_cmd(0x06);设定输入方式增量不移位delay(1);write_

5、cmd(0x01);开整体显示关光标不闪烁delay(1);voiddisplay(ucharaddr,ucharq)在某一地址上显示内容adder表示的是地址偏移量示显示的字符或数字/delay(10);write_addr(addr);write_byte(q);delay(1);修改此时间可以改变LCD上数值跳变的数度voidstart()开始信号io=1;delay1();io=0;delay(25);主机把总线拉低必须大于18ms保证DHT11能检测到起始信号io=1;发送开始信号结束后拉高电平延时20-40usdelay1();以下三个延时函数差不多为24us符合要求delay1(

6、);delay1();ucharreceive_byte()接收一个字节uchari,temp;for(i=0;iv8;i+)接收8bit的数据while(!io);等待50us的低电平开始信号结束delay1();开始信号结束之后延时26us-28us以下三个延时函数delay1();delayl();temp=O;时间为26us-28us表示接收的为数据Oif(io=1)temp=1;如果26us-28us之后还为高电平则表示接收的数据为1while(io);/等待数据信号高电平0为26us-28usT为70usdata_bytevv=1;接收的数据为高位在前右移data_bytel=te

7、mp;returndata_byte;voidreceive。/接收数据/ucharT_H,T_L,R_H,R_L,check,num_check,i;start();开始信号/io=1;主机设为输入判断从机DHT11响应信号if(!io)判断从机是否有低电平响应信号while(!io);判断从机发出80us的低电平响应信号是否结束/while(io);/判断从机发出80us的高电平是否结束如结束则主机进入数据接收状态R_H=receive_byte();湿度高位R_L=receive_byte();湿度低位T_H=receive_byte();温度高位T_L=receive_byte();温

8、度低位check=receive_byte();校验位io=0;当最后一bit数据接完毕后从机拉低电平50usfor(i=0;iv7;i+)差不多50us的延时delayl();io=l;总线由上拉电阻拉高进入空闲状态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;voidmain()/主函数模块lcd_init();初始化LCDwhile(l)receive。;/接收数据display(OxOO,R);/LCD的第一行显示display(OxO1,:);display(0x02,RH/10+0x30);0x30表示带字库的LCD1602中0x30的位置放有数字0RH/10+0x30即表示湿度的十位数字在字库RH/10+0x30的位置处放着display(0x03,RH%10+0x30);display(0X04,%);display(0x40,T);/LCD的第二行显示display(0x41,:);display(0x42,TH/10+0x30);display(0x43,TH%10+0x30);display(0x44,0xdf);以下两个是温度单位的处理display(0x45,0x43);另附效果图:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!