📄 keyboard.lst
字号:
(0006) * unsigned char KB_Scan(void) *
(0007) *(3)KB_Def:键值转为定义值函数 *
(0008) * unsigned char KB_Def(unsigned char KB_valve) *
(0009) *-----------------------------------------------------*/
(0010) /*[以下为子程序源代码]*/
(0011) /*[头文件]*/
(0012) #include "GP32C.H"
(0013) #include "KB.h"
(0014) /*KB_Init:键盘初始化函数-------------------------------*
(0015) *功 能:初始化键盘中断的引脚,但未开放键盘中断 *
(0016) *参 数:无 *
(0017) *返 回:无 *
(0018) *-----------------------------------------------------*/
(0019) void KB_Init(void)
(0020) {
8210 B7 B6 stA 0xFFFFFFB6
(0021) KB_P=0x00; //复位KB_P
(0022) KB_D=0b00001111; //定定义7-4为输入,3-0为输出
8212 CC 82A2 jmp 0x82A2
8215 3F 40 clr *__r0
(0023) KB_PUE=0b11110000; //定义输入引脚有内部上拉电阻
8217 B6 B4 ldA 0xFFFFFFB4
8219 B7 41 stA *__r1
(0024) INTKBSCR|= (1<<IntBit);//屏蔽键盘中断(IMASKk=1)
821B 38 41 lsl *__r1
(0025) INTKBIER=0b11110000; //允许输入引脚的中断可进入
821D 39 40 rol *__r0
821F B6 41 ldA *__r1
(0026) INTKBSCR|= (1<<ACKKBit); //清键盘中断请求(ACKK=1)
8221 AB 72 add #114
8223 B7 41 stA *__r1
8225 B6 40 ldA *__r0
(0027) }
(0028) /*KB_Scan:扫描读取键值函数-----------------------------*
(0029) *功 能:扫描一次4*4键盘上的按键,读取键值->*p *
(0030) * 若无按键,*p为0xff *
(0031) *参 数:无 *
(0032) *返 回:扫描到的键值 *
(0033) *-----------------------------------------------------*/
(0034) unsigned char KB_Scan(void)
(0035) {
8227 A9 00 adc #0
(0036) unsigned char line,i,j,tmp;
(0037) line=0b11111110; //使第一根行线为0(低电平)
(0038) for(i=1;i<=4;i++) //将扫描4根行线
8229 B7 40 stA *__r0
822B 3F 42 clr *__r2
822D B6 B6 ldA 0xFFFFFFB6
(0039) {
822F EB 03 add 3,X
8231 B7 43 stA *__r3
(0040) tmp=KB_P; //取KB_P->tmp
(0041) tmp|=0b00001111; //KB_P.7-4保留,KB_P.3-0为1
8233 B6 42 ldA *__r2
8235 E9 02 adc 2,X
(0042) KB_P=tmp&line; //令KB_P.n=0,n=0、1、2、3
8237 B7 42 stA *__r2
8239 55 42 ldHX *__r2
(0043) asm("NOP"); //等待,消除按键抖动
823B F6 ldA 0,X
(0044) asm("NOP");
(0045) tmp=KB_P;
823C B7 43 stA *__r3
823E 3F 42 clr *__r2
(0046) tmp&=0b11110000; //看第n行是否有键按下
8240 55 40 ldHX *__r0
8242 E6 01 ldA 1,X
(0047) if(tmp!=0xf0) //本行有键按下
8244 B7 45 stA *__r5
8246 F6 ldA 0,X
8247 B7 44 stA *__r4
(0048) {
8249 A6 0A ldA #10
824B 87 pshA
(0049) for(j=0;j<250;j++);
(0050) tmp=KB_P;
824C 4F clrA
824D 87 pshA
(0051) break;
(0052) }
(0053) else //本行无键按下,扫描下一行
824E B6 45 ldA *__r5
8250 87 pshA
8251 B6 44 ldA *__r4
(0054) line=(line<<1)|0x01;
8253 87 pshA
8254 CD 9028 jsr __mul16
8257 A7 04 aiS #4
8259 4E 4D45 mov *__rlo,*__r5
(0055) }
825C 4E 4C44 mov *__rhi,*__r4
825F B6 45 ldA *__r5
8261 BB 43 add *__r3
8263 B7 43 stA *__r3
(0056) if(i==5) tmp=0xff;
8265 B6 44 ldA *__r4
8267 B9 42 adc *__r2
8269 B7 42 stA *__r2
826B B6 43 ldA *__r3
(0057) return(tmp);
(0058) }
(0059) /*KB_Def:键值转为定义值函数----------------------------*
(0060) *功 能:键值转为定义值 *
(0061) *参 数:键值 *
(0062) *返 回:键定义值 *
(0063) *-----------------------------------------------------*/
(0064) //键盘定义表
(0065) const unsigned char KB_Table[]=
(0066) {0xEE,'1',0xDE,'2',0xBE,'3',0x7E,'+',
(0067) 0xED,'4',0xDD,'5',0xBD,'6',0x7D,'-',
(0068) 0xEB,'7',0xDB,'8',0xBB,'9',0x7B,'*',
(0069) 0xE7,'<',0xD7,'0',0xB7,'=',0x77,'/',
(0070) 0x00};
(0071) unsigned char KB_Def(unsigned char KB_valve)
826D A0 30 sub #48
826F B7 43 stA *__r3
(0072) {
(0073) unsigned char KeyPress;
(0074) unsigned char i;
(0075) unsigned char j;
(0076) i=0;
(0077) while(1)
8271 B6 42 ldA *__r2
8273 A2 00 sbc #0
8275 55 40 ldHX *__r0
8277 F7 stA 0,X
8278 B6 43 ldA *__r3
827A E7 01 stA 1,X
827C 95 tSX
827D 3C B6 inc 0xFFFFFFB6
827F 3F 40 clr *__r0
8281 B6 B5 ldA 0xFFFFFFB5
8283 AB 92 add #-110
(0078) {
(0079) j=KB_Table[i];
(0080) //与0(定义表结束标志)相比较
8285 B7 41 stA *__r1
(0081) if (j==0) //=0,即表中无次定义值
8287 B6 40 ldA *__r0
8289 A9 00 adc #0
828B B7 40 stA *__r0
(0082) {KeyPress=0xff; break;} //返回0xff
(0083) else
(0084) //与键值相比较
828D 55 40 ldHX *__r0
828F F6 ldA 0,X
8290 95 tSX
8291 B7 41 stA *__r1
(0085) if (j==KB_valve) //找到
8293 B6 B6 ldA 0xFFFFFFB6
8295 B1 41 cmp *__r1
8297 24 03 bcc 0x829C
8299 CC 8215 jmp 0x8215
829C 3C B6 inc 0xFFFFFFB6
829E 3C B5 inc 0xFFFFFFB5
82A0 3C B4 inc 0xFFFFFFB4
82A2 3F 40 clr *__r0
82A4 B6 B8 ldA 0xFFFFFFB8
82A6 B7 41 stA *__r1
(0086) {KeyPress=KB_Table[i+1];break;} //取键定义值
(0087) else
82A8 A0 01 sub #1
82AA B7 43 stA *__r3
82AC B6 40 ldA *__r0
(0088) i+=2; //指向下一个键值,继续判断
82AE A2 00 sbc #0
(0089) };
82B0 4E 43B8 mov *__r3,0xB8
FILE: SCIInit.c
(0001) /*SCIInit:串行口初始化子程序---------------------------*
(0002) *功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位 *
(0003) * 数据,无校验等,允许发送器允许接收器.查询方式收发,*
(0004) * 波特率为9600(设fBUS=2.4576MHz) *
(0005) *参 数:无 *
(0006) *返 回:无 *
(0007) *-----------------------------------------------------*/
(0008) #include "GP32C.H"
(0009) void SCIInit(void)
(0010) { //总线频率fBUS=2.4576MHz,定义波特率Bt=9600
82B3 55 40 ldHX *__r0
82B5 65 0000 cpHX #0x0000
(0011) SCBR=0b00000010;
(0012) //设置允许SCI,正常码输出、8位数据、无校验
(0013) SCC1=0b01000000;
82B8 95 tSX
82B9 26 C4 bne 0x827F
(0014) //设置允许发送、允许接收,查询方式收发
(0015) SCC2=0b00001100;
FILE: <library>
82BB E6 02 ldA 2,X
82BD EE 03 ldX 3,X
82BF 87 pshA
82C0 8A pulH
82C1 F6 ldA 0,X
82C2 95 tSX
82C3 A1 2D cmp #45
82C5 26 0A bne 0x82D1
82C7 4F clrA
82C8 B0 73 sub *_r+1
82CA B7 73 stA *_r+1
82CC 4F clrA
82CD B2 72 sbc *_r
82CF B7 72 stA *_r
82D1 3F B3 clr 0xFFFFFFB3
82D3 CC 849A jmp 0x849A
82D6 3F 40 clr *__r0
82D8 B6 B3 ldA 0xFFFFFFB3
82DA AB A2 add #-94
82DC B7 41 stA *__r1
82DE B6 40 ldA *__r0
82E0 A9 00 adc #0
82E2 B7 40 stA *__r0
82E4 55 40 ldHX *__r0
82E6 F6 ldA 0,X
82E7 95 tSX
82E8 A1 2A cmp #42
82EA 27 03 beq 0x82EF
82EC CC 83B7 jmp 0x83B7
82EF 3F 40 clr *__r0
82F1 B6 B3 ldA 0xFFFFFFB3
82F3 B7 41 stA *__r1
82F5 55 40 ldHX *__r0
82F7 AF 01 aiX #1
82F9 35 40 stHX *__r0
82FB 38 41 lsl *__r1
82FD 39 40 rol *__r0
82FF B6 41 ldA *__r1
8301 AB 72 add #114
8303 B7 41 stA *__r1
8305 B6 40 ldA *__r0
8307 A9 00 adc #0
8309 B7 40 stA *__r0
830B 55 40 ldHX *__r0
830D E6 01 ldA 1,X
830F B7 43 stA *__r3
8311 F6 ldA 0,X
8312 B7 42 stA *__r2
8314 3F 44 clr *__r4
8316 B6 B3 ldA 0xFFFFFFB3
8318 B7 45 stA *__r5
831A 38 45 lsl *__r5
831C 39 44 rol *__r4
831E B6 45 ldA *__r5
8320 AB 72 add #114
8322 B7 45 stA *__r5
8324 B6 44 ldA *__r4
8326 A9 00 adc #0
8328 B7 44 stA *__r4
832A 55 44 ldHX *__r4
832C E6 01 ldA 1,X
832E B7 45 stA *__r5
8330 F6 ldA 0,X
8331 B7 44 stA *__r4
8333 B6 45 ldA *__r5
8335 87 pshA
8336 B6 44 ldA *__r4
8338 87 pshA
8339 B6 43 ldA *__r3
833B 87 pshA
833C B6 42 ldA *__r2
833E 87 pshA
833F CD 9028 jsr __mul16
8342 A7 04 aiS #4
8344 4E 4D43 mov *__rlo,*__r3
8347 4E 4C42 mov *__rhi,*__r2
834A B6 42 ldA *__r2
834C 55 40 ldHX *__r0
834E F7 stA 0,X
834F B6 43 ldA *__r3
8351 E7 01 stA 1,X
8353 3F 40 clr *__r0
8355 B6 B3 ldA 0xFFFFFFB3
8357 B7 41 stA *__r1
8359 38 41 lsl *__r1
835B 39 40 rol *__r0
835D B6 41 ldA *__r1
835F AB 72 add #114
8361 B7 41 stA *__r1
8363 B6 40 ldA *__r0
8365 A9 00 adc #0
8367 B7 40 stA *__r0
8369 4F clrA
836A 55 40 ldHX *__r0
836C F7 stA 0,X
836D 4F clrA
836E E7 01 stA 1,X
8370 95 tSX
8371 B6 B3 ldA 0xFFFFFFB3
8373 A1 00 cmp #0
8375 23 2C bls 0x83A3
8377 3F 40 clr *__r0
8379 B6 B3 ldA 0xFFFFFFB3
837B AB A1 add #-95
837D B7 41 stA *__r1
837F B6 40 ldA *__r0
8381 A9 00 adc #0
8383 B7 40 stA *__r0
8385 55 40 ldHX *__r0
8387 F6 ldA 0,X
8388 95 tSX
8389 A1 2D cmp #45
838B 26 16 bne 0x83A3
838D 3F 40 clr *__r0
838F B6 B3 ldA 0xFFFFFFB3
8391 AB A2 add #-94
8393 B7 41 stA *__r1
8395 B6 40 ldA *__r0
8397 A9 00 adc #0
8399 B7 40 stA *__r0
839B A6 2D ldA #45
839D 55 40 ldHX *__r0
839F F7 stA 0,X
83A0 95 tSX
83A1 20 14 bra 0x83B7
83A3 3F 40 clr *__r0
83A5 B6 B3 ldA 0xFFFFFFB3
83A7 AB A2 add #-94
83A9 B7 41 stA *__r1
83AB B6 40 ldA *__r0
83AD A9 00 adc #0
83AF B7 40 stA *__r0
83B1 A6 2B ldA #43
83B3 55 40 ldHX *__r0
83B5 F7 stA 0,X
83B6 95 tSX
83B7 3F 40 clr *__r0
83B9 B6 B3 ldA 0xFFFFFFB3
83BB AB A2 add #-94
83BD B7 41 stA *__r1
83BF B6 40 ldA *__r0
83C1 A9 00 adc #0
83C3 B7 40 stA *__r0
83C5 55 40 ldHX *__r0
83C7 F6 ldA 0,X
83C8 95 tSX
83C9 A1 2F cmp #47
83CB 27 03 beq 0x83D0
83CD CC 8498 jmp 0x8498
83D0 3F 40 clr *__r0
83D2 B6 B3 ldA 0xFFFFFFB3
83D4 B7 41 stA *__r1
83D6 55 40 ldHX *__r0
83D8 AF 01 aiX #1
83DA 35 40 stHX *__r0
83DC 38 41 lsl *__r1
83DE 39 40 rol *__r0
83E0 B6 41 ldA *__r1
83E2 AB 72 add #114
83E4 B7 41 stA *__r1
83E6 B6 40 ldA *__r0
83E8 A9 00 adc #0
83EA B7 40 stA *__r0
83EC 55 40 ldHX *__r0
83EE E6 01 ldA 1,X
83F0 B7 43 stA *__r3
83F2 F6 ldA 0,X
83F3 B7 42 stA *__r2
83F5 3F 44 clr *__r4
83F7 B6 B3 ldA 0xFFFFFFB3
83F9 B7 45 stA *__r5
83FB 38 45 lsl *__r5
83FD 39 44 rol *__r4
83FF B6 45 ldA *__r5
8401 AB 72 add #114
8403 B7 45 stA *__r5
8405 B6 44 ldA *__r4
8407 A9 00 adc #0
8409 B7 44 stA *__r4
840B 55 44 ldHX *__r4
840D E6 01 ldA 1,X
840F B7 45 stA *__r5
8411 F6 ldA 0,X
8412 B7 44 stA *__r4
8414 4E 454D mov *__r5,*__rlo
8417 4E 444C mov *__r4,*__rhi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -