51单片机矩阵键盘 防鬼键示例
时间: 2023-12-06 15:28:48 浏览: 37
防鬼键是指当同时按下多个按键时,系统可以正确识别并响应按键信号,而不会出现按键冲突的情况。针对51单片机矩阵键盘的防鬼键示例如下:
假设我们使用3x3的矩阵键盘,将其连接到51单片机的P1口和P3口上。我们可以设置一个变量flag,用于记录是否有多个按键同时按下的情况。具体实现代码如下:
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[] = {0xEE, 0xED, 0xEB, 0xDE, 0xDD, 0xDB, 0xBE, 0xBD, 0xBB}; //键盘扫描码表
uchar keyvalue; //按键值
uchar flag = 0; //防鬼键标志位
void delay(uint i) //延时函数
{
while(i--);
}
void keyscan() //键盘扫描函数
{
uchar temp;
P1 = 0x0F; //先将P1口低4位清零
temp = P1; //读取P1口低4位
temp &= 0x0F; //取低4位
if(temp != 0x0F) //如果有按键按下
{
delay(1000); //延时去抖
temp = P1; //再次读取P1口低4位
temp &= 0x0F; //取低4位
if(temp != 0x0F) //如果有按键按下
{
temp |= 0xF0; //加上高4位
keyvalue = table[temp]; //查表得到按键值
flag = 1; //设置防鬼键标志位
}
}
}
void main()
{
while(1)
{
keyscan(); //键盘扫描
if(flag) //如果防鬼键标志位为1,说明有多个按键同时按下
{
delay(10000); //延时等待松开按键
keyscan(); //再次键盘扫描
if(flag) //如果仍然有多个按键同时按下
{
flag = 0; //清除防鬼键标志位
continue; //重新开始循环
}
}
//执行按键处理程序
}
}
```
上述代码中,keyscan()函数用于扫描键盘并得到按键值,flag变量用于记录是否有多个按键同时按下的情况。当flag值为1时,说明有多个按键同时按下,此时程序会延时等待松开按键,并再次进行键盘扫描,如果仍然有多个按键同时按下,则清除flag标志位并重新开始循环,否则执行按键处理程序。通过这种方式,我们可以实现针对51单片机矩阵键盘的防鬼键功能。