矩阵键盘扫描程序分析

矩阵键盘扫描程序分析,第1张

uchar

keyscan(void)//键盘扫描函数,使用行列反转扫描法

比如:行为低电位,列为高四位

{

uchar

cord_h,cord_l//行列值

P3=0x0f

//行线输出全为0

cord_h=P3&0x0f

//读入列线值

if(cord_h!=0x0f)

//这个句话意思是这样的,如果有启余按键按下的话。那肯定就不是0x0f了。

{

主要就是识别按键按下作用

delay(100)

//去抖

if(cord_h!=0x0f)

//这是双重判定作用而已

{

cord_h=P3&0x0f

//读入列线值

P3=cord_h|0xf0

//输出当前列线值

cord_l=P3&0xf0

//读入液碧行线值

return(cord_h+cord_l)//键盘最后组合码值

}

}return(0xff)

//返回该值

}

好像你的程序解释得很好了。但是好像这么快,最好要延时下才准的。

我教闹旁举你按键的原理吧

就是那根线如果是高电平的话,遇到底电平就会变为底电平的。所以如果有按键按下的话,高电平就会变为低电平了。所以就可以读取了。

首先调用键盘扫描程序,返回按键升虚做值,要是4X4矩阵,键值最好设置为0~F,即十进制数的0~15,不按键时,返回16。这样,如果返回值为16,就是没有按键,不作任何处理。通常前十个键为数字键0~9,其余6个可定义成功能键,这6个功能可以随便定义的,如果按键上有字符最好,例如,你要的清屏,要写一个清屏的子程序,凡是功能键对应的功能都要写成一个子程序吵衡。调用键盘程序,判断返回的键值,小于10为数字键,用于输誉皮入数字。大于9为功能键,假如定义键值等于10的为清屏键,则写成

if(key_num==10){ clear_lcd ( )}//清屏

else if(key_num==11){ //定义另一个功能 }

依此类推.

KeyPort=0x0f //行线输出全为0

cord_h=KeyPort&0x0f//读入列线值

这两句代码最后造成的结果就是使得cord_h=0x0f。

这样的话,完全没李乎有任哪桐悉何的意义呀,

--轮伍--

不一定是 0f。

有按键时,也可能是 07,也可能是 0d,也可能是 0e,也可能是 0b。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12388288.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存