久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 51單片機讀取DH11溫濕度模塊程序 [打印本頁]

作者: 騰飛的龍    時間: 2016-10-22 15:41
標題: 51單片機讀取DH11溫濕度模塊程序

  1. /******************************************************
  2.         功   能:DH11溫濕度1602(6線驅動)顯示
  3.         單片機:STC12C5608AD
  4.         晶  振:11?0592M
  5.         作  者:蘇義江
  6.         時  間:2016-10-22
  7. ***************************************************/

  8. #include <reg52.h>
  9. #include <intrins.h>  
  10. #define uint unsigned int  
  11. #define uchar unsigned char   
  12. sbit DATA=P1^1;//dht11data端接單片機的P1^0口//  

  13. uchar RHL,RHH,CL,CH;  
  14. uint m,n;
  15. //很正要的延時
  16. void delayus(uchar  n)
  17. {   
  18.         while(n--);
  19. }
  20. //很正要的延時
  21. void Delay10ms(void)//12M晶振下延時
  22. {   
  23.         uchar a,b;
  24.     for(b=249;b>0;b--)
  25.     for(a=17;a>0;a--);
  26. /*

  27.         uchar i,j,k;
  28.         for(i=5;i>0;i--)
  29.         for(j=4;j>0;j--)   
  30.         {   
  31.                 for(k=248;k>0;k--);   
  32.         }
  33. */
  34. }
  35. //粗延時
  36. void delay_ms(uint z)
  37. {
  38. uint x,y;
  39. for(x=z;x>0;x--)
  40.   for(y=614;y>0;y--);
  41. }
  42. //起始
  43. void Start(void)
  44. {
  45.     DATA=1;   
  46.         delay_ms(10);   
  47.         DATA=0;            
  48.         Delay10ms(); //主機把總線拉低必須大于
  49.         //18msDHT11能檢測到起始信號   
  50.         Delay10ms();
  51.         Delay10ms();   
  52.         DATA=1;
  53.         delay_ms(1);        
  54. }
  55. uint integer(uchar x)
  56. {  
  57.         uchar h,l;  
  58.         uint n;  
  59.         l=x&0x0f;  
  60.         h=(x&0xf0)>>4;  
  61.         n=h*16+l;  
  62.         return n;   
  63. }


  64. uchar readdht11_byte()
  65. {   
  66.         uchar i,dht;  
  67.         for(i=8;i>0;i--)  
  68.         {   
  69.                 dht=dht<<1;   
  70.                 while(!DATA); //等待50ms   
  71.                 delayus(30); //延時29us   
  72.                 if(DATA==1)   
  73.                 {
  74.                         dht=dht|0x01;   
  75.                         delayus(60);
  76.                 }   
  77.                 else     
  78.                 delayus(30); //延時29us              
  79.         }
  80.         return(dht);   
  81. }
  82. void read_dht11()
  83. {   
  84.         Start();
  85.         DATA=0;   //數據線拉低>18ms  
  86.         delay_ms(20); //延時>18ms
  87.          DATA=1;   //拉高等待  
  88.         delayus(30);  //延時29us  
  89.         DATA=1;  
  90.         if(!DATA)  
  91.         {   
  92.                 while(!DATA);//  
  93.                 while(DATA);   
  94.                 RHH=readdht11_byte();//濕度整數數據  
  95.                 RHL=readdht11_byte();//濕度小數數據  
  96.                 CH=readdht11_byte();//溫度整數數據  
  97.                 CL=readdht11_byte();//溫度小數數據   
  98.         }  
  99. }
  100. //////////////////////////////////////////////////
  101. //LCD1602接口定義    RW接地         
  102. #define LCD_DB P2 // - - P2 = DB4~DB7
  103. sbit LCD_RS=P2^2; // - - p2.2 = RS
  104. sbit LCD_E=P2^3; // - - p2.3 = E
  105. void LCD_delay_10us(uint n) // - - 10微秒的延時子程序
  106. {
  107. uint i,j;
  108. for(i=n*10;i>0;i--) // - - 晶振及單片機修改設置
  109. for(j=2;j>0;j--);
  110. }

  111. void LCD_delay_50us(uint n) // - - 50微秒的延時子程序
  112. {
  113.         uint i,j;
  114.         for(i=n*10;i>0;i--) // - - 晶振及單片機修改設置
  115.         for(j=22;j>0;j--);
  116. }
  117. // - - 向LCD1602寫指令
  118. void LCD_write_4bit_command(uchar dat);
  119. // - - 向LCD1602寫高四位指令
  120. void LCD_write_H4bit_command(uchar dat);
  121. // - - 向LCD1602寫低四位指令
  122. void LCD_write_L4bit_command(uchar dat);
  123. // - - 初始化LCD1602
  124. void LCD_init(void)
  125. {
  126.         LCD_delay_50us(10);
  127.         LCD_RS=0; // - - 指令

  128.         LCD_E=0; // - - 使能
  129.         LCD_write_L4bit_command(0x03); // - - 設置4位格式,2行,5x7
  130.         LCD_delay_50us(10);        
  131.         LCD_write_L4bit_command(0x03); // - - 設置4位格式,2行,5x7
  132.         LCD_delay_50us(10);
  133.         LCD_write_L4bit_command(0x02); // - - 設置4位格式,2行,5x7
  134.         LCD_delay_50us(10);
  135.         LCD_write_4bit_command(0x28); // - - 設置4位格式,2行,5x7
  136.         LCD_delay_10us(10);
  137.         LCD_write_4bit_command(0x28); // - - 設置4位格式,2行,5x7
  138.         LCD_delay_10us(5);
  139.         LCD_write_4bit_command(0x0c); // - - 整體顯示,關光標,不閃爍
  140.         LCD_delay_10us(5);
  141.         LCD_write_4bit_command(0x06); // - - 設定輸入方式,增量不移位
  142.         LCD_delay_10us(5);
  143.         LCD_write_4bit_command(0x01); // - - 清除屏幕顯示
  144.         LCD_delay_50us(10);
  145. }
  146. //********************************

  147. // - - 向LCD1602寫指令
  148. void LCD_write_4bit_command(uchar dat)
  149. {
  150.         LCD_delay_10us(10);
  151.         LCD_RS=0; // - - 指令

  152.         LCD_write_H4bit_command(dat);
  153.         LCD_write_L4bit_command(dat);
  154. }

  155. // - - 向LCD1602寫高四位指令
  156. void LCD_write_H4bit_command(uchar dat)
  157. {
  158.         LCD_delay_10us(100);
  159.         LCD_DB=(LCD_DB&0x0F)|(dat&0xF0);
  160.         LCD_delay_10us(10);
  161.         LCD_E=1; // - - 允許
  162.         LCD_delay_10us(100);
  163.         LCD_E=0;
  164. }

  165. // - - 向LCD1602寫低四位指令
  166. void LCD_write_L4bit_command(uchar dat)
  167. {
  168.         dat<<=4;
  169.         LCD_delay_10us(10);
  170.         LCD_DB=(LCD_DB&0x0F)|(dat&0xF0);
  171.         LCD_delay_10us(10);
  172.         LCD_E=1; // - - 允許
  173.         LCD_delay_10us(100);
  174.         LCD_E=0;
  175. }

  176. // - - 向LCD1602寫數據
  177. void LCD_write_4bit_data(uchar dat)
  178. {
  179.         LCD_delay_10us(10);
  180.         LCD_RS=1; // - - 數據

  181.         LCD_write_H4bit_command(dat);
  182.         LCD_write_L4bit_command(dat);
  183. }

  184. // - - 設置顯示位置
  185. void LCD_set_xy(uchar x,uchar y)
  186. {
  187.         uchar address;
  188.         if(y==1)
  189.         {
  190.                 address=0x80+x; // - - 第一行位置
  191.         }
  192.         else
  193.         {
  194.                 address=0xc0+x; // - - 第二行位置
  195.         }
  196.         LCD_delay_10us(10);
  197.         LCD_write_4bit_command(address);
  198. }

  199. // - - 顯示一個字符函數
  200. void LCD_disp_char(uchar x,uchar y,uchar dat)
  201. // - - LCD_disp_char(0,1,0x38); // - - 顯示8
  202. {
  203.         LCD_set_xy(x,y);
  204.         LCD_delay_10us(15);
  205.         LCD_write_4bit_data(dat);
  206. }


  207. // - - 顯示一個字符串函數
  208. void LCD_disp_string(uchar x,uchar y,uchar *s)
  209. {
  210.         LCD_set_xy(x,y);
  211.         LCD_delay_10us(5);
  212.         while(*s!='\0')
  213.         {
  214.                 LCD_write_4bit_data(*s);
  215.                 s++;
  216.         }
  217. }
  218. void main()//主函數模塊//   
  219. {      
  220.         
  221. //        lcd_init();//初始化LCD
  222.         LCD_init();
  223.         delay_ms(1500);
  224.         while(1)     
  225.         {     
  226.                 delay_ms(1500);  
  227.                 read_dht11();
  228.                 m=integer(RHH);   
  229.                 n=integer(CH);
  230.         
  231.                 LCD_disp_string(0,0,"R:");
  232.                 LCD_disp_char(3,0,m/10+0x30) ;
  233.                 LCD_disp_char(4,0,m%10+0x30) ;
  234.                 LCD_disp_char(6,0,'%') ;

  235.                 LCD_disp_string(0,1,"T:");
  236.                 LCD_disp_char(3,1,n/10+0x30) ;
  237.                 LCD_disp_char(4,1,n%10+0x30) ;
  238.                
  239.                 LCD_disp_char(6,1,0xdf) ;
  240.                 LCD_disp_char(7,1,0x43) ;         
  241.         }  
  242. }




