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

📄 key.lst

📁 使用SPCE061A单片机通过4*4键盘控制16档速度
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_S480
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_S240
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_MS01
                     <      	.EXTERNAL	F_SP_ReadQueue_NIC_DVR
                     <      	
                     <      	
                     <      	.EXTERNAL	F_SP_SACM_A2000_Init_
                     <      	.EXTERNAL	F_SP_SACM_S480_Init_
                     <      	.EXTERNAL	F_SP_SACM_S240_Init_
                     <      	
                     <      	.EXTERNAL	F_SP_SACM_MS01_Init_
                     <      	.EXTERNAL	F_SP_PlayMode0_
                     <      	.EXTERNAL	F_SP_PlayMode1_
                     <      	.EXTERNAL	F_SP_PlayMode2_
                     <      	.EXTERNAL	F_SP_PlayMode3_
                     <      	
                     <      	.EXTERNAL	F_SP_SACM_DVR_Init_
                     <      	.EXTERNAL 	F_SP_SACM_DVR_Rec_Init_
                     <      	.EXTERNAL 	F_SP_SACM_DVR_Play_Init_
                     <      	
                     <      	.EXTERNAL	F_SP_GetResource
                     <      	
                     <      	//////////////////////////////////////////////////////////////////
                     <      	// Reserve old defintion
                     <      	// Note: Some user who use old library may use the old name
                     <      	//////////////////////////////////////////////////////////////////
                     <      	.EXTERNAL	F_SP_Send_PWM					// Get RAW data 
                     <      	.EXTERNAL	F_SP_Send_DAC1 					// 
                     <      	.EXTERNAL	F_SP_Send_DAC2 					//
                     <      	
                     <      	.EXTERNAL	F_STD_Send_DAC1 				// reserved old
                     <      	.EXTERNAL	F_STD_Send_DAC2 				// reserved old
                     <      	
                     <      	.EXTERNAL 	F_RampUpDAC1					// reserved old
                     <      	.EXTERNAL 	F_RampDnDAC1					// reserved old
                     <      	.EXTERNAL 	F_RampUpDAC2					// reserved old
                     <      	.EXTERNAL  	F_RampDnDAC2					// reserved old
                     <      	///////////////////////////////////////////////////////////////////
                     <      	
                     <      	
                     <      		
                     <      	//========================================================================================        
                     <      	// End of hardware.inc
                     <      	//========================================================================================
00000006                    	.IRAM
00000006 00 00              	.VAR     I_KeyBuf = 0                 //保存键值
00000007 00 00              	.VAR	I_Key_Delay = 0               //扫描有键按下的次数
                            	.EXTERNAL _KeyFlag                    //有键按下标识符
0000815B                    	.CODE
                            	.PUBLIC _SP_Init_IOA;              
                            	_SP_Init_IOA: .PROC
0000815B 09 93 F0 00        	   	R1 = 0x00f0;      
0000815D 19 D3 03 70        	    [P_IOA_Attrib] = R1;    
0000815F 19 D3 02 70        	    [P_IOA_Dir] = R1;
00008161 19 D3 00 70        	    [P_IOA_Data] = R1;
00008163 90 9A              	    RETF
                            	.ENDP;
                            	
                            	//============================================================================================
                            	//函数: F_Key_Scan()
                            	//语法:void F_Key_Scan()
                            	//描述:键盘扫描函数
                            	//参数:无
                            	//返回:无
                            	//=============================================================================================
                            	.PUBLIC _F_Key_Scan;
                            	_F_Key_Scan: .PROC      
00008164 09 93 F0 00        	    R1 = 0x00F0		                  //扫描键盘
00008166 19 D3 00 70        		[P_IOA_Data] = R1
00008168 4F 92              	    R1 = 0x000f           
00008169 11 B3 00 70        	    R1 &= [P_IOA_Data]
0000816B 08 4E              	    JNZ L_Have_Key_Pressed
                            	L_NoKey_Press:                        //无键按下
