norman33的笔记 https://bbs.21ic.com/?602142 [收藏] [复制] [RSS]

日志

键盘扫描驱动心得1

已有 1131 次阅读2011-3-10 11:32 |个人分类:读书笔记|系统分类:单片机| 键盘, 扫描

        键盘是人机交互的最基本单元,但是键盘驱动也是比较复杂的。键盘驱动一般分为三层:


        最低层为最基本的键值读取单元,这个单元的功能就是按照一定的时间间隔读取键值,由于这个单元是和硬件紧密联系的,所以代码的复用性并不高,很多场合换了一个硬件这部分代码都要做相应的修改和变化。


        中间层为从底层单元获取键值,然后对按键的状态做判断,然后将按键状态和具体的键值继续往上一层传送。由于这部分代码既不和硬件相关也不和软件相关,所以这部分代码是最容易独立出来做成单独的库文件以供复用。


        最高层的代码一般和整个系统的软件是紧密结合的,通过从中间层传递过来的按键状态和参数在这一层的代码对具体的操作做出判断并最终执行。由于这部分代码的最终执行行为在不同程序中各不相同,所以代码的复用率也不高。


        现在我们知道了键盘的扫描可以按以上划分成三个层次,在这里我先针对最简单的最低层的功能做个了解。


        最底层按键驱动的唯一功能就是根据硬件对连接在硬件上的按键扫描,然后返回扫描所得到的键值。这个功能函数的接口往往非常简单,例如:unsigned char Scan_key(void); 整个功能函数没有输入的参数,返回参数为扫描所得到的键值。返回的键值可以是直接读到的端口数据(一般单片机直接连接在端口上的键盘),或者是根据端口读到的数据计算后产生的编码数据(pc键盘或者是使用键盘管理芯片后返回的键盘码)。这一层的功能函数一般都会放在定时器中断中,或者在定时器中断中设置一个标志位,然后按照一定的时间间隔来调用或标志置位。如果是调用则会立即执行扫描代码,然后向中间层传递扫描得到键码。标志位置位的话一般会在程序主循环中判断然后执行扫描代码。


    要注意的是,这一层的代码是和硬件紧密相关的,例如扫描4X4矩阵键盘和扫描IO口直接连接的键盘是完全不相同的,键盘的形式多种多样但是这层功能函数的接口却是不变的,所以在更新硬件后改变的只是功能函数内的代码而函数的原型接口是不会变的。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)