张世豪4x4矩阵键盘张世豪4x4矩阵键盘
4 x 4矩阵键盘识别
在单片机应用系统中,键盘是人机对话不可缺少的组件之一。在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。
4 x 4矩阵键盘是运用得最多的键盘形式,也是单片机入门必需掌握的一种键盘识别
矩阵键盘的识别方法。如下图所示,我们把按键接技术,下面我们就以实例来说明一下4 x 4
成矩阵的形式,这样用8个I/O口就可以对16个按键进行识别了,节省了I/O口资源。
我 们的识别思路是这样的,初使化时我们先...
张世豪4x4矩阵键盘
4 x 4矩阵键盘识别
在单片机应用系统中,键盘是人机对话不可缺少的组件之一。在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。
4 x 4矩阵键盘是运用得最多的键盘形式,也是单片机入门必需掌握的一种键盘识别
矩阵键盘的识别方法。如下图所示,我们把按键接技术,下面我们就以实例来说明一下4 x 4
成矩阵的形式,这样用8个I/O口就可以对16个按键进行识别了,节省了I/O口资源。
我 们的识别思路是这样的,初使化时我们先让P1口的低四位输出低电平,高四位输出高电平,即让P1口输出0xF0。扫描键盘的时候,我们读P1口,看P1是 否还为0xF0,如果仍为0xF0,则
示没有按键按下;如果不0xF0,我们先等待10ms左右,再读P1口,再次确认是否为0xF0,这是为了防止是 抖动干扰造成错误识别,如果不是那就说明是真的有按键按下了,我们就可以读键码来识别到底是哪一个键按下了。
识 别的过程是这样的,初使化时我们让P1口的低四位输出低电平,高四位输出高电平,确认了真的有按键按下时,我们首先读P1口的高四位,然后P1口输出 0x0F,即让P1口的低四位输出高电平,高四位输出低电平,然后读P1口的低四位,最后我们把高四位读到的值与低四位读到的值做或运算就得到了该按键的 键码。就可以知道是哪个键按下了。
以0键为例,初使化时P1输出0xF0,当0键按下时,我们读高四位的状态应为1110,即P1为0xE0,然后让P1输出0x0F,读低四位产状态应为0111,即P1为0x07,让两次读数相与得0xE7。
现在我们在P0口和P2口分别接一个共阳极的数码管,用来显示我们按下去的键的键值,P0口接的是个位,P2口接的是十位。如0键按下显示00,1键按下显示01,15键按下显示15……,实现的程序如下:
#include
#define unit unsigned int
#define unchar unsigned char
unchar code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
unit t;
unchar temp;
void delay(unit z)
{ unit x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void display(unchar num) {
P0=table[num];
P2=0xfe;
}
void key()
{
while(1)
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{ delay(10);
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{temp=P1;
switch(temp)
{ case 0xee:t=0;break;
case 0xde:t=1;break;
case 0xbe:t=2;break;
case 0x7e:t=3;break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
display(t);
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{ delay(10);
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{temp=P1;
switch(temp)
{ case 0xed:t=4;break;
case 0xdd:t=5;break;
case 0xbd:t=6;break;
case 0x7d:t=7;break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
display(t);
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{ delay(10);
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{temp=P1;
switch(temp)
{ case 0xeb:t=8;break;
case 0xdb:t=9;break;
case 0xbb:t=10;break;
case 0x7b:t=11;break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
display(t);
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{ delay(10);
temp=P1;
temp=temp&0xf0;
if (temp!=0xf0)
{temp=P1;
switch(temp)
{ case 0xe7:t=12;break;
case 0xd7:t=13;break;
case 0xb7:t=14;break;
case 0x77:t=15;break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
display(t);
}
}
}
void main()
{
while(1)
{
key();
}
}
本文档为【张世豪4x4矩阵键盘】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。