📄 key.lst
字号:
70:drive/key.c **** {
71:drive/key.c **** key_status =2; //keep state 2, wait for bounce
291 .LM22:
292 00ba 82E0 ldi r24,lo8(2)
293 00bc 8093 0000 sts key_status.3,r24
294 .L37:
72:drive/key.c **** key_val_pre =key_val_now; //fresh the key value!
296 .LM23:
297 00c0 2093 0000 sts key_val_pre.0,r18
298 00c4 66C0 rjmp .L8
299 .L20:
73:drive/key.c **** }
74:drive/key.c **** else // >200, judged as long button
75:drive/key.c **** {
76:drive/key.c **** key_down_cnt=0;
301 .LM24:
302 00c6 1092 0000 sts (key_down_cnt.2)+1,__zero_reg__
303 00ca 1092 0000 sts key_down_cnt.2,__zero_reg__
77:drive/key.c **** key.val = key_val_pre;//send key val
305 .LM25:
306 00ce 2093 0000 sts key,r18
78:drive/key.c **** key.type = PRESS_LONG_1ST; //key type is long first
308 .LM26:
309 00d2 82E0 ldi r24,lo8(2)
310 00d4 8093 0000 sts key+1,r24
79:drive/key.c **** key.fkeydone= NO; //key has not been processed!
312 .LM27:
313 00d8 1092 0000 sts key+2,__zero_reg__
80:drive/key.c **** key_status = 3 ; //reset the state counter!
315 .LM28:
316 00dc 83E0 ldi r24,lo8(3)
317 00de 22C0 rjmp .L35
318 .L19:
81:drive/key.c **** }
82:drive/key.c **** }
83:drive/key.c **** else //maybe key up,send message to keyproce
84:drive/key.c **** {
85:drive/key.c **** key.val = key_val_pre;//send key val
320 .LM29:
321 00e0 8093 0000 sts key,r24
86:drive/key.c **** key.type = PRESS_ONCE; //key type is short
323 .LM30:
324 00e4 C093 0000 sts key+1,r28
325 00e8 28C0 rjmp .L34
326 .L23:
87:drive/key.c **** key.fkeydone= NO; //key has not been processed!
88:drive/key.c **** key_status = 0 ; //reset the state counter!
89:drive/key.c **** key_val_pre = key_val_now=0;
90:drive/key.c **** }
91:drive/key.c **** break;
92:drive/key.c **** //------------------------------------------------------------------------------------------------
93:drive/key.c **** //button was long pressed
94:drive/key.c **** case 3: if( key_val_now == key_val_pre ) //key still down
328 .LM31:
329 00ea 8091 0000 lds r24,key_val_pre.0
330 00ee 2817 cp r18,r24
331 00f0 E1F4 brne .L24
95:drive/key.c **** {
96:drive/key.c **** key_down_cnt++;
333 .LM32:
334 00f2 8091 0000 lds r24,key_down_cnt.2
335 00f6 9091 0000 lds r25,(key_down_cnt.2)+1
336 00fa 0196 adiw r24,1
337 00fc 9093 0000 sts (key_down_cnt.2)+1,r25
338 0100 8093 0000 sts key_down_cnt.2,r24
97:drive/key.c **** if ( key_down_cnt > KEYLONGFREQUENCY) //controll the long press frequen
340 .LM33:
341 0104 0B97 sbiw r24,11
342 0106 08F4 brsh .+2
343 0108 44C0 rjmp .L8
98:drive/key.c **** {
99:drive/key.c **** key_down_cnt=1; //reset for new long press loop
345 .LM34:
346 010a 81E0 ldi r24,lo8(1)
347 010c 90E0 ldi r25,hi8(1)
348 010e 9093 0000 sts (key_down_cnt.2)+1,r25
349 0112 8093 0000 sts key_down_cnt.2,r24
100:drive/key.c **** key.val = key_val_pre;//send key val
351 .LM35:
352 0116 2093 0000 sts key,r18
101:drive/key.c **** key.type = PRESS_LONG; //key type is long
354 .LM36:
355 011a 83E0 ldi r24,lo8(3)
356 011c 8093 0000 sts key+1,r24
102:drive/key.c **** key.fkeydone= NO; //key has not been processed!
358 .LM37:
359 0120 1092 0000 sts key+2,__zero_reg__
360 .L35:
103:drive/key.c **** key_status = 3 ; //keep the state counter!
362 .LM38:
363 0124 8093 0000 sts key_status.3,r24
364 0128 34C0 rjmp .L8
365 .L24:
104:drive/key.c **** }
105:drive/key.c **** }
106:drive/key.c **** else //key up and long press end
107:drive/key.c **** {
108:drive/key.c **** key_down_cnt= 0; //reset for new key down
367 .LM39:
368 012a 1092 0000 sts (key_down_cnt.2)+1,__zero_reg__
369 012e 1092 0000 sts key_down_cnt.2,__zero_reg__
109:drive/key.c **** key.val = 0; //send NO key
371 .LM40:
372 0132 1092 0000 sts key,__zero_reg__
110:drive/key.c **** key.type = NON; //key type is NON
374 .LM41:
375 0136 1092 0000 sts key+1,__zero_reg__
376 .L34:
111:drive/key.c **** key.fkeydone= NO; //key has not been processed!
378 .LM42:
379 013a 1092 0000 sts key+2,__zero_reg__
112:drive/key.c **** key_status = 0 ; //reset the state counter!
381 .LM43:
382 013e 1092 0000 sts key_status.3,__zero_reg__
113:drive/key.c **** key_val_pre = key_val_now=0;
384 .LM44:
385 0142 1092 0000 sts key_val_now.1,__zero_reg__
386 0146 1092 0000 sts key_val_pre.0,__zero_reg__
114:drive/key.c **** }
115:drive/key.c **** break;
388 .LM45:
389 014a 23C0 rjmp .L8
390 .L12:
116:drive/key.c ****
117:drive/key.c **** default:break;
118:drive/key.c **** }
119:drive/key.c **** } //end if( key_val_now ) 有键按下
120:drive/key.c ****
121:drive/key.c **** else //无任何键按下.或者所有按键已经弹起
122:drive/key.c **** {
123:drive/key.c **** switch (key_status)
392 .LM46:
393 014c 832F mov r24,r19
394 014e 9927 clr r25
395 0150 8230 cpi r24,2
396 0152 9105 cpc r25,__zero_reg__
397 0154 19F0 breq .L31
398 0156 0397 sbiw r24,3
399 0158 81F0 breq .L32
400 015a 1BC0 rjmp .L8
401 .L31:
124:drive/key.c **** {
125:drive/key.c **** case 2:
126:drive/key.c **** {
127:drive/key.c **** key.val = key_val_pre;//send key val
403 .LM47:
404 015c 8091 0000 lds r24,key_val_pre.0
405 0160 8093 0000 sts key,r24
128:drive/key.c **** key.type = PRESS_ONCE; //key type is short
407 .LM48:
408 0164 C093 0000 sts key+1,r28
129:drive/key.c **** key.fkeydone= NO; //key has not been processed!
410 .LM49:
411 0168 2093 0000 sts key+2,r18
130:drive/key.c **** key_status = 0 ; //reset the state counter!
413 .LM50:
414 016c 2093 0000 sts key_status.3,r18
131:drive/key.c **** key_down_cnt= 0;
416 .LM51:
417 0170 1092 0000 sts (key_down_cnt.2)+1,__zero_reg__
418 0174 1092 0000 sts key_down_cnt.2,__zero_reg__
132:drive/key.c **** }
133:drive/key.c **** break;
420 .LM52:
421 0178 0CC0 rjmp .L8
422 .L32:
134:drive/key.c **** case 3: {
135:drive/key.c **** key_down_cnt= 0; //reset for new key down
424 .LM53:
425 017a 1092 0000 sts (key_down_cnt.2)+1,__zero_reg__
426 017e 1092 0000 sts key_down_cnt.2,__zero_reg__
136:drive/key.c **** key.val = 0; //send NO key
428 .LM54:
429 0182 2093 0000 sts key,r18
137:drive/key.c **** key.type = NON; //key type is NON
431 .LM55:
432 0186 2093 0000 sts key+1,r18
138:drive/key.c **** key.fkeydone= NO; //key has not been processed!
434 .LM56:
435 018a 2093 0000 sts key+2,r18
139:drive/key.c **** key_status = 0 ; //reset the state counter!
437 .LM57:
438 018e 2093 0000 sts key_status.3,r18
439 .L8:
440 /* epilogue: frame size=0 */
441 0192 CF91 pop r28
442 0194 0895 ret
443 /* epilogue end (size=2) */
444 /* function KeyScan size 179 (176) */
452 .Lscope1:
454 .text
456 Letext:
457 /* File "drive/key.c": code 209 = 0x00d1 ( 205), prologues 1, epilogues 3 */
DEFINED SYMBOLS
*ABS*:00000000 key.c
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:128 .data:00000000 key
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:136 .text:00000000 KeyRead
.bss:00000000 key_val_pre.0
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:194 .bss:00000001 key_val_now.1
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:195 .bss:00000002 key_down_cnt.2
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:196 .bss:00000004 key_status.3
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:201 .text:00000036 KeyScan
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc4Qaaaa.s:456 .text:00000196 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
f_15ms
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -