📄 kbsub.lis
字号:
.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 + -