打印

矩阵键盘实现

[复制链接]
1773|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
矩阵键盘是一种把所有按键排列成行列矩阵的键盘。一介M*N的行列式非编码键盘只需要M条行线和N条列线,共占用M+N条单片机的I/O的端口线。
以下是电路图


C语言
#define <reg51.h>
#define uchar unsigned char
uchar  keyvalue                                      ;存储键值
uchar  row                                           ;存储行值
uchar  scancode                                      ;扫描值
uchar  tempcode                                      ;存储列值
void  delay20ms( )                                    ;延时20ms
{
    uchar i,j,
    for(i=0;i<100;i++)
        for (j=0;j<1200;j++);
}
void  keyscan()                                         //按键扫描函数
{
P0=0X00;                                            //全“0”列扫描
If ((P1&0x0f)!=0x0f )                                 //判断有无按键
{  
delay20ms()                                        //有键按下,延时去抖动
  If ((P1&0x0f)!=0x0f )                                //判断键值
    {
    scancode=0xfe;                                   //从第0列开始扫描
whilewhile((scancode&0x80)!=0)                    //开始循环列扫描8次
{
P0=scancode;
if ((P1&0x0f)!=0x0f )
        {
P1=P1&0x0f
switch(P1)
     {
      case 14:  row=0; break;   //* 按键在第0行*
  case 13:  row=1; break;   //* 按键在第1行*
  case 11:  row=2; break;   //* 按键在第2行*
  case 7:  row=3; break;   //* 按键在第3行*
      default     break;
}
           tempcode=!scancode;                         //获得列键值
           keyvalue=row+tempcode ;                     //获得按键代码值
}
else  scancode= (scancode<<1)                  
   }
}
     }
      keyvalue=0xff;                                  //没有按键,返回键值0xff
}

相关帖子

沙发
shenmu2012| | 2012-4-6 15:15 | 只看该作者
矩阵键盘的好处之一就是减少了单片机的IO口资源的占用,特别是对多键盘(>=10)的设计,采用此方法是非常必要滴。。。

使用特权

评论回复
板凳
拿起书本| | 2012-4-7 17:23 | 只看该作者
市场上现在已经有键盘接口芯片可以采用。可以扩展32个键位的矩阵键盘,按键按下时,可以通过触发单片机中断,通过中断处理对按键进行处理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