洪嵐峰 發表於 2023-4-24 19:01:56

PIC16F1829

製作溫度濕度監測控制器需要以下零件:

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 的亮暗。
頁: [1]
查看完整版本: PIC16F1829