这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 4*4矩阵键盘模块程序的调用

共3条 1/1 1 跳转至

4*4矩阵键盘模块程序的调用

高工
2008-08-25 15:41:01     打赏

花了两天时间终于做了个4*4的矩阵键盘模块程序,用在51单片机上,后面要是用到矩阵键盘的时候,直接调用这个程序就行了。现在贴出来,供大家学习,同时,有什么不足之处,也请大家指出。

 

产生.lib文件的方法:选择“工程”——“目标target属性”——“输出”——产生库文件*.lib,修改完后,编译一下程序,无措后,就在工程目录下产生一个.lib文件,到时要用到这个模块程序时,直接把.c和.lib文件拷贝到所在的目录下,再把.c的文件加载到工程文件里就OK了。
/*
***************************************************************************************
摘    要: 4*4小键盘模块程序,供以后其他程序调用.其中P2口高四位接键盘列,P2口低四位接键盘行,
版    本: V1.0
完成日期: 2008.4.28
作    者: ZHOUSFE
***************************************************************************************
修改日期: 2008.5.6
版    本: V1.2
****************************************************************************************
*/

#i nclude <reg51.h>
#define uchar unsigned char
#define keyport  P2
//uchar code seg[16]=

{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E}; //0~f,

共阳极
uchar code keycode[16]=

{0xEE,0XDE,0XBE,0X7E,0XED,0XDD,0XBD,0X7D,0XEB,0XDB,0XBB,0X7B,0XE7,0XD7,0XB7,0X77};//待查询的

键码值

/*
*******************************************************************************************
函数名称:delay()
功能描述:延时ms个微妙
入口参数:unsigned int ms
出口参数:无
*******************************************************************************************
*/

void delay(unsigned int ms) 
{
  unsigned char a;
  while(!ms--)
  for(a=0;a<124;a++); 
}

/*
*******************************************************************************************
函数名称:keyscan()
功能描述:键盘扫描程序,利用行扫描方式,得到键值
入口参数:无
出口参数:扫描得到的键值~((~sm)+(~fh))
*******************************************************************************************
*/

uchar keyscan(void)        
{
  uchar sm;                  //存放行扫描代码,该函数的返回值的低四位
  uchar fh;                  //该函数的返回值的高四位
  keyport=0xf0;
  if((keyport&0xf0)!=0xf0)        //判断是否有按键按下  
  {
    delay(2);                //去抖动延时(1~10ms)
    if((keyport&0xf0)!=0xf0) 
    {
      sm=0xfe;                //行扫描初值
      while((sm&0x10)!=0)
    {
        keyport=sm;
        if((keyport&0xf0)!=0xf0)       //若本行有键按下,则执行读取键值信息
        {
          fh=(keyport&0xf0)|0x0f;   
          return(~((~sm)+(~fh))); //返回扫描的键值
        }
         else   sm=(sm<<1)|0x01;   //若本行没有键按下,则扫描下一行
       }
     }
   }
   return 0xff;                   //若没有按键按下,则返回0xff
}

/*
*******************************************************************************************
函数名称:getkey()
功能描述:将扫描得到的键值转化为对应的0~f
入口参数:无
出口参数:显示的数字0~f
*******************************************************************************************
*/

uchar getkey()
{
  uchar key;
  uchar temp;
  uchar j;
  while(1)
  {
    key=keyscan();       
    delay(2);
    for(j=0;j<16;j++)
    {
      if(key==keycode[j])   //通过查询方式,得到按下的按键值
      {
        temp=j;             //按键值先保存于temp中
        if(key==0xff)       //若没有按下下一个键,则一直显示上一个键值
      {
          return temp;  
      }
      else
      {
         return j;
         temp=j;          //更新temp里的值
      }
       }
     }
   }
}
/*
*******************************************************************************************
测试用函数
*******************************************************************************************
*/
/*void main(void)
{
 uchar ch;
 P3&=0xfe;
 while(1)
 {
  ch=getkey();
  P0=~seg[ch];  //P0口接数码管
 }
}*/




关键词: 矩阵     键盘     模块     程序     调用     uchar    

菜鸟
2009-09-26 16:10:26     打赏
2楼

抄袭本人的~~~~


高工
2009-09-28 14:53:52     打赏
3楼

哈哈,作者找来了~~~~~


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]