⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m8demo.lst

📁 AVR系列被广泛应用的单片机MEGA8开发(原理图)及例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -