📄 keyboard.lss
字号:
keyboard.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000002a0 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 000002a0 00000334 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000000b 00800060 00800060 00000334 2**0
ALLOC
3 .noinit 00000000 0080006b 0080006b 00000334 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000334 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 00000334 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 000006a0 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000014 00000000 00000000 00000724 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 00000051 00000000 00000000 00000738 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00000274 00000000 00000000 00000789 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 00000127 00000000 00000000 000009fd 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 000002a9 00000000 00000000 00000b24 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 00000168 00000000 00000000 00000dcd 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 32 00 jmp 0x64 <__init>
4: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
8: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
c: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
10: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
14: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
18: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
1c: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
20: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
24: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
28: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
2c: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
30: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
34: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
38: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
3c: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
40: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
44: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
48: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
4c: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
50: 0c 94 4d 00 jmp 0x9a <__bad_interrupt>
00000054 <SegCode>:
54: 3f 06 5b 4f 66 6d 7d 07 7f 6f 77 7c 39 5e 79 71 ?.[Ofm}..ow|9^yq
00000064 <__init>:
64: 11 24 eor r1, r1
66: 1f be out 0x3f, r1 ; 63
68: cf e5 ldi r28, 0x5F ; 95
6a: d4 e0 ldi r29, 0x04 ; 4
6c: de bf out 0x3e, r29 ; 62
6e: cd bf out 0x3d, r28 ; 61
00000070 <__do_copy_data>:
70: 10 e0 ldi r17, 0x00 ; 0
72: a0 e6 ldi r26, 0x60 ; 96
74: b0 e0 ldi r27, 0x00 ; 0
76: e0 ea ldi r30, 0xA0 ; 160
78: f2 e0 ldi r31, 0x02 ; 2
7a: 02 c0 rjmp .+4 ; 0x80 <.do_copy_data_start>
0000007c <.do_copy_data_loop>:
7c: 05 90 lpm r0, Z+
7e: 0d 92 st X+, r0
00000080 <.do_copy_data_start>:
80: a0 36 cpi r26, 0x60 ; 96
82: b1 07 cpc r27, r17
84: d9 f7 brne .-10 ; 0x7c <.do_copy_data_loop>
00000086 <__do_clear_bss>:
86: 10 e0 ldi r17, 0x00 ; 0
88: a0 e6 ldi r26, 0x60 ; 96
8a: b0 e0 ldi r27, 0x00 ; 0
8c: 01 c0 rjmp .+2 ; 0x90 <.do_clear_bss_start>
0000008e <.do_clear_bss_loop>:
8e: 1d 92 st X+, r1
00000090 <.do_clear_bss_start>:
90: ab 36 cpi r26, 0x6B ; 107
92: b1 07 cpc r27, r17
94: e1 f7 brne .-8 ; 0x8e <.do_clear_bss_loop>
96: 0c 94 39 01 jmp 0x272 <main>
0000009a <__bad_interrupt>:
9a: 0c 94 00 00 jmp 0x0 <__vectors>
0000009e <read_keyboard>:
char read_keyboard()
{
static char key_state = 0, key_value, key_line;
char key_return = No_key,i;
9e: 6f ef ldi r22, 0xFF ; 255
switch (key_state)
a0: 50 91 68 00 lds r21, 0x0068
a4: 85 2f mov r24, r21
a6: 99 27 eor r25, r25
a8: 81 30 cpi r24, 0x01 ; 1
aa: 91 05 cpc r25, r1
ac: 11 f1 breq .+68 ; 0xf2 <read_keyboard+0x54>
ae: 82 30 cpi r24, 0x02 ; 2
b0: 91 05 cpc r25, r1
b2: 1c f4 brge .+6 ; 0xba <read_keyboard+0x1c>
b4: 89 2b or r24, r25
b6: 29 f0 breq .+10 ; 0xc2 <read_keyboard+0x24>
b8: a8 c0 rjmp .+336 ; 0x20a <read_keyboard+0x16c>
ba: 02 97 sbiw r24, 0x02 ; 2
bc: 09 f4 brne .+2 ; 0xc0 <read_keyboard+0x22>
be: 9a c0 rjmp .+308 ; 0x1f4 <read_keyboard+0x156>
c0: a4 c0 rjmp .+328 ; 0x20a <read_keyboard+0x16c>
{
case 0:
key_line = 0b00010000;
c2: 80 e1 ldi r24, 0x10 ; 16
c4: 80 93 6a 00 sts 0x006A, r24
for (i=0; i<4; i++) // 扫描键盘
c8: 20 e0 ldi r18, 0x00 ; 0
{
PORTD = ~key_line; // 输出行线电平
ca: 90 91 6a 00 lds r25, 0x006A
ce: 89 2f mov r24, r25
d0: 80 95 com r24
d2: 82 bb out 0x12, r24 ; 18
PORTD = ~key_line; // 必须送2次!!!(注1)
d4: 82 bb out 0x12, r24 ; 18
key_value = Key_mask & PIND; // 读列电平
d6: 80 b3 in r24, 0x10 ; 16
d8: 8f 70 andi r24, 0x0F ; 15
da: 80 93 69 00 sts 0x0069, r24
if (key_value == Key_mask)
de: 8f 30 cpi r24, 0x0F ; 15
e0: 09 f0 breq .+2 ; 0xe4 <read_keyboard+0x46>
e2: 82 c0 rjmp .+260 ; 0x1e8 <read_keyboard+0x14a>
key_line <<= 1; // 没有按键,继续扫描
e4: 99 0f add r25, r25
e6: 90 93 6a 00 sts 0x006A, r25
ea: 2f 5f subi r18, 0xFF ; 255
ec: 24 30 cpi r18, 0x04 ; 4
ee: 68 f3 brcs .-38 ; 0xca <read_keyboard+0x2c>
else
{
key_state++; // 有按键,停止扫描
break; // 转消抖确认状态
}
}
break;
f0: 8c c0 rjmp .+280 ; 0x20a <read_keyboard+0x16c>
case 1:
if (key_value == (Key_mask & PIND)) // 再次读列电平,
f2: 40 91 69 00 lds r20, 0x0069
f6: 24 2f mov r18, r20
f8: 33 27 eor r19, r19
fa: 80 b3 in r24, 0x10 ; 16
fc: 99 27 eor r25, r25
fe: 8f 70 andi r24, 0x0F ; 15
100: 90 70 andi r25, 0x00 ; 0
102: 28 17 cp r18, r24
104: 39 07 cpc r19, r25
106: 09 f0 breq .+2 ; 0x10a <read_keyboard+0x6c>
108: 71 c0 rjmp .+226 ; 0x1ec <read_keyboard+0x14e>
{
switch (key_line | key_value) // 与状态0的相同,确认按键
10a: 80 91 6a 00 lds r24, 0x006A
10e: 84 2b or r24, r20
110: 99 27 eor r25, r25
112: 8e 32 cpi r24, 0x2E ; 46
114: 91 05 cpc r25, r1
116: 09 f4 brne .+2 ; 0x11a <read_keyboard+0x7c>
118: 50 c0 rjmp .+160 ; 0x1ba <read_keyboard+0x11c>
11a: 8f 32 cpi r24, 0x2F ; 47
11c: 91 05 cpc r25, r1
11e: 04 f5 brge .+64 ; 0x160 <read_keyboard+0xc2>
120: 8e 31 cpi r24, 0x1E ; 30
122: 91 05 cpc r25, r1
124: 09 f4 brne .+2 ; 0x128 <read_keyboard+0x8a>
126: 41 c0 rjmp .+130 ; 0x1aa <read_keyboard+0x10c>
128: 8f 31 cpi r24, 0x1F ; 31
12a: 91 05 cpc r25, r1
12c: 6c f4 brge .+26 ; 0x148 <read_keyboard+0xaa>
12e: 8b 31 cpi r24, 0x1B ; 27
130: 91 05 cpc r25, r1
132: 09 f4 brne .+2 ; 0x136 <read_keyboard+0x98>
134: 3e c0 rjmp .+124 ; 0x1b2 <read_keyboard+0x114>
136: 8c 31 cpi r24, 0x1C ; 28
138: 91 05 cpc r25, r1
13a: 1c f4 brge .+6 ; 0x142 <read_keyboard+0xa4>
13c: 47 97 sbiw r24, 0x17 ; 23
13e: d9 f1 breq .+118 ; 0x1b6 <read_keyboard+0x118>
140: 53 c0 rjmp .+166 ; 0x1e8 <read_keyboard+0x14a>
142: 4d 97 sbiw r24, 0x1d ; 29
144: a1 f1 breq .+104 ; 0x1ae <read_keyboard+0x110>
146: 50 c0 rjmp .+160 ; 0x1e8 <read_keyboard+0x14a>
148: 8b 32 cpi r24, 0x2B ; 43
14a: 91 05 cpc r25, r1
14c: d1 f1 breq .+116 ; 0x1c2 <read_keyboard+0x124>
14e: 8c 32 cpi r24, 0x2C ; 44
150: 91 05 cpc r25, r1
152: 1c f4 brge .+6 ; 0x15a <read_keyboard+0xbc>
154: 87 97 sbiw r24, 0x27 ; 39
156: b9 f1 breq .+110 ; 0x1c6 <read_keyboard+0x128>
158: 47 c0 rjmp .+142 ; 0x1e8 <read_keyboard+0x14a>
15a: 8d 97 sbiw r24, 0x2d ; 45
15c: 81 f1 breq .+96 ; 0x1be <read_keyboard+0x120>
15e: 44 c0 rjmp .+136 ; 0x1e8 <read_keyboard+0x14a>
160: 8e 34 cpi r24, 0x4E ; 78
162: 91 05 cpc r25, r1
164: 91 f1 breq .+100 ; 0x1ca <read_keyboard+0x12c>
166: 8f 34 cpi r24, 0x4F ; 79
168: 91 05 cpc r25, r1
16a: 74 f4 brge .+28 ; 0x188 <read_keyboard+0xea>
16c: 8b 34 cpi r24, 0x4B ; 75
16e: 91 05 cpc r25, r1
170: 81 f1 breq .+96 ; 0x1d2 <read_keyboard+0x134>
172: 8c 34 cpi r24, 0x4C ; 76
174: 91 05 cpc r25, r1
176: 24 f4 brge .+8 ; 0x180 <read_keyboard+0xe2>
178: 87 34 cpi r24, 0x47 ; 71
17a: 91 05 cpc r25, r1
17c: 61 f1 breq .+88 ; 0x1d6 <read_keyboard+0x138>
17e: 34 c0 rjmp .+104 ; 0x1e8 <read_keyboard+0x14a>
180: 8d 34 cpi r24, 0x4D ; 77
182: 91 05 cpc r25, r1
184: 21 f1 breq .+72 ; 0x1ce <read_keyboard+0x130>
186: 30 c0 rjmp .+96 ; 0x1e8 <read_keyboard+0x14a>
188: 8b 38 cpi r24, 0x8B ; 139
18a: 91 05 cpc r25, r1
18c: 51 f1 breq .+84 ; 0x1e2 <read_keyboard+0x144>
18e: 8c 38 cpi r24, 0x8C ; 140
190: 91 05 cpc r25, r1
192: 24 f4 brge .+8 ; 0x19c <read_keyboard+0xfe>
194: 87 38 cpi r24, 0x87 ; 135
196: 91 05 cpc r25, r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -