嵌入式linux下基于单片机的矩阵键盘与ARM的串行通信

2019-05-13 版权声明 举报文章

摘要:提出一种单片机控制的由按键和旋钮组成的矩阵键盘的设计方法,并实现其在嵌入式Linux下与ARM的串行通信,从硬件和软件的角度详细介绍该方案的实现过程,给出了基本的硬件原理和按键扫描以及通信程序设计的方法。实验证明,此方案简单可靠,ARM在Linux下可以准确响应键盘事件,已经应用于数字存储示波器的研发中。

关键词:单片机;距阵键盘;嵌入式linux;串行通信

中图分类号:TN41;TP33

文献标识码:B

文章编号:1004―373X(2008)04―177―04

1 引 言

在现代工业控制系统和仪器设备中,键盘是不可缺少的输入设备,是控制系统与操作人员交流的桥梁。操作人员可以通过外设键盘灵活地输入各种参数以控制系统的运行。考虑到本系统按键数量较多(23个按键和7个旋钮),并且不想使用专用的键盘处理芯片,所以采用矩阵式键盘设计。单片机性能稳定、价格低廉、功能强大,在仪器设备和电子消费品中得到越来越广泛的应用。在单片机系统中,串行通信接口由于具有接口简单、容易实现等优点已经被广泛使用,成为一种常用的接口。例如,单片机通过串口和上位机ARM进行通信,就能够实现远程控制并能利用ARM强大的数据处理功能和友好的控制界面。Linux由于具有内核强大、开源、易扩展和裁减以及丰富的硬件支持等许多优点,在嵌入式系统得到非常广泛的应用。特别是他的性能稳定非常适合做工业控制。本文提出的键盘通信方案就是以嵌入式Linux和ARM 9处理器为软硬件平台,在便携式嵌入式设备上的应用表明其具有较好的稳定性和实时性。

2 系统总体方案设计

基于本系统的具体要求采用单片机控制键盘与ARM进行实时串行通信。单片机采用美国Atmel公司生产的低电压,高性能CMOS 8位单片机AT89C2051,此款单片机是Atmel公司的一种精简型51内核单片机。ARM处理器采用三星公司的$3C2410 ARM9处理器,是16/32位RISC微处理器,主要用于低成本、低功耗和高性能手持设备和一般应用的单片微处理器解决方案。由AT89C2051单独管理键盘,实现键盘的识别译码工作,然后通过串口与ARM在Linux下进行实时通信。图1是系统总体框图。

3 硬件设计

在本系统中,键盘由23个按键式开关和7个旋钮开关构成,相当于37个按键式开关,于是将键盘按照8×5的矩阵键盘结构进行组织,其中3列为按钮式按键,另2列分别接7个旋钮开关的A,B引出端。由于一般情况下ARM的CPU的任务较重,且I/O端口资源不足,所以使用专门的键盘扫描控制器完成对矩阵键盘的管理工作,该控制器即单片机AT89C2051,当键盘控制器判断到有按键事件发生,并判读出相应键码后,就通过异步串行口与ARM通信,ARM的主CPU在接收到键码后,会由硬件产生中断并软件响应,执行相应的处理程序。由于要实现符合RS 232的串行通信,还应该用MAX 232芯片构成串口电平转换电路。图2是系统硬件电路的示意图,由于是ARM接收键盘发送的数据,所以串行口采用2线制接法,即键盘和ARM的UART控制器的TXD和GND相互连接。

在图2中,键盘矩阵的KH0~KH7共8根行线接至AT89C2051 P1口的P1.0~P1.7引脚,KV0~KV4共5根列线接至P3口的对应引脚,P 3.1作为异步串口的发送端,用于和主CPU通信。

4 软件设计

软件部分的程序包括上位机单片机键盘扫描程序和下位机ARM的接收处理程序,下面分别介绍。

4.1键盘扫描程序设计与实现

本系统采用矩阵键盘接口设计,在对按键进行编码时一般是先获得按键的扫描码,然后将其转化为事先约定的按键编码。虽然不同的按键接口方式对应不同的按键识别方法,但无论哪种接口方式,按键的闭合与否都反映在电压的高低上,因此系统可以通过检测不同的电平状态来识别按键是否按下。另外,采用扫描法识别按键,让行线从KH0,KH1到KH7逐行置零电平,若KH0为零电平,KH1~KH7为高电平,此刻依次检查各列电平变化,若某列电平由高变低则表示此列与KH0的交叉处的键盘被按下。其主程序流程如图3所示。

