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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4822|回復: 2
收起左側

msp430g2231 dh11溫濕度報警

[復制鏈接]
ID:110653 發表于 2016-3-30 17:19 | 顯示全部樓層 |閱讀模式
        溫濕度計dh11很常見,雖然精度不高,但對于日常生活溫濕度要求不高的場合,還是可以用的。我在百度查詢到,室溫一般15-25是比較合適的,濕度30-80是人體感覺舒適的條件,我看到gokit也有此項功能,所以我想,如果將一個簡單的溫濕度傳感器運用生活中,還是不錯的選擇。

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

                                                            
                        

                                                                                                    20150914133623_70163.jpg
                圖終于來了,我的想法很簡單,用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

回復

使用道具 舉報

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天天干 | 操夜夜| 天天天操 | 日韩视频观看 | 中文字字幕一区二区三区四区五区 | 成人福利影院 | 欧美成人激情视频 | 日韩免费网| 一区在线视频 | 欧美日韩亚洲在线 | 欧美日韩亚洲国产 | 91 在线| 久久久久久一区 | 国产在线视频一区 | 亚洲欧美一区二区三区在线 | 日韩精品在线视频 | 欧一区二区 | 国产精品久久久久影院色老大 | 伊人色综合久久天天五月婷 | 国产成人免费视频 | 91免费在线| 四虎影视在线 | 精品国产乱码久久久久久影片 | 视频二区 | 精品国产久 | 中文字幕久久久 | 国产欧美精品区一区二区三区 | 亚洲精品性视频 | 成人精品一区二区三区中文字幕 | 97精品国产97久久久久久免费 | 欧美成人一区二区三区片免费 | 国产精品久久久久久久久久久久午夜片 | 午夜日韩视频 | 久久久妇女国产精品影视 | 成人精品一区二区三区中文字幕 | 中文字幕一区二区不卡 | 成人美女免费网站视频 |