查看: 2259|回复: 0

香蕉派一个IO口12个按键

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-10-17 09:07:43 | 显示全部楼层 |阅读模式
    分享到:
    提到按键,大家都很熟悉,随便找个IO口,设置为输入,外面再接个普通按键就行了,最多加上上拉电阻,没有什么新鲜的。没错,这是最简单最保险也是最常用的方法,不过如果我想外接很多个按键,比如十几二十多个怎么办呢?找几十个IO口,引几十根线出来?还是再外接个芯片串行控制?当然可以,可是还要准备外围电路,增加了时间增加了成本。还有没有别的办法呢?有,先看一下自制的神器:

    还是按键,呵呵。不过有一点不一样,看到接口了吗?只有3个。除去VCC和GND,那么就剩下一个口了,这一个口可以接收到这么多的按键信号?
        确定这个可行之前,还是来看一下A20的手册吧。翻到LRADC章节,有这样一个说明:

    虽然很简单的几句话,但是基本上描述清楚了。也就是说,LRADC可以实现这个按键输入的功能。
        以前提到过,LRADC是一种低分辨率的模数转换器,精度很低,不过用在按键检测上还是可以的,而且A20也是准备这样来用的。并且它可以支持的中断有:

    1.数据变化;
        2.Key Down;
        3.Key Hold;
        4.Already Hold;
        5.Key Up;
    看到这些,更能够证明LRADC可以用来实现按键的检测。
        好了,既然确定可以实现,那就动手准备所需要的东西吧。
        1.按键若干,根据自己的需要;
        2.万用板一张,大小形状也是根据自己的需要;
        3.杜邦线3根,只要3根就够了;
        4.香蕉派一块,必须的。
    其实原理很简单,就是电阻分压的方式来得到不同的电压,从而判断出不同按键的按下。先来看一下原理图:

    这是借用别人的原理图,他的是16个按键,为了保证可用,我减去了4个,原因后面说明。
        在输入电压的两遍分别接了若干个电阻,每个电阻对应不同的按键。当有某个按键按下时,根据它前后电阻的阻值不同,来得到这个按键应该产生的电压,输入到LRADC口中检测,用程序来判断它的状态,并告诉系统按下抬起的事件。
        原理很简单,但是也有一些需要考虑到的地方:
        1.A20 的LRADC最大可检测的电压为2V,所以要保证分压后的电压不能超过2V;
        2.A20 的LRADC只有6位,即从0~63共64个数据。2V / 64 = 0.03125V,也就是说,LRADC最小能够检测到的电压变化为0.03V,每个按键按下后的电压差必须要大于0.03V,否则程序没有办法判断出是哪个按键了;
        3.香蕉派输出的电压最低的为3.3V,所以要基于3.3V来选择适配的电阻。
        为了保证这三点要求,我做了小小的修改:

    整个程序的流程就是配置好LRADC相关的寄存器,开始采样后,响应设定的中断,然后才开始读取数据,再根据数据的范围来判断是哪个键按下。不过在试验的时候发现,HOLD和AlrdyHOLD中断不能响应,只有Data、KeyDown、KeyUp可以捕获到。不过已经足够了。如果想判断长按的状态,还是自己加计时吧。

    前些日子已经完成了这个程序,结果刚刚没找到,又重新写了个简单的,没有加入过滤,所以出现了重复显示,就当是个展示吧。其实只要响应中断后及时清理就没有问题。当达到最大值时证明是按键抬起,记录上一次按下的按键就可以完全分辨出状态了。
        原来做的那个键盘,没有注意到有一个按键是坏的,手感没问题就是连不通,坑爹啊。一怒之下干脆做了个新的,又增加了光感和PWM,同时把走线图放出来供大家参考吧。

    做成的效果,包括ADC按键、ADC光感、PWM灯,并且加了个切换开关,可以当作24个键使用。

    背面

    万用板的走线图,最上面LED旁边少了一个元件,没有找到封装图就空着了,是个8550,直接把三个脚连上就可以了。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 12:49 , Processed in 0.133665 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.