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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4735|回復: 2
打印 上一主題 下一主題
收起左側

msp430g2231 dh11溫濕度報警

[復制鏈接]
跳轉到指定樓層
樓主
        溫濕度計dh11很常見,雖然精度不高,但對于日常生活溫濕度要求不高的場合,還是可以用的。我在百度查詢到,室溫一般15-25是比較合適的,濕度30-80是人體感覺舒適的條件,我看到gokit也有此項功能,所以我想,如果將一個簡單的溫濕度傳感器運用生活中,還是不錯的選擇。

          當然我在淘寶上和商店里看到此類產品還是比較多的,大多20-50元,雖然不貴,但對于理工男的我,當然是自己動手diy. ..                                 

                                                            
                        

                                                                                                   
                圖終于來了,我的想法很簡單,用msp430g22314個io口顯示溫濕度,報警功能。
                其中數碼管用cd4511顯示,6與9顯示的不好看(使用4個io口),4段數碼管片選用74hc138驅動(2個io口),一個dh11(一個io口),一個有源蜂鳴器(1個io口),想用xin xout 兩個特殊端口,按照網上的說法,沒有配置成功。當然對于一個精度不高,日常需要的顯示器件,不需太多的要求。
                我設計的就是dh11每2s掃描一次,數碼管每40ms更新數據一次。時鐘溫濕度超過一定范圍,鬧鐘響起。

           我用的是鋰電池供電,tp4056充電芯片給電池充電,4.2v給單片機不知道有什么有什么反應,用電流表測量電流為20ma,媽的,電流如此之大,在設計過程中,沒有 考慮數碼管限流電阻,電阻值小了點,功耗就大了。

