亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: DHT11溫濕度傳感器設(shè)計報告(含單片機源碼+實物) [打印本頁]

作者: stepping1    時間: 2018-3-8 15:43
標題: DHT11溫濕度傳感器設(shè)計報告(含單片機源碼+實物)

DHT11溫濕度

傳感器設(shè)計報告

院系:信息工程與科學學院

電氣工程學院

專業(yè):電子信息工程,自動化

:2014,2015

學生姓名:文*成,嚴*



二、實物圖





五、硬件設(shè)計分析以及使用

   1、程序通過usb數(shù)據(jù)線燒寫到單片機,單片機凹口靠usb下載口插入單片機底座,數(shù)據(jù)下載分別與單片機3.0和3.1(TXD和RXD)連接;

   2、自鎖開關(guān)未電源開關(guān),按下通電,按起斷電;

   3、lcd1604引腳1接口靠usb下載口,對應(yīng)引腳插入lcd1604液晶,液晶v0引腳接高精度電位器,液晶亮度可旋轉(zhuǎn)電位器調(diào)節(jié),液晶DB0到DB7接口連接單片機的P0引腳,RS,RW和E分別連接單片機的P2^5,P2^6和P2^7引腳;

   4、8550三極管基極通過100歐電阻后與單片機P2^4引腳連接,發(fā)射極接vcc,集電極與蜂鳴器正極連接,蜂鳴器負極接地,當有信號觸發(fā)三極管懂啊同后,蜂鳴器發(fā)出響聲,集電極與蜂鳴器之間有跳線帽,拔開跳線帽則與蜂鳴器斷開,有無信號蜂鳴器均不會響;

   5、DHT11的數(shù)據(jù)引腳與單片機的P3^6引腳連接,負極與單片機的P3^7引腳連接,且又與電源負極連接,連接之間有跳線帽,拔開后可通過單片機控制DHT11的工作和停止工作,正極與電源正極相連

   6、5個電容按鍵從左到右,從上之下分別是時間設(shè)置按鍵,時間”+”按鍵,濕度設(shè)置按鍵,濕度”+”按鍵,系統(tǒng)復位按鍵。通電后,液晶顯示,第一行是時間設(shè)置數(shù)值,初始值為0,第二行是本產(chǎn)品實際工作時間,第三行是當前濕度以及設(shè)定控制濕度值,控制濕度值初始為0,第四行為當前溫度值。當時間設(shè)置鍵按下,光標閃爍,工作時間停止,按時間”+”按鍵設(shè)置指定工作時間,按一次進入秒設(shè)置,第二次分設(shè)置,第三次時設(shè)置,第四次設(shè)置完成,退出時間設(shè)置;同理,濕度設(shè)置,按一次進入設(shè)置,再按一次設(shè)置完畢,退出濕度設(shè)置;當時間到了設(shè)定值,蜂鳴器則發(fā)出響聲,當濕度低于設(shè)定值,蜂鳴器也會發(fā)出響聲。


AT89C52單片機

1個

蜂鳴器

1個

10k電阻

1G個

高精度電位器

1個

AT89C52單片機底座

1個

8550三極管

1個

極性電容10u

1個

DHT11溫濕度傳感器

1個

Usb母口

1個

跳線帽

2個

晶振11.0592

1個



Usb下載串口

1個

排針和母針

兩排

Lcd1604

1個



自鎖開關(guān)

1個

100歐電阻

1個

30pf電容

4個



電容按鍵

5個

導線

若干

萬用版

1個





四、程序

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define unint unsigned int
  5. unsigned char code str4[12] ={' ',' ','0','0',':','0','0',':','0','0',' ',' '};
  6. unsigned char code str1[] ={"alarm:00:00:00"};
  7. //unsigned char num1[]={""};
  8. //unsigned char num2[]={""};
  9. unsigned char code dis1[] = {"RH: "};
  10. unsigned char code dis2[] = {"T: "};

  11. uchar numble,count,hour,minute,sound;
  12. int hours,minutes,sounds,flag,key1num;
  13. uchar TH_data,TL_data,RH_data,RL_data,CK_data;
  14. uchar TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
  15. uchar com_data,untemp,temp;
  16. uchar respond;
  17. uchar RH_shu,rhflag,key2num;
  18.             
  19. sbit TRH = P3^6;//溫濕度傳感器DHT11數(shù)據(jù)接入
  20. sbit LCD_RS = P2^5;            
  21. sbit LCD_RW = P2^6;
  22. sbit LCD_EN = P2^7;
  23. sbit key1 = P1^0;                 //時間調(diào)整選擇按鈕
  24. sbit key2 = P1^2;                //時間加按鈕
  25. sbit key3 = P3^2;              //濕度調(diào)整選擇按鈕
  26. sbit key4 = P3^5;              //濕度加按鈕
  27. sbit beep = P2^4;  //時間報警
  28. sbit alarm = P1^1;              //濕度報警
  29. void write_time(uchar time,uchar x);
  30. void write_time1(uchar time,uchar x);
  31. /*********************************************************************************/
  32. void timer() interrupt 1
  33. {
  34.               TH0=(65536-50000)/256;
  35.               TL0=(65536-50000)%256;
  36.               count++;
  37.               if(count==20)
  38.               {
  39.                             count=0;
  40.                             sound++;
  41.                             if(sound==60)
  42.                             {
  43.                                           sound=0;
  44.                                           minute++;
  45.                                           if(minute==60)
  46.                                           {
  47.                                                         minute=0;
  48.                                                         hour++;
  49.                                                         if(hour==24)
  50.                                                         {
  51.                                                                       hour = 0;
  52.                                                         }
  53.                                                         write_time(hour,4);
  54.                                           }
  55.                                           write_time(minute,7);
  56.                             }
  57.                             write_time(sound,10);
  58.               }
  59.             
  60. }
  61. void delay(unint k)
  62. {
  63.               unint x,y;
  64.               for(x=k;x>0;x--)
  65.                 for(y=110;y>0;y--);
  66. }
  67. void delayNOP()
  68. {
  69.         _nop_();
  70.         _nop_();
  71.         _nop_();
  72.         _nop_();
  73. }
  74. /*********************************************************************************/

  75. /*********************************************************************************/
  76. // 毫秒級延時子程序
  77. /*********************************************************************************/
  78. void delay_ms(unsigned char ms)
  79. {      
  80.         unsigned char i;
  81.         while(ms--)
  82.         {
  83.                 for(i = 0; i< 150; i++)
  84.                 {
  85.                         _nop_();
  86.                         _nop_();
  87.                         _nop_();
  88.                         _nop_();
  89.                 }
  90.         }
  91. }
  92. /*********************************************************************************/

  93. /*********************************************************************************/
  94. //5us級延時程序
  95. /*********************************************************************************/
  96. void delay_us()
  97. {
  98.         uchar i;
  99.         i--;
  100.         i--;
  101.         i--;
  102.         i--;
  103.         i--;
  104.         i--;
  105. }
  106. /********************************************************************************/


  107. /********************************************************************************/
  108. // 測試LCD忙碌狀態(tài)
  109. //lcd_busy()為1時,忙,等待。lcd_busy()為0時,閑,可寫指令與數(shù)據(jù)。
  110. /********************************************************************************/
  111. bit lcd_busy()
  112. {      
  113.         bit result;
  114.         LCD_RS = 0;
  115.         LCD_RW = 1;
  116.         LCD_EN = 1;
  117.         delayNOP();
  118.         result=(bit)(P0&0x80);
  119.         LCD_EN = 0;
  120.         return(result);
  121. }
  122. /*******************************************************************************/

  123. /*******************************************************************************/
  124. // 寫入指令數(shù)據(jù)到LCD
  125. /*******************************************************************************/
  126. void lcd_wcmd(unsigned char cmd)
  127. {      
  128.        while(lcd_busy());
  129.         LCD_RS = 0;
  130.         LCD_RW = 0;
  131.         LCD_EN = 0;
  132.         _nop_();
  133.         _nop_();
  134.         P0 = cmd;
  135.         delayNOP();
  136.         LCD_EN = 1;
  137.         delayNOP();
  138.         LCD_EN = 0;
  139. }
  140. /*****************************************************************************/

  141. /*****************************************************************************/
  142. //寫顯示數(shù)據(jù)到LCD                                               
  143. //RS=高電平,RW=低電平,E=高脈沖,D0-D7=數(shù)據(jù)。                           
  144. /*****************************************************************************/
  145. void lcd_wdata(unsigned char dat)
  146. {                        
  147.        while(lcd_busy());
  148.         LCD_RS = 1;
  149.         LCD_RW = 0;
  150.         LCD_EN = 0;
  151.         P0 = dat;
  152.         delayNOP();
  153.         LCD_EN = 1;
  154.         delayNOP();
  155.         LCD_EN = 0;
  156. }
  157. /****************************************************************************/

  158. /****************************************************************************/
  159. //LCD初始化設(shè)定
  160. /****************************************************************************/
  161. void lcd_init()
  162. {
  163.        // delay_ms(15);                  
  164.         lcd_wcmd(0x38);      //16*2顯示,5*7點陣,8位數(shù)據(jù)
  165.       //  delay_ms(5);
  166.         lcd_wcmd(0x38);        
  167.        // delay_ms(5);
  168.         lcd_wcmd(0x38);        
  169.        // delay_ms(5);
  170.         lcd_wcmd(0x0c);      //顯示開,關(guān)光標
  171.        // delay_ms(5);
  172.         lcd_wcmd(0x06);      //移動光標
  173.        // delay_ms(5);
  174.         //lcd_wcmd(0x01);      //清除LCD的顯示內(nèi)容,如果屏幕過暗,可將這倆句刪除
  175.         //delay_ms(5);
  176.         lcd_wcmd(0x80+0x40+2);
  177.         for(numble=0;numble<10;numble++)
  178.         {
  179.                       lcd_wdata(str4[numble]);
  180.                             }
  181.                             lcd_wcmd(0x80+1);
  182.                             for(numble=0;numble<14;numble++)
  183.                             {
  184.                                           lcd_wdata(str1[numble]);
  185.                             }
  186.                             lcd_wcmd(0x90+11);
  187.                             lcd_wdata('0');
  188.                             lcd_wdata('0');
  189.                             lcd_wdata('%');
  190.                             lcd_wdata('R');
  191.                             lcd_wdata('H');
  192.                             TMOD = 0x01;
  193.                             TH0 = (65536-50000)/256;
  194.                             TL0 = (65536-50000)%256;
  195.                             EA = 1;
  196.                             ET0 = 1;
  197.                             TR0 = 1;
  198. }
  199. /****************************************************************************/
  200. void write_time(uchar time,uchar x)
  201. {
  202.               uchar shi , ge;
  203.               shi = time/10;
  204.               ge = time%10;
  205.               lcd_wcmd(0x80+0x40+x);
  206.               lcd_wdata(0x30+shi);
  207.               lcd_wdata(0x30+ge);
  208. }
  209. void write_time1(uchar time,uchar x)
  210. {
  211.               uchar shi , ge;
  212.               shi = time/10;
  213.               ge = time%10;
  214.               lcd_wcmd(0x80+x);
  215.               lcd_wdata(0x30+shi);
  216.               lcd_wdata(0x30+ge);
  217. }
  218. void write_rh(uchar time,uchar x)
  219. {
  220.               uchar shi , ge;
  221.               shi = time/10;
  222.               ge = time%10;
  223.               lcd_wcmd(0x90+x);
  224.               lcd_wdata(0x30+shi);
  225.               lcd_wdata(0x30+ge);
  226. }

  227. /****************************************************************************/
  228. void keyscan()
  229. {
  230.               if(key1==0)
  231.               {
  232.                             delay(5);
  233.                             if(key1==0)
  234.                             {
  235.                                           key1num++;
  236.                                           while(!key1);
  237.                                           switch(key1num)
  238.                                           {
  239.                                                         case 1:
  240.                                                                       TR0 = 0;
  241.                                                                       lcd_wcmd(0x80+13);
  242.                                                                       lcd_wcmd(0x0f);
  243.                                                                       break;
  244.                                                         case 2:
  245.                                                                       lcd_wcmd(0x80+10);
  246.                                                                       lcd_wcmd(0x0f);
  247.                                                                       break;
  248.                                                         case 3:
  249.                                                                       lcd_wcmd(0x80+7);
  250.                                                                       lcd_wcmd(0x0f);
  251.                                                                       break;
  252.                                                         case 4:
  253.                                                                       TR0 = 1;
  254.                                                                       lcd_wcmd(0x0c);
  255.                                                                       key1num = 0;
  256.                                                                       flag=1;
  257.                                                                       break;
  258.                                           }
  259.                             }
  260.               }
  261.               if(key1num!=0)
  262.               {
  263.                             if(key2 == 0)
  264.                             {
  265.                                           delay(5);
  266.                                           if(key2 == 0)
  267.                                           {
  268.                                                         while(!key2);
  269.                                                         switch(key1num)
  270.                                                         {
  271.                                                                       case 1:
  272.                                                                                     sounds++;
  273.                                                                                     if(sounds==60)
  274.                                                                                     sounds=0;
  275.                                                                                     write_time1(sounds,13);
  276.                                                                                     lcd_wcmd(0x80+13);
  277.                                                                                     break;
  278.                                                                       case 2:
  279.                                                                                     minutes++;
  280.                                                                                     if(minutes==60)
  281.                                                                                     minutes=0;
  282.                                                                                     write_time1(minutes,10);
  283.                                                                                     lcd_wcmd(0x80+10);
  284.                                                                                     break;
  285.                                                                       case 3:
  286.                                                                                     hours++;
  287.                                                                                     if(hours==24)
  288.                                                                                     hours=0;
  289.                                                                                     write_time1(hours,7);
  290.                                                                                     lcd_wcmd(0x80+7);
  291.                                                                                     break;
  292.                                                         }
  293.                                           }
  294.                             }
  295.               }
  296.               if(hour==hours&&minute==minutes&&sound==sounds&&flag==1)
  297.               {
  298.                             beep = 0;
  299.               }
  300.               if(key3==0)
  301.               {
  302.                             delay(5);
  303.                             if(key3==0)
  304.                             {
  305.                                           key2num++;
  306.                                           while(!key3);
  307.                                           switch(key2num)
  308.                                           {
  309.                                                         case 1:
  310.                                                                       lcd_wcmd(0x90+12);
  311.                                                                       lcd_wcmd(0x0f);
  312.                                                                       break;
  313.                                                         case 2:
  314.                                                             rhflag=1;
  315.                                                         case 3:
  316.                                                             key2num=0;
  317.                                                                       lcd_wcmd(0x0c);
  318.                                                                       break;
  319.                                           }
  320.                             }
  321.               }
  322.               if(key2num!=0)
  323.               {
  324.                             if(key4==0)
  325.                             {
  326.                                           delay(5);
  327.                                           if(key4==0)
  328.                                           {
  329.                                                         while(!key4);
  330.                                                         switch(key2num)
  331.                                                         {
  332.                                                                       case 1:
  333.                                                                                     RH_shu++;
  334.                                                                                     if(RH_shu==100)
  335.                                                                                     RH_shu=0;
  336.                                                                                     write_rh(RH_shu,11);
  337.                                                         //                            rhflag = 1;
  338.                                                                                     break;
  339.                                                         }
  340.                                           }
  341.                             }
  342.               }
  343. }
  344. //設(shè)定LCD顯示位置
  345. /****************************************************************************/
  346. void lcd_dis_pos(unsigned char pos)
  347. {      
  348.         lcd_wcmd(pos | 0x90); //數(shù)據(jù)指針=80+地址變量
  349. }
  350. /****************************************************************************/

  351. /****************************************************************************/
  352. //收發(fā)信號檢測,數(shù)據(jù)讀取
  353. /****************************************************************************/
  354. char receive()
  355. {   
  356. uchar i;
  357. com_data=0;
  358. for(i=0;i<=7;i++)   
  359. {
  360.         respond=2;
  361.         while((!TRH)&&respond++);
  362.         delay_us();
  363.         delay_us();
  364.         delay_us();
  365.         if(TRH)
  366.         {
  367.                 temp=1;
  368.                 respond=2;
  369.                 while((TRH)&&respond++);
  370.         }
  371.         else
  372.                 temp=0;
  373.         com_data<<=1;
  374.         com_data|=temp;   
  375. }
  376. return(com_data);
  377. }
  378. /****************************************************************************/

  379. /****************************************************************************/
  380. //濕度讀取子程序
  381. //溫度高8位== TL_data
  382. //溫度低8位== TH_data
  383. //濕度高8位== RH_data
  384. //濕度低8位== RH_data
  385. //校驗 8位 == CK_data
  386. //調(diào)用的程序有 delay();, Delay_5us();,RECEIVE();
  387. /***************************************************************************/
  388. void read_TRH()
  389. {
  390. //主機拉低18ms
  391. TRH=0;
  392. delay_ms(18);
  393. TRH=1;
  394. //DATA總線由上拉電阻拉高 主機延時20us
  395. delay_us();
  396. delay_us();
  397. delay_us();
  398. delay_us();
  399. //delay_us();
  400. //delay_us();delay_us();delay_us();delay_us();
  401. //主機設(shè)為輸入 判斷從機響應(yīng)信號
  402. TRH=1;
  403. //判斷DHT11是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運行  
  404. if(!TRH)  
  405. {
  406.         respond=2;                         //判斷DHT11發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束
  407.         while((!TRH)&& respond++);
  408.         respond=2;                         //判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài)
  409.         while(TRH && respond++);           //數(shù)據(jù)接收狀態(tài)  
  410.         RH_temp = receive();
  411.         RL_temp = receive();
  412.         TH_temp = receive();
  413.         TL_temp = receive();
  414.         CK_temp = receive();
  415.         TRH=1;                             //數(shù)據(jù)校驗
  416.         untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
  417.         if(untemp==CK_temp)
  418.         {
  419.                 RH_data = RH_temp;
  420.                 RL_data = RL_temp;
  421.                 TH_data = TH_temp;
  422.                 TL_data = TL_temp;
  423.                 CK_data = CK_temp;
  424.         }
  425.     }
  426. }
  427. void lcd_display()
  428. {
  429.               lcd_dis_pos(0x03);
  430.               lcd_wdata(0x30+RH_data/10);
  431.               lcd_dis_pos(0x04);
  432.               lcd_wdata(0x30+RH_data%10);
  433.               lcd_dis_pos(0x05);
  434.               lcd_wdata(0x2e);
  435.               lcd_dis_pos(0x06);
  436.               lcd_wdata(0x30+RL_data%10);
  437. ……………………

  438. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整的Word格式文檔51黑下載地址:
DHT11設(shè)計報告.docx (1.15 MB, 下載次數(shù): 154)





作者: 西瓜不懂檸檬    時間: 2019-4-28 13:39
無數(shù)據(jù)顯示是怎么回事呢
作者: 龍榮    時間: 2019-5-31 08:19
想看看   
作者: L1610320824    時間: 2019-6-20 14:30
請問能給出電路原理圖嗎




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1