要實(shí)現(xiàn)紅外壁障對(duì)管模塊每檢測(cè)到一次障礙物,數(shù)碼管顯示數(shù)值就自動(dòng)加一的功能,需要將傳感器信號(hào)采集、計(jì)數(shù)邏輯和數(shù)碼管驅(qū)動(dòng)三部分程序有機(jī)結(jié)合。下面以常見的51單片機(jī)(如STC89C52)和共陰極數(shù)碼管為例,提供一個(gè)清晰的實(shí)現(xiàn)方案和代碼框架。
一、系統(tǒng)工作原理
紅外壁障對(duì)管模塊一般包含一個(gè)紅外發(fā)射管和一個(gè)紅外接收管。當(dāng)模塊前方無(wú)障礙物時(shí),發(fā)射管發(fā)出的紅外線無(wú)法反射給接收管,模塊輸出高電平;當(dāng)有障礙物時(shí),紅外線被反射,接收管接收到信號(hào),模塊輸出低電平(具體電平邏輯請(qǐng)以實(shí)際模塊說(shuō)明書為準(zhǔn),常見為檢測(cè)到障礙物輸出低電平)。單片機(jī)通過(guò)檢測(cè)該電平的跳變(例如下降沿)來(lái)判定一次有效的壁障事件,進(jìn)而觸發(fā)計(jì)數(shù)器加一,并將計(jì)數(shù)值通過(guò)數(shù)碼管顯示出來(lái)。
二、硬件連接示意
三、程序編寫思路與代碼示例(C語(yǔ)言)
程序核心在于:檢測(cè)傳感器信號(hào)變化 -> 去抖 -> 計(jì)數(shù) -> 顯示。
`c
#include // 定義引腳
#define IRSENSOR P32 // 紅外壁障模塊信號(hào)線接P3.2
sbit DUAN = P2^6; // 假設(shè)段選鎖存器控制線
sbit WEI = P2^7; // 假設(shè)位選鎖存器控制線
// 數(shù)碼管段碼表(共陰極,0~9)
unsigned char code segmentTable[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
unsigned char count = 0; // 計(jì)數(shù)變量,記錄壁障次數(shù)
// 延時(shí)函數(shù),用于去抖和數(shù)碼管動(dòng)態(tài)掃描(若多位數(shù)碼管)
void delay_ms(unsigned int ms) {
unsigned int i, j;
for(i=0; i
}
// 數(shù)碼管顯示函數(shù),顯示傳入的數(shù)值num
void displayNumber(unsigned char num) {
if(num > 9) num = 0; // 一位數(shù)碼管只顯示0-9,超過(guò)歸零
P0 = segmentTable[num]; // 段碼送P0口
DUAN = 1; DUAN = 0; // 鎖存段碼(具體鎖存邏輯根據(jù)你的硬件電路調(diào)整)
P0 = 0x01; // 假設(shè)選中第一個(gè)數(shù)碼管(位選碼)
WEI = 1; WEI = 0; // 鎖存位選
}
void main() {
unsigned char lastState = 1; // 上次傳感器狀態(tài),初始為高(無(wú)障礙)
unsigned char currentState;
IR_SENSOR = 1; // 將傳感器輸入引腳設(shè)為高電平,準(zhǔn)備讀取
while(1) {
currentState = IRSENSOR; // 讀取當(dāng)前傳感器狀態(tài)
// 檢測(cè)下降沿:上次為高(1)且當(dāng)前為低(0),代表檢測(cè)到一次障礙物
if((lastState == 1) && (currentState == 0)) {
delayms(10); // 延時(shí)去抖,消除信號(hào)抖動(dòng)誤觸發(fā)
if(IRSENSOR == 0) { // 再次確認(rèn)仍為低電平
count++; // 計(jì)數(shù)加1
if(count > 9) count = 0; // 0-9循環(huán)
}
}
lastState = currentState; // 更新狀態(tài)
displayNumber(count); // 刷新數(shù)碼管顯示
// 可以加入短暫延時(shí),控制循環(huán)速度,但不宜過(guò)長(zhǎng)以免漏檢測(cè)
delayms(50);
}
}`
四、關(guān)鍵點(diǎn)說(shuō)明
五、優(yōu)化建議
按照以上步驟連接硬件并燒錄程序,即可實(shí)現(xiàn)紅外壁障一次,數(shù)碼管顯示值加一的功能。務(wù)必先確認(rèn)好紅外模塊的輸出電平邏輯,必要時(shí)調(diào)整程序中狀態(tài)檢測(cè)的判斷條件。祝你成功!
如若轉(zhuǎn)載,請(qǐng)注明出處:http://m.longhuistone.cn/product/308.html
更新時(shí)間:2026-03-15 19:08:53