1. 在按鍵的延時去抖動後,沒有重新讀取按鍵鍵值,即:
L8: ACALL DELAY
CJNE A,#0FFH,SAVE
這兩條指令中間應插入:MOV A, P1,否則妳用來比較的A還是第壹次讀到的A
2. 妳在檢測到按鍵按下後,沒有等待鍵釋放再去檢測下壹個按鍵。從妳的程序中看,檢測到按鍵按下後,蜂鳴器會響,除非妳能很好的控制妳按鍵按下的時間,不能超過蜂鳴器鳴叫的時間。所以這裏建議妳增加等待鍵釋放,即:
INC R0
DJNZ R2,SET
這兩條指令中插入:
RELEASE: MOV A, P1
CJNE A, #0FFH, RELEASE ; 檢測到鍵仍按下則繼續檢測直至松開
ACALL DELAY ; 繼續延時去抖動
MOV A, P1
CJNE A, #0FFH, RELEASE ; 去抖動後再確認壹次按鍵已釋放
妳後面的代碼看上去很混亂,我大致的理解是:妳開始讀了8次鍵值,存入31H開始的單元,然後後面的循環中有執行了3次 再讀8次鍵值的事情,並且只要這8次中有壹次按對了(分別與開始的第1、2、3個鍵值相同),就將00H這位置為有效,然後蜂鳴器響壹響,沒有什麽實質性的工作。
另外,妳的原理圖中P3.2是控制線,程序中沒有看到P3.2,卻有P3.5。
希望妳具體說明妳的需求,以及妳自己的編程思路,才能讓別人幫到妳,只會貼貼程序是沒有意義的。