部分程序預覽:
  1. #include"config.h"


  2. void send_char(uchar weizhi,uchar byte)
  3. {
  4.   P1OUT&=~0X3F;
  5.   P1OUT|=(weizhi&0x03)<<4;
  6.   P1OUT|=(byte&0x0f);
  7. }

  8. void wenshidu_clock_init()
  9. {
  10.   P1DIR|=BIT7;
  11.   P1OUT&=~0x80;
  12. }
  13. void shumaguan()
  14. {
  15.    ++t;
  16. if(t>=4)
  17.    t=0;
  18.   send_char(t,dis_play[t]);
  19. }

  20. void read_DHT11(uchar *Data)
  21. {
  22.     uchar re,m,n,Time_out;
  23.     DHT11_Dir &= (~DHT11_Bit);        //引腳為輸入
  24.     for(n = 0; n < 5; n++)
  25.     {
  26.         for(m = 0; m < 8; m++)
  27.         {
  28.             while( !(DHT11_In & DHT11_Bit) );     //每1bit以50us低電平時限開始,直到高電平到來
  29.             delay_us(30);                     
  30.             re = 0;            
  31.             if((DHT11_In & DHT11_Bit))          //30us后還是高電平說明是1
  32.             {
  33.                 re = 1;
  34.             }
  35.             Time_out = 2;
  36.             while((DHT11_In & DHT11_Bit) && (Time_out++ ));
  37.             if(Time_out == 1)                   //超時處理
  38.             {
  39.                 break;
  40.             }
  41.             *Data <<= 1;
  42.             if(re)
  43.             {
  44.                 *Data |= 0x01;
  45.             }
  46.         }
  47.         Data++;
  48.     }
  49. }

  50. //DHT11的握手協議模擬和數據的讀取
  51. uchar DHT11_GetData(void)
  52. {
  53.     uchar o,sum;
  54. //    DHT11_Dir |= DHT11_Bit;
  55. //    DHT11_Out &= ~DHT11_Bit;    //拉低,發出開始信號
  56.    
  57. //    delay_ms(18);               //拉低18ms
  58.     DHT11_Out |= DHT11_Bit;     //拉高20us等待
  59.     delay_us(20);
  60.     DHT11_Dir &= (~DHT11_Bit);
  61.     if( !(DHT11_In & DHT11_Bit) )       //DHT11響應
  62.     {
  63.         while( !(DHT11_In & DHT11_Bit) );       //80us低電平,等待DHT11的響應信號
  64.         while( (DHT11_In & DHT11_Bit) );        //DHT11準備發送數據
  65.         read_DHT11(DHT11_Data);                 //主機接收數據
  66.         sum = 0;
  67.         for(o = 0; o < 4; o++)                  //數據校驗
  68.         {
  69.           sum += DHT11_Data[o];
  70.         }
  71.         if(sum != DHT11_Data[4])
  72.         {
  73.           return 0;
  74.         }
  75.         else
  76.         {
  77.           return 1;
  78.         }
  79.     }
  80.     return 0;
  81. }

  82. //對溫度濕度進行格式化(如果獲取溫度成功)
  83. void DHT11_format(char *Des_str)
  84. {
  85.     Des_str[0] = DHT11_Data[0]/10 ;
  86.     Des_str[1] = DHT11_Data[0]%10 ;
  87.   
  88.     Des_str[2] = DHT11_Data[2]/10 ;
  89.     Des_str[3] = DHT11_Data[2]%10 ;
  90.    
  91. }


  92. void wenshidu_oclock()
  93. {
  94.   P1OUT&=~0x80;
  95.   if((DHT11_Data[0]<30)||(DHT11_Data[0]>80))
  96.    P1OUT^=0x80;
  97.   else P1OUT&=~0x80;
  98.   if((DHT11_Data[2]<10)||(DHT11_Data[2]>30))
  99.     P1OUT|=0x80;
  100.   else P1OUT&=~0x80;
  101. }

  102. void dh11_read()
  103. {
  104.   if(DHT11_GetData())
  105.   {
  106.    DHT11_format(dis_play);
  107.    wenshidu_oclock();
  108.   }
  109. }
  110. void dh11_read1()
  111. {
  112.   ++tt;
  113.   if(tt>=100)//1秒掃描一次
  114.     tt=0;
  115.   switch(tt)
  116.   {
  117.    case 1:DHT11_Dir |= DHT11_Bit;
  118.           DHT11_Out &= ~DHT11_Bit;    //拉低,發出開始信號
  119.           break;
  120.    case 3: dh11_read();
  121.            break;
  122.   default:break;
  123.   }
  124. }

  125. #pragma vector=TIMER0_A0_VECTOR  
  126. __interrupt void TIMERA0_ISR() // the interrupt source is CC0
  127. {
  128.   shumaguan();
  129.   dh11_read1();
  130. }
復制代碼

                                                         


數碼管—溫濕度計.zip

174.04 KB, 下載次數: 162, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:117823 發表于 2016-6-4 02:16 來自手機 | 只看該作者
只有cd4511就選擇4511和138驅 動數碼管,就是電池不耐用,反饋的信息表示這個設備可以連續工作幾個小時,低功耗還沒有注意設計,

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 贊一個!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区电影 | 国产黄色av网站 | 日韩视频在线播放 | 深夜福利影院 | 欧美激情免费在线 | av毛片| 涩爱av一区二区三区 | 午夜影晥| 91成人午夜性a一级毛片 | 国产精品久久久久久久久久 | 三级免费av| 一a一片一级一片啪啪 | 久久久片 | 最新国产福利在线 | 在线播放国产一区二区三区 | 久久久久久久av | 成人免费片 | 激情综合五月 | 国产欧美精品 | 夜夜爽99久久国产综合精品女不卡 | 成人不卡 | 精品在线免费观看视频 | 99资源| 国产黄a一级 | 国产欧美日韩一区二区三区在线 | 亚洲大片一区 | 国产成人精品亚洲日本在线观看 | 午夜精品视频一区 | 国产精品久久二区 | 99这里只有精品视频 | 亚洲xx在线 | 狠狠骚| 国产精品视频久久久 | 精品不卡 | 日韩不卡在线观看 | 国产激情一区二区三区 | 亚洲伊人精品酒店 | 久久久精品一区 | 欧美在线不卡 | 999久久精品 | 日韩国产欧美一区 |