2019-07-18 12:40发布
先生下山啦 发表于 2014-8-17 21:04 我想 我知道原因了,应该是消抖的问题,这是按照我规定的显示位置依次显示的,显示五个后PassPosi的值累 ...
最多设置5个标签!
你这个程序我没看懂,但是需要加个按键等待释放。
//作 者:武力戡乱
//项 目:按键驱动
//日 期:2014/7/18
//功 能:实现6*6按键功能,通过串口输出
//备 注:电子发烧友论坛-Proteus论坛,网友求助帮忙制作
#include "KEY.h"
//函数:Key_Hit()
//描述:按键判断
//参数:return 1:有按键 0:无按键
static unsigned char Key_Hit(void)
{
if(KEY_Lie_Read == 0xFF)
return(0);
else
return(1);
}
//函数:Key_Code()
//描述:计算键值
//参数:return 键值
static unsigned char Key_Code(void)
{
unsigned char row;
unsigned char lieread = 0;
unsigned char rownum = 0xFE;
unsigned char key = 0xFF;
for(row=0; row<6; row++)
{
KEY_Row_Write = rownum;
lieread = KEY_Lie_Read;
if (lieread != 0xFF)
{
switch(lieread)
{
case 0xFE:
key=0 + 6*row;
break;
case 0xFD:
key=1 + 6*row;
break;
case 0xFB:
key=2 + 6*row;
break;
case 0xF7:
key=3 + 6*row;
break;
case 0xEF:
key=4 + 6*row;
break;
case 0xDF:
key=5 + 6*row;
break;
}
}
rownum <<= 1;
rownum ++;
}
KEY_Row_Write = 0;
return(key);
}
//函数:Key_Scan()
//描述:键盘扫描
//参数:return 0xff:无键值 0-15:键值
unsigned char Key_Scan(void)
{
unsigned char key_code_temp;
if(Key_Hit()==1)
{
Delay_Int(10,10);
if(Key_Hit()==1)
{
key_code_temp=Key_Code();
while(Key_Hit()==1);
return(key_code_temp);
}
else
return(0xff);
}
else
return(0xff);
}
//函数:Key_Init()
//描述:键盘初始化
//参数:无
void Key_Init(void)
{
KEY_SetRow_Write;
KEY_SetLie_Read;
KEY_Row_Write = 0;
}
这个是我帮网友做的,论坛里面有430的6*6矩阵键盘。
我一会在帮你看看。你先看看这个。然后在找一下,论坛里面的6*6矩阵键盘仿真。
一周热门 更多>