復制代碼



作者: wc86110    時間: 2016-10-22 16:42
LZ,為何不用溫度標識符 “℃” 而用 “°” ?
作者: 騰飛的龍    時間: 2016-10-23 10:06
wc86110 發表于 2016-10-22 16:42
LZ,為何不用溫度標識符 “℃” 而用 “°” ?

地址不夠啦。我是加在智能小車上的,前面顯示超聲波距離

作者: 存存不調皮    時間: 2016-12-6 13:59
你好請問這個程序是在什么上面編譯的呢
作者: Volc_Yang    時間: 2016-12-6 14:19
贊一個
作者: huang917500    時間: 2016-12-6 22:42
贊一個
作者: wangjianb01978    時間: 2016-12-11 17:24
能在上面加時間和日期嗎
作者: 騰飛的龍    時間: 2016-12-24 12:50
存存不調皮 發表于 2016-12-6 13:59
你好請問這個程序是在什么上面編譯的呢

keil-uv2
作者: 騰飛的龍    時間: 2016-12-24 12:51
wangjianb01978 發表于 2016-12-11 17:24
能在上面加時間和日期嗎

加上時間的函數就可以的
作者: qq894308196    時間: 2016-12-25 16:04
謝謝樓主的貢獻
作者: dzxqyt    時間: 2016-12-27 17:10
謝謝樓主的貢獻
作者: 建之峰    時間: 2017-5-13 17:35
樓主能分享一下電路圖嗎我郵箱2292718639@qq.com
作者: 建之峰    時間: 2017-5-13 17:36
溫濕度不是4個腳麻還有一個clk接哪
作者: Augstwenty    時間: 2017-5-28 10:40
樓主,可以把你做這個智能車的全部資料發我一份么?謝謝樓主了!我的郵箱577848721@qq.com
作者: 卡爾曼    時間: 2017-12-21 13:02
請問1602接線,怎么接的,謝謝

