单片机矩阵按键是一种常用的输入设备,它可以让用户通过按下不同的按键来控制单片机的功能。矩阵按键的原理是利用了电路的开关特性,将多个按键排列成一个矩阵,每个按键都连接了一行和一列的电路。当用户按下某个按键时,就会使得对应的行和列的电路导通,从而产生一个唯一的信号,这个信号可以被单片机识别并执行相应的操作。
矩阵按键的组成主要有两部分:按键和扫描电路。
按键是用来输入信号的部分,它可以是机械式的或者触摸式的,不同的按键可以有不同的标识,例如数字、字母或者符号。
扫描电路是用来检测信号的部分,它可以是硬件实现的或者软件实现的,它的作用是定时地给矩阵按键的每一行和每一列施加一个电压,并检测是否有电流流过,如果有,则说明有按键被按下,并根据行列号确定是哪个按键。
具体方法说明:
方法一:逐行扫描:我们可以通过低四位轮流输出低电平来对矩阵键盘进行逐行扫描,当高四位援收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。
方法二:
行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平,当接收到数据时,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下。这样就能够确定是哪一个按键按下了
矩阵按键如何变成独立按键?
留心发现,矩阵按键想要独立按键的话,只需要将高四位或者低四位永远拉低,那么就能把一行或者一列看作一个按钮,这样就变成了一个独立按键了。
程序展示:
#include< reg52.h >
typedef unsigned char u8;
typedef unsigned int u16;
u8 value;
unsigned char code sunduan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
void delay(u16 t)
{
while(t--);
}
void key()
{
u8 a;
P3=0xF0;
if(P3!=0xF0)
{
delay(1000);
if(P3!=0xF0)
{
P3=0xF0;
switch(P3)
{
case 0xE0:value=0;break;
case 0xD0:value=1;break;
case 0xB0:value=2;break;
case 0x70:value=3;break;
}
P3=0x0F;
switch(P3)
{
case 0x0E:value=value;break;
case 0x0D:value=value+4;break;
case 0x0B:value=value+8;break;
case 0x07:value=value+12;break;
}
while((a< 50)&&(P3!=0x0F)) //按键超时松开判断
{
delay(1000);
a++;
}
}
}
}
void main()
{
while(1)
{
key();
P2=sunduan[value];
}
}
效果展示:
我们在程序中设置了十六个按键分别对应的0~F这十六个数值,当我们按下第一个按键时,在数码管上显示的是0,当我们按下第二个按键时,显示的是数值1…
使用矩阵按键需要注意以下几点:
- 矩阵按键需要与单片机相连接,通常使用多根导线或者排针来实现。
- 矩阵按键需要配置好扫描电路,通常使用单片机的输入输出端口来实现。
- 矩阵按键需要编写好扫描程序,通常使用单片机的定时器中断来实现。
- 矩阵按键需要处理好信号干扰,通常使用去抖动技术来实现。
矩阵按键的作用主要有以下几种:
- 矩阵按键可以作为单片机的人机交互界面,让用户可以输入数据或者选择功能。
- 矩阵按键可以作为单片机的控制器,让用户可以控制单片机的运行状态或者输出结果。
- 矩阵按键可以作为单片机的扩展器,让用户可以增加单片机的输入端口或者功能模块。
-
单片机
+关注
关注
6032文章
44513浏览量
632691 -
数码管
+关注
关注
32文章
1874浏览量
90921 -
扫描电路
+关注
关注
0文章
8浏览量
8031 -
矩阵按键
+关注
关注
0文章
28浏览量
8360
发布评论请先 登录
相关推荐
评论