- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-02-14 02:03:54
已绑定手机
新手上路
- 积分
- 41
|
发表于 2025-2-16 22:43:32
|
显示全部楼层
STC32G12K128学习心得 <十四>
关于第十四节讲述的内容是关于矩阵键盘的内容,我之前在stm32中学过矩阵键盘,对矩阵键盘的原理与代码实现,具有一定的理解与掌握,在看完本节视频以后,我对矩阵键盘的理解更加透彻,以下是我对矩阵键盘的理解与总结:
1. 矩阵键盘的结构
组成:矩阵键盘通常由若干行和列组成,形成一个矩阵结构。每个按键连接到一行和一列。
按键识别:通过行和列的组合,可以唯一识别每个按键的状态。
2. 工作原理
扫描方式:单片机通过逐行或逐列扫描的方式检测按键。通常,单片机会将某一行设为低电平,同时读取其他行的状态。
按键检测:当某个按键被按下时,连接的行和列形成一个闭合电路,单片机可以检测到这一状态变化。
3. 硬件连接
引脚配置:根据矩阵的行列数,配置单片机的GPIO引脚。行引脚和列引脚需要正确连接到矩阵键盘的相应引脚。
电阻:在某些设计中,可能需要使用上拉或下拉电阻,以确保在未按键时引脚的状态稳定。
4. 软件实现
按键扫描程序:编写程序定期扫描矩阵键盘的行和列,检测按键状态。可以使用定时器中断来实现定时扫描。
去抖动处理:按键按下时可能会产生抖动,导致多次触发。可以通过软件延时或状态检测来消除抖动影响。
5. 应用实例
用户输入:矩阵键盘广泛应用于用户输入界面,如密码输入、菜单选择等。
控制功能:可以结合其他模块(如LED显示、蜂鸣器等)实现更复杂的控制功能。
以下代码,是我在stm32中矩阵键盘的主要代码:
uint8_t Matrx_Key_Scan(void)
{
unsigned char i=0,j=0;
for(i=0;i<Dimension;i++)
{
delay_ms(5);
GPIO_ResetBits(Matrix_Key_Row[i].GPIO_x,Matrix_Key_Row[i].GPIO_pin);
for(j=0;j<Dimension;j++)
{
delay_ms(5);
if(GPIO_ReadInputDataBit(Matrix_Key_Col[j].GPIO_x,Matrix_Key_Col[j].GPIO_pin) == 0)
{
Key[i][j] = 1;
}
else Key[i][j] = 0;
}
GPIO_SetBits(Matrix_Key_Row[i].GPIO_x,Matrix_Key_Row[i].GPIO_pin);
}
if(Key[0][0] == 1) return 1;
else if(Key[0][1] == 1) return 2;
else if(Key[0][2] == 1) return 3;
else if(Key[0][3] == 1) return 4;
else if(Key[1][0] == 1) return 5;
else if(Key[1][1] == 1) return 6;
else if(Key[1][2] == 1) return 7;
else if(Key[1][3] == 1) return 8;
else if(Key[2][0] == 1) return 9;
else if(Key[2][1] == 1) return 10;
else if(Key[2][2] == 1) return 11;
else if(Key[2][3] == 1) return 12;
else if(Key[3][0] == 1) return 13;
else if(Key[3][1] == 1) return 14;
else if(Key[3][2] == 1) return 15;
else if(Key[3][3] == 1) return 16;
else return 0;
}
这是通过库函数实现的矩阵键盘的扫描,在stc单片机中,矩阵键盘的扫描原理还是如此 |
|