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

📄 kbsub.lis

📁 这是我做课程设计时自己做的,用摩托罗位的飞思卡尔单片机做的,包括了对键盘复键的处理
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module KBsub.c
                        .area text
 0000           _KB_Init::
 0000           ; #include "KeyBoard_define.h"
 0000           ; //#include "stdio.h"
 0000           ; 
 0000           ; 
 0000           ; /*-----------------------------------------------------*
 0000           ; *文件描述:本文件包含了H08C键盘中断子函数,分别为:       *  
 0000           ; *(1)KB_Init:键盘初始化函数                             *
 0000           ; *   void KB_Init(void)                                 *
 0000           ; *(2)KB_Scan:扫描读取键值函数                           *
 0000           ; *   unsigned char KB_Scan(void)                        *
 0000           ; *(3)KB_Def:键值转为定义值函数                          *
 0000           ; *   unsigned char KB_Def(unsigned char KB_valve)       *
 0000           ; *-----------------------------------------------------*/
 0000           ; /*[以下为子程序源代码]*/
 0000           ; /*[头文件]*/
 0000           ; #include "GP32C.H"
 0000           ; #include "KB.h"
 0000           ; /*KB_Init:键盘初始化函数-------------------------------*
 0000           ; *功  能:初始化键盘中断的引脚,但未开放键盘中断         *
 0000           ; *参  数:无                                             *
 0000           ; *返  回:无                                             *
 0000           ; *-----------------------------------------------------*/  
 0000           ; void KB_Init(void)
 0000           ; {
 0000           ; 	 KB_P=0x00;             //复位KB_P
 0000 3F00              clr 0
 0002           ;        KB_D=0b00001111;       //定定义7-4为输入,3-0为输出
 0002 A60F              lda #15
 0004 B704              sta 0x4
 0006           ;        KB_PUE=0b11110000;     //定义输入引脚有内部上拉电阻
 0006 A6F0              lda #-16
 0008 B70D              sta 0xd
 000A           L1:
 000A                   .dbline 0 ; func end
 000A 81                rts
 000B           ;       tmp_beta -> 2,X
 000B           ;    trap_in_tmp -> 3,X
 000B           ;           line -> 4,X
 000B           ;              i -> 5,X
 000B           ;            tmp -> 6,X
 000B           _KB_Scan::
 000B A7F9              ais #-7
 000D 95                tsx
 000E           ;        //INTKBSCR|= (1<<IntBit);//屏蔽键盘中断(IMASKk=1)
 000E           ;        //INTKBIER=0b11110000;   //允许输入引脚的中断可进入
 000E           ;        //INTKBSCR|= (1<<ACKKBit);  //清键盘中断请求(ACKK=1)
 000E           ; }
 000E           ; /*KB_Scan:扫描读取键值函数-----------------------------*
 000E           ; *功  能:扫描一次4*4键盘上的按键,读取键值->*p          *
 000E           ; *         若无按键,*p为0xff                           *
 000E           ; *参  数:无                                             *
 000E           ; *返  回:扫描到的键值                                   *
 000E           ; 
 000E           ; /*----------------------------------------------------*/  
 000E           ; unsigned char KB_Scan(void) 
 000E           ;  {
 000E           ;        unsigned char line,i,tmp,tmp_beta,trap_in_tmp;
 000E           ;        trap_in_tmp=1;
 000E A601              lda #1
 0010 E703              sta 3,X
 0012           ;      line=0b11111110;        //使第一根行线为0(低电平)
 0012 A6FE              lda #-2
 0014 E704              sta 4,X
 0016           ;        for(i=1;i<4;i++)         //将扫描4根行线
 0016 A601              lda #1
 0018 E705              sta 5,X
 001A 2036              bra L6
 001C           L3:
 001C           ; 	  {	
 001C           ;         tmp=KB_P;            //取KB_P->tmp
 001C B600              lda 0
 001E E706              sta 6,X
 0020           ;         tmp|=0b00001111;     //KB_P.7-4保留,KB_P.3-0为1
 0020 AA0F              ora #15
 0022 E706              sta 6,X
 0024           ;         KB_P=tmp&line;       //令KB_P.n=0,n=0、1、2、3
 0024 E404              and 4,X
 0026 B700              sta 0
 0028           ;           asm("NOP");            //等待,消除按键抖动
 0028 9D                NOP
 0029           ;           asm("NOP");
 0029 9D                NOP
 002A           ;           tmp=KB_P;
 002A B600              lda 0
 002C E706              sta 6,X
 002E           ;           tmp&=0b11110000;       //看第n行是否有键按下
 002E A4F0              and #-16
 0030 E706              sta 6,X
 0032           ;           if(tmp!=0xf0)          //本行有键按下
 0032 A1F0              cmp #-16
 0034 2713              beq L7
 0036           ;            {  
 0036           ;               trap_in_tmp=0; 
 0036 6F03              clr 3,X
 0038           ;             tmp=KB_P;
 0038 B600              lda 0
 003A E706              sta 6,X
 003C           ;             tmp=KB_Def(tmp);
 003C 87                psha
 003D CD022B            jsr _KB_Def
 0040 A701              ais #1
 0042 95                tsx
 0043 B700              sta *__r1
 0045 E706              sta 6,X
 0047           ;             //printf("%c key value is pressed\r\n",tmp); 
 0047           ;                   break;
 0047 200F              bra L5
 0049           L7:
 0049 E604              lda 4,X
 004B 48                lsla
 004C AA01              ora #1
 004E E704              sta 4,X
 0050           L4:
 0050 6C05              inc 5,X
 0052           L6:
 0052 E605              lda 5,X
 0054 A104              cmp #4
 0056 25C4              blo L3
 0058           L5:
 0058           ; 	     }
 0058           ; 	     else                  //本行无键按下,扫描下一行
 0058           ; 		    line=(line<<1)|0x01; 
 0058           ; 	 }
 0058           ; 	 
 0058           ; 	 /************************************补扫第四行有没有按键按下***********************************/
 0058           ; 	
 0058           ; 	 if(1)
 0058           ; 	 {
 0058           ; 	 	line=0b11110111;
 0058 A6F7              lda #-9
 005A E704              sta 4,X
 005C           ;               tmp_beta=KB_P;            //取KB_P->tmp
 005C B600              lda 0
 005E E702              sta 2,X
 0060           ;         tmp_beta|=0b00001111;     //KB_P.7-4保留,KB_P.3-0为1.
 0060 AA0F              ora #15
 0062 E702              sta 2,X
 0064           ;         KB_P=tmp_beta&line;       //令KB_P.3=0
 0064 E404              and 4,X
 0066 B700              sta 0
 0068           ;           asm("NOP");            //等待,消除按键抖动
 0068 9D                NOP
 0069           ;           asm("NOP");
 0069 9D                NOP
 006A           ;           tmp_beta=KB_P;
 006A B600              lda 0
 006C E702              sta 2,X
 006E           ;           tmp_beta&=0b11110000;       //看第4行是否有键按下
 006E A4F0              and #-16
 0070 E702              sta 2,X
 0072           ;           if(tmp_beta!=0xf0)          //Y
 0072 A1F0              cmp #-16
 0074 2603              bne X44
 0076 CC016F            jmp L11
 0079           X44:
 0079           ; 	    {
 0079           ; 	    	trap_in_tmp=0;
 0079 6F03              clr 3,X
 007B           ;               tmp_beta=KB_P;
 007B B600              lda 0
 007D E702              sta 2,X
 007F           ;               tmp_beta&=0b11110000; 
 007F A4F0              and #-16
 0081 E702              sta 2,X
 0083           ;               if(tmp_beta==0xe0)   //"L" key is be pressed!!!
 0083 A1E0              cmp #-32
 0085 2703              beq X45
 0087 CC00F8            jmp L13
 008A           X45:
 008A           ; 	    	{
 008A           ; 	    		//printf("L key is be pressed!!!\r\n");
 008A           ; 	    		switch(tmp)
 008A 7F                clr ,X
 008B E606              lda 6,X
 008D E701              sta 1,X
 008F F6                lda ,X
 0090 2606              bne X0
 0092 E601              lda 1,X
 0094 A131              cmp #49
 0096 2738              beq L18
 0098           X0:
 0098 F6                lda ,X
 0099 2606              bne X1
 009B E601              lda 1,X
 009D A132              cmp #50
 009F 2734              beq L19
 00A1           X1:
 00A1 F6                lda ,X
 00A2 2606              bne X2
 00A4 E601              lda 1,X
 00A6 A133              cmp #51
 00A8 2730              beq L20
 00AA           X2:
 00AA F6                lda ,X
 00AB 2606              bne X3
 00AD E601              lda 1,X
 00AF A134              cmp #52
 00B1 272C              beq L21
 00B3           X3:
 00B3 F6                lda ,X
 00B4 2606              bne X4
 00B6 E601              lda 1,X
 00B8 A135              cmp #53
 00BA 2728              beq L22
 00BC           X4:
 00BC F6                lda ,X
 00BD 2606              bne X5
 00BF E601              lda 1,X
 00C1 A136              cmp #54
 00C3 2724              beq L23
 00C5           X5:
 00C5 F6                lda ,X
 00C6 2606              bne X6
 00C8 E601              lda 1,X
 00CA A137              cmp #55
 00CC 2720              beq L24
 00CE           X6:
 00CE 2023              bra L15
 00D0           X7:
 00D0           ; 	    		{
 00D0           L18:
 00D0 A6E6              lda #-26
 00D2 CC0228            jmp L2
 00D5           X8:
 00D5           ; 	    			case '1':return L1;break;
 00D5           L19:
 00D5 A6C6              lda #-58
 00D7 CC0228            jmp L2
 00DA           X9:
 00DA           ; 	    			case '2':return L2;break;
 00DA           L20:
 00DA A6A6              lda #-90
 00DC CC0228            jmp L2
 00DF           X10:
 00DF           ; 	    			case '3':return L3;break;
 00DF           L21:
 00DF A6E5              lda #-27
 00E1 CC0228            jmp L2
 00E4           X11:
 00E4           ; 	    			case '4':return L4;break;
 00E4           L22:
 00E4 A6C5              lda #-59
 00E6 CC0228            jmp L2
 00E9           X12:
 00E9           ; 	    			case '5':return L5;break;
 00E9           L23:
 00E9 A6A5              lda #-91
 00EB CC0228            jmp L2
 00EE           X13:
 00EE           ; 	    			case '6':return L6;break;
 00EE           L24:
 00EE A6E3              lda #-29
 00F0 CC0228            jmp L2
 00F3           X14:
 00F3           ; 	    			case '7':return L7;break;
 00F3           L15:
 00F3 A6FF              lda #-1
 00F5 CC0228            jmp L2
 00F8           X15:
 00F8           ; 	    			default:return 0xff;break;
 00F8           L13:
 00F8           ; 	    		}
 00F8           ; 	    	}
 00F8           ; 	    	if(tmp_beta==0xd0)     //"H" key is be pressed!!!
 00F8 E602              lda 2,X
 00FA A1D0              cmp #-48
 00FC 2703              beq X46
 00FE CC016F            jmp L25
 0101           X46:
 0101           ; 	    	{
 0101           ; 				//printf("H key is be pressed!!!\r\n");
 0101           ; 	    		switch(tmp)
 0101 7F                clr ,X
 0102 E606              lda 6,X
 0104 E701              sta 1,X
 0106 F6                lda ,X
 0107 2606              bne X16
 0109 E601              lda 1,X
 010B A131              cmp #49
 010D 2738              beq L30
 010F           X16:
 010F F6                lda ,X
 0110 2606              bne X17
 0112 E601              lda 1,X
 0114 A132              cmp #50
 0116 2734              beq L31
 0118           X17:
 0118 F6                lda ,X
 0119 2606              bne X18
 011B E601              lda 1,X
 011D A133              cmp #51
 011F 2730              beq L32
 0121           X18:
 0121 F6                lda ,X
 0122 2606              bne X19
 0124 E601              lda 1,X
 0126 A134              cmp #52
 0128 272C              beq L33
 012A           X19:
 012A F6                lda ,X
 012B 2606              bne X20
 012D E601              lda 1,X
 012F A135              cmp #53
 0131 2728              beq L34
 0133           X20:
 0133 F6                lda ,X
 0134 2606              bne X21
 0136 E601              lda 1,X
 0138 A136              cmp #54
 013A 2724              beq L35
 013C           X21:
 013C F6                lda ,X
 013D 2606              bne X22
 013F E601              lda 1,X
 0141 A137              cmp #55
 0143 2720              beq L36
 0145           X22:
 0145 2023              bra L27
 0147           X23:
 0147           ; 	    		{
 0147           L30:
 0147 A646              lda #70
 0149 CC0228            jmp L2
 014C           X24:
 014C           ; 	    			case '1':return H1;break;
 014C           L31:
 014C A6D6              lda #-42
 014E CC0228            jmp L2
 0151           X25:

⌨️ 快捷键说明

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