0000816C 40 92              	    R1 = 0 
0000816D 19 D3 06 00        	    [I_KeyBuf] = R1                   //清键盘缓冲区
0000816F 19 D3 05 00        	    [_KeyFlag] = R1
00008171 19 D3 07 00        	    [I_Key_Delay]=R1;
00008173 90 9A              	    RETF
                            	L_Have_Key_Pressed:                  //有键按下处理         
00008174 40 F0 79 81        	    CALL   F_Key_Scaning             //行扫描确定键
00008176 40 F0 9E 81        	    CALL   Enter_Key;                //确认有键按下
00008178 90 9A              	    RETF       
                            	    .ENDP
                            	//============================================================================================
                            	//函数: unsigned F_Key_Scaning()
                            	//语法:void unsigned F_Key_Scaning()
                            	//描述:行扫描函数
                            	//参数:无
                            	//返回:扫描键值
                            	//=============================================================================================
                            	.PUBLIC	 F_Key_Scaning;	   
                            	F_Key_Scaning:
                            	F_Key_Scan_B7:   	    
00008179 0A 95 80 00        	    R2=0x0080                        //扫描第一行
0000817B 1A D5 00 70        		[P_IOA_Data] = R2  
0000817D 4F 92              		R1 = 0x000f	    	   
0000817E 11 B3 00 70        	    R1& =[P_IOA_Data]
00008180 40 42              		CMP R1,0x0000                    //是否该行有键按下
00008181 1A 4E              	    JNZ  F_Key_Pressed   	        
                            	F_Key_Scan_B6:
00008182 0A 95 40 00        	    R2=0x0040                        //扫描第二行
00008184 1A D5 00 70        		[P_IOA_Data] = R2
00008186 4F 92              		R1 = 0x000f	    	   
00008187 11 B3 00 70        	    R1& =[P_IOA_Data]
00008189 40 42              		CMP R1,0x0000                   //是否该行有键按下
0000818A 11 4E              	    JNZ  F_Key_Pressed   
                            	F_Key_Scan_B5:           
0000818B 60 94              	    R2=0x0020                       //扫描第三行
0000818C 1A D5 00 70        		[P_IOA_Data] = R2
0000818E 4F 92              		R1 = 0x000f	    	   
0000818F 11 B3 00 70        	    R1& =[P_IOA_Data] 
00008191 40 42              		CMP R1,0x0000                   //是否该行有键按下
00008192 09 4E              	    JNZ  F_Key_Pressed   
                            	F_Key_Scan_B4:
00008193 50 94              		R2=0x0010                       //扫描第四行
00008194 1A D5 00 70        		[P_IOA_Data] = R2
00008196 4F 92              		R1 = 0x000f	    	   
00008197 11 B3 00 70        	    R1& =[P_IOA_Data]
00008199 40 42              		CMP R1,0x0000                  //是否该行有键按下
0000819A 01 4E              	    JNZ  F_Key_Pressed   
0000819B 90 9A              		RETF		
                            	F_Key_Pressed:	
0000819C 01 A5              	    R2|=R1                         //R2--B11~B8:输出   R1--B0~B7,输入
0000819D 90 9A              	    RETF
                            	
                            	//============================================================================================
                            	//函数: Enter_Key()
                            	//语法:Enter_Key()
                            	//描述:确定有键按下函数
                            	//参数:无
                            	//返回:无
                            	//============================================================================================
                            	Enter_Key:
                            	Scan_first:
0000819E 13 97 07 00        	    R3 = [I_Key_Delay]
000081A0 40 46              	    CMP R3,0x0000
000081A1 06 4E              	    JNZ L_Scan_many;
000081A2 1A D5 06 00        	    [I_KeyBuf] = R2;
000081A4 41 06              	    R3 += 1;
000081A5 1B D7 07 00        	    [I_Key_Delay] = R3;
000081A7 90 9A              	    RETF;
                            	L_Scan_many:                         //去抖
