📄 计数器.lst
字号:
安徽工程科技学院 计算机科学与工程系 谢永宁
1 ;计数器(计数到10000)
2 ;四位数码管,按键加一减一清零数显程序(P3.2为加一键,P3.3为减一键,计数器清零)
3 LOOP: TEMP EQU 22H ;计数器寄存器
4 TEMP1 EQU 23H ;计数器寄存器
5 ;****** ;
6 ;主程序 ;
7 ;****** ;
0000 752264 8 MOV TEMP,#100 ;初始化计数器
0003 752364 9 MOV TEMP1,#100 ;初始化计数器
0006 D2B2 10 GO: SETB P3.2 ;置P3.2为加1键
0008 D2B3 11 SETB P3.3 ;置P3.3为减1键
000A 30B20E 12 JNB P3.2,K1 ;P3.2=0表明按键S1按下(加1键)
000D 30B326 13 JNB P3.3,K2 ;P3.3=0表明按键S2按下(减1键)
0010 30B408 14 JNB P3.4,K1 ;自动加1
0013 30B5EA 15 JNB P3.5,LOOP ;计数器清零
0016 114D 16 ACALL TV ;显示
0018 020006 17 LJMP GO ;返回
001B 30B213 18 K1: JNB P3.2,X1 ;等待P3.2释放
001E 114D 19 ACALL TV ;显示延时
0020 0522 20 INC TEMP ;加1
0022 E522 21 MOV A,TEMP
0024 B4C807 22 CJNE A,#200,N1 ;未到200中跳回
0027 752264 23 MOV TEMP,#100 ;加到200复位100 ;
002A 0523 24 INC TEMP1 ;计数到100后百位加1
002C E523 25 MOV A,TEMP1 ;
002E 020006 26 N1: LJMP GO ;返回
0031 114D 27 X1: ACALL TV ;等待P33释放延时
0033 02001B 28 LJMP K1
0036 30B30F 29 K2: JNB P3.3,X2 ;等待P3.3释放
0039 114D 30 ACALL TV ;显示延时
003B 1522 31 DEC TEMP ;减1
003D E522 32 MOV A,TEMP
003F B40003 33 CJNE A,#0,N2 ;未到0中跳回
0042 752264 34 MOV TEMP,#100 ;减到0复位100
0045 020006 35 N2: LJMP GO ;返回
0048 114D 36 X2: ACALL TV ;等待P34释放延时
004A 020036 37 LJMP K2
38 ;********** ;
39 ;显示子程序 ;
40 ;********** ;
004D E522 41 TV: MOV A,TEMP
004F 75F064 42 MOV B,#100 ;100进制
0052 84 43 DIV AB
0053 F519 44 MOV 19H,A ;百位放在19H
0055 E5F0 45 MOV A,B
0057 75F00A 46 MOV B,#10 ;10进制
005A 84 47 DIV AB
005B F520 48 MOV 20H,A ;十位放在20H
005D 85F021 49 MOV 21H,B ;个位放在21H
0060 9000B4 50 MOV DPTR,#W8 ;指定查表启始地址
0063 E523 51 MOV A,TEMP1
0065 75F064 52 MOV B,#100 ;100进制
0068 84 53 DIV AB
0069 F524 54 MOV 24H,A ;百位放在24H
006B E5F0 55 MOV A,B
006D 75F00A 56 MOV B,#10 ;10进制
0070 84 57 DIV AB
0071 F525 58 MOV 25H,A ;百位放在25H
0073 85F026 59 MOV 26H,B ;千位放在26H
0076 9000B4 60 MOV DPTR,#W8 ;指定查表启始地址
0079 7804 61 MOV R0,#4 ;显示4个50次(可以调整显示时间快慢)
007B 790A 62 W9: MOV R1,#10 ;50次(可以调整显示时间快慢)
007D E521 63 W10: MOV A,21H ;取个位数
007F 93 64 MOVC A,@A+DPTR ;查个位数的7段代码
0080 F580 65 MOV P0,A ;送出个位的7段代码
0082 C2A5 66 CLR P2.5 ;打开个位显示
0084 11AE 67 ACALL W13 ;显示延时
0086 D2A5 68 SETB P2.5 ;关闭个位显示
0088 E520 69 MOV A,20H ;取十位数
008A 93 70 MOVC A,@A+DPTR ;查十位数的7段代码
008B F580 71 MOV P0,A ;送出十位的7段代码
008D C2A4 72 CLR P2.4 ;打开十位显示
008F 11AE 73 ACALL W13 ;显示延时
0091 D2A4 74 SETB P2.4 ;关闭十位显示
0093 E526 75 MOV A,26H ;取百位数
0095 93 76 MOVC A,@A+DPTR ;查百位数的7段代码
0096 F580 77 MOV P0,A ;送出百位的7段代码
0098 C2A3 78 CLR P2.3 ;打开百位显示
009A 11AE 79 ACALL W13 ;显示延时
009C D2A3 80 SETB P2.3 ;关闭百位显示
009E E525 81 MOV A,25H ;取百位数
00A0 93 82 MOVC A,@A+DPTR ;查百位数的7段代码
00A1 F580 83 MOV P0,A ;送出百位的7段代码
00A3 C2A2 84 CLR P2.2 ;打开千位显示
00A5 11AE 85 ACALL W13 ;显示延时
00A7 D2A2 86 SETB P2.2 ;关闭千位显示
00A9 D9D2 87 DJNZ R1,W10 ;50次没完循环
00AB D8CE 88 DJNZ R0,W9 ;4个50次没完循环
00AD 22 89 RET
90 ;******** ;
91 ;显示延时 ;
92 ;******** ;
00AE 7F46 93 W13: MOV R7,#70
00B0 DFFE 94 DJNZ R7,$
00B2 00 95 NOP
00B3 22 96 RET
97 ;7段数码管各划的数字排列表
00B4 C0F9A4B0 98 W8: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,F8H,80H,90H
00B8 999282F8
00BC 8090
99 ;0 1 2 3 4 5 6 7 8 9
100 END
程序中使用的标号如下:
LOOP 0000
GO 0006
K1 001B
N1 002E
X1 0031
K2 0036
N2 0045
X2 0048
TV 004D
W9 007B
W10 007D
W13 00AE
W8 00B4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -