矩阵键盘的原理和编程

一、原理

可以看到矩阵键盘的每一列都与P33P34P42P44相连,并且每行都与P30P31P32P33相连。

所以只需要先清零之后,再用按键扫描之后就可以实现矩阵键盘的控制

二、编程

unsigned char Key_Read(void)
{
    unsigned int Key_New;
    unsigned char Key_Value;
    
    P44=0;P42=1;P35=1;P34=1;
    Key_New =P3 & 0X0F;                        
    
    P44=1;P42=0;P35=1;P34=1;
    Key_New =(Key_New<<4)|(P3 & 0X0F);
    
    P44=1;P42=1;P35=0;P34=1;
    Key_New =(Key_New<<4)|(P3 & 0X0F);
    
    P44=1;P42=1;P35=1;P34=0;
    Key_New =(Key_New<<4)|(P3 & 0X0F);
    
    switch(~Key_New)
    {
        case 0x8000:Key_Value=4;break;
        case 0x4000:Key_Value=5;break;
        case 0x2000:Key_Value=6;break;
        case 0x1000:Key_Value=7;break;
        
        case 0x0800:Key_Value=8;break;
        case 0x0400:Key_Value=9;break;
        case 0x0200:Key_Value=10;break;
        case 0x0100:Key_Value=11;break;
        
        case 0x0080:Key_Value=12;break;
        case 0x0040:Key_Value=13;break;
        case 0x0020:Key_Value=14;break;
        case 0x0010:Key_Value=15;break;
        
        case 0x0008:Key_Value=16;break;
        case 0x0004:Key_Value=17;break;
        case 0x0002:Key_Value=18;break;
        case 0x0001:Key_Value=19;break;
        
        default:Key_Value=0;
    }        
    return Key_Value;
}

例如我们需要扫描按键并得出对应的数显示在数码管上

定义16位标志位(因为有四行四列需要扫描4*4次)

每次扫描完之后将P3的值赋给Value,再左移4位再次扫描

扫描到对应按键按下后,将对应值赋值给value

就完成了矩阵键盘的扫描

后续主函数中定义矩阵按键处理和显示处理函数

主函数中放置关闭外设初始化函数,定时器1初始化函数,打开中断,while循环中放置矩阵按键处理和显示处理函数,最后在中断中放入数码管显示函数。

主要来讲讲矩阵按键处理和显示处理函数

按键处理函数中有三个标志位(主要来确定是否有下降沿)

分别是Q(Key_Value),Q非(Key_Old),Q_down(Key_Down)

在函数中我们要确定是否有下降沿跳变(按键是否按下)

就需要把扫描得到值赋给Q,再让Q和Q非异或之后与Q

这样就实现了        

再把Q非的值赋给Q

把得到的Q_down(即扫描的到的数据)赋值给显示标志位

其次是显示

利用sprintf把显示标志位转换成字符串

再转换成十六进制数组

利用中断显示就完成了

  • 23
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值