当前位置:首页 > 单片机 > 单片机
[导读]矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为

矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。矩阵键盘的优点是节约单片机IO口,例如普通键盘8个IO口只能用作8个按键,而矩阵键盘能作16个按键。

本文以51单片机为载体介绍一种4*4矩阵键盘实现16个按键操作的原理、电路和软件设计要点。

1、 矩阵键盘的一般电路

图 1 矩阵键盘电路

如图 1

矩阵键盘电路所示,4*4矩阵键盘有4行4列按键,单片机4个I/O口接矩阵键盘的行线,另外4个I/O口接矩阵键盘的列线,通过对行线列线的操作完成按键的识别和操作。

2、 矩阵键盘的原理

矩阵键盘按键识别的流程一般是这样的:

(1)置第1行为低电平(0),其余行为高电平,读取列线数据,列线有低电平表示此行有按键按下。

(2)置第2行为低电平(0),其余行为高电平,读取列线数据,列线有低电平表示此行有按键按下。

......

(N-1)根据行线列线的电平不同可以识别是否有按键按下,哪一个按键按下,获取按键号。

(N) 根据按键号跳转至对应的按键处理程序。

3、 一个矩阵键盘程序的例子



2为按键处理的主流程,思路是依次拉低按键的各个行,再读取列线的数据,假如列线有低电平,则认为此行有按键按下,标记此行有按键按下并存入行值。

读取列线数据的思路则是这样,依次读取第1-4列,假如读取此列时为低电平,则标记并存入列值。

下面是部分代码:

//(1)按键识别程序

void key() //按键扫描

{

unsigned char key_value_temp; //临时按键值,默认1111 1111(二进制)

key_value=0xff;

//键值

key_value_temp=0xff; //键值临时变量

//矩阵键盘程序流程

//依次拉低第1234行,读入列线数据

Pin_r_1=0; Pin_r_2=1;Pin_r_3=1;Pin_r_4=1; //拉低第1行。

//Pin_r_1第1行行线,Pin_r_2第2行行线,其余类似

key_value_temp=read_column();//读列数据

if (key_value_temp != 0xff)

//表示第一行有按键按下

{key_value=key_value_temp & 0x1f;
//获取按键号,例如0001

1101表示第1行第2列的按键按下

}

Pin_r_1=1; Pin_r_2=0;Pin_r_3=1;Pin_r_4=1; //拉低第2行

key_value_temp=read_column();//读列数据

if (key_value_temp != 0xff)

//表示第2行有按键按下

{key_value=key_value_temp &
0x2f;

}

Pin_r_1=1; Pin_r_2=1;Pin_r_3=0;Pin_r_4=1; //拉低第3行

key_value_temp=read_column();//读列数据

if (key_value_temp != 0xff)

//表示第3行有按键按下

{key_value=key_value_temp &
0x3f;

}

Pin_r_1=1; Pin_r_2=1;Pin_r_3=1;Pin_r_4=0; //拉低第4行

key_value_temp=read_column();//读列数据

if (key_value_temp != 0xff)

//表示第4行有按键按下

{key_value=key_value_temp &
0x4f;

}

}

//(2)读取列线数据

unsigned char read_column() //读矩阵键盘的列

{unsigned char key_column;

key_column=0xff;

if(Pin_c_1==0 ) key_column=key_column & 0xfe;
//1110

表示第1列按键按下。 key_column的低4位表示按键号,高4位常为1111

if(Pin_c_2==0 ) key_column=key_column & 0xfd;
//1101

表示第2列按键按下。

if(Pin_c_3==0 ) key_column=key_column & 0xfb;
//1011

表示第3列按键按下。

if(Pin_c_4==0 ) key_column=key_column & 0xf7;
//0111

表示第4列按键按下。

return key_column;

}

以上程序对应的键值表如下:

最后在程序中处理键值跳转至相应的操作即可。

有一个4*4矩阵键盘的proteus仿真例子实现了如下功能:

1、利用行扫描法读取4x4矩阵键盘键值;

2、LCD1602上显示按下的按键值。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

8位单片机在嵌入式设计领域已经成为半个多世纪以来的主流选择。尽管嵌入式系统市场日益复杂,8位单片机依然不断发展,积极应对新的挑战和系统需求。如今,Microchip推出的8位PIC®和AVR®单片机系列,配备了先进的独立...

关键字: 单片机 嵌入式 CPU

在嵌入式系统开发中,程序烧录是连接软件设计与硬件实现的关键环节。当前主流的单片机烧录技术已形成ICP(在电路编程)、ISP(在系统编程)、IAP(在应用编程)三大技术体系,分别对应开发调试、量产烧录、远程升级等不同场景。...

关键字: 单片机 ISP ICP IAP 嵌入式系统开发

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

本文中,小编将对单片机予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 单片机 开发板 Keil

随着单片机系统越来越广泛地应用于消费类电子、医疗、工业自动化、智能化仪器仪表、航空航天等各领域,单片机系统面临着电磁干扰(EMI)日益严重的威胁。电磁兼容性(EMC)包含系统的发射和敏感度两方面的问题。

关键字: 单片机 电磁兼容

以下内容中,小编将对单片机的相关内容进行着重介绍和阐述,希望本文能帮您增进对单片机的了解,和小编一起来看看吧。

关键字: 单片机 复位电路

在这篇文章中,小编将为大家带来单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 单片机 异常复位

今天,小编将在这篇文章中为大家带来单片机的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 仿真器

单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 中断 boot

一直以来,单片机都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来单片机的相关介绍,详细内容请看下文。

关键字: 单片机 数字信号 模拟信号
关闭