冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 682|回覆: 0
打印 上一主題 下一主題

[討論] PIC16F1829

[複製鏈接]

2609

主題

0

好友

993

積分

高級會員

Rank: 4

UID
373967
帖子
8779
主題
2609
精華
0
積分
993
楓幣
2637
威望
970
存款
31556
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
451 小時
註冊時間
2023-1-12
最後登入
2024-11-5

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-24 19:01:56 |只看該作者 |倒序瀏覽
製作溫度濕度監測控制器需要以下零件:

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 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-5 17:25

回頂部