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

📄 kbsub.c

📁 飞思卡尔的键盘中断源代码,C语言写的,很不错的
💻 C
字号:
/*-----------------------------------------------------*
*文件描述:本文件包含了H08C键盘中断子函数,分别为:       *  
*(1)KB_Init:键盘初始化函数                             *
*   void KB_Init(void)                                 *
*(2)KB_Scan:扫描读取键值函数                           *
*   unsigned char KB_Scan(void)                        *
*(3)KB_Def:键值转为定义值函数                          *
*   unsigned char KB_Def(unsigned char KB_valve)       *
*-----------------------------------------------------*/
/*[以下为子程序源代码]*/
/*[头文件]*/
#include "GP32C.H"
#include "KB.h"
/*KB_Init:键盘初始化函数-------------------------------*
*功  能:初始化键盘中断的引脚,但未开放键盘中断         *
*参  数:无                                             *
*返  回:无                                             *
*-----------------------------------------------------*/  
void KB_Init(void)
{
	 KB_P=0x00;             //复位KB_P
	 KB_D=0b00001111;       //定定义7-4为输入,3-0为输出
	 KB_PUE=0b11110000;     //定义输入引脚有内部上拉电阻
	 INTKBSCR|= (1<<IntBit);//屏蔽键盘中断(IMASKk=1)
	 INTKBIER=0b11110000;   //允许输入引脚的中断可进入
	 INTKBSCR|= (1<<ACKKBit);  //清键盘中断请求(ACKK=1)
}

void KB_doubleInit(void)
{
	 KB_P=0x00;             //复位KB_P
	 KB_D=0b11110000;       //定定义7-4为输入,3-0为输出
	 KB_PUE=0b00001111;     //定义输入引脚有内部上拉电阻
	 INTKBSCR|= (1<<IntBit);//屏蔽键盘中断(IMASKk=1)
	 INTKBIER=0b11110000;   //允许输入引脚的中断可进入
	 INTKBSCR|= (1<<ACKKBit);  //清键盘中断请求(ACKK=1)
}

/*KB_Scan:扫描读取键值函数-----------------------------*
*功  能:扫描一次4*4键盘上的按键,读取键值->*p          *
*         若无按键,*p为0xff                           *
*参  数:无                                             *
*返  回:扫描到的键值                                   *
*-----------------------------------------------------*/  
unsigned char KB_Scan(void) 
 {
	 unsigned char line,i,tmp;
     line=0b11111110;        //使第一根行线为0(低电平)
	 for(i=1;i<=4;i++)         //将扫描4根行线
	  {	
        tmp=KB_P;            //取KB_P->tmp
        tmp|=0b00001111;     //KB_P.7-4保留,KB_P.3-0为1
        KB_P=tmp&line;       //令KB_P.n=0,n=0、1、2、3
	    asm("NOP");            //等待,消除按键抖动
	    asm("NOP");
	    tmp=KB_P;
	    tmp&=0b11110000;       //看第n行是否有键按下
	    if(tmp!=0xf0)          //本行有键按下
	     {
	        tmp=KB_P;
		    break;
	     }
	     else                  //本行无键按下,扫描下一行
		    line=(line<<1)|0x01;
		     
	 }	
	  if(i==5)   tmp=0xff;
	  return(tmp);
 }
//处理双键
unsigned char KB_doubleScan(void)
{
 unsigned char line,i,tmp,tmp0;
 tmp0=KB_Scan( );
 if(tmp0==0xE7||tmp0==0xD7)
   {
      line=0b01111111;        //使第一根列线为0(低电平)
	 for(i=1;i<=4;i++)         //将扫描4根行线
	  {	
        tmp=KB_P;            //取KB_P->tmp
        tmp|=0b11110000;     //KB_P.7-4保留,KB_P.3-0为1
        KB_P=tmp&line;       //令KB_P.n=0,n=0、1、2、3
	    asm("NOP");            //等待,消除按键抖动
	    asm("NOP");
	    tmp=KB_P;
	    //tmp&=0b00001111;       //看第n行是否有键按下
	    if(tmp!=0xE7||tmp!=0xD7)          //本行有键按下
	     {
	        tmp=KB_P;
		    break;
	     }
	     else                  //本行无键按下,扫描下一行
		    line=(line>>1)|0x80;
		     
	 }	
	  if(i==5)   tmp=0xff;
	  return(tmp); 
   }
                         



}
 
/*KB_Def:键值转为定义值函数----------------------------*
*功  能:键值转为定义值                                 *
*参  数:键值                                           *
*返  回:键定义值                                       *
*-----------------------------------------------------*/
//键盘定义表
const unsigned char KB_Table[]= 
{0xEE,'1',0xDE,'2',0xBE,'3',0x7E,'A',
 0xED,'4',0xDD,'5',0xBD,'6',0x7D,'B',
 0xEB,'7',0xDB,'8',0xBB,'9',0x7B,'C',
 0xE7,'*',0xD7,'0',0xB7,'#',0x77,'D',
 0x00};
unsigned char KB_Def(unsigned char KB_valve)
 {
   unsigned char KeyPress;
   unsigned char i;
   unsigned char j;
   i=0;
   while(1)
   {
     j=KB_Table[i];
     //与0(定义表结束标志)相比较
     if (j==0)                   //=0,即表中无次定义值
        {KeyPress=0xff; break;}  //返回0xff
     else
        //与键值相比较
        if (j==KB_valve)         //找到       
           {KeyPress=KB_Table[i+1];break;} //取键定义值
        else
           i+=2;              //指向下一个键值,继续判断
    };
    return KeyPress;
 } 

  

⌨️ 快捷键说明

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