(1)編寫程序,按下 S2,S3,S4,S4 任何一個按鍵的時候,蜂鳴器都鳴叫,松開按鍵的時候蜂鳴器停止鳴叫。(2)開始的時候,數碼管左邊位不顯示,右邊位數碼管顯示數值 0,每按一次 S4 按鍵,數碼管顯示值加 1,直至 9,再循環從 0 顯示到 9。
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV DPTR,#TAB
MOV R4,#99
MOV 20H,#0 ;顯示緩存單元清 0,20H 為個位,21H 為十位
MOV 21H,#0
CLR P2.7 ;停蜂鳴器
RETURN: ACALL DISP ;調用顯示程序
KEY: JNB P2.0,SOUND ;判斷有無鍵按下并轉相應入口
JNB P2.1,SOUND ;P1.0,P1.1,P1.2 任意鍵按下,蜂鳴器響
JNB P2.2,SOUND
JNB P2.3,DISADD ; P2.3 按下,緩存低 8 位單元加 1
AJMP RETURN ;無鍵按下轉
SOUND: ACALL DELAY;延時 ;鍵盤消抖
JNB P2.0,BEEP ;確實有鍵按下,轉蜂鳴器響
JNB P2.1,BEEP
JNB P2.2,BEEP
SJMP KEY ;屬于鍵抖動,轉 KEY
BEEP: SETB P2.7
BEEP1: JNB P2.0,GO ;鍵是否釋放,未釋放轉 GO 繼續等待
JNB P2.1,GO
JNB P2.2,GO
CLR P2.7 ;鍵釋放,清蜂鳴器
AJMP RETURN ;返回,繼續刷新顯示,等待按鍵
GO: AJMP BEEP1
DISADD: ACALL DELAY;延時 ;蜂鳴器按鍵消抖
WEISF: SETB P2.7
JNB P2.3,WEISF
CLR P2.7
DJNZ R4,GG
MOV 20H,#1
MOV 21H,#0
MOV R4,#99
SJMP RETURN
GG: MOV A,20H ;顯示個位單元加 1
INC A
MOV 20H,A
CJNE A,#10,RETURN
MOV 20H,#0
MOV A,21H ;顯示十位單元加 1
INC A
MOV 21H,A
CJNE A,#10H,RETURN
MOV 21H,#0
AJMP RETURN
DISP: MOV A,20H ;顯示程序
MOVC A,@A+DPTR
CLR P2.6
CLR P2.5
CLR P2.4
MOV P0,A
ACALL DELAY
MOV A,21H
MOVC A,@A+DPTR
CLR P2.6
CLR P2.5
SETB P2.4
MOV P0,A
ACALL DELAY
RET
DELAY: MOV R2,#40 ;延時程序
HER1: MOV R3,#125
HER: DJNZ R3,HER
DJNZ R2,HER1
RET
TAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;共陽極段碼
END
|