📄 lcd12864.lss
字号:
lcd12864.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000001e2 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 000001e2 00000276 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00800060 000001e2 00000276 2**0
ALLOC
3 .noinit 00000000 00800060 00800060 00000276 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000276 2**0
CONTENTS
5 .debug_aranges 00000014 00000000 00000000 00000276 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 000000a9 00000000 00000000 0000028a 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 0000025b 00000000 00000000 00000333 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 000000dc 00000000 00000000 0000058e 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 000002f8 00000000 00000000 0000066a 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_str 000000df 00000000 00000000 00000962 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26
2: 2b c0 rjmp .+86 ; 0x5a
4: 2a c0 rjmp .+84 ; 0x5a
6: 29 c0 rjmp .+82 ; 0x5a
8: 28 c0 rjmp .+80 ; 0x5a
a: 27 c0 rjmp .+78 ; 0x5a
c: 26 c0 rjmp .+76 ; 0x5a
e: 25 c0 rjmp .+74 ; 0x5a
10: 24 c0 rjmp .+72 ; 0x5a
12: 23 c0 rjmp .+70 ; 0x5a
14: 22 c0 rjmp .+68 ; 0x5a
16: 21 c0 rjmp .+66 ; 0x5a
18: 20 c0 rjmp .+64 ; 0x5a
1a: 1f c0 rjmp .+62 ; 0x5a
1c: 1e c0 rjmp .+60 ; 0x5a
1e: 1d c0 rjmp .+58 ; 0x5a
20: 1c c0 rjmp .+56 ; 0x5a
22: 1b c0 rjmp .+54 ; 0x5a
24: 1a c0 rjmp .+52 ; 0x5a
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: e2 ee ldi r30, 0xE2 ; 226
3a: f1 e0 ldi r31, 0x01 ; 1
3c: 02 c0 rjmp .+4 ; 0x42
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
00000042 <.do_copy_data_start>:
42: a0 36 cpi r26, 0x60 ; 96
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e
00000048 <__do_clear_bss>:
48: 10 e0 ldi r17, 0x00 ; 0
4a: a0 e6 ldi r26, 0x60 ; 96
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
00000052 <.do_clear_bss_start>:
52: a0 36 cpi r26, 0x60 ; 96
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50
58: ae c0 rjmp .+348 ; 0x1b6
0000005a <__bad_interrupt>:
5a: d2 cf rjmp .-92 ; 0x0
0000005c <init>:
}
void init()
{
PORTB=0xff;
5c: 8f ef ldi r24, 0xFF ; 255
5e: 88 bb out 0x18, r24 ; 24
DDRB=0xff;
60: 87 bb out 0x17, r24 ; 23
PORTC=0xff;
62: 85 bb out 0x15, r24 ; 21
DDRC=0xff;
64: 84 bb out 0x14, r24 ; 20
PORTD=0xff;
66: 82 bb out 0x12, r24 ; 18
DDRD=0xff;
68: 81 bb out 0x11, r24 ; 17
6a: 08 95 ret
0000006c <getState>:
}
uchar getState()
{
PORTB=0xff;
6c: 8f ef ldi r24, 0xFF ; 255
6e: 88 bb out 0x18, r24 ; 24
DDRB=0x0;
70: 17 ba out 0x17, r1 ; 23
clrbit(CTRL,CS1);
72: aa 98 cbi 0x15, 2 ; 21
clrbit(CTRL,CS2);
74: ab 98 cbi 0x15, 3 ; 21
clrbit(CTRL,RS);
76: a8 98 cbi 0x15, 0 ; 21
setbit(CTRL,RW);
78: a9 9a sbi 0x15, 1 ; 21
setbit(CTRL,E); //下降沿
7a: ac 9a sbi 0x15, 4 ; 21
clrbit(CTRL,E);
7c: ac 98 cbi 0x15, 4 ; 21
return PINB;
7e: 86 b3 in r24, 0x16 ; 22
}
80: 99 27 eor r25, r25
82: 08 95 ret
00000084 <lcdBusy>:
bool lcdBusy()
{
uchar state=0;
state=getState();
84: f3 df rcall .-26 ; 0x6c
if(state&0x80)
{ //BUSY
return true;
86: 99 27 eor r25, r25
88: 87 fd sbrc r24, 7
8a: 90 95 com r25
}
else
{ //idle
return false;
}
}
8c: 88 27 eor r24, r24
8e: 99 0f add r25, r25
90: 88 1f adc r24, r24
92: 99 27 eor r25, r25
94: 08 95 ret
00000096 <lcdCommand>:
void lcdCommand(uchar command)
{
96: 98 2f mov r25, r24
DDRB=0xff;
98: 8f ef ldi r24, 0xFF ; 255
9a: 87 bb out 0x17, r24 ; 23
clrbit(CTRL,CS1);
9c: aa 98 cbi 0x15, 2 ; 21
clrbit(CTRL,CS2);
9e: ab 98 cbi 0x15, 3 ; 21
clrbit(CTRL,RS);
a0: a8 98 cbi 0x15, 0 ; 21
clrbit(CTRL,RW);
a2: a9 98 cbi 0x15, 1 ; 21
DATA=command;
a4: 98 bb out 0x18, r25 ; 24
setbit(CTRL,E); //下降沿
a6: ac 9a sbi 0x15, 4 ; 21
clrbit(CTRL,E);
a8: ac 98 cbi 0x15, 4 ; 21
aa: 08 95 ret
000000ac <lcdSetRow>:
}
void lcdOpen()
{
while(lcdBusy());
lcdCommand(0x3f);
}
void lcdStartLine(uchar line)
{
line|=0xc0;
while(lcdBusy());
lcdCommand(line);
}
void lcdSetPage(uchar page)
{
page&=0x7;
page|=0xb8;
while(lcdBusy());
lcdCommand(page);
}
void lcdSetRow(uchar row)
{ //设置列地址
ac: cf 93 push r28
row&=0x3f;
ae: c8 2f mov r28, r24
b0: cf 73 andi r28, 0x3F ; 63
row|=0x40;
b2: c0 64 ori r28, 0x40 ; 64
while(lcdBusy());
b4: e7 df rcall .-50 ; 0x84
b6: 88 23 and r24, r24
b8: e9 f7 brne .-6 ; 0xb4
lcdCommand(row);
ba: 8c 2f mov r24, r28
bc: ec df rcall .-40 ; 0x96
be: cf 91 pop r28
c0: 08 95 ret
000000c2 <lcdSetPage>:
c2: cf 93 push r28
c4: c8 2f mov r28, r24
c6: c7 70 andi r28, 0x07 ; 7
c8: c8 6b ori r28, 0xB8 ; 184
ca: dc df rcall .-72 ; 0x84
cc: 88 23 and r24, r24
ce: e9 f7 brne .-6 ; 0xca
d0: 8c 2f mov r24, r28
d2: e1 df rcall .-62 ; 0x96
d4: cf 91 pop r28
d6: 08 95 ret
000000d8 <lcdStartLine>:
d8: cf 93 push r28
da: c8 2f mov r28, r24
dc: c0 6c ori r28, 0xC0 ; 192
de: d2 df rcall .-92 ; 0x84
e0: 88 23 and r24, r24
e2: e9 f7 brne .-6 ; 0xde
e4: 8c 2f mov r24, r28
e6: d7 df rcall .-82 ; 0x96
e8: cf 91 pop r28
ea: 08 95 ret
000000ec <lcdOpen>:
ec: cb df rcall .-106 ; 0x84
ee: 88 23 and r24, r24
f0: e9 f7 brne .-6 ; 0xec
f2: 8f e3 ldi r24, 0x3F ; 63
f4: d0 df rcall .-96 ; 0x96
f6: 08 95 ret
000000f8 <lcdWrite>:
}
void lcdWrite(uchar dat,uchar cs)
{ //写显示数据
f8: 1f 93 push r17
fa: cf 93 push r28
fc: 18 2f mov r17, r24
fe: c6 2f mov r28, r22
while(lcdBusy());
100: c1 df rcall .-126 ; 0x84
102: 88 23 and r24, r24
104: e9 f7 brne .-6 ; 0x100
DDRB=0xff;
106: 8f ef ldi r24, 0xFF ; 255
108: 87 bb out 0x17, r24 ; 23
if(cs==1)
10a: c1 30 cpi r28, 0x01 ; 1
10c: 19 f4 brne .+6 ; 0x114
{ //选择左半屏
clrbit(CTRL,CS1);
10e: aa 98 cbi 0x15, 2 ; 21
setbit(CTRL,CS2);
110: ab 9a sbi 0x15, 3 ; 21
112: 02 c0 rjmp .+4 ; 0x118
}
else
{ //选择右半屏
clrbit(CTRL,CS2);
114: ab 98 cbi 0x15, 3 ; 21
setbit(CTRL,CS1);
116: aa 9a sbi 0x15, 2 ; 21
}
setbit(CTRL,RS);
118: a8 9a sbi 0x15, 0 ; 21
clrbit(CTRL,RW);
11a: a9 98 cbi 0x15, 1 ; 21
DATA=dat;
11c: 18 bb out 0x18, r17 ; 24
setbit(CTRL,E); //下降沿
11e: ac 9a sbi 0x15, 4 ; 21
clrbit(CTRL,E);
120: ac 98 cbi 0x15, 4 ; 21
122: cf 91 pop r28
124: 1f 91 pop r17
126: 08 95 ret
00000128 <lcdRead>:
}
uchar lcdRead(uchar cs)
{ //读数据
128: cf 93 push r28
12a: c8 2f mov r28, r24
uchar dat;
while(lcdBusy());
12c: ab df rcall .-170 ; 0x84
12e: 88 23 and r24, r24
130: e9 f7 brne .-6 ; 0x12c
DDRB=0x00;
132: 87 bb out 0x17, r24 ; 23
PORTB=0xff;
134: 8f ef ldi r24, 0xFF ; 255
136: 88 bb out 0x18, r24 ; 24
if(cs==1)
138: c1 30 cpi r28, 0x01 ; 1
13a: 19 f4 brne .+6 ; 0x142
{ //选择左半屏
clrbit(CTRL,CS1);
13c: aa 98 cbi 0x15, 2 ; 21
setbit(CTRL,CS2);
13e: ab 9a sbi 0x15, 3 ; 21
140: 02 c0 rjmp .+4 ; 0x146
}
else
{ //选择右半屏
clrbit(CTRL,CS2);
142: ab 98 cbi 0x15, 3 ; 21
setbit(CTRL,CS1);
144: aa 9a sbi 0x15, 2 ; 21
}
setbit(CTRL,RS);
146: a8 9a sbi 0x15, 0 ; 21
setbit(CTRL,RW);
148: a9 9a sbi 0x15, 1 ; 21
setbit(CTRL,E); //下降沿
14a: ac 9a sbi 0x15, 4 ; 21
clrbit(CTRL,E);
14c: ac 98 cbi 0x15, 4 ; 21
setbit(CTRL,E); //高
14e: ac 9a sbi 0x15, 4 ; 21
dat=PINB;
150: 86 b3 in r24, 0x16 ; 22
return dat;
}
152: 99 27 eor r25, r25
154: cf 91 pop r28
156: 08 95 ret
00000158 <pixel>:
void pixel(uchar x,uchar y)
{
158: ff 92 push r15
15a: 0f 93 push r16
15c: 1f 93 push r17
15e: cf 93 push r28
160: c8 2f mov r28, r24
uchar page,dX,dY;
uchar cs=2;
162: 42 e0 ldi r20, 0x02 ; 2
164: f4 2e mov r15, r20
uchar dot=0;
if(x>=64)
166: 80 34 cpi r24, 0x40 ; 64
168: 10 f0 brcs .+4 ; 0x16e
{
x-=64;
16a: c0 54 subi r28, 0x40 ; 64
16c: 02 c0 rjmp .+4 ; 0x172
}
else
{
cs=1;
16e: 31 e0 ldi r19, 0x01 ; 1
170: f3 2e mov r15, r19
}
dX=x; //算出x坐标
page=y/8; //算出页号
172: 06 2f mov r16, r22
174: 06 95 lsr r16
176: 06 95 lsr r16
178: 06 95 lsr r16
dY=y%8; //算出y坐标
17a: 16 2f mov r17, r22
17c: 17 70 andi r17, 0x07 ; 7
lcdSetPage(page);
17e: 80 2f mov r24, r16
180: a0 df rcall .-192 ; 0xc2
lcdSetRow(dX);
182: 8c 2f mov r24, r28
184: 93 df rcall .-218 ; 0xac
dot=lcdRead(cs);
186: 8f 2d mov r24, r15
188: cf df rcall .-98 ; 0x128
clrbit(dot,dY);
18a: 21 e0 ldi r18, 0x01 ; 1
18c: 30 e0 ldi r19, 0x00 ; 0
18e: 02 c0 rjmp .+4 ; 0x194
190: 22 0f add r18, r18
192: 33 1f adc r19, r19
194: 1a 95 dec r17
196: e2 f7 brpl .-8 ; 0x190
198: 12 2f mov r17, r18
19a: 10 95 com r17
19c: 18 23 and r17, r24
lcdSetPage(page);
19e: 80 2f mov r24, r16
1a0: 90 df rcall .-224 ; 0xc2
lcdSetRow(dX);
1a2: 8c 2f mov r24, r28
1a4: 83 df rcall .-250 ; 0xac
lcdWrite(dot,cs);
1a6: 6f 2d mov r22, r15
1a8: 81 2f mov r24, r17
1aa: a6 df rcall .-180 ; 0xf8
1ac: cf 91 pop r28
1ae: 1f 91 pop r17
1b0: 0f 91 pop r16
1b2: ff 90 pop r15
1b4: 08 95 ret
000001b6 <main>:
1b6: cf e5 ldi r28, 0x5F ; 95
1b8: d4 e0 ldi r29, 0x04 ; 4
1ba: de bf out 0x3e, r29 ; 62
1bc: cd bf out 0x3d, r28 ; 61
1be: 4e df rcall .-356 ; 0x5c
1c0: 95 df rcall .-214 ; 0xec
1c2: 80 e0 ldi r24, 0x00 ; 0
1c4: 89 df rcall .-238 ; 0xd8
1c6: 80 e0 ldi r24, 0x00 ; 0
1c8: 7c df rcall .-264 ; 0xc2
1ca: 80 e0 ldi r24, 0x00 ; 0
1cc: 6f df rcall .-290 ; 0xac
1ce: 6e e1 ldi r22, 0x1E ; 30
1d0: 86 2f mov r24, r22
1d2: c2 df rcall .-124 ; 0x158
1d4: 62 e3 ldi r22, 0x32 ; 50
1d6: 84 e6 ldi r24, 0x64 ; 100
1d8: bf df rcall .-130 ; 0x158
1da: 68 e2 ldi r22, 0x28 ; 40
1dc: 8f e0 ldi r24, 0x0F ; 15
1de: bc df rcall .-136 ; 0x158
1e0: ff cf rjmp .-2 ; 0x1e0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -