在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STC89C52+DHT20設計的環境溫濕度檢測儀

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-05-26 09:13 ? 次閱讀

一、項目背景

本項目基于STC89C52單片機和DHT20溫濕度傳感器,實現了一款環境溫濕度檢測儀。通過傳感器采集環境的溫度和濕度數據,利用IIC接口的OLED顯示屏顯示出來,便于用戶實時監測環境溫濕度狀態。

在現代社會,人們對環境溫濕度的要求越來越高。無論是工作場所還是居住環境,都需要維持一個舒適的溫濕度狀態,以保證身體的健康和工作效率的提高。隨著科技的不斷進步和物聯網技術的廣泛應用,環境溫濕度檢測儀被廣泛運用于各種領域,如制造業、醫療、農業等等,成為了一種重要的環境檢測設備。

而本項目所涉及的STC89C52單片機和DHT20溫濕度傳感器作為傳統的嵌入式開發技術,在實現物聯網設備方面有著廣泛的應用前景。通過本項目的學習和實踐,可以深入了解傳感器技術的原理和應用,并掌握基于單片機的嵌入式開發技術,為實現更多物聯網設備的開發和應用打下基礎。

image-20230525221716401

二、設計思路

本項目的設計思路主要包括硬件和軟件兩個方面。

【1】硬件設計思路

本項目的硬件設計主要涉及到STC89C52單片機、DHT20溫濕度傳感器和OLED顯示屏三個模塊。其中,STC89C52單片機負責控制整個系統的運行,DHT20溫濕度傳感器用于采集環境的溫濕度數據,OLED顯示屏則負責將溫濕度數據實時展示出來。

具體的硬件設計流程如下:

(1)選擇合適的STC89C52單片機開發板,并根據需要添加外部電源、復位電路、晶振等元件。

(2)選擇合適的DHT20溫濕度傳感器,并根據其引腳定義將其連接到單片機的I/O口。

(3)選擇合適的OLED顯示屏,并根據其接口定義將其連接到單片機的IIC總線上。

(4)在單片機開發環境中編寫程序,實現對DHT20傳感器的溫濕度數據讀取和對OLED顯示屏的控制。

【2】軟件設計思路

本項目的軟件設計主要涉及到單片機程序的編寫和調試。根據硬件設計的思路,將實現對DHT20傳感器的溫濕度數據讀取和對OLED顯示屏的控制。

具體的軟件設計流程如下:

(1)在單片機開發環境中編寫程序,實現DHT20傳感器的初始化、溫濕度數據的讀取和對OLED顯示屏的控制。

(2)通過串口調試助手,將DHT20傳感器采集到的溫濕度數據打印出來,檢查程序是否正常運行。

(3)連接OLED顯示屏,并調試程序,實現溫濕度數據的實時顯示。

三、設計代碼

【1】DHT20溫濕度讀取

DHT20是一款數字式溫濕度傳感器,其采用了廣受歡迎的I2C總線進行數據通信,可以方便地與各種微控制器和單片機進行連接和使用。該傳感器具有高精度、低功耗、穩定性好等特點,被廣泛應用于氣象站、冷庫、溫室、恒溫箱、智能家居等領域。

DHT20的工作電壓范圍為2.1V至5.5V,并且其在測量過程中的功耗非常低,最大電流為1.3mA,平時僅需要幾微安的待機電流,從而節省了能源并延長了電池壽命。該傳感器采用了獨特的校準技術,能夠實現高精度的測量,溫度測量精度為±0.2℃,濕度測量精度為±2%RH。

DHT20是一款數字式溫濕度傳感器,其通過內部的ADC模擬信號轉換成數字信號,并使用CRC校驗保證數據傳輸的可靠性。此外,該傳感器還具有單次測量和連續測量兩種模式,可以滿足不同場景下的需求。

DHT20傳感器采用單線數字信號傳輸,讀取數據過程中需要按照協議進行時序控制。

下面是基于STC89C52單片機的DHT20溫濕度數據讀取代碼示例,通過串口調試助手將讀取到的數據打印出來:

