矩阵键盘程序

下面这个 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

(14)
叶浩迪的头像叶浩迪签约作者

文章推荐

发表回复

作者才能评论

评论列表(3条)

  • 叶浩迪的头像
    叶浩迪 2025年09月28日

    我是巨鲨号的签约作者“叶浩迪”

  • 叶浩迪
    叶浩迪 2025年09月28日

    本文概览:下面这个 Keyscan(void) 程序,是我以前写的。uchar Keyscan(void) { uchar i, j, temp, Buffer[4] = {0x...

  • 叶浩迪
    用户092803 2025年09月28日

    文章不错《矩阵键盘程序》内容很有帮助

联系我们

邮件:巨鲨号@gmail.com

工作时间:周一至周五,9:30-17:30,节假日休息

关注微信