📄 4key.lst
字号:
1 .file "4key.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
51 .global ledcode
52 .data
55 ledcode:
56 0000 3F .byte 63
57 0001 06 .byte 6
58 0002 5B .byte 91
59 0003 4F .byte 79
60 0004 66 .byte 102
61 0005 6D .byte 109
62 0006 7D .byte 125
63 0007 07 .byte 7
64 0008 7F .byte 127
65 0009 67 .byte 103
66 000a 77 .byte 119
67 000b 7C .byte 124
68 000c 58 .byte 88
69 000d 5E .byte 94
70 000e 79 .byte 121
71 000f 71 .byte 113
74 ScanCode.0:
75 0010 F7 .byte -9
76 .lcomm Time.1,1
77 .lcomm led.2,1
78 .lcomm ledcurrent.3,1
79 .lcomm ledlast.4,1
80 .text
82 .global Keyboard
84 Keyboard:
1:D:/ouyangyingqian/four/4key.c **** #include <avr/io.h>
2:D:/ouyangyingqian/four/4key.c **** #include <avr/signal.h>
3:D:/ouyangyingqian/four/4key.c **** #include <avr/interrupt.h>
4:D:/ouyangyingqian/four/4key.c **** #include <inttypes.h>
5:D:/ouyangyingqian/four/4key.c **** #include <keyboard.h>
6:D:/ouyangyingqian/four/4key.c ****
7:D:/ouyangyingqian/four/4key.c ****
8:D:/ouyangyingqian/four/4key.c **** uint8_t ledcode[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7C,0x58,0x5E,0x79,0x7
9:D:/ouyangyingqian/four/4key.c ****
10:D:/ouyangyingqian/four/4key.c ****
11:D:/ouyangyingqian/four/4key.c **** uint8_t Keyboard(void)
12:D:/ouyangyingqian/four/4key.c **** {
86 .LM1:
87 /* prologue: frame size=0 */
88 0000 9F92 push r9
89 0002 AF92 push r10
90 0004 BF92 push r11
91 0006 CF92 push r12
92 0008 DF92 push r13
93 000a EF92 push r14
94 000c FF92 push r15
95 000e 0F93 push r16
96 0010 1F93 push r17
97 0012 CF93 push r28
98 /* prologue end (size=10) */
99 0014 5091 0000 lds r21,ScanCode.0
100 0018 9090 0000 lds r9,ledcode
101 001c 9091 0000 lds r25,led.2
102 0020 4091 0000 lds r20,Time.1
103 0024 A090 0000 lds r10,ledcode+1
104 0028 B090 0000 lds r11,ledcode+2
105 002c C090 0000 lds r12,ledcode+3
106 0030 D090 0000 lds r13,ledcode+4
107 0034 E090 0000 lds r14,ledcode+5
108 0038 F090 0000 lds r15,ledcode+6
109 003c 0091 0000 lds r16,ledcode+7
110 0040 1091 0000 lds r17,ledcode+8
111 0044 C091 0000 lds r28,ledcode+9
112 0048 B091 0000 lds r27,ledcode+10
113 004c A091 0000 lds r26,ledcode+11
114 0050 F091 0000 lds r31,ledcode+12
115 0054 E091 0000 lds r30,ledcode+13
116 0058 7091 0000 lds r23,ledcode+14
117 005c 6091 0000 lds r22,ledcode+15
118 .L2:
13:D:/ouyangyingqian/four/4key.c **** static uint8_t ScanCode=0xF7,Time=0,led=0x00,ledcurrent=0x00,ledlast=0x00;
14:D:/ouyangyingqian/four/4key.c **** do //键盘扫描
15:D:/ouyangyingqian/four/4key.c **** {
16:D:/ouyangyingqian/four/4key.c **** switch(ScanCode) //扫描信号
120 .LM2:
121 0060 252F mov r18,r21
122 0062 3327 clr r19
123 0064 2B3F cpi r18,251
124 0066 3105 cpc r19,__zero_reg__
125 0068 69F0 breq .L7
126 006a 2C3F cpi r18,252
127 006c 3105 cpc r19,__zero_reg__
128 006e 24F4 brge .L11
129 0070 273F cpi r18,247
130 0072 3105 cpc r19,__zero_reg__
131 0074 29F0 breq .L6
132 0076 0AC0 rjmp .L10
133 .L11:
134 0078 2D3F cpi r18,253
135 007a 3105 cpc r19,__zero_reg__
136 007c 29F0 breq .L8
137 007e 06C0 rjmp .L10
138 .L6:
17:D:/ouyangyingqian/four/4key.c **** {
18:D:/ouyangyingqian/four/4key.c **** // 扫描信号从0111-1011
19:D:/ouyangyingqian/four/4key.c **** case 0XF7: ScanCode=0XFB;break;
140 .LM3:
141 0080 5BEF ldi r21,lo8(-5)
142 0082 05C0 rjmp .L5
143 .L7:
20:D:/ouyangyingqian/four/4key.c **** // 扫描信号从1011-1101
21:D:/ouyangyingqian/four/4key.c **** case 0XFB: ScanCode=0XFD;break;
145 .LM4:
146 0084 5DEF ldi r21,lo8(-3)
147 0086 03C0 rjmp .L5
148 .L8:
22:D:/ouyangyingqian/four/4key.c **** //扫描信号从1101-1110
23:D:/ouyangyingqian/four/4key.c **** case 0XFD: ScanCode=0XFE;break;
150 .LM5:
151 0088 5EEF ldi r21,lo8(-2)
152 008a 01C0 rjmp .L5
153 .L10:
24:D:/ouyangyingqian/four/4key.c **** //扫描信号从1110-0111
25:D:/ouyangyingqian/four/4key.c **** case 0XFE: ScanCode=0XF7;break;
26:D:/ouyangyingqian/four/4key.c **** default: {ScanCode=0XF7;break;}
155 .LM6:
156 008c 57EF ldi r21,lo8(-9)
157 .L5:
27:D:/ouyangyingqian/four/4key.c **** }
28:D:/ouyangyingqian/four/4key.c ****
29:D:/ouyangyingqian/four/4key.c **** /*在main()函数里需将DDRC设成0x0F,即PC7~PC4为输入,PC3~PC0为输出。
30:D:/ouyangyingqian/four/4key.c **** 下面PORTC=ScanCode意味着,将PC7~PC4设为带上拉功能的输入,
31:D:/ouyangyingqian/four/4key.c **** 而PC3~PC0输出扫描信号。*/
32:D:/ouyangyingqian/four/4key.c **** KEY_PORT=ScanCode;
159 .LM7:
160 008e 55BB out 53-0x20,r21
33:D:/ouyangyingqian/four/4key.c ****
34:D:/ouyangyingqian/four/4key.c **** /*键值判断,有按键时,将键值赋予led ,否则计数变量time加1*/
35:D:/ouyangyingqian/four/4key.c **** switch(KEY_PIN) // 解读行列电平值与按键值的关系
162 .LM8:
163 0090 83B3 in r24,51-0x20
164 0092 282F mov r18,r24
165 0094 3327 clr r19
166 0096 2E3B cpi r18,190
167 0098 3105 cpc r19,__zero_reg__
168 009a 09F4 brne .+2
169 009c 6AC0 rjmp .L27
170 009e 2F3B cpi r18,191
171 00a0 3105 cpc r19,__zero_reg__
172 00a2 34F5 brge .L30
173 00a4 2E37 cpi r18,126
174 00a6 3105 cpc r19,__zero_reg__
175 00a8 09F4 brne .+2
176 00aa 65C0 rjmp .L28
177 00ac 2F37 cpi r18,127
178 00ae 3105 cpc r19,__zero_reg__
179 00b0 8CF4 brge .L31
180 00b2 2B37 cpi r18,123
181 00b4 3105 cpc r19,__zero_reg__
182 00b6 09F4 brne .+2
183 00b8 4EC0 rjmp .L20
184 00ba 2C37 cpi r18,124
185 00bc 3105 cpc r19,__zero_reg__
186 00be 2CF4 brge .L32
187 00c0 2737 cpi r18,119
188 00c2 3105 cpc r19,__zero_reg__
189 00c4 09F4 brne .+2
190 00c6 3FC0 rjmp .L16
191 00c8 59C0 rjmp .L29
192 .L32:
193 00ca 2D37 cpi r18,125
194 00cc 3105 cpc r19,__zero_reg__
195 00ce 09F4 brne .+2
196 00d0 4AC0 rjmp .L24
197 00d2 54C0 rjmp .L29
198 .L31:
199 00d4 2B3B cpi r18,187
200 00d6 3105 cpc r19,__zero_reg__
201 00d8 E1F1 breq .L19
202 00da 2C3B cpi r18,188
203 00dc 3105 cpc r19,__zero_reg__
204 00de 24F4 brge .L33
205 00e0 273B cpi r18,183
206 00e2 3105 cpc r19,__zero_reg__
207 00e4 71F1 breq .L15
208 00e6 4AC0 rjmp .L29
209 .L33:
210 00e8 2D3B cpi r18,189
211 00ea 3105 cpc r19,__zero_reg__
212 00ec D1F1 breq .L23
213 00ee 46C0 rjmp .L29
214 .L30:
215 00f0 2E3D cpi r18,222
216 00f2 3105 cpc r19,__zero_reg__
217 00f4 E1F1 breq .L26
218 00f6 2F3D cpi r18,223
219 00f8 3105 cpc r19,__zero_reg__
220 00fa 74F4 brge .L34
221 00fc 2B3D cpi r18,219
222 00fe 3105 cpc r19,__zero_reg__
223 0100 31F1 breq .L18
224 0102 2C3D cpi r18,220
225 0104 3105 cpc r19,__zero_reg__
226 0106 24F4 brge .L35
227 0108 273D cpi r18,215
228 010a 3105 cpc r19,__zero_reg__
229 010c C1F0 breq .L14
230 010e 36C0 rjmp .L29
231 .L35:
232 0110 2D3D cpi r18,221
233 0112 3105 cpc r19,__zero_reg__
234 0114 21F1 breq .L22
235 0116 32C0 rjmp .L29
236 .L34:
237 0118 2B3E cpi r18,235
238 011a 3105 cpc r19,__zero_reg__
239 011c B1F0 breq .L17
240 011e 2C3E cpi r18,236
241 0120 3105 cpc r19,__zero_reg__
242 0122 24F4 brge .L36
243 0124 273E cpi r18,231
244 0126 3105 cpc r19,__zero_reg__
245 0128 41F0 breq .L13
246 012a 28C0 rjmp .L29
247 .L36:
248 012c 2D3E cpi r18,237
249 012e 3105 cpc r19,__zero_reg__
250 0130 A1F0 breq .L21
251 0132 2E3E cpi r18,238
252 0134 3105 cpc r19,__zero_reg__
253 0136 C9F0 breq .L25
254 0138 21C0 rjmp .L29
255 .L13:
36:D:/ouyangyingqian/four/4key.c **** {
37:D:/ouyangyingqian/four/4key.c **** case keycode0: led=ledcode[0];Time=0;break;
257 .LM9:
258 013a 992D mov r25,r9
259 013c 1DC0 rjmp .L40
260 .L14:
38:D:/ouyangyingqian/four/4key.c **** case keycode1: led=ledcode[1];Time=0;break;
262 .LM10:
263 013e 9A2D mov r25,r10
264 0140 1BC0 rjmp .L40
265 .L15:
39:D:/ouyangyingqian/four/4key.c **** case keycode2: led=ledcode[2];Time=0;break;
267 .LM11:
268 0142 9B2D mov r25,r11
269 0144 19C0 rjmp .L40
270 .L16:
40:D:/ouyangyingqian/four/4key.c **** case keycode3: led=ledcode[3];Time=0;break;
272 .LM12:
273 0146 9C2D mov r25,r12
274 0148 17C0 rjmp .L40
275 .L17:
41:D:/ouyangyingqian/four/4key.c **** case keycode4: led=ledcode[4];Time=0;break;
277 .LM13:
278 014a 9D2D mov r25,r13
279 014c 15C0 rjmp .L40
280 .L18:
42:D:/ouyangyingqian/four/4key.c **** case keycode5: led=ledcode[5];Time=0;break;
282 .LM14:
283 014e 9E2D mov r25,r14
284 0150 13C0 rjmp .L40
285 .L19:
43:D:/ouyangyingqian/four/4key.c **** case keycode6: led=ledcode[6];Time=0;break;
287 .LM15:
288 0152 9F2D mov r25,r15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -