【蓝桥杯单片机】:零基础吃透矩阵按键
·
一、矩阵按键原理
矩阵按键是一种节省I/O口的按键设计方式,通过行列扫描实现多按键检测。常见布局为4x4或4x3,将按键排列成矩阵形式,行和列分别连接到单片机的I/O口。


工作原理:如果行和列都为低电平,表示按键按下
-
行列扫描法
-
逐行输出低电平,其余行高电平,读取列线状态。若某列线为低电平,表示该行该列交叉点的按键被按下。
-
按键机械触点会导致信号抖动,需通过软件延时(通常5-20ms)或硬件滤波消除。
注意:蓝桥杯板子上J5跳线帽用于选择矩阵按键还是独立按键,如果是独立按键,判断端口是否为低电平即可
二、矩阵按键代码实现
#include <STC15F2K60S2.H>
#include <intrins.h>
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;
sbit C1=P4^4;
sbit C2=P4^2;
sbit C3=P3^5;
sbit C4=P3^4;
void delay(unsigned int x)
{
while(x--);
}
// 矩阵键盘扫描S4 S5 S8 S9是否按下,按下返回键值
int ScanKeysMulti()
{
// S4: R4行 C1列
R4=0; R1=R2=R3=1; C1=C2=C3=1;
if(C1==0)
{
while(C1==0); // 等待释放
return 4;
}
// S5: R3行 C1列
R3=0; R1=R2=R4=1; C1=C2=C3=1;
if(C1==0)
{
while(C1==0);
return 5;
}
// S8:R4行 C2列
R4=0; R1=R2=R3=1; C1=C2=C3=1;
if(C2==0)
{
while(C2==0);
return 8;
}
// S9: R3行 C2列
R3=0; R1=R2=R4=1; C1=C2=C3=1;
if(C2==0)
{
while(C2==0) ;
return 9;
}
}
void main()
{
int key = 0;
while(1){
key = ScanKeysMulti();
delay(1000);//10ms扫描一次键值
}
}
当前使用轮询方式扫描键值,定时器章节中再使用定时扫描
更多推荐
所有评论(0)