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

📄 key.lst

📁 C语言学习的一个不错的资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
0000A418 19 D3 47 06        	        [KeyBuf] = r1        //清键盘缓冲区
0000A41A 09 93 FF 00        			r1=0xff;			//if no key ,KeyCode=0xff
0000A41C 90 9A              	         retf
                            	
                            	Have_Key_Pressed:            //有键按下处理
0000A41D 19 D3 47 06        	        [KeyBuf]=r1       	//是否连续两次按键扫描值相同
                            	        
0000A41F 40 F0 68 A4        	        call Delay10ms
                            	        
0000A421 4F 92              	        r1 = 0x000f           
0000A422 11 B3 00 70        	        r1 &= [P_IOA_Data]
                            	        
0000A424 11 43 47 06        	        cmp r1,[KeyBuf]
0000A426 50 4E              	        jne   NoKey_Press
0000A427 40 F0 34 A4        	        call   F_Key_Scaning  //行扫描确定键
0000A429 40 F0 5C A4        	        call   Key_Order      //确定键码
0000A42B 1A D5 4D 06        	        [KeyValue]=r2
                            	        
                            	   WaitDebon:    
0000A42D 4F 92              	        r1 = 0x000f           
0000A42E 11 B3 00 70        	        r1 &= [P_IOA_Data]
0000A430 44 4E              	        jnz    WaitDebon
                            	        
0000A431 11 93 4D 06        	        r1=[KeyValue]
0000A433 90 9A              	        retf                 //清键盘缓冲区
                            	 .endp
                            	//////////////////////////////////////////
                            	//行扫描函数
                            	//函数名称:unsigned F_Key_Scaning()
                            	//出口参数:扫描键值
                            	//**************************************//
                            	      
                            	F_Key_Scaning:
                            	F_Key_Scan_B7:   	    
0000A434 0A 95 80 00        		    r2=0x0080          //扫描第一行
0000A436 1A D5 00 70        		    [P_IOA_Data] = r2  
0000A438 4F 92              		    r1 = 0x000f	    	   
0000A439 11 B3 00 70        	    	r1& =[P_IOA_Data]
0000A43B 40 42              		    cmp r1,0x0000      //是否该行有键按下
0000A43C 1D 4E              	    	jnz  F_Key_Pressed   	        
                            	F_Key_Scan_B6:
0000A43D 0A 95 40 00        		    r2=0x0040          //扫描第二行
0000A43F 1A D5 00 70        		    [P_IOA_Data] = r2
0000A441 4F 92              		    r1 = 0x000f	    	   
0000A442 11 B3 00 70        	    	r1& =[P_IOA_Data]
0000A444 40 42              		    cmp r1,0x0000      //是否该行有键按下
0000A445 14 4E              	    	jnz  F_Key_Pressed   
                            	F_Key_Scan_B5:           
0000A446 60 94              	    	r2=0x0020           //扫描第三行
0000A447 1A D5 00 70        		    [P_IOA_Data] = r2
0000A449 4F 92              		    r1 = 0x000f	    	   
0000A44A 11 B3 00 70        	    	r1& =[P_IOA_Data] 
0000A44C 40 42              		    cmp r1,0x0000       //是否该行有键按下
0000A44D 0C 4E              	    	jnz  F_Key_Pressed   
                            	F_Key_Scan_B4:
0000A44E 50 94              		    r2=0x0010          //扫描第四行
0000A44F 1A D5 00 70        		    [P_IOA_Data] = r2
0000A451 4F 92              		    r1 = 0x000f	    	   
0000A452 11 B3 00 70        	    	r1& =[P_IOA_Data]
0000A454 40 42              		    cmp r1,0x0000      //是否该行有键按下
0000A455 04 4E              	    	jnz  F_Key_Pressed   
0000A456 40 92              	        r1=0
0000A457 40 94              	        r2=0         
0000A458 19 D3 47 06        	        [KeyBuf] = r1  
                            	F_Key_Pressed:	
0000A45A 01 A5              			r2|=r1      //r2--B11~B8:output    r1--B0~B7,input
0000A45B 90 9A              	        retf
                            	 //***********************************//
                            	 //确定键值函数
                            	 //函数名称:Key_Order()
                            	 //***********************************//
                            	Key_Order: 
0000A45C 41 96              	      r3=1
                            	Key_value_Loop:
0000A45D 0B 0B FD A5        	      bp = r3 + Key_Table
0000A45F C5 92              	      r1 = [bp]
0000A460 02 43              	      cmp r1,r2
0000A461 04 5E              	      je KeyOrder_Ret
0000A462 41 06              	      r3 += 1
0000A463 4F 46              	      cmp r3,15  //modified by gywei ( cmp r3,11 )
0000A464 48 8E              	      jbe Key_value_Loop
0000A465 40 96              	      r3=0
                            	 KeyOrder_Ret: 