结合本系统的具体情况,AT89C2051单片机仅用来进行对键盘的管理,故可采用编程扫描方式,图4为其键盘扫描子程序流程图。

由于键盘面板中包括按键和旋钮,所以在编程的时候要区别对待。对于按键,首先将第N行置低电平,其余行置高电平,读取SW_data值,若其与之前的SW值相等,则表示有可能按键被按下,此刻直接读取列号看是否有键被按下,若有则通过行列号来确定具体的按键码值。若SW_data值与之前的SW值不同则表示可能是旋钮的转动。

在数字仪器中,旋钮开关实际上是一个编码开关,他相当于将2个按键式开关的一端连在一起成为公共端,另一端分别引出,称之为引出端A和B。当旋钮开关旋动时,旋钮内部与A,B相连的2个金属簧片都会与接地的公共端相接,但是在时间上会有一个短暂的时间差,因此在A,B上就会产生如图5所示的2个有一定相位差的脉冲信号。在键盘扫描过程中,如果能设法判断出2路脉冲到达的相位关系,就可以知道旋钮的旋动方向,从而进行相应的操作。有2种方法可以用来判别脉冲到达的先后顺序,一种是硬件的办法,即采用鉴相器,通过专门的电路判断,再将结果送至CPU;还有一种就是用软件的方法进行判断,从图5中可以分析出,当旋钮左旋时,A,B两端电平信号的组合状态是11-01-00-10的序列,且这样的序列具有惟一性,同样当旋钮右旋时,A,B电平信号的组合状态序列也是惟一的,通过判断这A,B两端电平信号的组合状态是否符合以上2组预知序列的顺序,同样可以判断出旋钮的旋动方向。

另外,为了防止键盘的意外事件,在软件中对按键抖动以及旋钮的误操作都做了相应的处理。

需要注意的是,串口的设置非常重要,关系到串口能否正常工作。由于键盘发送的是单字节的16进制数据,所以必需将串口所对应的终端设置成原始(RAW)工作方式,就是不必对输入输出处理。

初始化结束后就可以读取键盘发送过来的数据。首先要打开串口:fd=open(“/dev/ttySl”,O_RDWR),接下来可以用read函数进行读取。这里为了使串口在请求的操作阻塞时能进行其他操作,用select函数实现了多路复用式串口。另外还要注意的是ARM在Linux下的串口接收程序的波特率一定要和单片机键盘扫描程序的波特率一致,不然不会接收到正确的数据。下面是接收程序:

5 系统调试结果

测试的时候把键盘串口和ARM开发板的串口2相连,开发板的串口1和PC的串口相连。先把键盘扫描程序烧写到单片机。在PC上打开串口工具DNW,在开发板上启动Linux后下载串口接收程序并运行。图6是Linux下接收到的旋钮和按键值。

图7是在Qt/E环境下编写的数字存储示波器界面测试键盘通信的画面,结果显示键盘可以控制LCD中波形的打开、关闭、变换等操作。

6 结 语

近年来随着Linux在国内应用范围的日益壮大,在工业控制、数据采集等领域也必将越来越多地采用Linux,本文可以算作一个有益的尝试。为了验证本系统的可靠性,在Linux下面用Qt/E编写了带有按钮的数字示波器界面并移植到了ARM系统中。实验结果表明,数字示波器界面上面的按钮能很好地响应键盘的按键及旋钮事件,系统稳定可靠。当然,要应用到实际的项目中,还要根据实际情况具体考虑,灵活运用,最终才能形成一个可靠的基于嵌入式linux的平台。

注:本文为网友上传,不代表本站观点,与本站立场无关。举报文章

0

好文章需要你的鼓励

上一篇:基于NIOSⅡ的液晶显示器控制研究 下一篇:基于数字锁相环的温控变频电路设计

你需要文秘服务吗?

提供一对一文秘服务,获得独家原创范文

了解详情
期刊发表服务,轻松见刊

提供论文发表指导服务,1~3月即可见刊

了解详情

被举报文档标题:嵌入式linux下基于单片机的矩阵键盘与ARM的串行通信

被举报文档地址:

https://wenmi.com/article/prehk604jba4.html
我确定以上信息无误

举报类型:

非法(文档涉及政治、宗教、色情或其他违反国家法律法规的内容)

侵权

其他

验证码:

点击换图

举报理由:
   (必填)

发表评论  快捷匿名评论,或 登录 后评论
评论