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

📄 keyboard.lst

📁 基于HC908GP32的计算器完整程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -