概述
去年大一比赛,因为时间问题,还有程序得现场手打,找老师要过他的程序,这种矩阵按键的确挺好用的,而且代码量不大。当时比赛4个小时,各种底层驱动还要自己手打,时间还是挺紧张的,当时功能要求都勉强写完了。
一般我程序不另作介绍,一般都写在注释里了,平常没太多时间。不过这个程序还真没注释……矩阵按键解释起来感觉很麻烦。
接法就按行P口低四位,列高4位接。
#define uchar unsigned int char
uchar key_s=0, key_v=0;
uchar code key_code[] //键值表
={0xff,0xee,0xde,0xbe,0x7e, // 无, K1, K2, K3,K4
0xed,0xdd,0xbd,0x7d, // K5, K6, K7,K8
0xeb,0xdb,0xbb,0x7b, // K9, K10, K11,K12
0xe7,0xd7,0xb7,0x77}; // K13, K14, K15,K16
void Delay10ms() //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
/*************************************************************
键盘扫描函数---无键按下或按键未释放返回0,否则返回1
key_s --- 键号, 用于标识当前按下的闭合键,无键按下为0
key_code---键值表
*************************************************************/
bit scan_key()
{
uchar i,j,k;
P2=0xf0;
j=P2;
j&=0xf0;
P2=0x0f;
k=P2;
k&=0x0f;
j=j|k;
for(i=0;i<=16;i++)
if (j==key_code[i])
{
key_s=i;
break;
}
else key_s=0;
return(key_s ^ key_v);
}
/*以下是调用方法,和独立按键差不多*/
//void ks()
//{
// if(scan_key())
// {
// Delay10ms();//软件去抖
// if(scan_key())
// {
// key_v= key_s;
// if(key_v==2) //当S2按下时
// {
//
}
// if(key_v==3) //当s3
// {
// }
// }
// }
//}
注意把数码管,按键扫描之类的用定时器按一定时间分配运行
最后
以上就是平淡星月为你收集整理的一种矩阵按键扫描方法,很简略的全部内容,希望文章能够帮你解决一种矩阵按键扫描方法,很简略所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复