📄 m8demo.lst
字号:
(0284) default:
(0285) break;
02C7 D7F3 RCALL pop_gset2
02C8 9508 RET
_DisplayTimer:
temptimer4 --> R12
temptimer2 --> R22
temptimer3 --> R10
temptimer1 --> R20
timer --> R22
02C9 D7FB RCALL push_gset4
02CA 01B8 MOVW R22,R16
02CB 9723 SBIW R28,3
(0286)
(0287) }
(0288)
(0289) }
(0290) void DisplayTimer(unsigned int timer)
(0291) {
(0292) unsigned char temptimer1,temptimer2,temptimer3,temptimer4;
(0293) temptimer1=timer%60;
02CC E32C LDI R18,0x3C
02CD E030 LDI R19,0
02CE 018B MOVW R16,R22
02CF D7B7 RCALL mod16u
02D0 2F40 MOV R20,R16
(0294) temptimer3=timer/60;
02D1 E32C LDI R18,0x3C
02D2 E030 LDI R19,0
02D3 018B MOVW R16,R22
02D4 D7B4 RCALL div16u
02D5 2EA0 MOV R10,R16
(0295) temptimer2=temptimer1/10;
02D6 E01A LDI R17,0xA
02D7 2F04 MOV R16,R20
02D8 D7CC RCALL div8u
02D9 2F60 MOV R22,R16
(0296) temptimer1=temptimer1%10;
02DA E01A LDI R17,0xA
02DB 2F04 MOV R16,R20
02DC D7C6 RCALL mod8u
02DD 2F40 MOV R20,R16
(0297) temptimer4=temptimer3/10;
02DE E01A LDI R17,0xA
02DF 2D0A MOV R16,R10
02E0 D7C4 RCALL div8u
02E1 2EC0 MOV R12,R16
(0298) temptimer3=temptimer3%10;
02E2 E01A LDI R17,0xA
02E3 2D0A MOV R16,R10
02E4 D7BE RCALL mod8u
02E5 2EA0 MOV R10,R16
(0299) Display_Data_LED(temptimer1,temptimer2,temptimer3,temptimer4);
02E6 82CA STD Y+2,R12
02E7 82A8 STD Y+0,R10
02E8 2F26 MOV R18,R22
02E9 2F04 MOV R16,R20
02EA DF7F RCALL _Display_Data_LED
02EB 9623 ADIW R28,3
02EC D7D2 RCALL pop_gset4
02ED 9508 RET
(0300)
(0301) }
(0302)
(0303) unsigned char Key_Decode(void)
(0304) { Delay(10);
_Key_Decode:
02EE E00A LDI R16,0xA
02EF E010 LDI R17,0
02F0 DDF9 RCALL _Delay
(0305)
(0306) DDRC&=0x79;
02F1 B384 IN R24,0x14
02F2 7789 ANDI R24,0x79
02F3 BB84 OUT 0x14,R24
(0307) PORTC|=0x30;
02F4 B385 IN R24,0x15
02F5 6380 ORI R24,0x30
02F6 BB85 OUT 0x15,R24
(0308) PORTC&=0x59;
02F7 B385 IN R24,0x15
02F8 7589 ANDI R24,0x59
02F9 BB85 OUT 0x15,R24
(0309) Delay(10);
02FA E00A LDI R16,0xA
02FB E010 LDI R17,0
02FC DDED RCALL _Delay
(0310) if (!(PINC & 0x02))
02FD 9999 SBIC 0x13,1
02FE C002 RJMP 0x0301
(0311) { return key_inc;}
02FF EF0E LDI R16,0xFE
0300 C016 RJMP 0x0317
(0312) if (!(PINC & 0x04))
0301 999A SBIC 0x13,2
0302 C002 RJMP 0x0305
(0313) {return key_enter;}
0303 EF0B LDI R16,0xFB
0304 C012 RJMP 0x0317
(0314) PORTC|=0x30;
0305 B385 IN R24,0x15
0306 6380 ORI R24,0x30
0307 BB85 OUT 0x15,R24
(0315) PORTC&=0x69;
0308 B385 IN R24,0x15
0309 7689 ANDI R24,0x69
030A BB85 OUT 0x15,R24
(0316) Delay(10);
030B E00A LDI R16,0xA
030C E010 LDI R17,0
030D DDDC RCALL _Delay
(0317) if (!(PINC & 0x02))
030E 9999 SBIC 0x13,1
030F C002 RJMP 0x0312
(0318) {return key_dec;}
0310 EF0D LDI R16,0xFD
0311 C005 RJMP 0x0317
(0319) if (!(PINC & 0x04))
0312 999A SBIC 0x13,2
0313 C002 RJMP 0x0316
(0320) {return key_mode;}
0314 EF0C LDI R16,0xFC
0315 C001 RJMP 0x0317
(0321) return key_no;
0316 EF0F LDI R16,0xFF
0317 9508 RET
_Key_Task:
0318 D7B2 RCALL push_gset1
(0322)
(0323) }
(0324) void Key_Task(void)
(0325) {
(0326)
(0327) switch(key_state)
0319 914001C6 LDS R20,key_state
031B 2755 CLR R21
031C 3040 CPI R20,0
031D 0745 CPC R20,R21
031E F0F1 BEQ 0x033D
031F 3041 CPI R20,1
0320 E0E0 LDI R30,0
0321 075E CPC R21,R30
0322 F181 BEQ 0x0353
0323 3042 CPI R20,2
0324 E0E0 LDI R30,0
0325 075E CPC R21,R30
0326 F409 BNE 0x0328
0327 C039 RJMP 0x0361
0328 3043 CPI R20,3
0329 E0E0 LDI R30,0
032A 075E CPC R21,R30
032B F409 BNE 0x032D
032C C041 RJMP 0x036E
032D 3044 CPI R20,4
032E E0E0 LDI R30,0
032F 075E CPC R21,R30
0330 F409 BNE 0x0332
0331 C049 RJMP 0x037B
0332 3045 CPI R20,5
0333 E0E0 LDI R30,0
0334 075E CPC R21,R30
0335 F409 BNE 0x0337
0336 C051 RJMP 0x0388
0337 3046 CPI R20,6
0338 E0E0 LDI R30,0
0339 075E CPC R21,R30
033A F409 BNE 0x033C
033B C064 RJMP 0x03A0
033C C07A RJMP 0x03B7
(0328) {
(0329) case KBD_IDLE:
(0330) {
(0331) key_value=key_no;
033D EF8F LDI R24,0xFF
033E 938001C5 STS key_value,R24
(0332) key_pressed=false;
0340 2422 CLR R2
0341 922001C4 STS key_pressed,R2
(0333) key_value=Key_Decode();
0343 DFAA RCALL _Key_Decode
0344 930001C5 STS key_value,R16
(0334) if(key_value!=key_no)
0346 3F0F CPI R16,0xFF
0347 F409 BNE 0x0349
0348 C06E RJMP 0x03B7
(0335) {
(0336) key_state = KBD_DEBOUNCE;
0349 E081 LDI R24,1
034A 938001C6 STS key_state,R24
(0337) key_tick=0;
034C 2422 CLR R2
034D 2433 CLR R3
034E 923001C8 STS key_tick+1,R3
0350 922001C7 STS key_tick,R2
(0338)
(0339) }
(0340) break;
0352 C064 RJMP 0x03B7
(0341) }
(0342)
(0343) case KBD_DEBOUNCE:
(0344)
(0345) {
(0346)
(0347) if (key_tick > KBD_DEBOUNCE_TEMPO)
0353 E382 LDI R24,0x32
0354 E090 LDI R25,0
0355 902001C7 LDS R2,key_tick
0357 903001C8 LDS R3,key_tick+1
0359 1582 CP R24,R2
035A 0593 CPC R25,R3
035B F008 BCS 0x035D
035C C05A RJMP 0x03B7
(0348) key_state = KBD_DECODE;
035D E082 LDI R24,2
035E 938001C6 STS key_state,R24
(0349)
(0350) break;
0360 C056 RJMP 0x03B7
(0351) }
(0352)
(0353) case KBD_DECODE:
(0354) {
(0355)
(0356) if(key_value==Key_Decode())
0361 DF8C RCALL _Key_Decode
0362 902001C5 LDS R2,key_value
0364 1620 CP R2,R16
0365 F421 BNE 0x036A
(0357) {
(0358) //if(( key_value==key_dec)||(key_value==key_inc))
(0359) // key_state = KBD_DECODE5;
(0360) //else
(0361) key_state = KBD_DECODE2;
0366 E083 LDI R24,3
0367 938001C6 STS key_state,R24
(0362)
(0363)
(0364) }
0369 C04D RJMP 0x03B7
(0365) else
(0366) key_state = KBD_IDLE;
036A 2422 CLR R2
036B 922001C6 STS key_state,R2
(0367) break;
036D C049 RJMP 0x03B7
(0368) }
(0369)
(0370) case KBD_DECODE2:
(0371) {
(0372) if(key_value!=Key_Decode())
036E DF7F RCALL _Key_Decode
036F 902001C5 LDS R2,key_value
0371 1620 CP R2,R16
0372 F409 BNE 0x0374
0373 C043 RJMP 0x03B7
(0373) {key_pressed = true;
0374 E081 LDI R24,1
0375 938001C4 STS key_pressed,R24
(0374) key_state = KBD_IDLE;
0377 2422 CLR R2
0378 922001C6 STS key_state,R2
(0375) }
(0376) break;
037A C03C RJMP 0x03B7
(0377) }
(0378)
(0379) case KBD_DECODE3:
(0380) {
(0381) if (key_tick > KBD_DEBOUNCE_TEMP1)
037B E28C LDI R24,0x2C
037C E091 LDI R25,1
037D 902001C7 LDS R2,key_tick
037F 903001C8 LDS R3,key_tick+1
0381 1582 CP R24,R2
0382 0593 CPC R25,R3
0383 F598 BCC 0x03B7
(0382) key_state = KBD_DECODE5;
0384 E086 LDI R24,6
0385 938001C6 STS key_state,R24
(0383) break;
0387 C02F RJMP 0x03B7
(0384) }
(0385)
(0386) case KBD_DECODE4:
(0387) {
(0388)
(0389) key_pressed = true;
0388 E081 LDI R24,1
0389 938001C4 STS key_pressed,R24
(0390) key_state = KBD_DECODE3;
038B E084 LDI R24,4
038C 938001C6 STS key_state,R24
(0391) key_tick=0;
038E 2422 CLR R2
038F 2433 CLR R3
0390 923001C8 STS key_tick+1,R3
0392 922001C7 STS key_tick,R2
(0392) if(key_value!=Key_Decode())
0394 DF59 RCALL _Key_Decode
0395 902001C5 LDS R2,key_value
0397 1620 CP R2,R16
0398 F0F1 BEQ 0x03B7
(0393) {
(0394) key_pressed = true;
0399 E081 LDI R24,1
039A 938001C4 STS key_pressed,R24
(0395) key_state = KBD_IDLE;
039C 2422 CLR R2
039D 922001C6 STS key_state,R2
(0396) }
(0397) break;
039F C017 RJMP 0x03B7
(0398) }
(0399) case KBD_DECODE5:
(0400) {
(0401)
(0402) if (key_tick > KBD_DEBOUNCE_TEMP1)
03A0 E28C LDI R24,0x2C
03A1 E091 LDI R25,1
03A2 902001C7 LDS R2,key_tick
03A4 903001C8 LDS R3,key_tick+1
03A6 1582 CP R24,R2
03A7 0593 CPC R25,R3
03A8 F418 BCC 0x03AC
(0403) key_state = KBD_DECODE4;
03A9 E085 LDI R24,5
03AA 938001C6 STS key_state,R24
(0404) if(key_value!=Key_Decode())
03AC DF41 RCALL _Key_Decode
03AD 902001C5 LDS R2,key_value
03AF 1620 CP R2,R16
03B0 F031 BEQ 0x03B7
(0405) {
(0406) key_pressed = true;
03B1 E081 LDI R24,1
03B2 938001C4 STS key_pressed,R24
(0407) key_state = KBD_IDLE;
03B4 2422 CLR R2
03B5 922001C6 STS key_state,R2
(0408) }
(0409)
(0410) break;
(0411) }
(0412)
(0413) default: break;
03B7 D716 RCALL pop_gset1
03B8 9508 RET
_UserApplication:
nn --> Y+3
03B9 D709 RCALL push_gset5
03BA 9722 SBIW R28,2
(0414) }
(0415)
(0416)
(0417) }
(0418)
(0419)
(0420) void UserApplication(void)
(0421) {
(0422) unsigned char nn;;
(0423) init_devices();
03BB DE60 RCALL _init_devices
(0424) TimerCount=0;
03BC 2422 CLR R2
03BD 2433 CLR R3
03BE 923001CC STS TimerCount+1,R3
03C0 922001CB STS TimerCount,R2
(0425) TimerCountOld=0;
03C2 923001CA STS TimerCountOld+1,R3
03C4 922001C9 STS TimerCountOld,R2
(0426) key_state=KBD_IDLE;
03C6 922001C6 STS key_state,R2
(0427) mode_state=0;
03C8 922001C3 STS mode_state,R2
(0428) PutChar(0x0a);
03CA E00A LDI R16,0xA
03CB D6B7 RCALL _PutChar
(0429) PutChar(0x0d);
03CC E00D LDI R16,0xD
03CD D6B5 RCALL _PutChar
(0430) PutStr("富友勤电子M8DEMO");
03CE E40F LDI R16,0x4F
03CF E011 LDI R17,1
03D0 D635 RCALL _PutStr
(0431) PutStr("时钟模式");
03D1 E406 LDI R16,0x46
03D2 E011 LDI R17,1
03D3 D632 RCALL _PutStr
03D4 C27D RJMP 0x0652
(0432) while(1)
(0433) {
(0434) Key_Task();
03D5 DF42 RCALL _Key_Task
(0435) if(key_pressed)
03D6 902001C4 LDS R2,key_pressed
03D8 2022 TST R2
03D9 F409 BNE 0x03DB
03DA C277 RJMP 0x0652
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -