单片机4*4矩阵键盘应用 单片机4x4矩阵键盘

在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵 形式如下图所示,在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种目的呢?大家看下面电路图,单片机的整一个8位端口可以构成 4*4=16 个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。确定矩阵式键盘上任何一个键被按下通常采用行扫描法。行扫描法又称为逐行查询法它是一种最常用的多按键识别方法。因此,我们就以行扫描法为例介绍矩阵式键盘的工作原理。

图5-4(4*4矩阵式按键的接法)

首先,不断循环地给低四位独立的低电平,然后判断键盘中有无键按下。将低位中其中一列线(P1.0~P1.3中其中一列)置低电平然后检测行线的状态(高4位,即P1.4~P1.7,由于线与关系,只要与低电平列线接通,即跳变成低电平),只要有一行的电平为低就延时一段时间以消除抖动,然后再次判断,假如依然为低电平,则表示键盘中真的有键被按下而且闭合的键位于低电平的4个按键之中任其一,若所有行线均为高电平则表示键盘中无键按下。再其次,判断闭合键所在的具体位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将列线置为低电平,即在置某一根列线为低电平时,其它列线为高电平。同时再逐行检测各行线的电平状态 ;若某行为低,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。下面图5-5是4*4矩阵式按键接法的软件算法操作流程。

下面程序按照上述算法流程去编写的,其电路如图5-6,只是在图5-5的基础上多加了P0端口的8只LED灯。从键盘中检测到一个键值,然后将这个值写到LED数码管上显示。

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar temp,num;

uchar codeDis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff} ;

//0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,0ff

void delay(uchar ms)

{

int i;

while(ms--)

{

for(i=0;i<100;i++) ;

}

}

uchar keyscan()

{

P1=0xfe;

temp=P1;

while(temp!=0xfe)

{

temp=P1;

switch(temp)

{

case 0xee:num=1;

break;

case 0xde:num=2;

break;

case 0xbe:num=3;

break;

case 0x7e:num=4;

break;

}

delay(100);

}

P1=0xfd;

temp=P1;

while(temp!=0xfd)

{

temp=P1;

switch(temp)

{

case 0xed:num=5;

break;

case 0xdd:num=6;

break;

case 0xbd:num=7;

break;

case 0x7d:num=8;

break;

}

delay(100);

}

P1=0xfb;

temp=P1;

while(temp!=0xfb)

{

temp=P1;

switch(temp)

{

case 0xeb:num=9;

break;

case 0xdb:num=10;

break;

case 0xbb:num=11;

break;

case 0x7b:num=12;

break;

}

delay(100);

}

P1=0xf7;

temp=P1;

while(temp!=0xf7)

{

temp=P1;

switch(temp)

{

case 0xe7:num=13;

break;

case 0xd7:num=14;

break;

case 0xb7:num=15;

break;

case 0x77:num=16;

break;

}

delay(100);

}

return num;

}

void Display(uchar Wei_8,uchar Wei_7,uchar Wei_6,ucharWei_5,uchar Wei_4,uchar Wei_3,uchar Wei_2,uchar Wei_1)

单片机4*4矩阵键盘应用 单片机4x4矩阵键盘

{

P2=0xfe;

P0=Dis_code[Wei_8];

delay(1);

P2=0xfd;

P0=Dis_code[Wei_7];

delay(1);

P2=0xfb;

P0=Dis_code[Wei_6];

delay(1);

P2=0xf7;

P0=Dis_code[Wei_5];

delay(1);

P2=0xef;

P0=Dis_code[Wei_4];

delay(1);

P2=0xdf;

P0=Dis_code[Wei_3];

delay(1);

P2=0xbf;

P0=Dis_code[Wei_2];

delay(1);

P2=0x7f;

P0=Dis_code[Wei_1];

delay(1);

}

void main()

{

while(1)

{

Display(keyscan(),16,16,16,16,16,16,16);

}

}

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/361938.html

更多阅读

安卓4.0系统如何添加应用到桌面 安卓4.0系统

安卓4.0系统如何添加应用到桌面——简介安卓系统不断升级,升级后都有些改变,很多朋友用习惯了其它版本,4.0的就不很会使用了,下面就教大家4.0系统时,如何添加应用到手机桌面。安卓4.0系统如何添加应用到桌面——工具/原料安卓4.0系统智

QQ勋章怎么点亮图标 勋章墙点亮后保持几天

QQ勋章怎么点亮图标——简介QQ勋章图标怎么点亮,QQ勋章墙如何获取勋章图标,OO最近更新的版本中增加了一个小小的勋章图标展示功能,只需集够4个QQ应用软件即可点亮勋章图标,让你彰显QQ身份。下面就简单演示如何点亮勋章供参考。只要卸载

键盘扫描程序FPGA 矩阵键盘扫描程序

下面是一个4*4的矩阵键盘,是我们老师为了给我们练手而买的,今天上午老师让我们编写了键盘扫描程序,并用板上的LED显示出来。这里有三个程序,前面两个是别人写的,后面一个是我自己写的。 网上下的程序如下:module key (clk, //50MHZ res

MATLAB矩阵及其运算 matlab矩阵运算

第2章 MATLAB矩阵及其运算2.1 变量和数据操作2.2 MATLAB矩阵2.3 MATLAB运算2.4 矩阵分析2.5 矩阵的超越函数2.6 字符串2.7 结构数据和单元数据2.8 稀疏矩阵2.1 变量和数据操作2.1.1 变量与赋值1.变

声明:《单片机4*4矩阵键盘应用 单片机4x4矩阵键盘》为网友傲弑翼分享!如侵犯到您的合法权益请联系我们删除