矩阵键盘的原理及应用 您所在的位置:网站首页 stm32矩阵键盘原理 矩阵键盘的原理及应用

矩阵键盘的原理及应用

#矩阵键盘的原理及应用| 来源: 网络整理| 查看: 265

矩阵键盘原理图:

第一行的行控制线接到p17,第二行的行控制线接到p16,第三行的行控制线接到p15,第4行的行控制线接到p14

第一列的列控制线接到p13,第二列的列控制线接到p12,第三列的列控制线接到p11,第四列的列控制线接到p10

矩阵键盘的原理和独立按键类似,另外我们可以把矩阵键盘的任意一行或一列作为一个独立键盘使用,假如我们把第一行作为独立键盘,那么我们只需要让P17输出高电平,其余7个io口输出低电平即可,假如我们按下了s1,那么p13的电平就会被拉低,变为低电平,所以我们可以通过查找低4位里哪一位为低电平就可以知道哪个按键按下了。

下面来说说矩阵按键扫描原理(即当我们按下一个矩阵键盘的按键时,如何获取按键的位置)

方法有2种,一种是逐行扫描,一种是行列扫描.接下来就主要讲讲行列扫描.

行列扫描的话,就是一开始让p1口高4位输出高电平,低4位输出低电平,若这4行按键里,有按键按下了,那么那一行按键对应的io的电平就会被拉低,我们就可以知道按键的行坐标.获取按键列坐标的方法也是类似的,就是一开始让p1口高4位输出低电平,低4位输出高电平,若这4列按键里,有按键按下了,那么那一列按键对应的io的电平就会被拉低,我们就可以知道按键的列坐标,获得了行坐标x,列坐标y后,4*(x-1)+y就是按键的编号.

接下来贴份应用的代码,目的就是赋予16个按键键值,分别对应的键值是从0~F。按下一个键,第一个数码管就显示对应的键值

#include

sbit lsa=P2^2;

sbit lsb=P2^3;

sbit lsc=P2^4;

#define duanxuan P0

#define keyboard P1

int zxm[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

int x,y;

void delay(int i)

{

while(i--);

}

void keyproc()

{

    int a=0;

P1=0x0f;//检测是哪一列有按键按下;

if(P1!=0x0f)

{

delay(1000);

if(P1!=0x0f)

{

P1=0x0f;

switch(P1)

{

case(0x07):y=1;break;

case(0x0b):y=2;break;

case(0x0d):y=3;break;

case(0x0e):y=4;break;

}

}

P1=0xf0;//检测是哪一行有按键按下

switch(P1)

{

case(0x70):x=1;break;

case(0xb0):x=2;break;

case(0xd0):x=3;break;

case(0xe0):x=4;break;

}

while(a {

delay(1000);

a++;

}

 

}

}

int main()

{

lsa=0;

lsb=0;

lsc=0;//位选选中第一个数码管

P0=0x00;//第一个数码管先什么都不显示

while(1)

{

keyproc();

P0=zxm[(x-1)*4+y-1];//送入段选信息

}

return 0;

}

数码管和138译码器原理图:

通过138译码器控制位选,例如p22输出电平为1,p23输出电平为0,p24输出电平为0,由p24,p23,p22构成了一个三位二进制数001,转换成10进制就是1,那么138译码器的输出端里y1就输出低电平到第二个数码管的com端,相当于位选选中了第二个数码管。

每一个数码管的8段led都是共阴极的,只要给对应数码管的com端输入低电平,数码管就能亮,至于哪些段亮哪些不亮就通过p0口控制,



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有