作者: dicdoctor    時間: 2018-4-29 08:41
為什么沒有附件啊?找不到。


作者: 15646703113    時間: 2018-8-2 09:24
請問,這個代碼是完整的嗎?
作者: 企鵝企鵝    時間: 2018-11-15 19:05
這個是4線接線法嗎
作者: YTWO    時間: 2024-8-19 20:24
沒回信號回傳,估計是延時有問題




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美性久久久 | 亚洲精品欧美 | 免费九九视频 | 国产四区| 日韩在线中文字幕 | av一二三四 | 亚洲日韩中文字幕一区 | 1级毛片| 二区三区视频 | 正在播放国产精品 | 亚洲午夜视频在线观看 | 911网站大全在线观看 | 国产欧美日韩一区二区三区在线 | 中文字幕二区 | 欧美日韩在线成人 | 浴室洗澡偷拍一区二区 | 一级片网站视频 | 五月婷婷亚洲 | 影音先锋中文字幕在线观看 | 一区视频| 欧美一区二区三区视频在线播放 | 欧美精品一区在线 | 国产精久久久久久久妇剪断 | 美女毛片| 国产精品视频播放 | 久草视频网站 | 精品自拍视频在线观看 | 精品国产一区二区三区性色av | 日一日操一操 | 欧美日韩亚洲视频 | 久久97精品 | 欧洲高清转码区一二区 | 精品久久久一区二区 | 中文字幕一区二区三区不卡在线 | 在线国产精品一区 | 国产精品一区在线观看 | 久久精品亚洲精品国产欧美 | 精品亚洲一区二区三区 | 免费一级黄色电影 | 日韩资源 | 久久精品毛片 |