#include 
 #include 
 ?
 sbit DHT20 = P1^0;  //定義DHT20連接的IO口
 ?
 void delay_us(unsigned int us) //us級延時函數
 {
     while(us--)
     {
         _nop_();
     }
 }
 ?
 void DHT20_start(void) //開始信號
 {
     DHT20 = 1; //先將數據線置高
     delay_us(30); //延時30us
     DHT20 = 0; //拉低數據線
     delay_us(25); //持續拉低25us
     DHT20 = 1; //釋放數據線
     delay_us(5); //延時5us
 }
 ?
 unsigned char DHT20_read(void) //讀取一個字節的數據
 {
     unsigned char i, dat = 0;
     for(i=0; i<8; i++)
     {
         while(!DHT20); //等待數據線變高
         delay_us(4); //延時4us
         dat <<= 1; //左移一位
         if(DHT20) //如果數據線為高
         {
             dat |= 1; //在最低位寫入1
             while(DHT20); //等待數據線變低
         }
     }
     return dat;
 }
 ?
 void main()
 {
     unsigned char humi_H, humi_L, temp_H, temp_L, check_sum;
     while(1)
     {
         DHT20_start(); //發送開始信號
         if(!DHT20) //等待DHT20響應
         {
             delay_us(80);
             if(DHT20)
             {
                 delay_us(80);
                 humi_H = DHT20_read(); //讀取濕度高8位
                 humi_L = DHT20_read(); //讀取濕度低8位
                 temp_H = DHT20_read(); //讀取溫度高8位
                 temp_L = DHT20_read(); //讀取溫度低8位
                 check_sum = DHT20_read(); //讀取校驗和
                 if((humi_H + humi_L + temp_H + temp_L) == check_sum) //校驗和正確
                 {
                     printf("濕度:%d.%d %%\\r\\n", humi_H, humi_L);
                     printf("溫度:%d.%d ℃\\r\\n", temp_H, temp_L);
                 }
             }
         }
         delay_ms(5000); //延時5s再讀取
     }
 }

【2】IIC接口的OLED顯示屏的驅動代碼

0.96寸OLED(SSD1306驅動芯片)顯示屏是一款常見的小型顯示器件,具有高對比度、低功耗、快速響應等特點。其主要由OLED芯片和玻璃基板組成,可通過IIC或SPI接口控制,實現圖形、文字、數字等內容的顯示。

SSD1306驅動芯片是最常用的OLED顯示器驅動芯片之一,具有低功耗、高對比度、高分辨率等優點。它支持點陣圖像顯示、字符顯示、圖形顯示等多種顯示模式,可通過IIC/SPI接口進行通信控制,支持控制字體大小、顯示位置、亮度等參數,且內置顯存,方便多屏幕拼接顯示。

0.96寸OLED(SSD1306驅動芯片)顯示屏通常采用128x64或者128x32的分辨率,顯示效果清晰,可顯示4行16列的字體信息。其內置控制器,占用極少的CPU資源和存儲空間,適合于嵌入式系統智能家居、手持設備等場景中使用。

下面是基于STC89C52單片機控制IIC接口的0.96寸OLED(SSD1306驅動芯片)顯示屏顯示一個數字的詳細代碼:

