(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
|