DHT11的LCD1602显示程序.doc_第1页
DHT11的LCD1602显示程序.doc_第2页
DHT11的LCD1602显示程序.doc_第3页
DHT11的LCD1602显示程序.doc_第4页
DHT11的LCD1602显示程序.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*/DHT11温湿度测试程序/P0作为LCD的数据控制口,P2.0作为DHT11data总线,P2.1作为状态显示/作者:赵军伟兰州大学信息科学与工程学院08级通信工程一班/*/#include#includetypedefunsignedcharunint8;typedefunsignedcharunint16;unsignedcharstr1=;unsignedcharstr2=;unsignedcharcodedis1=TRHRH:;unsignedcharcodedis2=TRHT:;sbitTRH=P37;/温湿度传感器DHT11数据接入sbitST=P21;/状态显示,是为了方便调试,具体使用的时候可以不要sbitLCD_RS=P26;sbitLCD_RW=P25;sbitLCD_EN=P27;unint8TH_data,TL_data,RH_data,RL_data,CK_data;unint8TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;unint8com_data,untemp,temp;unint8respond;/*/voiddelayNOP()_nop_();_nop_();_nop_();_nop_();/*/*/毫秒级延时子程序/*/voiddelay_ms(unsignedcharms)unsignedchari;while(ms-)for(i=0;i150;i+)_nop_();_nop_();_nop_();_nop_();/*/*/5us级延时程序/*/voiddelay_us()unint8i;i-;i-;i-;i-;i-;i-;/*/*/测试LCD忙碌状态/lcd_busy()为1时,忙,等待。lcd_busy()为0时,闲,可写指令与数据。/*/bitlcd_busy()bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);/*/*/写入指令数据到LCD/*/voidlcd_wcmd(unsignedcharcmd)while(lcd_busy();LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;/*/*/写显示数据到LCD/RS=高电平,RW=低电平,E=高脉冲,D0-D7=数据。/*/voidlcd_wdata(unsignedchardat)while(lcd_busy();LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;/*/*/LCD初始化设定/*/voidlcd_init()delay_ms(15);lcd_wcmd(0x38);/16*2显示,5*7点阵,8位数据delay_ms(5);lcd_wcmd(0x38);delay_ms(5);lcd_wcmd(0x38);delay_ms(5);lcd_wcmd(0x0c);/显示开,关光标delay_ms(5);lcd_wcmd(0x06);/移动光标delay_ms(5);/lcd_wcmd(0x01);/清除LCD的显示内容,如果屏幕过暗,可将这俩句删除/delay_ms(5);/*/*/设定LCD显示位置/*/voidlcd_dis_pos(unsignedcharpos)lcd_wcmd(pos|0x80);/数据指针=80+地址变量/*/*/收发信号检测,数据读取/*/charreceive()unint8i;ST=0;com_data=0;for(i=0;i=7;i+)respond=2;while(!TRH)&respond+);delay_us();delay_us();delay_us();if(TRH)temp=1;respond=2;while(TRH)&respond+);elsetemp=0;com_data=1;com_data|=temp;return(com_data);/*/*/湿度读取子程序/温度高8位=TH_data/温度低8位=TL_data/湿度高8位=RH_data/湿度低8位=RL_data/校验8位=CK_data/调用的程序有delay();,Delay_5us();,RECEIVE();/*/voidread_TRH()/主机拉低18msTRH=0;delay_ms(18);TRH=1;/DATA总线由上拉电阻拉高主机延时20usdelay_us();delay_us();delay_us();delay_us();/delay_us();/delay_us();delay_us();delay_us();delay_us();/主机设为输入判断从机响应信号TRH=1;/判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行if(!TRH)respond=2;/判断DHT11发出80us的低电平响应信号是否结束while(!TRH)&respond+);respond=2;/判断从机是否发出80us的高电平,如发出则进入数据接收状态while(TRH&respond+);/数据接收状态RH_temp=receive();RL_temp=receive();TH_temp=receive();TL_temp=receive();CK_temp=receive();TRH=1;ST=1;/数据校验untemp=(RH_temp+RL_temp+TH_temp+TL_temp);if(untemp=CK_temp)RH_data=RH_temp;RL_data=RL_temp;TH_data=TH_temp;TL_data=TL_temp;CK_data=CK_temp;/湿度整数部分str10=(char)(0X30+RH_data/10);str11=(char)(0X30+RH_data%10);str12=0x2e;/小数点/湿度小数部分str13=(char)(0X30+RL_data/10);str15=0X25;/%str16=0X52;/Rstr17=0X48;/H/温度整数部分str20=(char)(0X30+TH_data/10);str21=(char)(0X30+TH_data%10);str22=0x2e;/小数点/温度小数部分str23=(char)(0X30+TL_data/10);str25=0X27;/str26=0X43;/C/*/主函数/TH,TL,RH,RL分别代表温湿度的整数和小数部分/*/voidmain()unsignedchari,n=0x40,m;lcd_init();delay_us();while(1)read_TRH();/写字符for(i=0;i=7;i+)lcd_dis_pos(i);/显示字符lcd_wdata(dis1i);lcd_dis_pos(n+i);/显示字符lcd_wdata(dis2i);/写湿度数据m=0x08;for(i=0;i=7;i+)lcd_dis_pos(m);lcd_wdata(str1i);m+

温馨提示

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

评论

0/150

提交评论