原始 main 缺陷
void main() {
uchar k = coding(); // 僅掃描一次
while(k > 0) { ... } // 進入後無法再次掃描新按鍵
}
修正架構
void main() {
uchar k;
while (1) { // 外層無限迴圈:持續掃描
k = coding(); // 獲取當前按鍵值
while (k > 0) { // 按鍵按下持續處理
switch(k) {
case 1: if(count<6) buf[count++]=1; break;
// ... case 2~9, 0 ...
case 'A': case 'B': /* 功能鍵 */ break;
}
if (count == 6) { // 輸入滿 6 位
// 比對密碼
bool ok = true;
for (int i=0;i<6;i++) if (buf[i]!=pwd[i]) { ok=false; break; }
if (ok) { /* 開鎖 */ } else { /* 錯誤提示 */ }
count = 0; // 重置
}
k = coding(); // 重新掃描(或等待釋放)
}
}
}
關鍵修正點
- 外層
while(1) 確保持續輪詢鍵盤。
- 輸入滿 6 位後**必須比對密碼**,而非單純亮燈死循環。
- 按鍵掃描
coding() 應包含消抖延遲(delay(10))。