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

📄 key_read.c

📁 一个很好的c程序 再hitool for arm 下开发
💻 C
字号:
/********************************************************
*函数名称:  init_keyboard
*函数功能:  键盘控制初始化部分
*参数:      无
*返回:      无
********************************************************/

void init_keyboard()
 {
 rINTMOD=0x0;
 rINTCON=0x1;
 rINTMSK=~(BIT_GLOBAL|BIT_EINT1);
 pISR_ENT1=(int)keyboardint;
 /*PORTG*/
 rPCONG=0xffff;
 rEXINT=rEXTINT|0x20;
 rL_ISPC=BIT_EINT;
 rEXINTPND=0xf;
  }
 /***********************************************************
 *函数名称:   keyboardint
 *函数功能:   键盘中断服务程序
 *参数:       无
 *返回:       无
 ************************************************************/
 void keyboardint()
  {
   int value;
   rI_ISPC=BIT_EINT1;
   rEXTINTPND=0xf;
   value=key_read();
   if(value>-1)
    Digit_Led_Symbol(value);
    rI_ISPC=BIT_EINT1;
    rINTCON=0x1;
     }
     
     /*数码管短码表*/
int Seg[]={SEGMENT_A,SEGMENT_B,SEGMENT_C,SEGMENT_D,SEGMENT_E,SEGMENT_F,SEGMENT_G,SEGMENT_P};
/******************************************************
 *函数名称:  Digit_Led_Segment
 *函数功能:  8段数码管显示控制
 *参数:  seg_num____数码管段号
 *返回:  无
 *****************************************************/
void Digit_Led_Segment(int seg_num)
{
      /*segment control*/
   if((seg_num>=0)&&(seg_num<8))
   LED8ADDR=~Seg[seg_num];
}  

/*************************************************************
*  函数名称:  KEY_READ
*  函数功能:  读键盘值
*  参数:      无
*  返回:      正确时返回键盘值,错误时返回-1
*************************************************************/
inline int key_read()
{
 int value;
 char temp;
 
 temp= * (keyboard_base+0xFD);                  //读地址1(A1为低)
 if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK)    //判断是否有键盘按下
 {
   if((temp&0x1)==0)                          //判断按键所对应的数据位
     value=3;
   else if((temp&0x2)==0)
     value=2;
   else if((temp&0x4)==0)
     value=1;
   else if((temp&0x8)==0)
     value=0;
   return value;
 }
 
 temp= * (keyboard_base+0xFB);                  //读地址2(A2为低)
 if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK)    //判断是否有键盘按下
 {
   if((temp&0x1)==0)                          //判断按键所对应的数据位
     value=7;
   else if((temp&0x2)==0)
     value=6;
   else if((temp&0x4)==0)
     value=5;
   else if((temp&0x8)==0)
     value=4;
   return value;
 }

 temp= * (keyboard_base+0xF7);                 //读地址3(A3为低)
 if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK)   //判断是否有键盘按下
 {
   if((temp&0x1)==0)                         //判断按键所对应的数据位
     value=0xb;
   else if((temp&0x2)==0)
     value=0xa;
   else if((temp&0x4)==0)
     value=9;
   else if((temp&0x8)==0)
     value=8;
   return value;
 }
 
 temp= * (keyboard_base+0xEF);                 //读地址4(A4为低)
 if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK)   //判断是否有键盘按下
 {
   if((temp&0x1)==0)                         //判断按键所对应的数据位
     value=0xf;
   else if((temp&0x2)==0)
     value=0xe;
   else if((temp&0x4)==0)
     value=0xd;
   else if((temp&0x8)==0)
     value=0xc;
   return value;
 }
 return -1;                                  //按键读/写失败
}



⌨️ 快捷键说明

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