📄 file3.lst
字号:
PAGE 1
1: ;这是数码显示程序
2: ;实验现象:数码管从右边开始,从1(不带小数点)依次循环显示到F.(带小数点),总共32个字符
3: ;着重介绍的是如何查表,如何制作数码管对应的段码等,以及如何扫描数码管!
4: ;每个显示以后的延时是前面程序涉及到的,这里只是简单地调用了一下,如果这个调用很短,并且
5: ;显示的数位刚好8位,会怎么样呢?======那就是动态扫描的概念了,那就不是一个一个的显示
6: ;表现出来的我们就看到了一串数字76543210,其实还是一个一个地显示,只不过,我们眼睛
7: ;由于视觉暂留的缘故,看到的是一串罢了!
8:
9:
10:
11: B B7 beep bit p3.7 ;定义蜂明器
12:
13: D 0080 segdata equ p0 ;数据 输出
14: B 00A7 sege equ p2.7 ;显示 选中
15: B 00A6 segb equ p2.6 ;位 选
16: B 00A5 segd equ p2.5 ;段 选
17:
18: N 0000 org 00h ;程序开始
19: 0000 02 00 30 jmp main ;主程序开始处
20:
21: N 0030 org 030h ;主程序从30H开始
22: 0030 75 81 30 main:mov sp,#30h ;设置堆栈
23: 0033 12 00 3B lcall rest ;调用初始化程序
24: 0036 12 00 4C lcall pro_8led ;调用数码管显示程序
25: 0039 80 F5 jmp main ;返回
26:
27: ;********* 初始化程序 **************
28:
29: 003B 74 00 rest:mov a,#00h ;清寄存器
30: 003D 75 F0 00 mov b,#00h ;清寄存器
31: 0040 75 80 00 mov p0,#0 ;禁止数码管显示
32: 0043 75 A0 FF mov p2,#255 ;
33: 0046 85 FF 90 mov p1,0ffh ;禁止LED显示
34: 0049 C2 B7 clr beep ;禁止蜂鸣器
35: 004B 22 ret ;返回
36:
37: ;******** 数码管显示程序 ***************
38: ;显示程序对应的硬件部分请注意查看图纸,由于我们使用的数码管采用的是动态扫描
39: ;并且,段选和位选是分别使用了缓冲处理,因此,每次送出数据都需要经过两个步骤
40: ;首先把数据放在数据总线上,然后在相应的段或者位缓冲器输出时钟端给出一个
41: ;时钟,数据立即送出,从而达到实现了数据段位码的显示
42: ;以后的动态显示和这里的解释一样,就不做重复解释说明。只要看懂这个程序,
43: ;在以后的程序中也是一样的
44: ;在实际设计当中,也可以根据我们这个设计作为参考,采用这种动态扫描的方式
45: ;一方面可以节约线路板空间,另一方面,软件编程实现简单
46:
47: 004C C2 A7 pro_8led:clr sege ;显示选中,如果是clr sege表示选中存储器
48: 004E 75 F0 20 mov b,#32 ;一共显示32个数字
49: 0051 C2 D3 clr psw.3 ;重新设置寄存器组
50: 0053 D2 D4 setb psw.4 ;
51:
52: 0055 78 00 mov r0,#00h ;数据显示从0开始
53: 0057 79 01 mov r1,#01h ;数码管从第1个开始
54: 0059 89 80 loop:mov segdata,r1 ;送出需要显示数据对应的位
55: 005B D2 A6 setb segb
56: 005D 00 nop
PAGE 2
57: 005E C2 A6 clr segb ;这个操作就是让数据输出并得到锁存
58:
59: 0060 E8 mov a,r0 ;准备第一个数据
60: 0061 90 00 9F mov dptr,#tab_nu ;获得表头
61: 0064 93 movc a,@a+dptr ;得到第一个数据
62:
63: 0065 F5 80 mov segdata,a ;输出到显示数据的段
64: 0067 D2 A5 setb segd
65: 0069 00 nop
66: 006A C2 A5 clr segd ;这个操作就是让数据输出并得到锁存
67:
68: 006C 12 00 83 lcall delay ; 500 ms 延时
69: 006F 12 00 83 lcall delay ; 1 s 延时
70: 0072 08 inc r0 ;准备下一个数据
71: 0073 E9 mov a,r1 ;准备下一位数码管
72: 0074 33 rlc a ;设置下一个数码管
73: 0075 40 05 jc c1 ;8位全部显示,转移
74: 0077 F9 mov r1,a ;否则,设置下一位
75: 0078 D5 F0 DE djnz b,loop ;32个数没有显示完,返回显示
76: 007B 22 ret ;否则返回主程序
77:
78: 007C 79 01 c1: mov r1,#1 ;8位显示完,重新开始循环
79: 007E C3 clr c ;设置显示位
80: 007F D5 F0 D7 djnz b,loop ;32位显示完则返回重新显示
81: 0082 22 ret ;否则返回到主程序
82: ;************* 数码管显示 *******************************
83:
84: ;************* 软件延时 500ms *****************************
85: 0083 C0 D0 delay: push psw ; 保存原来的寄存器内容
86: 0085 C2 D3 clr psw.3 ;
87: 0087 C2 D4 clr psw.4 ; 设置新的寄存器组
88: 0089 78 02 mov r0,#2 ; 延时参数1
89: 008B 79 FA mov r1,#250 ; 延时参数2
90: 008D 7A 02 mov r2,#2 ; 延时参数3
91: 008F D8 FE dl1:djnz r0,dl1 ; 延时循环1
92: 0091 78 FA mov r0,#250 ;
93: 0093 D9 FA dl2:djnz r1,dl1 ; 延时循环2
94: 0095 78 F0 mov r0,#240 ;
95: 0097 79 F8 mov r1,#248 ;
96: 0099 DA F4 dl3:djnz r2,dl1 ; 延时循环3
97: 009B 00 nop ; 定时精度调整
98: 009C D0 D0 pop psw ; 恢复原来的寄存器
99: 009E 22 ret ; 返回
100: ;**********************************************************
101:
102: ;**********************************************************
103: ;这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
104: ; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推
105:
106: 009F tab_nu:
107: 009F C0 F9 A4 B0 db 0c0h, 0f9h, 0a4h, 0b0h, 99h , 92h , 82h, 0f8h ; 数字0-7 不带小数点代码
00A3 99 92 82 F8
108: 00A7 80 90 88 83 db 80h , 90h, 88h , 83h , 0c6h, 0a1h, 86h, 8eh ; 数字8-f 不带小数点代码
00AB C6 A1 86 8E
109: 00AF 40 79 24 30 db 40h , 79h, 24h , 30h , 19h , 12h , 02h, 78h ; 数字0-7 带小数点代码
00B3 19 12 02 78
110: 00B7 00 10 08 03 db 00h , 10h, 08h , 03h , 46h , 21h , 06h, 0eh ; 数字8-f 带小数点代码
00BB 46 21 06 0E
PAGE 3
111:
112: end ;
113:
register banks used: ---
0 个错误
PAGE 4
L I S T O F S Y M B O L S
=============================
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
AC BIT D6
ACC DATA E0
B DATA F0
BEEP BIT B7 11
C1 CODE 007C 78
CY BIT D7
DELAY CODE 0083 85
DL1 CODE 008F 91
DL2 CODE 0093 93
DL3 CODE 0099 96
DPH DATA 83
DPL DATA 82
EA BIT AF
ES BIT AC
ET0 BIT A9
ET1 BIT AB
EX0 BIT A8
EX1 BIT AA
EXTI0 CODE 0003
EXTI1 CODE 0013
F0 BIT D5
IE DATA A8
IE0 BIT 89
IE1 BIT 8B
INT0 BIT B2
INT1 BIT B3
IP DATA B8
IT0 BIT 88
IT1 BIT 8A
LOOP CODE 0059 54
MAIN CODE 0030 22
OV BIT D2
P BIT D0
P0 DATA 80
P1 DATA 90
P2 DATA A0
P3 DATA B0
PCON DATA 87
PRO_8LED CODE 004C 47
PS BIT BC
PSW DATA D0
PT0 BIT B9
PT1 BIT BB
PX0 BIT B8
PX1 BIT BA
RB8 BIT 9A
RD BIT B7
REN BIT 9C
RESET CODE 0000
REST CODE 003B 29
PAGE 5
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
RI BIT 98
RS0 BIT D3
RS1 BIT D4
RXD BIT B0
SBUF DATA 99
SCON DATA 98
SEGB NUMBER 00A6 15
SEGD NUMBER 00A5 16
SEGDATA NUMBER 0080 13
SEGE NUMBER 00A7 14
SINT CODE 0023
SM0 BIT 9F
SM1 BIT 9E
SM2 BIT 9D
SP DATA 81
T0 BIT B4
T1 BIT B5
TAB_NU CODE 009F 106
TB8 BIT 9B
TCON DATA 88
TF0 BIT 8D
TF1 BIT 8F
TH0 DATA 8C
TH1 DATA 8D
TI BIT 99
TIMER0 CODE 000B
TIMER1 CODE 001B
TL0 DATA 8A
TL1 DATA 8B
TMOD DATA 89
TR0 BIT 8C
TR1 BIT 8E
TXD BIT B1
WR BIT B6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -