矩阵键盘原理

如上图所示,矩阵键盘由多行和多列的按键组成,形成一个矩阵。每个按键位于特定的行和列交叉点上,并且每个按键都有两根线与之连接。
识别按键就需要对按键上的线路的电平进行识别,我们可以通过设置行(列)线路为高电压,然后在通过列(行)线路输入的电平来判断某个按键是否被按下。
功能实现
本章的程序是基于上一章点亮LED代码基础上进行实现。
首先配置矩阵键盘的GPIO。
void configkey(void)
{
EALLOW;
//键盘第一行
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0; //选择功能 为普通端口
GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; //使能特定引脚内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO26 = 1; //定义为输出端
//键盘第二行
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; //选择功能 为普通端口
GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; //
GpioCtrlRegs.GPADIR.bit.GPIO25 = 1; //定义为输出端
//键盘第三行
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0; //选择功能 为普通端口
GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; //
GpioCtrlRegs.GPADIR.bit.GPIO24 = 1; //定义为输出端
//键盘第四行
GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0; //选择功能 为普通端口
GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0; //
GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1; //定义为输出端
//设置端口默认为高电平
GpioDataRegs.GPASET.bit.GPIO26 = 1;
GpioDataRegs.GPASET.bit.GPIO25 = 1;
GpioDataRegs.GPASET.bit.GPIO24 = 1;
GpioDataRegs.GPBSET.bit.GPIO48 = 1;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 21; //选择触发中断源
XIntruptRegs.XINT1CR.bit.POLARITY = 1; //设置为下降沿触发中断
XIntruptRegs.XINT1CR.bit.ENABLE = 1; //使能XINT中断
//键盘第一列
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0; //选择功能 为普通端口
GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; //
GpioCtrlRegs.GPADIR.bit.GPIO21 = 0;

本文介绍了矩阵键盘的工作原理,包括按键布局、电平检测方法,并提供了基于DSP2833x的编程示例,展示了如何配置GPIO、设置中断以及扫描矩阵键盘的过程。
最低0.47元/天 解锁文章
12万+