#include 
 #include 
 ?
 #define uchar unsigned char
 #define uint unsigned int
 ?
 /* 定義IIC總線的SDA和SCL引腳 */
 sbit SDA = P1^0;
 sbit SCL = P1^1;
 ?
 /* 定義OLED顯示屏的地址,一般為0x78 */
 #define OLED_ADDRESS 0x78
 ?
 /* OLED顯示屏的初始化命令 */
 uchar init_cmd[] = {
     0xAE, /* 關閉OLED顯示 */
     0x00, /* 設置列地址低位 */
     0x10, /* 設置列地址高位 */
     0x40, /* 設置起始行 */
     0xB0, /* 設置頁地址 */
     0x81, /* 設置對比度 */
     0xFF, /* 對比度值 */
     0xA1, /* 水平翻轉 */
     0xA6, /* 正常顯示 */
     0xA8, /* 設置多路復用率 */
     0x3F, /* 值越大,顯示點越多,亮度越高 */
     0xC8, /* 垂直翻轉 */
     0xD3, /* 設置顯示偏移 */
     0x00, /* 偏移量為0 */
     0xD5, /* 設置時鐘分頻 */
     0x80, /* 分頻值為80 */
     0xD9, /* 設置預充電周期 */
     0xF1, /* 默認值 */
     0xDA, /* 設置COM硬件配置 */
     0x12, /* 默認值 */
     0xDB, /* 設置VCOMH電壓 */
     0x40, /* 默認值 */
     0x20, /* 設置內存地址模式 */
     0x00, /* 水平地址模式 */
     0xAF  /* 打開OLED顯示 */
 };
 ?
 /* IIC總線的延時函數 */
 void Delay5ms()
 {
     uint i, j;
 ?
     for (i = 0; i < 5; i++) {
         for (j = 0; j < 110; j++);
     }
 }
 ?
 /* IIC總線的啟動信號,SDA從高到低,SCL為高電平 */
 void I2C_Start()
 {
     SDA = 1;
     SCL = 1;
     Delay5ms();
     SDA = 0;
     Delay5ms();
     SCL = 0;
 }
 ?
 /* IIC總線的停止信號,SDA從低到高,SCL為高電平 */
 void I2C_Stop()
 {
     SDA = 0;
     SCL = 1;
     Delay5ms();
     SDA = 1;
     Delay5ms();
 }
 ?
 /* IIC總線的寫數據函數 */
 void I2C_Write(uchar dat)
 {
     uchar i;
 ?
     for (i = 0; i < 8; i++) {
         SDA = dat & 0x80;
         SCL = 1;
         Delay5ms();
         SCL = 0;
         dat <<= 1;
     }
 }
 ?
 /* OLED顯示屏的初始化函數 */
 void OLED_Init()
 {
     uchar i;
 ?
     I2C_Start();
     I2C_Write(OLED_ADDRESS);
     for (i = 0; i < sizeof(init_cmd); i++) {
         I2C_Write(init_cmd[i]);
     }
     I2C_Stop();
 }
 ?
 /* OLED顯示屏的寫數據函數 */
 void OLED_Write_Data(uchar dat)
 {
     I2C_Start();
     I2C_Write(OLED_ADDRESS);
     I2C_Write(0x40); /* 寫數據標志 */
     I2C_Write(dat);
     I2C_Stop();
 }
 ?
 /* OLED顯示屏顯示數字的函數 */
 void OLED_Show_Number(uchar num)
 {
     uchar i;
     uint j;
 ?
     /* 在第1頁、第5列顯示數字 */
     OLED_Write_Data(0xB0);
     OLED_Write_Data(0x00);
     OLED_Write_Data(0x10);
     for (i = 0; i < 8; i++) {
         OLED_Write_Data(0x00);
     }
     for (i = 0; i < 3; i++) {
         OLED_Write_Data(0xFF);
     }
     for (i = 0; i < 5; i++) {
         OLED_Write_Data(0x00);
     }
     for (i = 0; i < 3; i++) {
         OLED_Write_Data(0xFF);
     }
     for (j = 0; j < 5000; j++); /* 延時一段時間,讓數字停留在屏幕上 */
 }
 ?
 /* 主函數 */
 void main()
 {
     /* 初始化OLED顯示屏 */
     OLED_Init();
 ?
     /* 顯示數字 */
     OLED_Show_Number(5);
 }

代碼首先定義了IIC總線的SDA和SCL引腳,以及OLED顯示屏的地址。然后定義了OLED顯示屏的初始化命令和顯示數字的函數。在主函數中調用初始化函數,并在OLED顯示屏上顯示數字5。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2561

    文章

    52200

    瀏覽量

    761900
  • 單片機
    +關注

    關注

    6058

    文章

    44821

    瀏覽量

    644899
  • 物聯網
    +關注

    關注

    2922

    文章

    45675

    瀏覽量

    385534
  • 檢測儀
    +關注

    關注

    5

    文章

    4182

    瀏覽量

    43379
  • IIC總線
    +關注

    關注

    1

    文章

    67

    瀏覽量

    20682
