当前位置:文档之家› 矩阵键盘使用合说明

矩阵键盘使用合说明


while((x&0x10)!=0)
//扫描信号逐行发出
{ P1=x;
if((P1&0xf0)!=0xf0) //满足本条件说明有某一列接受行的发送的零
{y=(P1&0xf0)|0x0f;
while ((P1&0xf0)!=0xf0); //当按下的键释放后才继续往下执行
return((~x)+(~y));
case 0x12: return(1); break;
case 0x14: return(2); break;
case 0x18: return(3); break;
case 0x21: return(4); break;
case 0x22: return(5); break;
case 0x24: return(6); break;
void show(uchar n)
{
SBUF=tab[n];
while(!TI); TI=0;
//TI 需要软件清零
}
/********************************键盘去抖延时*****************************/ void delay(void)
{ uchar i; for(i=250;i>0;i--);
case(8):for(i=0;i<6;i++)show(10);show(3);break;
case(9):for(i=0;i<6;i++)show(10);show(7);break;
case(10):for(i=0;i<6;i++)show(10);show(1);show(0);break;
//段码表(共阴) "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 熄灭 "P"
uchar code tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00,0xce};
/******************************串口显示程序********************************/
J2
H1
4
H2 H3
3 2
H4
1

S9 SW-PB S10 SW-PB S11 SW-PB S12 SW-PB
L1 L2 L3 L4
S13 SW-PB S14 SW-PB S15 SW-PB S16 SW-PB
பைடு நூலகம்
二、常见问题解答
1、 矩阵键盘的结构什么样的?(以其与单片机 P1 口相连接为例)
2、 按键识别方法中有一种叫行扫描法,这是什么意思?
}
/****************************键盘扫描子程序****************************/
/****************************************************************************/
uchar keyscan1()
case(11):for(i=0;i<6;i++)show(10);show(1);show(4);break;
case(12):for(i=0;i<6;i++)show(10);show(4);break;
case(13):for(i=0;i<6;i++)show(10);show(8);break;
/****************************************************************************/
main()
{uchar i;
while(1)
{
switch(keyscan())
{ case(0):for(i=0;i<6;i++)show(10);show(1);break; 值之前,先熄灭所有数码管。
//返回键值码,最后的返回键码
}
else x=(x<<1)|0x01;
//逐行扫描移位
}
}
} return(0x16);
//无键值按下返回 16 进制数 16
}
uchar keyscan()
{
uchar key;
key=keyscan1();
switch(key)
{
case 0x11: return(0); break;
} }
case 0x28: return(7); break; case 0x41: return(8); break; case 0x42: return(9); break; case 0x44: return(10); break; case 0x48: return(11); break; case 0x81: return(12); break; case 0x82: return(13); break; case 0x84: return(14); break; case 0x88: return(15); break; case 0x16:return(0x16); break;
②判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方 法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定 某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置 为低电平的行线交叉处的按键就是闭合的按键。
矩阵键盘例程: 说明:在 P1 口上接矩阵键盘,当某按键被按下时,通过 6 位数码管串行显示模块显示按键 的键值。 ************************************************************ ************************************************************/ /*************************************************************************/ #include <reg51.h> #define uchar unsigned char
矩阵键盘模块使用说明
一、原理说明
在单片机应用系统中,经常使用简单的键盘作为系统的输入,这样可使系统的结构简单 紧凑,成本低。其电路板布局图和原理图如下:
L4 L3 L2 L1
S1
SW-PB H1
S2
SW-PB H2
S3
SW-PB H3
S4
SW-PB H4
J1 4 3 2 1

S5 SW-PB S6 SW-PB S7 SW-PB S8 SW-PB
{ uchar x,y; P1=0xf0;
//向 P1 口发送 FO,即高 4 位为 1,低 4 位为 0
if((P1&0xf0)!=0xf0)
//检测有无键盘按下
{delay();
//延时去抖动
delay(); if((P1&0xf0)!=0xf0)
//再次判断,如果有键按下向下执行
{x=0xfe;
case(14):for(i=0;i<6;i++)show(10);show(1);show(1);break;
case(15):for(i=0;i<6;i++)show(10);show(1);show(5);break;
}
}
}
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示 键盘,介绍过程如下。
①判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的 电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与 4 根行线相交叉的 4 个按键之中。若所有列线均为高电平,则键盘中无键按下。
case(4):for(i=0;i<6;i++)show(10);show(2);break;
case(5):for(i=0;i<6;i++)show(10);show(6);break;
case(6):for(i=0;i<6;i++)show(10);show(0);break;
case(7):for(i=0;i<6;i++)show(10);show(1);show(3);break;
//for 循环是为了在显示本次按键键
case(1):for(i=0;i<6;i++)show(10);show(5);break;
case(2):for(i=0;i<6;i++)show(10);show(9);break;
case(3):for(i=0;i<6;i++)show(10);show(1);show(2);break;
相关主题