使用 INT0、INT1 外部中斷響應按鍵(鍵盤掃描碼 8 和 C),控制雙位數碼管顯示 0~15 循環增減。
// 鍵盤掃描(行列逐級)
unsigned char KeyScan() {
P3 = 0xF0; if (P3 != 0xF0) { /* 掃描四行,返回 0xEE~0x77 */ }
return 0xFF;
}
// 鍵值轉換
unsigned char KeyPro() {
switch(KeyScan()) {
case 0xEE: return 0; ... case 0xEB: return 8; ... case 0xE7: return 12; ...
default: return 0xFF;
}
}
// 數碼管動態掃描顯示
void Screen1(int pos, int val) { /* 顯示十位 */ }
void Screen2(int pos, int val) { /* 顯示個位 */ }
// 主迴圈:輪詢顯示
void main() {
EA=1; EX0=1; IT0=0; EX1=1; IT1=0;
while(1) {
if(flag) Screen1(6, num); else Screen2(7, num);
Key_push = KeyPro();
}
}
// INT0 中斷:減
void inter_sub() interrupt 0 {
if (Key_push == 8) if (num > 0) num--;
Key_push = 0;
}
// INT1 中斷:加
void inter_add() interrupt 2 {
if (Key_push == 12) { num++; if (num==16) num=0; }
Key_push = 0;
}
按鍵 8 (INT0) 數字遞減至 0 停止;按鍵 C (INT1) 數字遞增至 15 後循環到 0。