題2:溫濕度監控系統設計
功能要求:
1)開機顯示時間(小時、分)、時分可修改;
2)用兩個滑動變阻器分別模擬溫度傳感器(測量范
圍0-100度)與濕度傳感器(0-100%),通過按鍵
可以在數碼管切換顯示當前溫度值、濕度值;
3)當溫度低于20度時,紅燈長亮;
4)當濕度高于70%時,黃燈長亮;
5)當濕度正常時,綠燈亮;溫度正常時藍燈亮。
硬件調試:實現以上功能
溫濕度監控系統設計實驗報告
一、實驗背景及目的
本實驗旨在設計一個溫濕度監控系統,通過模擬溫度和濕度傳感器來測量環境參數,并根據設定的閾值控制不同顏色的指示燈。同時,系統還具備時間顯示與修改功能,以滿足基本的時鐘需求。
二、系統功能需求
- 時間顯示與修改:系統開機后顯示當前時間(小時、分鐘),并允許用戶通過按鍵修改時間。
- 溫濕度顯示:通過兩個滑動變阻器分別模擬溫度傳感器(0-100度)和濕度傳感器(0-100%),用戶可通過按鍵在數碼管上切換顯示當前溫度值和濕度值。
- 指示燈控制:
- 溫度低于20度時,紅燈長亮。
- 濕度高于70%時,黃燈長亮。
- 濕度在正常范圍(≤70%)時,綠燈亮。
- 溫度在正常范圍(≥20度)時,藍燈亮。
三、系統設計原理
1. 硬件設計
系統硬件主要由微控制器、數碼管顯示模塊、滑動變阻器、按鍵矩陣和指示燈組成。
- 微控制器:負責讀取傳感器數據、處理邏輯并控制顯示和指示燈。
- 數碼管顯示模塊:用于顯示時間、溫度和濕度值。
- 滑動變阻器:模擬溫度和濕度傳感器,通過AD轉換獲取模擬量值。
- 按鍵矩陣:用于用戶輸入,修改時間和切換顯示內容。
- 指示燈:根據溫濕度值進行指示。
2. 軟件設計
軟件設計主要分為以下幾個模塊:
- 初始化模塊:初始化各個端口、設置定時器、初始化顯示內容。
- 按鍵檢測模塊:檢測用戶按鍵輸入,并對時間進行修改或切換顯示模式。
- AD轉換模塊:獲取滑動變阻器的模擬量值,轉換為溫度和濕度值。
- 顯示模塊:根據當前模式,顯示時間、溫度或濕度值。
- 指示燈控制模塊:根據溫濕度值,控制對應的指示燈狀態。
四、電路原理
- 數碼管連接到微控制器的輸出端口,用于顯示數值。
- 滑動變阻器連接到AD轉換器通道,用于模擬傳感器輸入。
- 按鍵矩陣連接到微控制器的輸入端口,用于用戶交互。
- 指示燈通過微控制器的輸出端口控制,顯示當前環境狀態。
五、程序原理
程序采用C語言編寫,主要功能模塊說明如下:
1. 初始化模塊
初始化各個端口、設置定時器并初始化顯示內容:
void main( void ) {DDRA = 0XFF - 0X03;DDRC |= 0X03;DDRD = 0XFF;DDRB = 0X00;disp[0] = LED_Disbuf[rtc_hour % 100 / 10];disp[1] = LED_Disbuf[rtc_hour % 10];disp[2] = LED_Disbuf[rtc_min % 100 / 10];disp[3] = LED_Disbuf[rtc_min % 10];SREG = 0x80;TIMSK |= (1 << TOIE0);TCCR0 = 0x03;TCNT0 = 0;while (1) {// 主循環}
}
2. 按鍵檢測模塊
檢測用戶按鍵輸入,用于修改時間和切換顯示模式:
int get_key( void ) {if (PINB != 0XFF) {if (PINB == 0xff - 0x01) return(1);if (PINB == 0xff - 0x02) return(2);// 檢測其他按鍵}return(0);
}
3. AD轉換模塊
獲取滑動變阻器的模擬量值,并轉換為溫度和濕度值:
void AD_GetData( void ) {ADMUX = (1 << REFS0);ADCSRA |= (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);ADCSRA |= (1 << ADSC);while (!(ADCSRA & (1 << ADIF)));ADCSRA |= (1 << ADIF);ADData0 = ADC;ADData0 = ((long) ADData0 * 5010 / 1024) / 50;// 處理濕度傳感器數據
}
4. 顯示模塊
根據當前模式,顯示時間、溫度或濕度值:
if (mode == 0) {disp[0] = LED_Disbuf[rtc_hour % 100 / 10];disp[1] = LED_Disbuf[rtc_hour % 10];disp[2] = LED_Disbuf[rtc_min % 100 / 10];disp[3] = LED_Disbuf[rtc_min % 10];
} else if (mode == 1) {disp[1] = LED_Disbuf[ADData0 / 100];disp[2] = LED_Disbuf[ADData0 % 100 / 10];disp[3] = LED_Disbuf[ADData0 % 10];
} else if (mode == 2) {disp[1] = LED_Disbuf[ADData1 / 100];disp[2] = LED_Disbuf[ADData1 % 100 / 10];disp[3] = LED_Disbuf[ADData1 % 10];
}
5. 指示燈控制模塊
根據溫濕度值,控制指示燈的狀態:
if (ADData0 < 20) {PORTA &= ~0x10; // 紅燈亮PORTA |= 0x20; // 藍燈滅
} else {PORTA &= ~0x20; // 紅燈滅PORTA |= 0x10; // 藍燈亮
}if (ADData1 > 70) {PORTA &= ~0x40; // 黃燈亮PORTA |= 0x80; // 綠燈滅
} else {PORTA &= ~0x80; // 黃燈滅PORTA |= 0x40; // 綠燈亮
}
六、實驗結果
通過調試和運行,系統實現了預期的功能。開機后顯示當前時間,并能通過按鍵修改時間;模擬溫度和濕度傳感器的數據,并能在數碼管上切換顯示當前溫度和濕度值;根據溫濕度值控制指示燈的狀態,溫度低于20度紅燈長亮,濕度高于70%黃燈長亮,濕度正常綠燈亮,溫度正常藍燈亮。
七、總結
本實驗通過設計一個溫濕度監控系統,結合了AD轉換、按鍵檢測、數碼管顯示和指示燈控制等多項技術,全面鍛煉了硬件和軟件設計能力。系統在實際運行中表現穩定,達到了預期效果。
資源
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2