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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1803|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

共享一個DHT11溫濕度測試單片機程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:286781 發(fā)表于 2018-3-1 22:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一個DHT11溫濕度測試程序

單片機源程序如下:
  1. /*******************************************************************************/
  2. //DHT11溫濕度測試程序
  3. //P0作為LCD的數(shù)據(jù)控制口,P2.0 作為DHT11data總線 ,P2.1作為狀態(tài)顯示
  4. //作者:趙軍偉 蘭州大學信息科學與工程學院 08級通信工程一班
  5. /********************************************************************************/
  6. #include <reg52.h>
  7. #include <intrins.h>
  8. typedef unsigned char unint8;
  9. typedef unsigned char unint16;
  10. unsigned char str1[]={"        "};
  11. unsigned char str2[]={"        "};
  12. unsigned char code dis1[] = {"TRH RH: "};
  13. unsigned char code dis2[] = {"TRH  T: "};
  14. sbit TRH = P2^1;//溫濕度傳感器DHT11數(shù)據(jù)接入
  15. sbit ST  = P2^2;//狀態(tài)顯示,是為了方便調(diào)試,具體使用的時候可以不要
  16. sbit LCD_RS = P3^5;            
  17. sbit LCD_RW = P3^6;
  18. sbit LCD_EN = P3^4;
  19. unint8 TH_data,TL_data,RH_data,RL_data,CK_data;
  20. unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
  21. unint8 com_data,untemp,temp;
  22. unint8 respond;
  23. /*********************************************************************************/
  24. void delayNOP()
  25. {
  26.          _nop_();
  27.          _nop_();
  28.          _nop_();
  29.          _nop_();
  30. }
  31. /*********************************************************************************/

  32. /*********************************************************************************/
  33. // 毫秒級延時子程序
  34. /*********************************************************************************/
  35. void delay_ms(unsigned char ms)
  36. {      
  37.           unsigned char i;
  38.           while(ms--)
  39.           {
  40.                     for(i = 0; i< 150; i++)
  41.                     {
  42.                               _nop_();
  43.                               _nop_();
  44.                               _nop_();
  45.                               _nop_();
  46.                     }
  47.           }
  48. }
  49. /*********************************************************************************/

  50. /*********************************************************************************/
  51. //5us級延時程序
  52. /*********************************************************************************/
  53. void delay_us()
  54. {
  55.            unint8 i;
  56.           i--;
  57.           i--;
  58.           i--;
  59.           i--;
  60.           i--;
  61.           i--;
  62. }
  63. /********************************************************************************/

  64.       
  65. /********************************************************************************/
  66. // 測試LCD忙碌狀態(tài)
  67. //lcd_busy()為1時,忙,等待。lcd_busy()為0時,閑,可寫指令與數(shù)據(jù)。
  68. /********************************************************************************/
  69. bit lcd_busy()
  70. {      
  71.          bit result;
  72.          LCD_RS = 0;
  73.          LCD_RW = 1;
  74.          LCD_EN = 1;
  75.           delayNOP();
  76.          result = (bit)(P0&0x80);
  77.          LCD_EN = 0;
  78.          return(result);
  79. }
  80. /*******************************************************************************/

  81. /*******************************************************************************/
  82. // 寫入指令數(shù)據(jù)到LCD
  83. /*******************************************************************************/
  84. void lcd_wcmd(unsigned char cmd)
  85. {      
  86.          while(lcd_busy());
  87.          LCD_RS = 0;
  88.          LCD_RW = 0;
  89.          LCD_EN = 0;
  90.           _nop_();
  91.           _nop_();
  92.          P0 = cmd;
  93.           delayNOP();
  94.          LCD_EN = 1;
  95.          delayNOP();
  96.          LCD_EN = 0;
  97. }
  98. /*****************************************************************************/

  99. /*****************************************************************************/
  100. //寫顯示數(shù)據(jù)到LCD                                                
  101. //RS=高電平,RW=低電平,E=高脈沖,D0-D7=數(shù)據(jù)。                             
  102. /*****************************************************************************/
  103. void lcd_wdata(unsigned char dat)
  104. {                          
  105.          while(lcd_busy());
  106.           LCD_RS = 1;
  107.          LCD_RW = 0;
  108.          LCD_EN = 0;
  109.          P0 = dat;
  110.          delayNOP();
  111.          LCD_EN = 1;
  112.          delayNOP();
  113.          LCD_EN = 0;
  114. }
  115. /****************************************************************************/

  116. /****************************************************************************/
  117. //LCD初始化設(shè)定
  118. /****************************************************************************/
  119. void lcd_init()
  120. {
  121.         delay_ms(15);                  
  122.         lcd_wcmd(0x38);      //16*2顯示,5*7點陣,8位數(shù)據(jù)
  123.         delay_ms(5);
  124.         lcd_wcmd(0x38);         
  125.         delay_ms(5);
  126.         lcd_wcmd(0x38);         
  127.         delay_ms(5);
  128.         lcd_wcmd(0x0c);      //顯示開,關(guān)光標
  129.         delay_ms(5);
  130.         lcd_wcmd(0x06);      //移動光標
  131.         delay_ms(5);
  132.         //lcd_wcmd(0x01);      //清除LCD的顯示內(nèi)容,如果屏幕過暗,可將這倆句刪除
  133.         //delay_ms(5);
  134. }
  135. /****************************************************************************/

  136. /****************************************************************************/
  137. //設(shè)定LCD顯示位置
  138. /****************************************************************************/
  139. void lcd_dis_pos(unsigned char pos)
  140. {      
  141.           lcd_wcmd(pos | 0x80); //數(shù)據(jù)指針=80+地址變量
  142. }
  143. /****************************************************************************/

  144. /****************************************************************************/
  145. //收發(fā)信號檢測,數(shù)據(jù)讀取
  146. /****************************************************************************/
  147. char receive()
  148. {   
  149.           unint8 i;
  150.           ST=0;
  151.           com_data=0;
  152.           for(i=0;i<=7;i++)   
  153.          {
  154.                     respond=2;
  155.                     while((!TRH)&&respond++);
  156.                     delay_us();
  157.                     delay_us();
  158.                     delay_us();
  159.                     if(TRH)
  160.                     {
  161.                               temp=1;
  162.                               respond=2;
  163.                               while((TRH)&&respond++);
  164.                     }
  165.                     else
  166.                               temp=0;
  167.                     com_data<<=1;
  168.                     com_data|=temp;   
  169.           }
  170.           return(com_data);  
  171. }
  172. /****************************************************************************/

  173. /****************************************************************************/
  174. //濕度讀取子程序
  175. //溫度高8位== TH_data
  176. //溫度低8位== TL_data
  177. //濕度高8位== RH_data
  178. //濕度低8位== RL_data
  179. //校驗 8位 == CK_data
  180. //調(diào)用的程序有 delay();, Delay_5us();,RECEIVE();
  181. /***************************************************************************/
  182. void read_TRH()
  183. {
  184.           //主機拉低18ms
  185.           TRH=0;
  186.          delay_ms(18);
  187.          TRH=1;
  188.           //DATA總線由上拉電阻拉高 主機延時20us
  189.          delay_us();
  190.          delay_us();
  191.          delay_us();
  192.          delay_us();
  193.           //delay_us();
  194.           //delay_us();delay_us();delay_us();delay_us();
  195.           //主機設(shè)為輸入 判斷從機響應(yīng)信號
  196.              TRH=1;
  197.           //判斷DHT11是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運行   
  198.          if(!TRH)   
  199.          {
  200.                   respond=2;
  201.                   //判斷DHT11發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束
  202.                   while((!TRH)&& respond++);
  203.                  respond=2;
  204.                  //判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài)
  205.                 while(TRH && respond++);
  206.                //數(shù)據(jù)接收狀態(tài)   
  207.                 RH_temp = receive();
  208.                 RL_temp = receive();
  209.                 TH_temp = receive();
  210.                 TL_temp = receive();
  211.                 CK_temp = receive();
  212.                 TRH=1;ST=1;     
  213.                  //數(shù)據(jù)校驗
  214.                  untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
  215.                  if(untemp==CK_temp)
  216.                  {
  217.                           RH_data = RH_temp;
  218.                           RL_data = RL_temp;
  219.                          TH_data = TH_temp;
  220.                           TL_data = TL_temp;
  221.                           CK_data = CK_temp;
  222.                 }
  223.         }
  224.          //濕度整數(shù)部分
  225.          str1[0] = (char)(0X30+RH_data/10);
  226.          str1[1] = (char)(0X30+RH_data%10);
  227.          str1[2] =  0x2e; //小數(shù)點
  228.           //濕度小數(shù)部分
  229.          str1[3] = (char)(0X30+RL_data/10);
  230.           str1[5] = 0X25; //"%"
  231.          str1[6] = 0X52; //"R"
  232.          str1[7] = 0X48; //"H"
  233.          //溫度整數(shù)部分
  234.          str2[0] = (char)(0X30+TH_data/10);
  235.          str2[1] = (char)(0X30+TH_data%10);
  236.          str2[2] =  0x2e; //小數(shù)點
  237.          //溫度小數(shù)部分
  238.           str2[3] = (char)(0X30+TL_data/10);
  239.           str2[5] = 0X27;  //"'"
  240.           str2[6] = 0X43;  //"C"
  241. }
  242. /****************************************************************************/
  243. //主函數(shù)
  244. //TH,TL,RH,RL分別代表溫濕度的整數(shù)和小數(shù)部分
  245. /****************************************************************************/
  246. void main()
  247. {
  248.           unsigned char i,n=0x40,m;
  249.           lcd_init();
  250.           delay_us();
  251.           while(1)
  252.           {
  253. ……………………

  254. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
main.rar (2.26 KB, 下載次數(shù): 25)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久机热 | 99这里只有精品视频 | 日韩和的一区二在线 | 91视频一区二区三区 | 国产一区精品在线 | 中文天堂在线观看 | 99久久久无码国产精品 | 日韩综合一区 | 一级免费毛片 | 亚洲精品亚洲人成人网 | 亚洲欧美日韩电影 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产三级一区二区 | 成人免费视频 | 福利精品| 精品产国自在拍 | 一本一道久久a久久精品综合 | 91精品国产综合久久久久 | 亚洲精品一区二区三区中文字幕 | 日韩av手机在线观看 | 日韩精品在线一区二区 | 国产精品成人69xxx免费视频 | 香蕉婷婷| 狠狠做深爱婷婷综合一区 | 亚洲黄色av网站 | 作爱视频免费观看 | 91小视频在线 | 曰韩一二三区 | 欧美亚洲在线视频 | 91精品久久久久久久久久入口 | 欧美精品一区二区三区蜜桃视频 | 久久久久99| 国产91在线播放 | 四虎永久免费黄色影片 | 男女羞羞视频大全 | 国产精品久久久久久久模特 | 九色91视频 | 激情六月丁香婷婷 | 亚洲天堂av网 | 国产免费一二三区 | 国产中文一区二区三区 |