查看: 2018|回复: 0

[原创] 【IRD-LPC1768-DEV】11键盘驱动

[复制链接]
  • TA的每日心情
    奋斗
    昨天 14:49
  • 签到天数: 2111 天

    [LV.Master]伴坛终老

    56

    主题

    4773

    帖子

    73

    金牌会员

    Rank: 6Rank: 6

    积分
    24804
    最后登录
    2024-4-24
    发表于 2019-3-17 20:05:47 | 显示全部楼层 |阅读模式
    IIC0总线上总计挂接着四个设备,前面介绍了三个,今天来驱动最后一个设备,矩阵键盘。
    0001.png
    在原理图上可以看到,开发板底板上有一个5Pin接口,用来外接一个矩阵键盘,接口提供5V电源和地,IIC总线的SCL和SDA以及一个中断引脚,对应的IO为P2.12。
    0002.png
    在外接键盘中使用了一个PCA9555D作为一个IO扩展器,可以通过IIC总线扩展出两组共16个IO口。其中IO00~IO05搭配IO10~IO15共计12个IO组成矩阵键盘,IO06驱动一个P沟道的MOSFET,型号为PMV65XP,来控制矩阵键盘的背光LED。另外三个IO口则单独控制三个LED指示灯。此外三个地址引脚全部接地。
    0003.jpg
    查看键盘背面的芯片型号,确定为PCA9555D。
    0004.png
    查看芯片手册,因为A0~A2全部接地,IIC地址为0x40。芯片总计有8个寄存器,0和1为端口的输入寄存器,2和3为输出寄存器,4和5为极性反转寄存器,6和7位配置寄存器。
    0005.png
    配置寄存器主要是设置IO口的输入或者输出方向,设置为1则IO口为输入,设置为0则为输出,默认为1,即输入。
    0006.png
    写输出寄存器和写配置寄存器都是可以连续写入两个端口数据的。
    0007.png
    读取寄存器时序。
    接下里分析一下矩阵键盘检测的原理。
    0008.png
    键盘被设计为一个六行六列的矩阵,所有行通过IO口输出控制,可以输出1和0,列所在的IO被配置为输入,可以读取到1和0。
    在键盘没有按键按下的空闲状态,所有的行被输出为0,输入因为有上拉电阻,一直为1。
    0009.png
    当有按键按下时,行和列交叉点被联通,此时被按下按键的列因为交叉点连接到地上,所以此时列输入为0,其他没有按下的列输入为1,这样就可以判断备案下的按键是在那一列。
    0010.png
    此时循环控制,每一次循环依次设置某一行输出低,其他行输出高,同时读取列数据,当有列数据读取到有0产生时,那么此时输出低的那一行就是按键所在的那一行。这样就可以获得按键所在的行。
    0011.png
    整个键盘按键解码流程图如上图所示,在这个流程中,列信息只需要读取,行控制需要写入,在6*6矩阵中,最多写入7次寄存器数据就可以解码成功了。
    0012.png
    解码出行列信息后,根据行列交叉点所对应的按键含义,就可以解析出是按下啦键盘上的哪一个键。接下来就可以编写代码了。
    0013.png
    在此之前,正好下载了社区提供的开发板另一版本光盘版的资料,在其资料内发现有部分源码。
    0014.png
    解压后,发现源码中提供了键盘解码的部分代码,这样就可以直接使用,不用自己编些解码文件了。
    0015.png
    创建工程,并把键盘源码拷贝到工程中。
    0016.png
    工程中添加keypad.h,并把bsp_keyboard.c中的部分用到的代码拷贝到主函数。
    0017.png
    这些函数有的有些问题,比如Keypad_Map函数在解码的时候有些按键并没有解析,在这里进行了修改,实现了所有按键的解析。
    0018.gif
    程序下载到开发板,按键盘上的按键,会在LCD上显示按键的值,获取到这个键值后就可以根据应用具体实现各个功能了。


    总结:开发板配的IIC接口矩阵键盘只用了5线连接,比并口键盘连线少了很多,只是按键解析会稍微麻烦一些。
    键盘原理图:
    IRD KeypadSchematics.pdf (134.52 KB, 下载次数: 7)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-25 06:24 , Processed in 0.129950 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表