矩阵按键
图为一4*4的矩阵按键在开发板上与P3接口连接
(1)一般用行列扫描的方式进行按键的识别。(通俗来讲就是先判断哪一列被按下了,再判断哪一行被按下了,通过交叉可以得出哪一个按键被按下了。)
(2)矩阵键盘不支持同时按下
(3)看矩阵键盘的原理图:4个IO口控制行,4个IO口控制列。
代码
首先是延时函数,用于按键的消抖
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
按键扫描函数
分别扫描行和列,识别出按键
unsigned char Key_Init()
{
unsigned char keyvalue;
key=0xf0; //列扫描
if(key!=0xf0)
{
Delay10ms(); //延时10ms 消抖
if(key!=0xf0)
{
switch (key)
{
case 0xe0: keyvalue=16;break;
case 0xd0: keyvalue=12;break;
case 0xb0: keyvalue=8 ;break;
case 0x70: keyvalue=4 ;break;
}
key=0x0f; //行扫描
if(key!=0x0f)
{
Delay10ms(); //延时10ms 消抖
if(key!=0x0f)
{
switch (key)
{
case 0x0e: keyvalue=keyvalue+3;break;
case 0x0d: keyvalue=keyvalue+2;break;
case 0x0b: keyvalue=keyvalue+1;break;
case 0x07: keyvalue=keyvalue+0;break;
}
while(key!=0x0f);
}
}
}
}
return keyvalue;
}
将按键数值读取后在数码管界面函数中显示出
void Ncube_buff()
{
Ncubeshow[0] = Ncubeduan[0];
Ncubeshow[1] = Ncubeduan[0];
Ncubeshow[2] = Ncubeduan[0];
Ncubeshow[3] = Ncubeduan[0];
Ncubeshow[4] = Ncubeduan[0];
Ncubeshow[5] = Ncubeduan[0];
Ncubeshow[6] = Ncubeduan[key_number/10];
Ncubeshow[7] = Ncubeduan[key_number%10];
}
最后主函数
void main()
{
Close_buzz();
Timer0Init();
while(1)
{
key_number = Key_Init();
Ncube_buff();
}
}
按下不同的按键后数码管最后两位显示出按下的按键值。