📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000002d6 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000012 00800060 000002d6 0000036a 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000004 00800072 00800072 0000037c 2**0
ALLOC
3 .noinit 00000000 00800076 00800076 0000037c 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 0000037c 2**0
CONTENTS
5 .stab 000004a4 00000000 00000000 0000037c 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000584 00000000 00000000 00000820 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54
4: 0c 94 45 00 jmp 0x8a
8: 0c 94 45 00 jmp 0x8a
c: 0c 94 45 00 jmp 0x8a
10: 0c 94 45 00 jmp 0x8a
14: 0c 94 45 00 jmp 0x8a
18: 0c 94 45 00 jmp 0x8a
1c: 0c 94 45 00 jmp 0x8a
20: 0c 94 45 00 jmp 0x8a
24: 0c 94 32 01 jmp 0x264
28: 0c 94 45 00 jmp 0x8a
2c: 0c 94 45 00 jmp 0x8a
30: 0c 94 45 00 jmp 0x8a
34: 0c 94 45 00 jmp 0x8a
38: 0c 94 45 00 jmp 0x8a
3c: 0c 94 45 00 jmp 0x8a
40: 0c 94 45 00 jmp 0x8a
44: 0c 94 45 00 jmp 0x8a
48: 0c 94 45 00 jmp 0x8a
4c: 0c 94 45 00 jmp 0x8a
50: 0c 94 45 00 jmp 0x8a
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: e6 ed ldi r30, 0xD6 ; 214
68: f2 e0 ldi r31, 0x02 ; 2
6a: 02 c0 rjmp .+4 ; 0x70
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: a2 37 cpi r26, 0x72 ; 114
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: a2 e7 ldi r26, 0x72 ; 114
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a6 37 cpi r26, 0x76 ; 118
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e
86: 0c 94 59 01 jmp 0x2b2
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0
0000008e <Keyboard>:
uint8_t ledcode[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7C,0x58,0x5E,0x79,0x71};//定义数组用来表示"0"到"F"
uint8_t Keyboard(void)
{
8e: 9f 92 push r9
90: af 92 push r10
92: bf 92 push r11
94: cf 92 push r12
96: df 92 push r13
98: ef 92 push r14
9a: ff 92 push r15
9c: 0f 93 push r16
9e: 1f 93 push r17
a0: cf 93 push r28
a2: 50 91 70 00 lds r21, 0x0070
a6: 90 90 60 00 lds r9, 0x0060
aa: 90 91 73 00 lds r25, 0x0073
ae: 40 91 72 00 lds r20, 0x0072
b2: a0 90 61 00 lds r10, 0x0061
b6: b0 90 62 00 lds r11, 0x0062
ba: c0 90 63 00 lds r12, 0x0063
be: d0 90 64 00 lds r13, 0x0064
c2: e0 90 65 00 lds r14, 0x0065
c6: f0 90 66 00 lds r15, 0x0066
ca: 00 91 67 00 lds r16, 0x0067
ce: 10 91 68 00 lds r17, 0x0068
d2: c0 91 69 00 lds r28, 0x0069
d6: b0 91 6a 00 lds r27, 0x006A
da: a0 91 6b 00 lds r26, 0x006B
de: f0 91 6c 00 lds r31, 0x006C
e2: e0 91 6d 00 lds r30, 0x006D
e6: 70 91 6e 00 lds r23, 0x006E
ea: 60 91 6f 00 lds r22, 0x006F
static uint8_t ScanCode=0xF7,Time=0,led=0x00,ledcurrent=0x00,ledlast=0x00;
do //键盘扫描
{
switch(ScanCode) //扫描信号
ee: 25 2f mov r18, r21
f0: 33 27 eor r19, r19
f2: 2b 3f cpi r18, 0xFB ; 251
f4: 31 05 cpc r19, r1
f6: 69 f0 breq .+26 ; 0x112
f8: 2c 3f cpi r18, 0xFC ; 252
fa: 31 05 cpc r19, r1
fc: 24 f4 brge .+8 ; 0x106
fe: 27 3f cpi r18, 0xF7 ; 247
100: 31 05 cpc r19, r1
102: 29 f0 breq .+10 ; 0x10e
104: 0a c0 rjmp .+20 ; 0x11a
106: 2d 3f cpi r18, 0xFD ; 253
108: 31 05 cpc r19, r1
10a: 29 f0 breq .+10 ; 0x116
10c: 06 c0 rjmp .+12 ; 0x11a
{
// 扫描信号从0111-1011
case 0XF7: ScanCode=0XFB;break;
10e: 5b ef ldi r21, 0xFB ; 251
110: 05 c0 rjmp .+10 ; 0x11c
// 扫描信号从1011-1101
case 0XFB: ScanCode=0XFD;break;
112: 5d ef ldi r21, 0xFD ; 253
114: 03 c0 rjmp .+6 ; 0x11c
//扫描信号从1101-1110
case 0XFD: ScanCode=0XFE;break;
116: 5e ef ldi r21, 0xFE ; 254
118: 01 c0 rjmp .+2 ; 0x11c
//扫描信号从1110-0111
case 0XFE: ScanCode=0XF7;break;
default: {ScanCode=0XF7;break;}
11a: 57 ef ldi r21, 0xF7 ; 247
}
/*在main()函数里需将DDRC设成0x0F,即PC7~PC4为输入,PC3~PC0为输出。
下面PORTC=ScanCode意味着,将PC7~PC4设为带上拉功能的输入,
而PC3~PC0输出扫描信号。*/
KEY_PORT=ScanCode;
11c: 55 bb out 0x15, r21 ; 21
/*键值判断,有按键时,将键值赋予led ,否则计数变量time加1*/
switch(KEY_PIN) // 解读行列电平值与按键值的关系
11e: 83 b3 in r24, 0x13 ; 19
120: 28 2f mov r18, r24
122: 33 27 eor r19, r19
124: 2e 3b cpi r18, 0xBE ; 190
126: 31 05 cpc r19, r1
128: 09 f4 brne .+2 ; 0x12c
12a: 6a c0 rjmp .+212 ; 0x200
12c: 2f 3b cpi r18, 0xBF ; 191
12e: 31 05 cpc r19, r1
130: 34 f5 brge .+76 ; 0x17e
132: 2e 37 cpi r18, 0x7E ; 126
134: 31 05 cpc r19, r1
136: 09 f4 brne .+2 ; 0x13a
138: 65 c0 rjmp .+202 ; 0x204
13a: 2f 37 cpi r18, 0x7F ; 127
13c: 31 05 cpc r19, r1
13e: 8c f4 brge .+34 ; 0x162
140: 2b 37 cpi r18, 0x7B ; 123
142: 31 05 cpc r19, r1
144: 09 f4 brne .+2 ; 0x148
146: 4e c0 rjmp .+156 ; 0x1e4
148: 2c 37 cpi r18, 0x7C ; 124
14a: 31 05 cpc r19, r1
14c: 2c f4 brge .+10 ; 0x158
14e: 27 37 cpi r18, 0x77 ; 119
150: 31 05 cpc r19, r1
152: 09 f4 brne .+2 ; 0x156
154: 3f c0 rjmp .+126 ; 0x1d4
156: 59 c0 rjmp .+178 ; 0x20a
158: 2d 37 cpi r18, 0x7D ; 125
15a: 31 05 cpc r19, r1
15c: 09 f4 brne .+2 ; 0x160
15e: 4a c0 rjmp .+148 ; 0x1f4
160: 54 c0 rjmp .+168 ; 0x20a
162: 2b 3b cpi r18, 0xBB ; 187
164: 31 05 cpc r19, r1
166: e1 f1 breq .+120 ; 0x1e0
168: 2c 3b cpi r18, 0xBC ; 188
16a: 31 05 cpc r19, r1
16c: 24 f4 brge .+8 ; 0x176
16e: 27 3b cpi r18, 0xB7 ; 183
170: 31 05 cpc r19, r1
172: 71 f1 breq .+92 ; 0x1d0
174: 4a c0 rjmp .+148 ; 0x20a
176: 2d 3b cpi r18, 0xBD ; 189
178: 31 05 cpc r19, r1
17a: d1 f1 breq .+116 ; 0x1f0
17c: 46 c0 rjmp .+140 ; 0x20a
17e: 2e 3d cpi r18, 0xDE ; 222
180: 31 05 cpc r19, r1
182: e1 f1 breq .+120 ; 0x1fc
184: 2f 3d cpi r18, 0xDF ; 223
186: 31 05 cpc r19, r1
188: 74 f4 brge .+28 ; 0x1a6
18a: 2b 3d cpi r18, 0xDB ; 219
18c: 31 05 cpc r19, r1
18e: 31 f1 breq .+76 ; 0x1dc
190: 2c 3d cpi r18, 0xDC ; 220
192: 31 05 cpc r19, r1
194: 24 f4 brge .+8 ; 0x19e
196: 27 3d cpi r18, 0xD7 ; 215
198: 31 05 cpc r19, r1
19a: c1 f0 breq .+48 ; 0x1cc
19c: 36 c0 rjmp .+108 ; 0x20a
19e: 2d 3d cpi r18, 0xDD ; 221
1a0: 31 05 cpc r19, r1
1a2: 21 f1 breq .+72 ; 0x1ec
1a4: 32 c0 rjmp .+100 ; 0x20a
1a6: 2b 3e cpi r18, 0xEB ; 235
1a8: 31 05 cpc r19, r1
1aa: b1 f0 breq .+44 ; 0x1d8
1ac: 2c 3e cpi r18, 0xEC ; 236
1ae: 31 05 cpc r19, r1
1b0: 24 f4 brge .+8 ; 0x1ba
1b2: 27 3e cpi r18, 0xE7 ; 231
1b4: 31 05 cpc r19, r1
1b6: 41 f0 breq .+16 ; 0x1c8
1b8: 28 c0 rjmp .+80 ; 0x20a
1ba: 2d 3e cpi r18, 0xED ; 237
1bc: 31 05 cpc r19, r1
1be: a1 f0 breq .+40 ; 0x1e8
1c0: 2e 3e cpi r18, 0xEE ; 238
1c2: 31 05 cpc r19, r1
1c4: c9 f0 breq .+50 ; 0x1f8
1c6: 21 c0 rjmp .+66 ; 0x20a
{
case keycode0: led=ledcode[0];Time=0;break;
1c8: 99 2d mov r25, r9
1ca: 1d c0 rjmp .+58 ; 0x206
case keycode1: led=ledcode[1];Time=0;break;
1cc: 9a 2d mov r25, r10
1ce: 1b c0 rjmp .+54 ; 0x206
case keycode2: led=ledcode[2];Time=0;break;
1d0: 9b 2d mov r25, r11
1d2: 19 c0 rjmp .+50 ; 0x206
case keycode3: led=ledcode[3];Time=0;break;
1d4: 9c 2d mov r25, r12
1d6: 17 c0 rjmp .+46 ; 0x206
case keycode4: led=ledcode[4];Time=0;break;
1d8: 9d 2d mov r25, r13
1da: 15 c0 rjmp .+42 ; 0x206
case keycode5: led=ledcode[5];Time=0;break;
1dc: 9e 2d mov r25, r14
1de: 13 c0 rjmp .+38 ; 0x206
case keycode6: led=ledcode[6];Time=0;break;
1e0: 9f 2d mov r25, r15
1e2: 11 c0 rjmp .+34 ; 0x206
case keycode7: led=ledcode[7];Time=0;break;
1e4: 90 2f mov r25, r16
1e6: 0f c0 rjmp .+30 ; 0x206
case keycode8: led=ledcode[8];Time=0;break;
1e8: 91 2f mov r25, r17
1ea: 0d c0 rjmp .+26 ; 0x206
case keycode9: led=ledcode[9];Time=0;break;
1ec: 9c 2f mov r25, r28
1ee: 0b c0 rjmp .+22 ; 0x206
case keycodeA: led=ledcode[10];Time=0;break;
1f0: 9b 2f mov r25, r27
1f2: 09 c0 rjmp .+18 ; 0x206
case keycodeB: led=ledcode[11];Time=0;break;
1f4: 9a 2f mov r25, r26
1f6: 07 c0 rjmp .+14 ; 0x206
case keycodeC: led=ledcode[12];Time=0;break;
1f8: 9f 2f mov r25, r31
1fa: 05 c0 rjmp .+10 ; 0x206
case keycodeD: led=ledcode[13];Time=0;break;
1fc: 9e 2f mov r25, r30
1fe: 03 c0 rjmp .+6 ; 0x206
case keycodeE: led=ledcode[14];Time=0;break;
200: 97 2f mov r25, r23
202: 01 c0 rjmp .+2 ; 0x206
case keycodeF: led=ledcode[15];Time=0;break;
204: 96 2f mov r25, r22
206: 40 e0 ldi r20, 0x00 ; 0
208: 01 c0 rjmp .+2 ; 0x20c
default : {
Time++;
20a: 4f 5f subi r20, 0xFF ; 255
break;
}
}
}
20c: 84 2f mov r24, r20
20e: 81 50 subi r24, 0x01 ; 1
210: 83 30 cpi r24, 0x03 ; 3
212: 08 f4 brcc .+2 ; 0x216
214: 6c cf rjmp .-296 ; 0xee
216: 40 93 72 00 sts 0x0072, r20
21a: 90 93 73 00 sts 0x0073, r25
21e: 50 93 70 00 sts 0x0070, r21
while((Time!=0)&(Time<4)); //如果time=4(键盘扫描一遍)
if(Time==4) //由time=4条件而退出,即没有扫描到按键
222: 44 30 cpi r20, 0x04 ; 4
224: 21 f4 brne .+8 ; 0x22e
{
return(ledlast);
226: 80 91 75 00 lds r24, 0x0075
22a: 99 27 eor r25, r25
22c: 08 c0 rjmp .+16 ; 0x23e
}
else
{
//检测到有按键时,更新按键值
ledlast=ledcurrent;
22e: 80 91 74 00 lds r24, 0x0074
232: 80 93 75 00 sts 0x0075, r24
ledcurrent=led;
236: 90 93 74 00 sts 0x0074, r25
return(ledcurrent);
23a: 89 2f mov r24, r25
23c: 99 27 eor r25, r25
23e: cf 91 pop r28
240: 1f 91 pop r17
242: 0f 91 pop r16
244: ff 90 pop r15
246: ef 90 pop r14
248: df 90 pop r13
24a: cf 90 pop r12
24c: bf 90 pop r11
24e: af 90 pop r10
250: 9f 90 pop r9
252: 08 95 ret
00000254 <Initi_Device>:
}
}
void Initi_Device(void)
{
LED_ADD_DDR=0xFF; //定义为输出
254: 8f ef ldi r24, 0xFF ; 255
256: 81 bb out 0x11, r24 ; 17
LED_ADD_PORT=0xFE; //控制最后一个八段数码管亮
258: 9e ef ldi r25, 0xFE ; 254
25a: 92 bb out 0x12, r25 ; 18
LED_DATA_DDR=0xFF; //定义为输出
25c: 87 bb out 0x17, r24 ; 23
LED_DATA_PORT=0xBF; //输出数字
25e: 8f eb ldi r24, 0xBF ; 191
260: 88 bb out 0x18, r24 ; 24
262: 08 95 ret
00000264 <__vector_9>:
}
SIGNAL(SIG_OVERFLOW0)
{
264: 1f 92 push r1
266: 0f 92 push r0
268: 0f b6 in r0, 0x3f ; 63
26a: 0f 92 push r0
26c: 11 24 eor r1, r1
26e: 2f 93 push r18
270: 3f 93 push r19
272: 4f 93 push r20
274: 5f 93 push r21
276: 6f 93 push r22
278: 7f 93 push r23
27a: 8f 93 push r24
27c: 9f 93 push r25
27e: af 93 push r26
280: bf 93 push r27
282: ef 93 push r30
284: ff 93 push r31
TCNT0=0XB2;
286: 82 eb ldi r24, 0xB2 ; 178
288: 82 bf out 0x32, r24 ; 50
LED_DATA_PORT=Keyboard();
28a: 0e 94 47 00 call 0x8e
28e: 88 bb out 0x18, r24 ; 24
290: ff 91 pop r31
292: ef 91 pop r30
294: bf 91 pop r27
296: af 91 pop r26
298: 9f 91 pop r25
29a: 8f 91 pop r24
29c: 7f 91 pop r23
29e: 6f 91 pop r22
2a0: 5f 91 pop r21
2a2: 4f 91 pop r20
2a4: 3f 91 pop r19
2a6: 2f 91 pop r18
2a8: 0f 90 pop r0
2aa: 0f be out 0x3f, r0 ; 63
2ac: 0f 90 pop r0
2ae: 1f 90 pop r1
2b0: 18 95 reti
000002b2 <main>:
}
int main(void)
{
2b2: cf e5 ldi r28, 0x5F ; 95
2b4: d4 e0 ldi r29, 0x04 ; 4
2b6: de bf out 0x3e, r29 ; 62
2b8: cd bf out 0x3d, r28 ; 61
KEY_DDR=0X0F;
2ba: 8f e0 ldi r24, 0x0F ; 15
2bc: 84 bb out 0x14, r24 ; 20
KEY_PORT=0XFF;
2be: 8f ef ldi r24, 0xFF ; 255
2c0: 85 bb out 0x15, r24 ; 21
Initi_Device();
2c2: 0e 94 2a 01 call 0x254
TCCR0=5;
2c6: 85 e0 ldi r24, 0x05 ; 5
2c8: 83 bf out 0x33, r24 ; 51
TCNT0=0XB2;
2ca: 82 eb ldi r24, 0xB2 ; 178
2cc: 82 bf out 0x32, r24 ; 50
TIMSK=(1<<TOIE0);
2ce: 81 e0 ldi r24, 0x01 ; 1
2d0: 89 bf out 0x39, r24 ; 57
sei();
2d2: 78 94 sei
for(;;)
2d4: ff cf rjmp .-2 ; 0x2d4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -