按键功能一般对实时性要求毕竟高 扫描多个按键会比较占系统资源
在使用HC165读按键行 和HC139选按键列 的16*4的矩阵键盘下
在使用单片机裸机时一般是通过 定时器进行周期循环读取按键值
定时器中断周期在10ms左右 在接上旋转编码器时 还要用到更短的读取时间定时器中断周期1ms
在Linux下如何进行按键扫描 用哪种方式 能保证效率和 实时性呢?
可以使用专用的按键芯片,通过SPI读取给Linux识别。
如果是使用IO口的话,驱动不好写,应用也处理复杂
在linux内核源代码中,有按键的处理代码,具体位置在drivers/input/keyboard/ 下面。
按键有两种情况,独立按键和矩阵键盘。这两种情况,内核中都有考虑,
GPIO 矩阵键盘是 matrix_keypad.c
可以参考该方案进行矩阵键盘扫描。
或者可以使用类似PCA9555D这种IIC转IO,可以把所有矩阵键盘操作通过IIC接口来实现,既节省IO,也方便操作。
Linux下面一般会找个I2C扩展的按键扫描芯片,比如ZLG7290这种,由这个芯片来完成轮询的过程
如果非要由主CPU完成,那最好是在内核驱动里面,通过定时扫描来实现,用户空间的效率很低