首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

STC51 密碼鎖按鍵值無法存入陣列?main 函數缺少外層無限迴圈導致掃描只執行一次

     編輯:程式設計疑難解答

原始 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();       // 重新掃描(或等待釋放)
        }
    }
}

關鍵修正點

  1. 外層 while(1) 確保持續輪詢鍵盤。
  2. 輸入滿 6 位後**必須比對密碼**,而非單純亮燈死循環。
  3. 按鍵掃描 coding() 應包含消抖延遲(delay(10))。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved