key.lst

来自「结合"61板"的三个按键完成带有语音播报功能的电子钟:、KEY1--按一下播放年」· LST 代码 · 共 331 行 · 第 1/2 页

LST
331
字号
                     <      	.DEFINE C_D2_LatchAB			0x00C0;			//
                     <      	
                     <      	//... Define for P_LVD_Ctrl ...................
                     <      	.DEFINE C_LVD24V				0x0000;			// LVD = 2.4V 
                     <      	.DEFINE C_LVD28V				0x0001;			// LVD = 2.8V
                     <      	.DEFINE C_LVD32V				0x0002;			// LVD = 3.2V
                     <      	.DEFINE C_LVD36V				0x0003;			// LVD = 3.6V
                     <      	
                     <      	
                     <      	.EXTERNAL	F_SP_Read_INT_Status;			// for further use
                     <      	.EXTERNAL 	F_SP_Write_INT_Status;			// for further use
                     <      	.EXTERNAL  	F_SP_Set_INT_Vector;			// for further use
                     <      	.EXTERNAL	F_SP_Clear_INT_Vector;			// for further use
                     <      	
                     <      	.EXTERNAL	F_SP_Send_Out;					//
                     <      	.EXTERNAL	F_SP_Send_DAC1;					//
                     <      	.EXTERNAL	F_SP_Send_DAC2;					//
                     <      	.EXTERNAL	F_SP_Send_Two_DAC;				//
                     <      	.EXTERNAL	F_SP_Init_HW;					//
                     <      	
                     <      	.EXTERNAL	R_InterruptStatus;
                     <      	
                     <      	
                     <      	.EXTERNAL 	F_SP_RampUpDAC1;
                     <      	.EXTERNAL 	F_SP_RampDnDAC1;
                     <      	.EXTERNAL 	F_SP_RampUpDAC2;
                     <      	.EXTERNAL  	F_SP_RampDnDAC2;
                     <      	
                     <      	.EXTERNAL 	F_SP_InitQueue;
                     <      	.EXTERNAL 	F_SP_ReadQueue;
                     <      	.EXTERNAL 	F_SP_WriteQueue;
                     <      	.EXTERNAL 	F_SP_TestQueue;
                     <      	
                     <      	
                     <      	
                     <      	.EXTERNAL	F_SP_Get_ADC
                     <      	
                     <      	.EXTERNAL 	F_SP_Set_P_TimerA_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_TimerA_Data
                     <      	.EXTERNAL 	F_SP_Set_P_TimerB_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_TimerB_Data
                     <      	.EXTERNAL 	F_SP_Set_P_INT_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_INT_Clear
                     <      	.EXTERNAL 	F_SP_Set_P_SystemClock
                     <      	.EXTERNAL 	F_SP_Set_P_DAC_Ctrl
                     <      	.EXTERNAL 	F_SP_Set_P_ADC_Ctrl
                     <      	
                     <      		
                     <      	
                     <      	//--------------------------------------------
                     <      	SACM_MACRO1: 	.MACRO
                     <      		
                     <      		.ENDM
                     <      	
                     <      	SACM_MACRO2:	.MACRO
                     <      		
                     <      		.ENDM
                     <      	
                     <      	
                     <      	
                     <      	
                     <      	//.define PC_Play_Enable_A2000		1    	// Enable the PC-Play function for SACM-A2000 module
                     <      	//.define PC_Play_Enable_S480		1    	// Enable the PC-Play function for SACM-S480 module
                     <      	//.define PC_Play_Enable_S240		1    	// Enable the PC-Play function for SACM-S240 module    
                     <      	//.define PC_Play_Enable_MS01		1    	// Enable the PC-Play function for SACM-MS01 module
                     <      	
                     <      	
                     <      	
                     <      	//========================================================================================        
                     <      	// End of hardware.inc
                     <      	//========================================================================================
                            	
                            	.PUBLIC    _Key_Scan_ServiceLoop;
                            	
                            	.DEFINE C_DebounceCnt	0x0050; //13ms 去抖
                            	.DEFINE C_CONTINUE   	0xB00;  //第二次以后有效
                            	
                            	
                            	.EXTERNAL  _Key
                            	.EXTERNAL  _KeyPressFlag;  //无键按下时清0;有键按下时B0=1;
                            	                             //第二次以后有效B15=1
                            	.EXTERNAL _SleepFlag
                            	
00000332                    	.RAM
00000332 00 00              	.VAR    Key_Buff;           //本次键值暂存单元
00000333 00 00              	.VAR    Key_Debounce;       //计数单元
00000334 00 00              	.VAR    KeyScanLineBuff;
                            	
                            	
0000959E                    	.CODE   
                            	.PUBLIC Key_Scan_Init
                            	Key_Scan_Init: .PROC
0000959E 40 92              	       r1=0x0000
0000959F 19 D3 37 03        	       [_Key]=r1
000095A1 19 D3 32 03        	       [Key_Buff]=r1
000095A3 19 D3 38 03        	       [_KeyPressFlag]=r1
000095A5 90 9A              	       retf
                            	      .ENDP
                            	 
                            	_Key_Scan_ServiceLoop: .PROC
000095A6 41 92              	         r1=0x0001;                      // Clear watch dog
000095A7 19 D3 12 70        			 [P_Watchdog_Clear]=r1;
000095A9 12 95 00 70        	         r2=[P_IOA_Data]
000095AB 0A B5 FF 00        	         r2&=0x00ff
000095AD 09 4E              	         jnz F_SomeKeyIsPressed
000095AE 40 92              	         r1=0x0000
000095AF 19 D3 32 03        	         [Key_Buff]=r1      
000095B1 19 D3 38 03        	         [_KeyPressFlag]=r1    //清0
000095B3 41 92              	         r1=1 
000095B4 19 D3 3A 03        	         [_SleepFlag] = r1   //置睡眠标志
000095B6 90 9A              	         retf
                            	//-----------------------------//
                            	 F_SomeKeyIsPressed:    
000095B7 13 97 38 03        	         r3=[_KeyPressFlag]    //有键按下  B0=1
000095B9 41 A6              	         r3|=0x0001
000095BA 1B D7 38 03        	         [_KeyPressFlag]=r3   //置按键标志
                            	             
000095BC 40 96              	         r3=0 
000095BD 1B D7 3A 03        	         [_SleepFlag] = r3      //清睡眠标志
                            	         
000095BF 11 93 32 03        	         r1=[Key_Buff]    //读上次键值
000095C1 1A D5 32 03        	         [Key_Buff]=r2    //暂存本次键值
000095C3 02 43              	         cmp r1,r2
000095C4 08 5E              	         je L_KS_StableTwoSample
000095C5 40 92              	         r1=0x0000
000095C6 19 D3 37 03        	         [_Key]=r1
000095C8 09 93 50 00        	         r1=C_DebounceCnt    //初始化计数单元
000095CA 19 D3 33 03        	         [Key_Debounce]=r1  
000095CC 90 9A              	         retf
                            	        
                            	   
                            	   L_KS_StableTwoSample:       
000095CD 11 93 33 03        		     r1=[Key_Debounce]
000095CF 04 5E              	         jz L_KS_StableOverDebounce
000095D0 41 22              	         r1-=1              //计数减 1
000095D1 19 D3 33 03        	         [Key_Debounce]=r1    
000095D3 90 9A              	         retf   
                            	         
                            	
                            	L_KS_StableOverDebounce:   //形成键码
000095D4 11 93 32 03        			r1=[Key_Buff]       //暂存值
                            	
000095D6 0B 97 00 80        	        r3=0x8000    //是第一次有效吗?
000095D8 13 C7 38 03        	        test r3,[_KeyPressFlag]   
000095DA 03 5E              	        jz Key_First_Avail
                            	
000095DB 09 A3 00 80        	        r1|=0x8000       //连续按键有效         ///////////////////////
000095DD 06 EE              	        jmp  Key_Get_Value
                            	        
                            	 Key_First_Avail:    //第一次有效        
000095DE 13 97 38 03        	       r3=[_KeyPressFlag]    //有键按下  B15=1
000095E0 0B A7 00 80        	       r3|=0x8000
000095E2 1B D7 38 03        	       [_KeyPressFlag]=r3   
                            	       
                            	 Key_Get_Value:      
000095E4 19 D3 37 03        	        [_Key]=r1   //存有效键值  
000095E6 09 93 00 0B        	        r1=C_CONTINUE
000095E8 19 D3 33 03        	        [Key_Debounce]=r1
000095EA 90 9A              	        retf
                            	      .ENDP
                            	        
                            	 
0 error(s), 0 warning(s).

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?