打印

行列式键盘扫描方法

[复制链接]
2778|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
blueyimoon|  楼主 | 2013-5-19 14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近买了本郭天祥的书,看到行列式键盘的代码一大堆switch语句看的我是蛋疼不已,于是去网上看看有妹妹更好一点的方法。
不经意看到周兴华的书,上面的方法我觉得蛮好的
首先是定义了一个数组key[] = {0xfe,0xfd,0xfb,0xf7};
然后用了一个for循环扫描
for(i=0,i<4,i++)
{
         P1 = act[i];//第i行为0
         delay(10);//延迟消抖动的
        in = P1;
        in = in>>4;
        in = in |0xfo;//这3行就是把P1口读到的数据右移4位并且前4位给0,这样把列的判断变成行一样了
        for(j = 0;j<4;j++)
       {
                if(act[j] = in)//这个呢,就是有键按下了,j可以判断出列的数 ,i可以判断出行的数  
             {
                         find =1;
                         lie = j;
                         hang = i;
                        keynum = (lie*4 + hang)//键值就等于列乘以4加上行
                }
       }
}
这样用一个数组既可以判定行数又可以判定列数,方便很多了,个人觉得比老郭的代码要有技术含量一点,不知道各位还有什么别的方法可以告知在下

相关帖子

沙发
airwill| | 2013-5-19 16:04 | 只看该作者
能够从书本的程序, 看出缺陷和优化办法.
楼主有前途, 坐沙发支持

使用特权

评论回复
板凳
eydj2008| | 2013-5-19 16:08 | 只看该作者
你是高手:victory:  你将这个放到定时器里面去工作试一下

使用特权

评论回复
地板
dirtwillfly| | 2013-5-20 09:11 | 只看该作者
用for循环代替了switch判断

使用特权

评论回复
5
ayb_ice| | 2013-5-20 09:46 | 只看该作者
反转法更快

使用特权

评论回复
6
星辰yyt| | 2013-5-20 11:53 | 只看该作者
高低电平翻转法:
首先让P1口高四位为1,低四位为0。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置。
然后让P1口高四位为0,低四位为1。若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。
最后将上述两者进行或运算即可确定被按下的键的位置。

使用特权

评论回复
7
blueyimoon|  楼主 | 2013-5-20 16:02 | 只看该作者
星辰yyt 发表于 2013-5-20 11:53
高低电平翻转法:
首先让P1口高四位为1,低四位为0。若有按键按下,则高四位中会有一个1翻转为0,低四位不 ...

这个方法不错 我试试看 谢谢大神指教

使用特权

评论回复
8
943096020| | 2013-6-20 18:34 | 只看该作者
学习学习了

使用特权

评论回复
9
趣味单片机| | 2013-6-21 11:21 | 只看该作者
异或法更快,在中断中读取IO的状态,与上一次的读取值进行异或,若不为0则有键按下或释放。离开前别忘了保存本次IO状态。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

19

帖子

1

粉丝