收藏 人收藏

    評論

    相關推薦

    DIY 溫濕度檢測儀

    要DIY一個高大上的溫濕度檢測儀?其實很簡單準備材料:UNO PLUSIO Expansion Shield沒有這個擴展板也可以,直接用排針引出連接Temperature-Humidity
    發表于 03-28 14:09

    求一份萬年歷程序+電路圖(STC89c52+ds1302+溫濕度DHT11+12864

    求一份萬年歷程序+電路圖(STC89c52+ds1302+溫濕度DHT11+12864
    發表于 04-24 22:32

    環境溫濕度采集系統

    本項目使用STC89C52單片機采集DHT11溫濕度傳感器的數值,利用ESP8266 WIFI芯片模塊通過網絡傳輸數據,最終達到在手機終端顯示溫濕度的結果。
    發表于 12-24 23:46

    NRF24L01無線溫濕度檢測儀基于單片機89c52c語言程序資料下載

    無線溫濕度檢測儀基于單片機89c52c語言程序 程序.rar
    發表于 07-19 05:48

    基于AT89S52單片機的全數字溫濕度設計與實現

    本文從實際應用出發,較全面地介紹了全數字溫濕度的設計與實現。方案采用AT89S52單片機作為MCU,DS18B20作為數字溫度傳感器,奧松DHT
    發表于 08-28 06:22

    怎樣去設計一種基于51單片機溫濕度檢測儀

    STC89C52單片機、DHT11傳感器模塊、1602液晶顯示屏模塊、按鍵模塊、報警模塊構成。具體功能:1、DHT11數字溫濕度傳感器把采集到的
    發表于 07-14 08:25

    如何利用STC89C52和LCD1602實現溫濕度檢測報警系統的設計?

    如何利用STC89C52和LCD1602實現溫濕度檢測報警系統的設計?
    發表于 11-04 07:47

    怎樣去設計一種基于STC89C51單片機的溫濕度檢測系統

    基于STC89C51單片機的溫濕度檢測系統摘要:設計一種計算機教室溫度、濕度檢測系統,用于控制機房的溫、
    發表于 11-09 07:16

    如何利用STC89C52DHT11實現溫濕度檢測儀的設計

    系統由STC89C52單片機、DHT11傳感器模塊、1602液晶顯示屏模塊、按鍵模塊、報警模塊構成。具體功能:1、DHT11數字溫濕度傳感器把采集到的
    發表于 11-10 09:14

    通過使用AT89C52DHT11設計的溫濕度控制系統資料分享

    【資源下載】下載地址:點擊下載 1343 百度網盤本文通過使用AT89C52單片機、DHT11傳感器模塊、1602液晶顯示屏模塊以及繼電器控制模塊。簡單明了的實現的溫濕度的控制要求。DHT
    發表于 11-10 07:02

    基于SHT10傳感器的溫濕度檢測儀設計

    本文介紹了一種基于STC89C52單片機控制溫濕度傳感器SHT10實現的一種數字式溫濕度檢測,并使用在倉庫溫濕度
    發表于 01-07 06:52

    基于AT89S52單片機的溫濕度檢測儀-畢業設計

    基于AT89S52單片機的溫濕度檢測儀
    發表于 04-27 09:36 ?88次下載

    20-基于51單片機溫濕度檢測儀設計

    STC89C52單片機、DHT11傳感器模塊、1602液晶顯示屏模塊、按鍵模塊、報警模塊構成。具體功能:1、DHT11數字溫濕度傳感器把采集到的
    發表于 11-04 13:21 ?18次下載
    <b class='flag-5'>20</b>-基于51單片機<b class='flag-5'>溫濕度</b><b class='flag-5'>檢測儀</b>設計

    20-基于51單片機的溫濕度檢測儀設計

    系統由STC89C52單片機、DHT11傳感器模塊、1602液晶顯示屏模塊、按鍵模塊、報警模塊構成。具體功能:1、DHT11數字溫濕度傳感器把采集到的
    發表于 11-04 18:51 ?14次下載
    <b class='flag-5'>20</b>-基于51單片機的<b class='flag-5'>溫濕度</b><b class='flag-5'>檢測儀</b>設計

    STC89C52RC 單片機讀取DHT22溫濕度傳感器串口顯示程序調試經驗總結

    ://****************************************************************//// DHT21使用范例//單片機 AT89S52STC89C52RC//功能
    發表于 11-23 17:21 ?13次下載
    <b class='flag-5'>STC89C52</b>RC 單片機讀取<b class='flag-5'>DHT</b>22<b class='flag-5'>溫濕度</b>傳感器串口顯示程序調試經驗總結
    主站蜘蛛池模板: 午夜视 | 日本亚洲卡一卡2卡二卡三卡四卡 | 中文字幕佐山爱一区二区免费 | 91久久麻豆 | 免费看va | 亚洲福利视频网站 | 久久国产乱子伦精品免 | 国产美女精品久久久久久久免费 | 亚洲一级特黄特黄的大片 | 大尺度视频在线观看 | 黄色免费三级 | 狠狠摸狠狠操 | 国内一国产农村妇女一级毛片 | 两性色午夜视频自由成熟的性 | 欧美午夜激情影院 | www四虎| 亚洲天堂免费看 | 天天舔天天 | 亚洲国产成人久久99精品 | 天天干天天舔天天操 | 日本特黄特色大片免费播放视频 | 中文在线最新版天堂 | 天堂网www在线观看 天堂网www在线资源中文 | 国产女主播精品大秀系列在线 | 免费国产成高清人在线视频 | www.色.com| 免费爱做网站在线看 | 日本一区二区免费看 | 久久久久久久国产精品影院 | 国产yw855.c免费视频 | 免费观看四虎精品国产永久 | 天天射天天操天天干 | 91国内在线视频 | 在线观看视频你懂得 | 四虎国产永久免费久久 | 久久黄视频| 特级全毛片 | 欧美刺激午夜性久久久久久久 | 日韩亚色 | 丁香婷婷社区 | 人人干人人艹 |