多按键扫描:一个时间允许一个以上的key按下,但是只读取最新按下的按键
扫描注意事项:一般来说扫描的作法有Outputportandinputport配合
Outputport1110
1101
1011
0111
依序送出0信号让inputport读取,但此时可能发生两件冲突事件需要注意
如果用output0andoutput1的组合来送出scanpattern,当客户同时按下同一排两组按键的时候,会有短路现象,传统作法是加入二极管diode来保护,现在单片机的作法则是利用outputàinputpull-upR的方式来达成.见图面说明
但是当使用Inputpull-upR时候又有另外一件事情要注意就是当1110à1101时候,bit0=output0àinputpull-up1,必须是bit0=output0àoutput1àinputpull-up中间必须经过output1的动作,这动作要协助output0的信号直接快速拉至Hi准位,然后再切换入inputmode,如果直接由output0àinputmode,此时会有一个较长的上升时间,导致keyscan错误
3)三角形按键有效的增加扫描按键数目,见图面说明
4)扩充按键可以加上diode增加keyscan数目见图面说明
5)按键与其它周边共享I/O脚位
6)ADC与RF接收机杂音避免的方式
②keychk――按键弹跳处理,其主要负责滤除按键输入口灌入的杂讯或按键弹跳杂波。
1)一般建议弹跳时间处理约在70mS~100mS,EFT特性如果要好可以更加长到使用者可接受到最常时间200mS
2)弹跳时间的处理并非用delayloop延迟,这会降低系统的实时性与反应力必须检查的动作放在主程序循环里面配合keychattime的递减来完成!
3)如果主循环绕圈时间1mS那按键稳定检查连续次数可高达100次左右这对于Key处理来说是非常稳定的
4)弹跳的检查是连续检查key变化后维持相同状态100mS,比如说key按下后Hi变成Low这时候程序侦测到输入有异动便开启检查时间机制,当程序连续检查100mS都发现Low没有改变的时候便发出keyevent,此时才有按键发生.
5)关于de-bounce的程序验证可透过修改弹跳时间测试,比如说故意将弹跳时间改1sec.观察在一秒内的按键动作是否都不成立,只有按键持续达一秒以上才有动作产生,确认后再将弹跳时间改回
③keycvt――按键输出转换,其主要负责将确认的按键信息进行转换和存储。
1)KeyCVT主要工作将经过de-bounce的keybuffer跟之前所得到的key相比对,看看新的keyevent为何,转换出来后存储到keybufferorkeyfifo甚至直接进入apfifo
2)将keycode储存到fifo中是一个非常重要的观念,这里展示出Key处理是一个独立的物件程序,他的运行跟其他程序都没有相关,唯一对外的界面interface就是fifo.而key的处理方式端看当时系统的status还有AP设计的流程才做出相对应的工作Task.