- UID
- 373967
- 帖子
- 8779
- 主題
- 2609
- 精華
- 0
- 積分
- 993
- 楓幣
- 2637
- 威望
- 970
- 存款
- 31556
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 50
- 在線時間
- 451 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-11-5
|
製作溫度濕度監測控制器需要以下零件:
PIC16F1829 微控制器
DHT11 溫濕度傳感器
LCD 顯示屏
10k 歐姆電阻器
4.7k 歐姆電阻器
16MHz 晶振
22pF 瓷片電容器
100nF 陶瓷電容器
電位器
電解電容器
雙排插針
杜邦線
以下是 PIC16F1829 的連結腳位:
+---------+
VDD |1 20| VSS
RA5 |2 19| RA0/AN0
RA4 |3 18| RA1/AN1
RA3 |4 17| RA2/AN2
RC5 |5 16| C1OUT/AN3
RC4 |6 15| C2OUT/AN4
RC3 |7 14| SDO/RX/DT
RC6 |8 13| SDI/TX/CK
RC7 |9 12| SCK/SCL
CCP1 |10 11| CCP2
+---------+
以下是 PIC16F1829 程式碼,使用 XC8 編譯器:
#include <xc.h>
#include "DHT11.h"
#include "LCD.h"
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = ON
#pragma config BORV = LO
#pragma config LVP = OFF
#define _XTAL_FREQ 16000000
void main(void) {
OSCCONbits.IRCF = 0b1110; // 設置內部時鐘為 16MHz
OSCCONbits.SCS = 0b10; // 使用內部時鐘
ANSELA = 0b00000000; // 設置 PORTA 為數位輸出
TRISA = 0b00000000; // 設置 PORTA 為輸出
ANSELC = 0b00000000; // 設置 PORTC 為數位輸出
TRISC = 0b00000000; // 設置 PORTC 為輸出
DHT11_init(); // 初始化 DHT11
LCD_init(); // 初始化 LCD
while (1) {
float temperature, humidity;
DHT11_read(&temperature, &humidity); // 讀取溫濕度
// 顯示溫濕度
LCD_clear();
LCD_write_string("Temp
LCD_write_float(temperature, 1);
LCD_write_string("C");
LCD_set_cursor(0, 1);
LCD_write_string("Humidity ");
LCD_write_float(humidity, 1);
LCD_write_string("%");
// 控制 LED
if (humidity > 60) {
RA0 = 1; // 高濕度時點亮 LED
} else {
RA0 = 0;
}
__delay_ms(1000); // 延遲 1 秒
}
}
在上面的程式碼中,我們使用了 DHT11.h 和 LCD.h 這兩個自定義頭文件,它們分別包含了 DHT11 和 LCD 的函數定義。
這些函數可以根據具體的硬件進行修改。
程式碼中使用了一個 while 循環,不斷地讀取溫濕度並顯示在 LCD 上,同時根據濕度值控制 LED 的亮暗。 |
|