📄 lesson6.lst
字号:
__start:
__text_start:
57 E5CF LDI R28,0x5F
58 E0D4 LDI R29,4
59 BFCD OUT 0x3D,R28
5A BFDE OUT 0x3E,R29
5B 51C0 SUBI R28,0x10
5C 40D0 SBCI R29,0
5D EA0A LDI R16,0xAA
5E 8308 STD Y+0,R16
5F 2400 CLR R0
60 E6E0 LDI R30,0x60
61 E0F0 LDI R31,0
62 E010 LDI R17,0
63 36E0 CPI R30,0x60
64 07F1 CPC R31,R17
65 F011 BEQ 0x0068
66 9201 ST R0,Z+
67 CFFB RJMP 0x0063
68 8300 STD Z+0,R16
69 EAED LDI R30,0xAD
6A E0F0 LDI R31,0
6B E6A0 LDI R26,0x60
6C E0B0 LDI R27,0
6D E010 LDI R17,0
6E E000 LDI R16,0
6F BF0B OUT 0x3B,R16
70 3AED CPI R30,0xAD
71 07F1 CPC R31,R17
72 F021 BEQ 0x0077
73 95C8 LPM
74 9631 ADIW R30,1
75 920D ST R0,X+
76 CFF9 RJMP 0x0070
77 940E 00AA CALL _main
_exit:
79 CFFF RJMP _exit
_delay:
i --> R10
j --> R12
ms --> R16
7A 940E 0138 CALL push_xgset003C
FILE: D:\Proteus\Proteus练习\03液晶1602\程序\lesson6.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #pragma data:code
(0006) const uchar table[]="I LIKE AVR !";
(0007) const uchar table1[]="WWW.TXMCU.COM";
(0008) const uchar table2[]="I am gonna to " ;
(0009) const uchar table3[]="work as hard as ";
(0010) const uchar table4[]="i can, and see ";
(0011) const uchar table5[]="what happen !";
(0012) void delay(uint ms)
(0013) {
(0014) uint i,j;
(0015) for(i=0;i<ms;i++)
7C 24AA CLR R10
7D 24BB CLR R11
7E C00E RJMP 0x008D
(0016) {
(0017) for(j=0;j<1141;j++);
7F 24CC CLR R12
80 24DD CLR R13
81 C003 RJMP 0x0085
82 01C6 MOVW R24,R12
83 9601 ADIW R24,1
84 016C MOVW R12,R24
85 01C6 MOVW R24,R12
86 3785 CPI R24,0x75
87 E0E4 LDI R30,4
88 079E CPC R25,R30
89 F3C0 BCS 0x0082
8A 01C5 MOVW R24,R10
8B 9601 ADIW R24,1
8C 015C MOVW R10,R24
8D 16A0 CP R10,R16
8E 06B1 CPC R11,R17
8F F378 BCS 0x007F
90 940C 012D JMP pop_xgset003C
_write_com:
com --> R10
92 92AA ST R10,-Y
93 2EA0 MOV R10,R16
(0018) }
(0019) }
(0020) void write_com(uchar com)
(0021) {
(0022) PORTD&=~BIT(4);
94 9894 CBI 0x12,4
(0023) PORTD&=~BIT(5);
95 9895 CBI 0x12,5
(0024) PORTB=com;
96 BAA8 OUT 0x18,R10
(0025) PORTD|=BIT(6);
97 9A96 SBI 0x12,6
(0026) delay(1);
98 E001 LDI R16,1
99 E010 LDI R17,0
9A DFDF RCALL _delay
(0027) PORTD&=~BIT(6);
9B 9896 CBI 0x12,6
9C 90A9 LD R10,Y+
9D 9508 RET
_write_dat:
dat --> R10
9E 92AA ST R10,-Y
9F 2EA0 MOV R10,R16
(0028) }
(0029)
(0030) void write_dat(uchar dat)
(0031) {
(0032) PORTD|=BIT(4);
A0 9A94 SBI 0x12,4
(0033) PORTD&=~BIT(5);
A1 9895 CBI 0x12,5
(0034) PORTB=dat;
A2 BAA8 OUT 0x18,R10
(0035) PORTD|=BIT(6);
A3 9A96 SBI 0x12,6
(0036) delay(1);
A4 E001 LDI R16,1
A5 E010 LDI R17,0
A6 DFD3 RCALL _delay
(0037) PORTD&=~BIT(6);
A7 9896 CBI 0x12,6
A8 90A9 LD R10,Y+
A9 9508 RET
(0038)
(0039) }
(0040) void main()
(0041) {
(0042) uchar i;
(0043) DDRB=0XFF;
_main:
i --> R10
AA EF8F LDI R24,0xFF
AB BB87 OUT 0x17,R24
(0044) DDRD|=BIT(4)|BIT(5)|BIT(6);
AC B381 IN R24,0x11
AD 6780 ORI R24,0x70
AE BB81 OUT 0x11,R24
(0045) PORTD&=~BIT(6);
AF 9896 CBI 0x12,6
(0046)
(0047) write_com(0X38); //设置16*2显示 ,5*7点阵,8位数据接口
B0 E308 LDI R16,0x38
B1 DFE0 RCALL _write_com
(0048) delay(5);
B2 E005 LDI R16,5
B3 E010 LDI R17,0
B4 DFC5 RCALL _delay
B5 C075 RJMP 0x012B
(0049) while(1)
(0050) {
(0051) write_com(0X01); //显示清屏
B6 E001 LDI R16,1
B7 DFDA RCALL _write_com
(0052) delay(5);
B8 E005 LDI R16,5
B9 E010 LDI R17,0
BA DFBF RCALL _delay
(0053) write_com(0X0C); //显示开关,光标设置
BB E00C LDI R16,0xC
BC DFD5 RCALL _write_com
(0054) delay(5);
BD E005 LDI R16,5
BE E010 LDI R17,0
BF DFBA RCALL _delay
(0055) write_com(0X06);//显示开关,光标设置
C0 E006 LDI R16,6
C1 DFD0 RCALL _write_com
(0056) delay(5);
C2 E005 LDI R16,5
C3 E010 LDI R17,0
C4 DFB5 RCALL _delay
(0057) write_com(0X80+0X00);// 数据指针设置
C5 E800 LDI R16,0x80
C6 DFCB RCALL _write_com
(0058) delay(5);
C7 E005 LDI R16,5
C8 E010 LDI R17,0
C9 DFB0 RCALL _delay
(0059)
(0060) for(i=0;i<16;i++)
CA 24AA CLR R10
CB C009 RJMP 0x00D5
(0061) {
(0062) write_dat(table2[i]);
CC E68F LDI R24,0x6F
CD E090 LDI R25,0
CE 2DEA MOV R30,R10
CF 27FF CLR R31
D0 0FE8 ADD R30,R24
D1 1FF9 ADC R31,R25
D2 9104 LPM R16,0(Z)
D3 DFCA RCALL _write_dat
D4 94A3 INC R10
D5 2D8A MOV R24,R10
D6 3180 CPI R24,0x10
D7 F3A0 BCS 0x00CC
(0063)
(0064) }
(0065) write_com(0X80+0X40);
D8 EC00 LDI R16,0xC0
D9 DFB8 RCALL _write_com
(0066) delay(5);
DA E005 LDI R16,5
DB E010 LDI R17,0
DC DF9D RCALL _delay
(0067) for(i=0;i<16;i++)
DD 24AA CLR R10
DE C009 RJMP 0x00E8
(0068) {
(0069) write_dat(table3[i]);
DF E78E LDI R24,0x7E
E0 E090 LDI R25,0
E1 2DEA MOV R30,R10
E2 27FF CLR R31
E3 0FE8 ADD R30,R24
E4 1FF9 ADC R31,R25
E5 9104 LPM R16,0(Z)
E6 DFB7 RCALL _write_dat
E7 94A3 INC R10
E8 2D8A MOV R24,R10
E9 3180 CPI R24,0x10
EA F3A0 BCS 0x00DF
(0070)
(0071) }
(0072) delay(1000);
EB EE08 LDI R16,0xE8
EC E013 LDI R17,3
ED DF8C RCALL _delay
(0073) write_com(0X01); //显示清屏
EE E001 LDI R16,1
EF DFA2 RCALL _write_com
(0074) delay(5);
F0 E005 LDI R16,5
F1 E010 LDI R17,0
F2 DF87 RCALL _delay
(0075) write_com(0X01); //显示清屏
F3 E001 LDI R16,1
F4 DF9D RCALL _write_com
(0076) delay(5);
F5 E005 LDI R16,5
F6 E010 LDI R17,0
F7 DF82 RCALL _delay
(0077) write_com(0X0C); //显示开关,光标设置
F8 E00C LDI R16,0xC
F9 DF98 RCALL _write_com
(0078) delay(5);
FA E005 LDI R16,5
FB E010 LDI R17,0
FC DF7D RCALL _delay
(0079) write_com(0X06);//显示开关,光标设置
FD E006 LDI R16,6
FE DF93 RCALL _write_com
(0080) delay(5);
FF E005 LDI R16,5
100 E010 LDI R17,0
101 DF78 RCALL _delay
(0081)
(0082) write_com(0X80+0X00);// 数据指针设置
102 E800 LDI R16,0x80
103 DF8E RCALL _write_com
(0083) delay(5);
104 E005 LDI R16,5
105 E010 LDI R17,0
106 DF73 RCALL _delay
(0084)
(0085) for(i=0;i<16;i++)
107 24AA CLR R10
108 C009 RJMP 0x0112
(0086) {
(0087) write_dat(table4[i]);
109 E88F LDI R24,0x8F
10A E090 LDI R25,0
10B 2DEA MOV R30,R10
10C 27FF CLR R31
10D 0FE8 ADD R30,R24
10E 1FF9 ADC R31,R25
10F 9104 LPM R16,0(Z)
110 DF8D RCALL _write_dat
111 94A3 INC R10
112 2D8A MOV R24,R10
113 3180 CPI R24,0x10
114 F3A0 BCS 0x0109
(0088)
(0089) }
(0090) write_com(0X80+0X40);
115 EC00 LDI R16,0xC0
116 DF7B RCALL _write_com
(0091) delay(5);
117 E005 LDI R16,5
118 E010 LDI R17,0
119 DF60 RCALL _delay
(0092) for(i=0;i<14;i++)
11A 24AA CLR R10
11B C009 RJMP 0x0125
(0093) {
(0094) write_dat(table5[i]);
11C E98F LDI R24,0x9F
11D E090 LDI R25,0
11E 2DEA MOV R30,R10
11F 27FF CLR R31
120 0FE8 ADD R30,R24
121 1FF9 ADC R31,R25
122 9104 LPM R16,0(Z)
123 DF7A RCALL _write_dat
124 94A3 INC R10
125 2D8A MOV R24,R10
126 308E CPI R24,0xE
127 F3A0 BCS 0x011C
(0095)
(0096) }
(0097) delay(1000);
FILE: <library>
128 EE08 LDI R16,0xE8
129 E013 LDI R17,3
12A DF4F RCALL _delay
12B CF8A RJMP 0x00B6
12C 9508 RET
pop_xgset003C:
12D 90A9 LD R10,Y+
12E 90B9 LD R11,Y+
12F 90C9 LD R12,Y+
130 90D9 LD R13,Y+
131 9508 RET
push_xgsetF0FC:
132 937A ST R23,-Y
133 936A ST R22,-Y
push_xgset30FC:
134 935A ST R21,-Y
135 934A ST R20,-Y
push_xgset00FC:
136 92FA ST R15,-Y
137 92EA ST R14,-Y
push_xgset003C:
138 92DA ST R13,-Y
139 92CA ST R12,-Y
13A 92BA ST R11,-Y
13B 92AA ST R10,-Y
13C 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -