洪嵐峰 發表於 2023-4-22 19:11:23

PIC12F508的紅外線自動感應5位數顯示計數器

零件:

PIC12F508 微控制器
紅外線感應模塊
共陰極5位數碼管
1K歐姆電阻(x5)
10K歐姆電阻(x1)
1N4148二極管(x5)
0.1微法電容器(x1)

以下是PIC12F508的腳位連結:


          +-----+
    VDD --|1    |-- VSS
  IR_IN --|2    |-- GP5
        --|3    |-- GP4
   DIG4 --|4    |-- GP3
   DIG3 --|5    |-- GP2
   DIG2 --|6    |-- GP1
   DIG1 --|7    |-- GP0
        --|8    |--
          +-----+
以下是這個紅外線自動感應5位數顯示計數器的基本程式碼


#include <pic12f508.h>
#include <stdint.h>

#define _XTAL_FREQ 4000000  // 定義晶振頻率為4MHz

// 計數器變量
volatile uint32_t counter = 0;

// 初始化函數
void init(void) {
    // 設置GP0 ~ GP4為輸出狀態
    TRISIO = 0b00000000;

    // 設置GP5為輸入狀態
    GPIO5 = 1;

    // 設置計數器為0
    counter = 0;
}

// 顯示函數
void display(uint32_t number) {
    // 定義數字0~9的模式
    const uint8_t patterns = {
        0b00111111,  // 0
        0b00000110,  // 1
        0b01011011,  // 2
        0b01001111,  // 3
        0b01100110,  // 4
        0b01101101,  // 5
        0b01111101,  // 6
        0b00000111,  // 7
        0b01111111,  // 8
        0b01101111,  // 9
    };

    // 轉換計數器數值為5個數字
    uint8_t digits = {0};

    for (uint8_t i = 0; i < 5; i++) {
        digits = number % 10;
        number /= 10;
    }

    // 顯示數字
   // 依次點亮每個數字的LED
for (uint8_t i = 0; i < 5; i++) {
    // 將數字模式輸出到GP0~GP4
    GPIO = patterns];

    // 點亮對應的LED
    switch (i) {
        case 0:
            DIG1 = 1;
            break;
        case 1:
            DIG2 = 1;
            break;
        case 2:
            DIG3 = 1;
            break;
        case 3:
            DIG4 = 1;
            break;
        default:
            break;
    }

    // 延時一段時間
    __delay_ms(5);

    // 熄滅所有LED
    DIG1 = 0;
    DIG2 = 0;
    DIG3 = 0;
    DIG4 = 0;

    // 延時一段時間
    __delay_ms(5);
}
}

// 主程序
void main(void) {
// 初始化
init();

while (1) {
    // 檢測紅外線感應模塊是否接收到信號
    if (GPIO5 == 0) {
        // 紅外線信號被感應,計數器+1
        counter++;
    }

    // 顯示計數器數值
    display(counter);
}
}



這個程式碼的基本原理是檢測紅外線感應模塊是否接收到信號,如果接收到信號,則計數器加1。

然後使用5位數的共陰極數碼管顯示計數器的數值。

在顯示計數器數值時,我們通過依次點亮每個數字的LED,來顯示5位數的數值。

此示例程式碼假設您已經熟悉PIC12F508的基本編程和硬件連接知識,因此可能需要進行修改,以適應您的具體應用場景。
頁: [1]
查看完整版本: PIC12F508的紅外線自動感應5位數顯示計數器