首页 dht11+1602程序

dht11+1602程序

举报
开通vip

dht11+1602程序dht11+1602程序 #include #include typedef unsigned char uchar; typedef unsigned int unint; unsigned char str1[]={""}; unsigned char str2[]={""}; unsigned char code dis1[] = {"TRH RH: "}; unsigned char code dis2[] = {"TRH T: "}; sbit TRH = P0^1;//温湿度传感器DH...

dht11+1602程序
dht11+1602程序 #include #include typedef unsigned char uchar; typedef unsigned int unint; unsigned char str1[]={""}; unsigned char str2[]={""}; unsigned char code dis1[] = {"TRH RH: "}; unsigned char code dis2[] = {"TRH T: "}; sbit TRH = P0^1;//温湿度传感器DHT11数据接入 sbit LCD_RS = P0^7; sbit LCD_RW = P0^6; sbit LCD_EN = P0^5; uchar TH_data,TL_data,RH_data,RL_data,CK_data; uchar TH_temp,TL_temp,RH_temp,RL_temp,CK_temp; uchar com_data,untemp,temp; uchar respond; /******************************************************************************* **/ void delayNOP() { _nop_(); _nop_(); _nop_(); _nop_(); } /******************************************************************************* **/ /******************************************************************************* **/ // 毫秒级延时子程序 /******************************************************************************* **/ void delay_ms(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i< 150; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } /******************************************************************************* **/ /******************************************************************************* **/ //5us级延时程序 /******************************************************************************* **/ void delay_us() { uchar i; i--; i--; i--; i--; i--; i--; } /******************************************************************************* */ /******************************************************************************* */ // 测试LCD忙碌状态 //lcd_busy()为1时,忙,等待。lcd_busy()为0时,闲,可写指令与数据。 /******************************************************************************* */ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); } /******************************************************************************* / /*******************************************************************************/ // 写入指令数据到LCD /*******************************************************************************/ void lcd_wcmd(unsigned char cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P2 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /*****************************************************************************/ /*****************************************************************************/ //写显示数据到LCD //RS=高电平,RW=低电平,E=高脉冲,D0-D7=数据。 /*****************************************************************************/ void lcd_wdata(unsigned char dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P2 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /****************************************************************************/ /****************************************************************************/ //LCD初始化设定 /****************************************************************************/ void lcd_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显示位置 /****************************************************************************/ void lcd_dis_pos(unsigned char pos) { lcd_wcmd(pos | 0x80); //数据指针=80+地址变量 } /****************************************************************************/ /****************************************************************************/ //收发信号检测,数据读取 /****************************************************************************/ char receive() { uchar i; 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++); } else temp=0; com_data<<=1; com_data|=temp; } return(com_data); } /****************************************************************************/ /****************************************************************************/ //湿度读取子程序 //温度高8位== TL_data //温度低8位== TH_data //湿度高8位== RH_data //湿度低8位== RH_data //校验 8位 == CK_data //调用的程序有 delay();, Delay_5us();,RECEIVE(); /***************************************************************************/ void read_TRH() { //主机拉低18ms TRH=0; delay_ms(18); TRH=1; //DATA总线由上拉电阻拉高 主机延时20us delay_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; //数据校验 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; } } //湿度整数部分 str1[0] = (char)(0X30+RH_data/10); str1[1] = (char)(0X30+RH_data%10); str1[2] = 0x2e; //小数点 //湿度小数部分 str1[3] = (char)(0X30+RL_data/10); str1[5] = 0X25; //"%" str1[6] = 0X52; //"R" str1[7] = 0X48; //"H" //温度整数部分 str2[0] = (char)(0X30+TH_data/10); str2[1] = (char)(0X30+TH_data%10); str2[2] = 0x2e; //小数点 //温度小数部分 str2[3] = (char)(0X30+TL_data/10); str2[5] = 0X27; //"'" str2[6] = 0X43; //"C" } /****************************************************************************/ //主函数 //TH,TL,RH,RL分别代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 温湿度的整数和小数部分 /****************************************************************************/ void main() { unsigned char i,n=0x40,m; lcd_init(); delay_us(); while(1) { read_TRH(); //写字符 for(i=0;i<=7;i++) { lcd_dis_pos(i); //显示字符 lcd_wdata(dis1[i]); lcd_dis_pos(n+i); //显示字符 lcd_wdata(dis2[i]); } //写湿度数据 m=0x08; for(i=0;i<=7;i++) { lcd_dis_pos(m); lcd_wdata(str1[i]); m++; } //写温度数据 m=0x48; for(i=0;i<=7;i++) { lcd_dis_pos(m); lcd_wdata(str2[i]); m++; } delay_ms(100) ;//延时 } }
本文档为【dht11+1602程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769014
暂无简介~
格式:doc
大小:30KB
软件:Word
页数:13
分类:互联网
上传时间:2017-09-02
浏览量:27