000081A8 11 93 06 00        	    R1 = [I_KeyBuf]        
000081AA 02 43              	    CMP R1,R2
000081AB 0F 4E              	    JNE L_Error_Key_pro;
000081AC 13 97 07 00        	    R3 = [I_Key_Delay]
000081AE 41 06              	    R3 += 1;
000081AF 1B D7 07 00        	    [I_Key_Delay] = R3;		
000081B1 50 46              		CMP		R3, 0x0010;         
000081B2 01 5E              		JE		L_Enter_Have_KeyDown;
000081B3 90 9A              		RETF;
                            	L_Enter_Have_KeyDown:
000081B4 41 92              		R1 = 1;
000081B5 19 D3 05 00        	    [_KeyFlag] = R1	
000081B7 40 96              	    R3 = 0;
000081B8 1B D7 07 00        	    [I_Key_Delay]=R3	
000081BA 90 9A              	    RETF
                            	L_Error_Key_pro:
000081BB 40 96              	    R3 = 0;
000081BC 1B D7 07 00        	    [I_Key_Delay]=R3
000081BE 1B D7 06 00        		[I_KeyBuf] = R3
000081C0 90 9A              		RETF;
                            		    
                            	//============================================================================================
                            	//函数: unsigned F_Get_Key()
                            	//语法:unsigned F_Get_Key()
                            	//描述:取键值函数
                            	//参数:无
                            	//返回:键值
                            	//============================================================================================
                            	.PUBLIC		_F_Get_Key;       
                            	_F_Get_Key:    .PROC
000081C1 41 96              	    R3 = 1
000081C2 12 95 06 00        	    R2 = [I_KeyBuf]
                            	L_Key_value_Loop:
000081C4 0B 0B D2 81        	    BP = R3 + Key_Table
000081C6 C5 92              	    R1 = [bp]
000081C7 02 43              	    CMP R1,R2
000081C8 04 5E              	    JE L_KeyCode_Return
000081C9 41 06              	    R3 += 1
000081CA 52 46              	   CMP R3,18
                            	   // CMP R3,11
000081CB 48 8E              	    JBE L_Key_value_Loop
000081CC 40 96              	    R3=0
                            	L_KeyCode_Return:
000081CD 40 92              	    R1 = 0;
000081CE 19 D3 06 00        	    [I_KeyBuf] = R1; 
000081D0 03 93              	    R1=R3     
000081D1 90 9A              	    RETF                             //清键盘缓冲区
                            	    .endp    
                            	 
                            	            
                            	 Key_Table:
                            	 //.DW  0x0088,0x0084,0x0082,0x0081
                            	 //.DW  0x0048,0x0044,0x0042,0x0041
                            	 //.DW  0x0028,0x0024,0x0022,0x0021
                            	 //.DW  0x0018,0x0014,0x0012,0x0011
                            	 
000081D2 11 00 21 00        	 .DW  0x0011,0x0021,0x0041,0x0081
         41 00 81 00
000081D6 12 00 22 00        	 .DW  0x0012,0x0022,0x0042,0x0082
         42 00 82 00
000081DA 14 00 24 00        	 .DW  0x0014,0x0024,0x0044,0x0084
         44 00 84 00
000081DE 18 00 28 00        	 .DW  0x0018,0x0028,0x0048,0x0088
         48 00 88 00
                            	 
                            	  //  .DW 0x0000,0x0014,0x0024,0x0044
                            	  //  .DW 0x0012,0x0022,0x0042,0x0011
                            	  //  .DW 0x0021,0x0041,0x0028,0x0018
                            	  //  .DW 0x0081,0x0082,0x0084,0x0048      
                            	
                            	  
                            	  
0 error(s), 0 warning(s).


⌨️ 快捷键说明

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