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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15116|回復: 19
收起左側

51單片機讀取DH11溫濕度模塊程序

  [復制鏈接]
ID:79544 發表于 2016-10-22 15:41 | 顯示全部樓層 |閱讀模式

智能小車上顯示

智能小車上顯示

  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. }




復制代碼


評分

參與人數 7黑幣 +138 收起 理由
long123~~ + 5 很給力!
tbjgdtcn + 3 很給力!
twomore9 + 4 共享資料的黑幣獎勵!
ssfc + 5
davg1 + 11 共享資料的黑幣獎勵!
lyMarvin + 10 謝謝分享!值得學習
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:96682 發表于 2016-10-22 16:42 | 顯示全部樓層
LZ,為何不用溫度標識符 “℃” 而用 “°” ?
回復

使用道具 舉報

ID:79544 發表于 2016-10-23 10:06 | 顯示全部樓層
wc86110 發表于 2016-10-22 16:42
LZ,為何不用溫度標識符 “℃” 而用 “°” ?

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

使用道具 舉報

ID:152571 發表于 2016-12-6 13:59 | 顯示全部樓層
你好請問這個程序是在什么上面編譯的呢
回復

使用道具 舉報

ID:152574 發表于 2016-12-6 14:19 | 顯示全部樓層
贊一個
回復

使用道具 舉報

ID:150203 發表于 2016-12-6 22:42 | 顯示全部樓層
贊一個
回復

使用道具 舉報

ID:146910 發表于 2016-12-11 17:24 | 顯示全部樓層
能在上面加時間和日期嗎
回復

使用道具 舉報

ID:79544 發表于 2016-12-24 12:50 | 顯示全部樓層
存存不調皮 發表于 2016-12-6 13:59
你好請問這個程序是在什么上面編譯的呢

keil-uv2
回復

使用道具 舉報

ID:79544 發表于 2016-12-24 12:51 | 顯示全部樓層
wangjianb01978 發表于 2016-12-11 17:24
能在上面加時間和日期嗎

加上時間的函數就可以的
回復

使用道具 舉報

ID:157262 發表于 2016-12-25 16:04 | 顯示全部樓層
謝謝樓主的貢獻
回復

使用道具 舉報

ID:153777 發表于 2016-12-27 17:10 | 顯示全部樓層
謝謝樓主的貢獻
回復

使用道具 舉報

ID:200368 發表于 2017-5-13 17:35 | 顯示全部樓層
樓主能分享一下電路圖嗎我郵箱2292718639@qq.com
回復

使用道具 舉報

ID:200368 發表于 2017-5-13 17:36 | 顯示全部樓層
溫濕度不是4個腳麻還有一個clk接哪
回復

使用道具 舉報

ID:205572 發表于 2017-5-28 10:40 | 顯示全部樓層
樓主,可以把你做這個智能車的全部資料發我一份么?謝謝樓主了!我的郵箱577848721@qq.com
回復

使用道具 舉報

ID:264754 發表于 2017-12-21 13:02 | 顯示全部樓層
請問1602接線,怎么接的,謝謝
回復

使用道具 舉報

ID:280132 發表于 2018-4-29 08:41 | 顯示全部樓層
為什么沒有附件啊?找不到。

回復

使用道具 舉報

ID:381976 發表于 2018-8-2 09:24 | 顯示全部樓層
請問,這個代碼是完整的嗎?
回復

使用道具 舉報

ID:400557 發表于 2018-11-15 19:05 | 顯示全部樓層
這個是4線接線法嗎
回復

使用道具 舉報

ID:331078 發表于 2024-8-19 20:24 | 顯示全部樓層
沒回信號回傳,估計是延時有問題
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久久久久久久久 | 久久51| 欧美九九 | 精品av| 国产精品久久国产精品 | 亚洲精品成人网 | 欧美极品一区二区 | www.精品国产 | 精品国产一区二区三区免费 | 免费黄色a级毛片 | 91视频进入| 一级爱爱片 | 色网在线看 | 成人网在线看 | 啪一啪 | 日韩欧美在 | 久久6视频| 亚洲高清视频在线观看 | 久久精品国产免费一区二区三区 | 性一交一乱一透一a级 | 久久久久久九九九九九九 | 日韩精品一区二区三区视频播放 | 欧美日韩国产高清 | 99精品国产一区二区三区 | 免费观看成人性生生活片 | 成人免费在线视频 | 国产在线观看一区二区三区 | 日韩精品视频一区二区三区 | 日韩欧美在线一区二区 | 99免费精品视频 | 日韩一区二区三区在线看 | 国产成人jvid在线播放 | 欧美一区二区三区大片 | 天天躁日日躁狠狠很躁 | 国产成人在线视频播放 | av免费成人| 日韩精品一区二 | 色婷婷精品| 日本黄色免费视频 | 青青草中文字幕 | 欧美簧片 |