原创 4*4键盘

2007-8-19 14:02 5424 15 15 分类: MCU/ 嵌入式

/**********************************************
名称:  ReadKey
功能:  4*4键盘扫描,不支持组合键
输入:  无
输出:  有键按下返回相应的键号(0x00-0x0f);
        没键按下返回0xff。
**********************************************/
#define INT8U unsigned char
INT8U KeyCode(void);
void  DelayNms(INT8U Tick);
sfr   KeyPort="0x80";   //P0
INT8U ReadKey(void)
{
  KeyPort="0xf0";
  if(KeyPort!=0xf0)
  {
    DelayNms(20);                 //去抖动
    if(KeyPort!=0xf0)
    {
      KeyPort =0xfe;
      while((KeyPort&0x10)!=0)    //行扫描循环
      {
        if((KeyPort&0x10)==0)     //列1
         return(KeyCode());
        else if((KeyPort&0x20)==0)//列2
         return(KeyCode()+1);
        else if((KeyPort&0x40)==0)//列3
         return(KeyCode()+2);
        else if((KeyPort&0x80)==0)//列4
         return(KeyCode()+3);
        KeyPort=(KeyPort<<1)+1;   //下一行
      }
    }  
  }
  return(0xff);
}
/**********************************************/
INT8U KeyCode(void)
{
 if((KeyPort&0x0f)!=0x07)
  return(~(KeyPort&0x0f)>>1<<2);//return 0,4,8
 else
  return(~(KeyPort&0x0f)+4);    //return c
}
/**********************************************/
void DelayNms(INT8U Tick)
{
  for(;Tick>0;Tick--)
  ;//延时1ms省略
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
15
关闭 站长推荐上一条 /3 下一条