📄 计数器.asm
字号:
;计数器(计数到10000)
;四位数码管,按键加一减一清零数显程序(P3.2为加一键,P3.3为减一键,计数器清零)
LOOP: TEMP EQU 22H ;计数器寄存器
TEMP1 EQU 23H ;计数器寄存器
;****** ;
;主程序 ;
;****** ;
MOV TEMP,#100 ;初始化计数器
MOV TEMP1,#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键)
JNB P3.4,K1 ;自动加1
JNB P3.5,LOOP ;计数器清零
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 ;
INC TEMP1 ;计数到100后百位加1
MOV A,TEMP1 ;
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 A,TEMP1
MOV B,#100 ;100进制
DIV AB
MOV 24H,A ;百位放在24H
MOV A,B
MOV B,#10 ;10进制
DIV AB
MOV 25H,A ;百位放在25H
MOV 26H,B ;千位放在26H
MOV DPTR,#W8 ;指定查表启始地址
MOV R0,#4 ;显示4个50次(可以调整显示时间快慢)
W9: MOV R1,#10 ;50次(可以调整显示时间快慢)
W10: MOV A,21H ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.5 ;打开个位显示
ACALL W13 ;显示延时
SETB P2.5 ;关闭个位显示
MOV A,20H ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.4 ;打开十位显示
ACALL W13 ;显示延时
SETB P2.4 ;关闭十位显示
MOV A,26H ;取百位数
MOVC A,@A+DPTR ;查百位数的7段代码
MOV P0,A ;送出百位的7段代码
CLR P2.3 ;打开百位显示
ACALL W13 ;显示延时
SETB P2.3 ;关闭百位显示
MOV A,25H ;取百位数
MOVC A,@A+DPTR ;查百位数的7段代码
MOV P0,A ;送出百位的7段代码
CLR P2.2 ;打开千位显示
ACALL W13 ;显示延时
SETB P2.2 ;关闭千位显示
DJNZ R1,W10 ;50次没完循环
DJNZ R0,W9 ;4个50次没完循环
RET
;******** ;
;显示延时 ;
;******** ;
W13: MOV R7,#70
DJNZ R7,$
NOP
RET
;7段数码管各划的数字排列表
W8: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,F8H,80H,90H
;0 1 2 3 4 5 6 7 8 9
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -