📄 file1.lst
字号:
PAGE 1
1: ;LED显示实验
2: ;现象:8个LED指示灯从左到右,然后从右到左依次循环显示
3: ;这个实验演示的是一种最基本的,也是最常用的,单片机对端口操作的方法和延时的方法
4: ;下面都有程序代码和中文注释
5: ;蜂鸣器和数码管均没有指示(以后,凡是没有提到的,都没有反应,比如蜂鸣器,数码管等)
6:
7:
8: B B7 beep bit p3.7 ;蜂鸣器定义对应的单片机引脚
9:
10: B 90 led1 bit p1.0 ;第一个数码管对应的引脚
11: B 91 led2 bit p1.1 ;第二个数码管对应的引脚
12: B 92 led3 bit p1.2 ;第三个数码管对应的引脚
13: B 93 led4 bit p1.3 ;第四个数码管对应的引脚
14: B 94 led5 bit p1.4 ;第五个数码管对应的引脚
15: B 95 led6 bit p1.5 ;第六个数码管对应的引脚
16: B 96 led7 bit p1.6 ;第七个数码管对应的引脚
17: B 97 led8 bit p1.7 ;第八个数码管对应的引脚
18:
19: N 0000 org 00h ;程序开始
20: 0000 02 00 30 jmp main ;跳转到主程序
21:
22: N 0030 org 030h ;主程序从30H开始
23:
24: 0030 75 81 30 main: mov sp,#30h ;初始化堆栈,这一条语句不能放到初始化程序里
25: ;否则程序不能正确返回,为什么?
26: 0033 12 00 3B lcall rest ;调用初始化程序,进行初始化
27: 0036 12 00 4C lcall pro_led ;调用LED显示程序
28: 0039 80 F5 jmp main ;返回开始
29:
30: 003B 74 00 rest: mov a,#00h ;初始化程序,首先将累加器清零
31: 003D 75 F0 00 mov b,#00h ;累加器B也请零
32: 0040 75 80 00 mov p0,#0 ;所有P0口置低位,禁止数码管显示
33: 0043 85 FF 90 mov p1,0ffh ;P1口高位,LED也不显示
34: 0046 75 A0 FF mov p2,#255 ;P2口也高位,禁止数码管显示,
35: ;将立即数写成#255(后面没有H)表示十进制,
36: ;如果写成#0FFH(后面有个H)表示十六进制,
37: ;如果十六进制高位大于9,必须在前面加上0,
38: ;如0A0H,结果还是 A0H(160),0AH(10)否则编译不能通过
39: 0049 C2 B7 clr beep ;禁止蜂鸣器发出声音,如果写成setb beep(置位蜂鸣器)
40: ;则蜂鸣器发出声音
41: 004B 22 ret ;子程序返回
42:
43: ;****************** 注意:注释字符前一定要加上 ; ***********************
44: ;LED显示程序用来控制LED的显示,通常用在街道霓虹等控制等
45: ;采用两种不同的走灯方式,可以采用不同的策略,组合出不同的走灯花样
46: ;单片机学习的窍门就是多实践,希望大家多从应用程序中得到启示
47: ;不断进步,从而提高自己的单片机应用能力
48:
49: 004C pro_led: ;LED显示程序开始
50: 004C D2 90 setb led1 ;熄灭第一个LED
51: 004E C2 97 clr led8 ;显示后一个LED
52: 0050 12 00 B6 lcall delay ;延时
53:
54: 0053 D2 91 setb led2 ;进入第二个循环,熄灭第二个LED
55: 0055 C2 90 clr led1 ;显示第一个LED
56: 0057 12 00 B6 lcall delay ;如此反复,直到所有的LED都循环过
PAGE 2
57:
58: 005A D2 92 setb led3
59: 005C C2 91 clr led2
60: 005E 12 00 B6 lcall delay
61:
62: 0061 D2 93 setb led4
63: 0063 C2 92 clr led3
64: 0065 12 00 B6 lcall delay
65:
66: 0068 D2 94 setb led5
67: 006A C2 93 clr led4
68: 006C 12 00 B6 lcall delay
69:
70: 006F D2 95 setb led6
71: 0071 C2 94 clr led5
72: 0073 12 00 B6 lcall delay
73:
74: 0076 D2 96 setb led7
75: 0078 C2 95 clr led6
76: 007A 12 00 B6 lcall delay
77:
78: 007D D2 97 setb led8
79: 007F C2 96 clr led7
80: 0081 12 00 B6 lcall delay
81: 0084 again: ;开始另外一种显示方式
82: 0084 D2 96 setb led7 ;清除第7个LED
83: 0086 C2 97 clr led8 ;点亮第8个LED
84: 0088 12 00 B6 lcall delay ;延时 ,然后如此循环
85:
86: 008B D2 95 setb led6
87: 008D C2 96 clr led7
88: 008F 12 00 B6 lcall delay
89:
90: 0092 D2 94 setb led5
91: 0094 C2 95 clr led6
92: 0096 12 00 B6 lcall delay
93:
94: 0099 D2 93 setb led4
95: 009B C2 94 clr led5
96: 009D 12 00 B6 lcall delay
97:
98: 00A0 D2 92 setb led3
99: 00A2 C2 93 clr led4
100: 00A4 12 00 B6 lcall delay
101:
102: 00A7 D2 91 setb led2
103: 00A9 C2 92 clr led3
104: 00AB 12 00 B6 lcall delay
105:
106: 00AE D2 90 setb led1
107: 00B0 C2 91 clr led2
108: 00B2 12 00 B6 lcall delay
109:
110: 00B5 22 ret ;返回,
111: ; **************************************************
112: 00B6 delay:
113: 00B6 C0 D0 push psw ; 保护PSW寄存器
114: 00B8 C2 D3 clr psw.3 ;
PAGE 3
115: 00BA D2 D4 setb psw.4 ; 重新设置寄存器组别
116: 00BC 78 02 mov r0,#2 ; 延时常数
117: 00BE 79 FA mov r1,#250 ; 延时常数
118: 00C0 7A 02 mov r2,#2 ; 延时常数
119: 00C2 D8 FE dl1:djnz r0,dl1 ; 延时循环1
120: 00C4 78 FA mov r0,#250 ;
121: 00C6 D9 FA dl2:djnz r1,dl1 ; 延时循环2
122: 00C8 78 F0 mov r0,#240 ;
123: 00CA 79 F8 mov r1,#248 ;
124: 00CC DA F4 dl3:djnz r2,dl1 ; 这是第三个循环
125: 00CE 00 nop ; 这个用来修正演示精度
126: 00CF D0 D0 pop psw ; 恢复PSW寄存器
127: 00D1 22 ret ; 延时子程序返回
128:
129: ; ******************* 下面是 数码管显示的编码 ************************************
130:
131: ;用来对显示的数据所对应的数码管位数进行编码,如 "0",对应 数码管的 a,b,c,d,e,f 写成编码就是 0c0h;
132: ;为了正确显示,请不要修改,如果要显示更多的字符,可以在后面加入,单对应的十六进制代码要改变;
133: ;否则,需要自己另外根据格式定义一组编码表格;
134:
135: 00D2 C0 F9 A4 B0 tab_nu: db 0c0h,0f9h, 0a4h, 0b0h, 99h , 92h , 82h, 0f8h ; 不带小数点十六进制数字0--7对应的编码
00D6 99 92 82 F8
136: 00DA 80 90 88 83 db 80h , 90h, 88h , 83h , 0c6h, 0a1h, 86h, 8eh ; 不带小数点十六进制数字8--F对应的编码
00DE C6 A1 86 8E
137: 00E2 40 79 24 30 db 40h , 79h, 24h , 30h , 19h , 12h , 02h, 78h ;带小数点十六进制数字0--7对应的编码
00E6 19 12 02 78
138: 00EA 00 10 08 03 db 00h , 10h, 08h , 03h , 46h , 21h , 06h, 0eh ; 带小数点十六进制数字8--F对应的编码
00EE 46 21 06 0E
139:
140: end ;告诉编译器,程序代码到此结束,如果没有这条语句,编译器会报出错误
141:
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
AGAIN CODE 0084 81
B DATA F0
BEEP BIT B7 8
CY BIT D7
DELAY CODE 00B6 112
DL1 CODE 00C2 119
DL2 CODE 00C6 121
DL3 CODE 00CC 124
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
LED1 BIT 90 10
LED2 BIT 91 11
LED3 BIT 92 12
LED4 BIT 93 13
LED5 BIT 94 14
LED6 BIT 95 15
LED7 BIT 96 16
LED8 BIT 97 17
MAIN CODE 0030 24
OV BIT D2
P BIT D0
P0 DATA 80
P1 DATA 90
P2 DATA A0
P3 DATA B0
PCON DATA 87
PRO_LED CODE 004C 49
PS BIT BC
PSW DATA D0
PT0 BIT B9
PT1 BIT BB
PAGE 5
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
PX0 BIT B8
PX1 BIT BA
RB8 BIT 9A
RD BIT B7
REN BIT 9C
RESET CODE 0000
REST CODE 003B 30
RI BIT 98
RS0 BIT D3
RS1 BIT D4
RXD BIT B0
SBUF DATA 99
SCON DATA 98
SINT CODE 0023
SM0 BIT 9F
SM1 BIT 9E
SM2 BIT 9D
SP DATA 81
T0 BIT B4
T1 BIT B5
TAB_NU CODE 00D2 135
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 + -