原云峰
(山西机电职业技术学院,山西 长治 046011)
人机界面(The Human-Machine Interface,HMI)即用户界面(User Interface,简称 UI),是设备与人之间通信交流的窗口[1]。通过该界面操作人员可实现与设备的交互作用。
一般人机界面系统由硬件和软件两部分组成,硬件部分主要包括微处理器单元、显示单元、输入单元、通信单元以及存贮单元等。其中微处理器是人机界面中最重要的元件,它的性能直接决定用户界面产品的性能。
根据人机界面产品等级的不同,一般微处理器可选用8位、16位、32位的处理器。而软件通常有两种,一种为使用成熟组态软件二次开发的用户界面,该类型人机界面产品功能强大,界面美观,但对微处理器的要求较高,且成本较高;另外一种为普通界面,可完成基本的操作、数据显示以及存储功能,该软件成本较低,对微处理器的要求也不高[2]。
微处理器(MCU)广泛应用于工业控制领域中,将它与液晶屏组合,可设计出功能较强的人机界面。MC9S12X是一款以16位HCS12X为内核的微控制器(MCU)。它包括256kbyte的Flash,4 kbyte的 E2PROM,4个异步串行通讯接口(AsynchronousSerial Communications Interface,SCI),8通道增强型捕获定时器(ECT),3个串行外围接口(Serial Peripheral Interface,SPI),具体有 8 通道的 10位精度的模数转换器(ADC),3个 CAN 2.0A/B协议的MSCAN通讯口,如果需要外扩总线,它还具有独立的23位地址总线和16位数据总线。其内置的锁相环电路可实现低功耗晶振,可根据系统的具体要求做出适当的调整[3]。
液晶显示器(Liquid Crystal Display,LCD)[4],具有体积小、功耗小、清晰度高、无闪烁、重量轻、受外界磁场干扰小、价格低廉等优点,已在许多领域得以广泛使用;虽然发光二级管(LED)具有亮度高、字体醒目、电压低的特点,但其显示的信息量少,一般只用于显示数据量不大的场合。目前,在一些专业领域上,LCD已逐渐取代LED[5]。
在用户界面系统中,应该具有友好的界面菜单,也就是用户操作将更加简单明了;既能显示汉字,还能显示图形,并具有英文或数字的输入功能。本文采用LM1095R,它为192×128点阵中文/图形液晶显示模块,内置RA8803控制器。该液晶屏不仅可以显示单一的文本、图形,而且可以实现双图层的合成显示,此外还能产生四阶灰度的效果,并且在文本模式下能够实现大小字体的混编(最大字体为64×64);在连续输入资料时,可自动设定行距;画面美观,节省了用户的开发时间[5]。该液晶屏的特点为:①采用单电源供电,内置升压电路;②具有高对比度,FSTN型LCD屏;③白色LED背光;④内嵌简体中文字库(7602个汉字);⑤双图层内存(2×9.6K显示存储器)。
如图1所示为微处理器MC9S12X与液晶模块LM1095R的接口电路图。
图1 液晶接口电路
图1中,DB0-DB7为数据总线,用来传输数据或指令。/CS为片选端口,/RD为读控制端口,/WR为写控制端口。该系统的具体工作流程为:当/RD为高电平且/WR与/CS同时为低电平时,表示微处理器正向液晶模块写数据;当/WR为高电平且/RD=0与/CS同时为低电平时,表示微处理器正从液晶模块读数据。RS是传输数据或者传输指令的控制端口,当RS为高电平时,表示微处理器通过DB0-DB7传输数据;当RS为低电平时,表示微处理器通过DB0-DB7发出指令。Vout是液晶模块调压器的输出电压,V0是液晶模块的对比度参数输入,通过设置Vout和V0来控制液晶的对比度;BLA引脚为液晶模块的背光引脚。
如图2所示为液晶显示屏的读写时序图。
图2 LCD的读写时序图
按照时序图编写写数据函数(总线频率40MHz):
void write_data(unsigned char wrdata)
按照时序图编写写寄存器函数(总线频率40MHz):
void write_register(unsigned char address,unsigned char wrdata)
通过上面两个函数就可以对液晶进行进一步的软件编写。液晶显示的初始化程序如下:
该设计将使液晶模块能实时显示微处理器所接收到的数据,以及需要处理的数据值,并且具有翻行与翻页功能,以方便用户查看。该人机界面的另一功能为波形显示,即可将存储于存储器的数据以波形的形式显示于液晶屏上,方便使用者直观地观察数据的变化趋势。
为了满足人机界面的输入要求,本文设计的人机界面还设计了输入模块,即通过8个按键来控制液晶屏的数据显示和参数的修改。在微处理器中采用具有中断功能的H端口来响应按键的输入,即一旦有按键按下,就会产生一个下降沿,微处理器在接收到这个下降沿后,就会触发一次中断,程序会自动转到键盘的中断服务子程序,执行中断任务。如果没有按键按下,微处理器的H端口将读到高电平;即触发任何按键都将使输入变为低电平,从而触发微处理器发生中断。
输入系统的部分程序为:
函数initial_button()将H端口设置为输入,下降沿触发微处理器中断。
在中断函数中,首先需要进行防抖动处理,以提高系统的可靠性,之后再对按键进行解释,以确定是哪个按键闭合,最后将按键标志key_flag置“1”,退出中断,回到主程序。
主程序中,循环读取 key_flag,当 key_flag=1 时进入按键子程序。
设计按键模块的难点在于如何区分同一个按键在不同的情况下具有的不同功能,即同一按键功能的复用。本系统通过设置一个标志,即modify_flag,将按键的功能分为两类,一类是普通模式,一类是修改模式,这样只用7个按键就可以完成大部分系统的功能。
本文给出了以微处理器MC9S12X为控制器的人机界面系统设计过程,详细介绍了MC9S12X与液晶显示屏之间的硬件设计以及软件程序,并给出了输入模块的设计思路和方法。本文中的程序均为函数形式,采用C语言编写,具有通用性和可移植性。
[1]王建国.仪器产品的人机硬界面关系设计[J].机械工程与自动化,2004,(5):60-63.
[2]韦永办.图形模块的菜单方式人机交互界面[J].单片机与嵌入式系统应用,2002(11):32-33.
[3]常 越.M68HC08单片机原理及C语言开发实例[M].北京:北京航空航天大学出版社,2005.
[4]钱玲莉,陈 争,李业军.液晶与液晶显示器[J].现代电视技术,2005,(9):96-97.
[5]张文志.当前世界液晶材料的进展[J].科技信息,2007,(19):46-47.