冰楓論壇

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

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

[複製鏈接]

2609

主題

0

好友

945

積分

高級會員

Rank: 4

UID
373967
帖子
7420
主題
2609
精華
0
積分
945
楓幣
1080
威望
925
存款
26000
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
407 小時
註冊時間
2023-1-12
最後登入
2024-5-1

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

跳轉到指定樓層
1
發表於 2023-4-22 19:11:23 |只看該作者 |倒序瀏覽
零件:

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[10] = {
        0b00111111,  // 0
        0b00000110,  // 1
        0b01011011,  // 2
        0b01001111,  // 3
        0b01100110,  // 4
        0b01101101,  // 5
        0b01111101,  // 6
        0b00000111,  // 7
        0b01111111,  // 8
        0b01101111,  // 9
    };

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

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

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

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


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

廣告刊登意見回饋關於我們職位招聘本站規範DMCA隱私權政策

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

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

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

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

GMT+8, 2024-5-1 09:51

回頂部