?? lcdtest.lss
字號:
lcdtest.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000444 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000007c 00800060 00000444 000004b8 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .stab 000011c4 00000000 00000000 00000534 2**2
CONTENTS, READONLY, DEBUGGING
3 .stabstr 0000093d 00000000 00000000 000016f8 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 ; 0x54 <__ctors_end>
4: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
8: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
10: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
14: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
18: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
1c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
20: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
24: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
28: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
2c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
30: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
34: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
38: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
3c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
40: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
44: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
48: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
4c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
50: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61
00000060 <__do_copy_data>:
60: 10 e0 ldi r17, 0x00 ; 0
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: e4 e4 ldi r30, 0x44 ; 68
68: f4 e0 ldi r31, 0x04 ; 4
6a: 02 c0 rjmp .+4 ; 0x70 <.do_copy_data_start>
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: ac 3d cpi r26, 0xDC ; 220
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: ac ed ldi r26, 0xDC ; 220
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start>
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: ac 3d cpi r26, 0xDC ; 220
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 93 00 call 0x126 ; 0x126 <main>
8a: 0c 94 20 02 jmp 0x440 ; 0x440 <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000092 <DelayMs>:
//外部中斷 0
#ifndef CP_F
#define CP_F 8
#endif
void DelayMs(uint t)
{
92: 20 e0 ldi r18, 0x00 ; 0
94: 30 e0 ldi r19, 0x00 ; 0
milliseconds can be achieved.
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
96: 40 ed ldi r20, 0xD0 ; 208
98: 57 e0 ldi r21, 0x07 ; 7
9a: 05 c0 rjmp .+10 ; 0xa6 <DelayMs+0x14>
9c: fa 01 movw r30, r20
9e: 31 97 sbiw r30, 0x01 ; 1
a0: f1 f7 brne .-4 ; 0x9e <DelayMs+0xc>
uint i;
for(i=0;i<t;i++)
a2: 2f 5f subi r18, 0xFF ; 255
a4: 3f 4f sbci r19, 0xFF ; 255
a6: 28 17 cp r18, r24
a8: 39 07 cpc r19, r25
aa: c0 f3 brcs .-16 ; 0x9c <DelayMs+0xa>
_delay_loop_2(CP_F * 250);
}
ac: 08 95 ret
000000ae <display_number>:
void display_number(uchar num,uchar hex)
{
ae: 0f 93 push r16
b0: 1f 93 push r17
b2: 08 2f mov r16, r24
b4: 16 2f mov r17, r22
LCDClear();
b6: 60 e0 ldi r22, 0x00 ; 0
b8: 81 e0 ldi r24, 0x01 ; 1
ba: 0e 94 32 01 call 0x264 ; 0x264 <LCDByte>
if(hex==0)
be: 11 23 and r17, r17
c0: b1 f4 brne .+44 ; 0xee <display_number+0x40>
{
LCDWriteString("now you input:");
c2: 80 e6 ldi r24, 0x60 ; 96
c4: 90 e0 ldi r25, 0x00 ; 0
c6: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
LCDWriteIntXY(2,1,num,3);
ca: 61 e0 ldi r22, 0x01 ; 1
cc: 82 e0 ldi r24, 0x02 ; 2
ce: 0e 94 c5 01 call 0x38a ; 0x38a <LCDGotoXY>
d2: 63 e0 ldi r22, 0x03 ; 3
d4: 70 e0 ldi r23, 0x00 ; 0
d6: 80 2f mov r24, r16
d8: 90 e0 ldi r25, 0x00 ; 0
da: 0e 94 68 01 call 0x2d0 ; 0x2d0 <LCDWriteInt>
LCDWriteStringXY(5,1,"continus?");
de: 61 e0 ldi r22, 0x01 ; 1
e0: 85 e0 ldi r24, 0x05 ; 5
e2: 0e 94 c5 01 call 0x38a ; 0x38a <LCDGotoXY>
e6: 8f e6 ldi r24, 0x6F ; 111
e8: 90 e0 ldi r25, 0x00 ; 0
ea: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
}
else
{
}
}
ee: 1f 91 pop r17
f0: 0f 91 pop r16
f2: 08 95 ret
000000f4 <key_process>:
{
// unsigned char time,i;
uchar key_num,temp_num;
//if(bit_is_set(PINA,7))
if(PINA&0x80)
f4: cf 9b sbis 0x19, 7 ; 25
f6: 16 c0 rjmp .+44 ; 0x124 <key_process+0x30>
{
key_num=(PINB&0x0f);
f8: 86 b3 in r24, 0x16 ; 22
can be achieved.
*/
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
fa: 91 e0 ldi r25, 0x01 ; 1
fc: 9a 95 dec r25
fe: f1 f7 brne .-4 ; 0xfc <key_process+0x8>
temp_num=key_num;
_delay_us(0.3);
//time=0;
if((key_num=(PINB&0x0f))==temp_num)
100: 96 b3 in r25, 0x16 ; 22
102: 9f 70 andi r25, 0x0F ; 15
104: 8f 70 andi r24, 0x0F ; 15
106: 98 17 cp r25, r24
108: 29 f4 brne .+10 ; 0x114 <key_process+0x20>
{
// PORTC=key_num;
display_number(key_num,0);
10a: 60 e0 ldi r22, 0x00 ; 0
10c: 89 2f mov r24, r25
10e: 0e 94 57 00 call 0xae ; 0xae <display_number>
112: 08 95 ret
}
else
{
LCDClear();
114: 60 e0 ldi r22, 0x00 ; 0
116: 81 e0 ldi r24, 0x01 ; 1
118: 0e 94 32 01 call 0x264 ; 0x264 <LCDByte>
LCDWriteString("....wait you...");
11c: 89 e7 ldi r24, 0x79 ; 121
11e: 90 e0 ldi r25, 0x00 ; 0
120: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
124: 08 95 ret
00000126 <main>:
}
void main()
{
126: ef 92 push r14
128: ff 92 push r15
12a: 0f 93 push r16
12c: 1f 93 push r17
12e: cf 93 push r28
130: df 93 push r29
unsigned char i;
//Initialize LCD module
InitLCD(LS_BLINK|LS_ULINE);
132: 83 e0 ldi r24, 0x03 ; 3
134: 0e 94 ce 01 call 0x39c ; 0x39c <InitLCD>
//Clear the screen
LCDClear();
138: 60 e0 ldi r22, 0x00 ; 0
13a: 81 e0 ldi r24, 0x01 ; 1
13c: 0e 94 32 01 call 0x264 ; 0x264 <LCDByte>
//Simple string printing
LCDWriteString("ready config ");
140: 89 e8 ldi r24, 0x89 ; 137
142: 90 e0 ldi r25, 0x00 ; 0
144: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
//A string on line 2
LCDWriteStringXY(0,1,"Loading ");
148: 61 e0 ldi r22, 0x01 ; 1
14a: 80 e0 ldi r24, 0x00 ; 0
14c: 0e 94 c5 01 call 0x38a ; 0x38a <LCDGotoXY>
150: 87 e9 ldi r24, 0x97 ; 151
152: 90 e0 ldi r25, 0x00 ; 0
154: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
158: c0 e0 ldi r28, 0x00 ; 0
15a: d0 e0 ldi r29, 0x00 ; 0
milliseconds can be achieved.
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
15c: 00 e0 ldi r16, 0x00 ; 0
15e: 10 e0 ldi r17, 0x00 ; 0
//Print some numbers
for (i=0;i<10;i+=1)
{
LCDWriteIntXY(9,1,i,3);
160: 61 e0 ldi r22, 0x01 ; 1
162: 89 e0 ldi r24, 0x09 ; 9
164: 0e 94 c5 01 call 0x38a ; 0x38a <LCDGotoXY>
168: 63 e0 ldi r22, 0x03 ; 3
16a: 70 e0 ldi r23, 0x00 ; 0
16c: ce 01 movw r24, r28
16e: 0e 94 68 01 call 0x2d0 ; 0x2d0 <LCDWriteInt>
LCDWriteStringXY(12,1,"%");
172: 61 e0 ldi r22, 0x01 ; 1
174: 8c e0 ldi r24, 0x0C ; 12
176: 0e 94 c5 01 call 0x38a ; 0x38a <LCDGotoXY>
17a: 80 ea ldi r24, 0xA0 ; 160
17c: 90 e0 ldi r25, 0x00 ; 0
17e: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
182: ee 24 eor r14, r14
184: ff 24 eor r15, r15
186: c8 01 movw r24, r16
188: 01 97 sbiw r24, 0x01 ; 1
18a: f1 f7 brne .-4 ; 0x188 <main+0x62>
18c: c8 01 movw r24, r16
18e: 01 97 sbiw r24, 0x01 ; 1
190: f1 f7 brne .-4 ; 0x18e <main+0x68>
192: c8 01 movw r24, r16
194: 01 97 sbiw r24, 0x01 ; 1
196: f1 f7 brne .-4 ; 0x194 <main+0x6e>
198: c8 01 movw r24, r16
19a: 01 97 sbiw r24, 0x01 ; 1
19c: f1 f7 brne .-4 ; 0x19a <main+0x74>
19e: 21 96 adiw r28, 0x01 ; 1
//A string on line 2
LCDWriteStringXY(0,1,"Loading ");
//Print some numbers
for (i=0;i<10;i+=1)
1a0: ca 30 cpi r28, 0x0A ; 10
1a2: d1 05 cpc r29, r1
1a4: e9 f6 brne .-70 ; 0x160 <main+0x3a>
}
//Clear the screen
LCDClear();
1a6: 60 e0 ldi r22, 0x00 ; 0
1a8: 81 e0 ldi r24, 0x01 ; 1
1aa: 0e 94 32 01 call 0x264 ; 0x264 <LCDByte>
//Some more text
LCDWriteString("Hello everyone");
1ae: 82 ea ldi r24, 0xA2 ; 162
1b0: 90 e0 ldi r25, 0x00 ; 0
1b2: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
LCDWriteStringXY(0,1,"sign you name "); // <--- Write ur NAME HERE !!!!!!!!!!!
1b6: 61 e0 ldi r22, 0x01 ; 1
1b8: 80 e0 ldi r24, 0x00 ; 0
1ba: 0e 94 c5 01 call 0x38a ; 0x38a <LCDGotoXY>
1be: 81 eb ldi r24, 0xB1 ; 177
1c0: 90 e0 ldi r25, 0x00 ; 0
1c2: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
1c6: c7 01 movw r24, r14
1c8: 01 97 sbiw r24, 0x01 ; 1
1ca: f1 f7 brne .-4 ; 0x1c8 <main+0xa2>
1cc: c7 01 movw r24, r14
1ce: 01 97 sbiw r24, 0x01 ; 1
1d0: f1 f7 brne .-4 ; 0x1ce <main+0xa8>
1d2: c7 01 movw r24, r14
1d4: 01 97 sbiw r24, 0x01 ; 1
1d6: f1 f7 brne .-4 ; 0x1d4 <main+0xae>
//Wait
for(i=0;i<3;i++) _delay_loop_2(0);
//Some More ......
LCDClear();
1d8: 60 e0 ldi r22, 0x00 ; 0
1da: 81 e0 ldi r24, 0x01 ; 1
1dc: 0e 94 32 01 call 0x264 ; 0x264 <LCDByte>
LCDWriteString("@welcome to@");
1e0: 80 ec ldi r24, 0xC0 ; 192
1e2: 90 e0 ldi r25, 0x00 ; 0
1e4: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
LCDWriteStringXY(0,1,"fenggang space");
1e8: 61 e0 ldi r22, 0x01 ; 1
1ea: 80 e0 ldi r24, 0x00 ; 0
1ec: 0e 94 c5 01 call 0x38a ; 0x38a <LCDGotoXY>
1f0: 8d ec ldi r24, 0xCD ; 205
1f2: 90 e0 ldi r25, 0x00 ; 0
1f4: 0e 94 5a 01 call 0x2b4 ; 0x2b4 <LCDWriteString>
#undef __DOXYGEN__
#endif
sei(); //總中斷允許
*/
DDRA|=0x00; //定義為輸入引腳
1f8: 8a b3 in r24, 0x1a ; 26
1fa: 8a bb out 0x1a, r24 ; 26
PORTA=_BV(PA7);
1fc: 80 e8 ldi r24, 0x80 ; 128
1fe: 8b bb out 0x1b, r24 ; 27
DDRB|=0x00; //定義為輸入引腳
200: 87 b3 in r24, 0x17 ; 23
202: 87 bb out 0x17, r24 ; 23
PORTB=_BV(PB0)|_BV(PB1)|_BV(PB2)|_BV(PB3);//鍵盤引腳上拉電阻開
204: 8f e0 ldi r24, 0x0F ; 15
206: 88 bb out 0x18, r24 ; 24
while(1)
{
key_process();
208: 0e 94 7a 00 call 0xf4 ; 0xf4 <key_process>
20c: fd cf rjmp .-6 ; 0x208 <main+0xe2>
0000020e <LCDBusyLoop>:
//This function waits till lcd is BUSY
uint8_t busy,status=0x00,temp;
//Change Port to input type because we are reading data
LCD_DATA_DDR&=0xF0;
20e: 84 b3 in r24, 0x14 ; 20
210: 80 7f andi r24, 0xF0 ; 240
212: 84 bb out 0x14, r24 ; 20
//change LCD mode
SET_RW(); //Read mode
214: 95 9a sbi 0x12, 5 ; 18
CLEAR_RS(); //Read status
216: 96 98 cbi 0x12, 6 ; 18
218: 81 e0 ldi r24, 0x01 ; 1
21a: 8a 95 dec r24
21c: f1 f7 brne .-4 ; 0x21a <LCDBusyLoop+0xc>
21e: 21 e0 ldi r18, 0x01 ; 1
220: 32 e0 ldi r19, 0x02 ; 2
do
{
SET_E();
222: 97 9a sbi 0x12, 7 ; 18
224: 82 2f mov r24, r18
226: 8a 95 dec r24
228: f1 f7 brne .-4 ; 0x226 <LCDBusyLoop+0x18>
//Wait tDA for data to become available
_delay_us(0.5);
status=LCD_DATA_PIN;
22a: 83 b3 in r24, 0x13 ; 19
status=status<<4;
22c: 82 95 swap r24
22e: 80 7f andi r24, 0xF0 ; 240
230: 92 2f mov r25, r18
232: 9a 95 dec r25
234: f1 f7 brne .-4 ; 0x232 <LCDBusyLoop+0x24>
_delay_us(0.5);
//Pull E low
CLEAR_E();
236: 97 98 cbi 0x12, 7 ; 18
238: 93 2f mov r25, r19
23a: 9a 95 dec r25
23c: f1 f7 brne .-4 ; 0x23a <LCDBusyLoop+0x2c>
_delay_us(1); //tEL
SET_E();
23e: 97 9a sbi 0x12, 7 ; 18
240: 92 2f mov r25, r18
242: 9a 95 dec r25
244: f1 f7 brne .-4 ; 0x242 <LCDBusyLoop+0x34>
_delay_us(0.5);
temp=LCD_DATA_PIN;
246: 93 b3 in r25, 0x13 ; 19
248: 92 2f mov r25, r18
24a: 9a 95 dec r25
24c: f1 f7 brne .-4 ; 0x24a <LCDBusyLoop+0x3c>
status=status|temp;
busy=status & 0b10000000;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -