下面这个 Keyscan(void) 程序,是我以前写的。
uchar Keyscan(void)
{
uchar i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j = 0; j < 4; j++) { //循环四次
P2 = Buffer[j]; //在P1高四位分别输出一个低电平
temp = 0x01; //计划先判断P1.0位
for(i = 0; i < 4; i++) { //循环四次
if(!(P2 & temp)) //从P1低四位,截取1位
return (i + j * 4); //返回取得的按键值
temp <<= 1; //判断的位,左移一位
} }
return 16; //判断结束,没有键按下,返回16
}
程序,用了一个 8 位的并口:P1,或 P2,都行。
改成2*8的,就要使用两个接口了,用什么?楼主应该指定出来。
你用的是4x4的矩阵键盘的行列反转扫描吧,这种方法确定一个键码要分成3步:
第一步:将行IO置低电平,列IO置高电平,读数据。按下任意键时,将有一个列IO被拉低,于是读到类似00001011的数据
第二步:将行IO置高电平,列IO置低电平,重复第一步,读到类似11010000的数据cord_l=P3&0xf0;本句取有效值
第三步:将读到数据的有效部分结合,即(00001011) | (10110000)得到11011011,这就是键码了,至此,键盘扫描部分,即uchar keyscan(void)结束
return(cord_h+cord_l);本句将两次读到的数据中有效部分结合
按照硬件连接可以为每个按键确定唯一的键码,即 switch(key)中的16个分支
本文来自作者[叶浩迪]投稿,不代表巨鲨号立场,如若转载,请注明出处:https://jvsha.com/jvs/1039.html
评论列表(3条)
我是巨鲨号的签约作者“叶浩迪”
本文概览:下面这个 Keyscan(void) 程序,是我以前写的。uchar Keyscan(void) { uchar i, j, temp, Buffer[4] = {0x...
文章不错《矩阵键盘程序》内容很有帮助