📄 按键计数.asm
字号:
;两位数码管,按键加一减一数显程序(P3.2为加一键,P3.3为减一键)
TEMP EQU 22H ;计数器寄存器
;******;
;主程序;
;******;
MOV TEMP,#100 ;初始化计数器
GO: SETB P3.2 ;置P3.2为加1键
SETB P3.3 ;置P3.3为减1键
JNB P3.2,K1 ;P3.2=0表明按键s1按下(加1键)
JNB P3.3,K2 ;P3.3=0表明按键s2按下(减1键)
ACALL TV ;显示
LJMP GO ;返回
K1: JNB P3.2,X1 ;等待P3.2释放
ACALL TV ;显示延时
INC TEMP ;加1
MOV A,TEMP
CJNE A,#200,N1 ;未到200中跳回
MOV TEMP,#100 ;加到200复位100;
N1: LJMP GO ;返回
X1: ACALL TV ;等待P33释放延时
LJMP K1
K2: JNB P3.3,X2 ;等待P3.3释放
ACALL TV ;显示延时
DEC TEMP ;减1
MOV A,TEMP
CJNE A,#0,N2 ;未到0中跳回
MOV TEMP,#100 ;减到0复位100
N2: LJMP GO ;返回
X2: ACALL TV ;等待P34释放延时
LJMP K2
;**********;
;显示子程序;
;**********;
TV: MOV A,TEMP
MOV B,#100 ;100进制
DIV AB
MOV 19H,A ;百位放在19H
MOV A,B
MOV B,#10 ;10进制
DIV AB
MOV 20H,A ;十位放在20H
MOV 21H,B ;个位放在21H
MOV DPTR,#W8 ;指定查表启始地址
MOV R0,#4 ;显示4个50次
W9: MOV R1,#50 ;50次
W10: MOV A,21H ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.7 ;打开个位显示
ACALL W13 ;显示延时
SETB P2.7 ;关闭个位显示
MOV A,20H ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;打开十位显示
ACALL W13 ;显示延时
SETB P2.6 ;关闭十位显示
DJNZ R1,W10 ;50次没完循环
DJNZ R0,W9 ;4个50次没完循环
RET
;********;
;显示延时;
;********;
W13: MOV R7,#70
DJNZ R7,$
NOP
RET
;7段数码管各划的数字排列表
W8: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
;0 1 2 3 4 5 6 7 8 9
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -