APP下载

基于AT89C52的矩阵键盘编程

2016-12-17潍坊工程职业学院张成法马凤娟

河北农机 2016年11期
关键词:矩阵式数码管赋值

潍坊工程职业学院 张成法 马凤娟

基于AT89C52的矩阵键盘编程

潍坊工程职业学院张成法马凤娟

本文主要讲述采用逐行扫描法识别矩阵式键盘按键,通过依次按下矩阵式键盘上的第1~16个键,6位数码管全部依次显示0~F来阐述矩阵式键盘按键识别的具体实现方法。

矩阵式键盘;按键;数码管

引言

在单片机组成的各种系统中,应用最多的是非编码键盘。非编码键盘又分为:独立键盘和行列式(又称矩阵式)键盘。本文通过案例程序“依次按下矩阵式键盘上的第1~16个键,6位数码管全部依次显示0~F”的编写阐述采用逐行扫描法识别矩阵式键盘按键的实现方法。对矩阵式键盘按键的识别方法有很多种,本文讲述的方法简单易懂,容易掌握。

1 系统整体设计

本系统是由AT89C52单片机、电源电路、复位电路、6个数码管、锁存器和4行×4列的矩阵式键盘组成。如图1所示,图中已对4行×4列的矩阵式键盘的每个按键从左到右、从上到下进行了1~16的数字编号。

系统整体设计图

图中与P2.0相连的键盘是独立键盘。一旦独立键盘被按下,则与之相连的P2.0引脚由高电平变为低电平,如果检测到P2.0引脚是低电平,则说明独立键盘被按下去了。

4行×4列的矩阵式键盘全部和单片机的P3口相连,矩阵式键盘的4行是跟P3.0~P3.3引脚相连,4列是跟P3.4~P3.7引脚相连。

2 矩阵式键盘按键识别分析

①给键盘的第一行P3.0赋值0,给其余的P3.1~P3.7赋值1,即P0=0xfe,然后重新读回P3.4、P3.5、P3.6、P3.7的数据,看看读回的P3.4、P3.5、P3.6、P3.7的数据中是否有0,如果有0,则说明第一行的4个键(1、2、3、4)中有某个键被按下去了。如果从P3.4~P3.7读回来的数为0111,则说明键1被按下去了。如果从P3.4~P3.7读回来的数为1011,则说明键2被按下去了。如果从P3.4~P3.7读回来的数为1101,则说明键3被按下去了。如果从P3.4~P3.7读回来的数为1110,则说明键4被按下去了。

②给键盘的第二行P3.1赋值0,给其余的P3.0、P3.2、P3.3、P3.4、P3.5、P3.6、P3.7赋值1,即P0=0xfd,然后重新读回P3.4、P3. 5、P3.6、P3.7的数据,看看读回的P3.4~P3.7的数据中是否有0,如果有0,则说明第二行的4个键(5、6、7、8)中与数据为0的引脚相连的某个按键被按下去了。

③给键盘的第三行P3.2赋值0,给其余的P3.0、P3.1、P3.3、P3.4、P3.5、P3.6、P3.7赋值1,即P0=0xfb,然后重新读回P3.4、P3. 5、P3.6、P3.7的数据,看看读回的P3.4~P3.7的数据中是否有0,如果有0,则说明第三行的4个键(9、10、11、12)中与数据为0的引脚相连的某个按键被按下去了。

④给键盘的第四行P3.3赋值0,给其余的P3.0、P3.1、P3。2、P3.4、P3.5、P3.6、P3.7赋值1,即P0=0xf7,然后重新读回P3.4、P3. 5、P3.6、P3.7的数据,看看读回的P3.4~P3.7的数据中是否有0,如果有0,则说明第四行的4个键(13、14、15、16)中与数据为0的引脚相连的某个按键被按下去了。

检测矩阵式键盘中是否有键被按下去就是根据①→②→③→④的顺序进行的。依次给矩阵式键盘的每一行赋值0,然后依次读取P3口的高四位P3.4~P3.7的数据,看看P3.4~P3.7中数据有没有为0的,如果有为0的则说明有按键被按下去。

3 程序设计

编写案例项目“依次按下矩阵键盘上的第1~16个键,6位数码管全部依次显示0~F”的程序。依次给P3口赋值0xfe、0xfd、0xfb和0xf7实现对矩阵式键盘的逐行扫描。

在程序中给P3口赋值,然后把P3口的数据重新读取回来,并将其赋给变量temp,即temp=P3,然后将temp和0xf0进行与运算,把与运算结果temp&0xf0跟0xf0相比较,如果temp& 0xf0=0xf0则说明没有按键被按下去,如果temp&0xf0不等于0xf0则说明有按键被按下去。

按键在闭合时,触点会存在抖动现象,为了确定按键是否确实被按下去,在程序编写中需要对其进行多次判断。

部分程序如下所示:

P3=0xfd;//对键盘第二行进行扫描

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)//判断是否有按键按下去

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)//判断是否有按键按下去

{

temp=P3;

switch(temp)

{

case 0xed:num=5;

break;

case 0xdd:num=6;

break;

case 0xbd:num=7;

break;

case 0x7d:num=8;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

4 结束语

本文利用数码管和锁存器,通过在数码管上显示矩阵式键盘按键数值的项目案例,详细讲述了采用逐行扫描法识别矩阵式键盘按键的实现方法。该方法简单易懂,容易掌握。

[1]林珊,许建明.基于单片机的键盘显示系统设计[J].信息与电脑,2011.

[2]郭小军.单片机控制数码管动态显示过程分析[J].武汉船舶职业技术学院学报,2010.

张成法,1984年出生,山东青州人,硕士,研究方向:单片机与嵌入式系统。

猜你喜欢

矩阵式数码管赋值
奥迪e-tron
电除尘矩阵式电磁振打器控制系统改进优化
微课教学设计之“数码管动态显示”
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
强赋值幺半群上的加权Mealy机与加权Moore机的关系*
算法框图问题中的易错点
利用赋值法解决抽象函数相关问题オ
四川省某医学院矩阵式临床素质团队教育模式下培养时间与科研产出关系的探讨