0000A466 03 95              	       r2=r3     
0000A467 90 9A              	        retf
                            	 
                            	 //****************************************//
                            	 //延时函数
                            	 //函数名称:Delay10ms()
                            	 //****************************************//
                            	 Delay10ms:
0000A468 0C 99 FF 2F        	      r4=0x2FFF
                            	    Delay10LOOP:
0000A46A 41 28              	       R4-=1
0000A46B 42 4E              	       JNZ     Delay10LOOP
0000A46C 90 9A              	       RETF  
                            	  
0000A5FD                    	  .data             
                            	 Key_Table:
                            	//    .dw  0x0000
0000A5FD 11 00 12 00        	    .dw 0x0011,0x0012,0x0014,0x0018
         14 00 18 00
0000A601 21 00 22 00        	    .dw 0x0021,0x0022,0x0024,0x0028
         24 00 28 00
0000A605 41 00 42 00        	    .dw 0x0041,0x0042,0x0044,0x0048
         44 00 48 00
0000A609 81 00 82 00        	    .dw 0x0081,0x0082,0x0084,0x0088      
         84 00 88 00
                            	//////////////////////////////////////////////////////////////////
                            	// Function: Get Key code from key pad(8 x 1 key pad)
                            	// Input: Port IOA b7-b0
                            	// Output: R_KeyStrobe b7-b0
                            	//          | 	  |     |     | 
                            	// +Vcc --- x --- x ... x --- x ---   
                            	//          |     |     |     |
                            	//          IOA.7             IOA.0
                            	// Note: 1)link F_DebounceCntDown is necessary 
                            	// Destory register: r1, r2                                            
                            	////////////////////////////////////////////////////////////////// 
                            	F_Key_Scan_ServiceLoop:
                            			
0000A60D 11 93 00 70        	     	r1 = [P_IOA_Data];			// get key data from IOA   
                            		    	
0000A60F 09 B3 FF 00        	        r1 = r1 and 0xff;				//
0000A611 12 95 49 06        	        r2 = [R_DebounceReg];			//
0000A613 19 D3 49 06        	        [R_DebounceReg] = r1;			//
0000A615 12 45 49 06        	        cmp r2,[R_DebounceReg];			//
0000A617 04 5E              	        je	L_KS_StableTwoSample;		//
                            	        
0000A618 48 92              	        r1 = C_DebounceCnt;				//debounce time setting
0000A619 19 D3 4A 06        	        [R_DebounceCnt] = r1;			//
0000A61B 90 9A              	        retf;							//
                            	        
                            	L_KS_StableTwoSample:
0000A61C 11 93 4A 06        			r1 = [R_DebounceCnt];			//
0000A61E 01 5E              			jz	L_KS_StableOverDebounce;	//
0000A61F 90 9A              			retf;
                            		
                            	L_KS_StableOverDebounce:        
0000A620 19 D3 4A 06        			[R_DebounceCnt] = r1;			//
0000A622 12 95 49 06        			r2 = [R_DebounceReg];			//
0000A624 11 93 4B 06        			r1 = [R_KeyBuf];				//
0000A626 1A D5 4B 06        			[R_KeyBuf] = r2;				//
0000A628 09 83 FF 00        			r1 = r1 xor 0x00ff;				//
0000A62A 11 B3 4B 06        			r1 = r1 and [R_KeyBuf];			//
0000A62C 09 B3 FF 00        			r1 = r1 and 0x00ff;				//
0000A62E 11 A3 4C 06        			r1 = r1 or [R_KeyStrobe];		//
0000A630 19 D3 4C 06        			[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
0000A632 90 9A              			retf;		
                            		
                            	
                            	//////////////////////////////////////////////////////////////////
                            	// Function: debounce counter down count
                            	//////////////////////////////////////////////////////////////////
                            	F_Key_DebounceCnt_Down:
0000A633 11 93 4A 06        			r1 = [R_DebounceCnt];			// Debounce subroutine for F_IO_Key_Scan:
0000A635 03 5E              			jz	L_DebounceCntZero;			// stop count if zero
0000A636 41 22              			r1 -= 0x0001;					//
0000A637 19 D3 4A 06        			[R_DebounceCnt] = r1;			//
                            	L_DebounceCntZero:						//
0000A639 90 9A              			retf;  							//	
0 error(s), 0 warning(s).

⌨️ 快捷键说明

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