|
现在睡不着,就把以前想到的矩阵键盘的检测分享一下吧,可能已经有人想到了,那就算我是无聊吧。现在老师上课讲的矩阵键盘的检测都是一行一行或一列一列检测,代码比较繁琐,以4×4的矩阵键盘为例(接的IO口为P0),我的想法是一次性将低四位全部为0(P0=0xf0),然后取P0的高四位,第二步将高四位为0(P0=0x0f),取P0的低四位,将两次的数值合并即得到键值。这个想法我想到之初觉得太好了,但转念一想, 遇到了对单片机内部硬件的困惑,将两个IO口直接相连,其中一个IO口拉低电平,那另一个IO口会怎么样?是高电平被低电平拉低还是低电平被高电平太高?当时不确定,就没去多想,不过现在我可以说是高电平被低电平拉低,因为我刚刚做过实验,而且看了书上IO口的硬件组成(有关场效应管的东西)也可以得到相同的结论。这是仿真做的图片,另外,用这种方法检测的另一个好处就是能支持组合键的识别。下面是简单的代码:
unsigned char get_key_value(void)
{
unsigned char value;
KEY=0xf0;
value=KEY;
KEY=0x0f;
value=value|KEY;
return value;
}
好了 ,睡觉,都没睡意了。
|
proteus仿真图
仿真文件下载:
代码.zip
(38.88 KB, 下载次数: 27)
|
|