【作 者】张会生,刘昕宇,李乔亮,饶捷,张小飞,王晓轩,林淑梅,尹力,陈思平1,,汪天富
1 深圳大学生物医学院生物医学工程系,深圳市,518060
2 广东省生物医学信息检测与超声成像重点实验室,深圳市,518060
人机交互界面是指人与计算机系统之间相互通信的界面,它是人与计算机之间各种符号和动作的双向信息交换平台。这里的“交互”定义为一种通信,即信息交换,而且是一种双向的信息交换,既可由人向计算机输入信息,也可由计算机向人反馈信息。其主要功能是完成人与计算机之间通过相互交流与通信,最大程度上为使用者完成信息管理、信息处理等工作。
在医学诊断仪器中,人机交互界面的好坏直接关系到仪器设备的可靠性与使用者的安危,因此选择一种合适的人机交互界面,是医学仪器设计中的一个重要环节。对于仪器厂商而言,设计一个通用的人机交互界面,可以缩短开发周期,减少研发成本,节约人力物力。当前,应用于医学诊断仪器中的人机交互界面主要有笔段式液晶(Pen zone LCD)交互技术,点阵式液晶(Dot-matrix LCD)交互技术,TFT液晶交互技术以及基于PC的人机交互技术等。笔段式液晶价格低廉,对仪器系统资源占用相对较少,能耗低,电源电路简单,但所用外围器件较多,占用空间大,可靠性差,交互信息量少,一般可用于血压计、光度计等计算量和信息量较小的医学仪器。点阵式液晶交互界面改善了笔段式LCD屏幕小,操作困难等缺点,其显示信息量大,低压微功耗,寿命较长,适合应用于单片机系统的体外诊断仪器。然而,点阵式LCD也存在信息不够丰富,界面不够美观,无法实现简洁、友好的人机交互等诸多问题,增加了医护人员的操作难度。TFT液晶交互技术的出现使人机交互界面上了一个台阶,其性能优良,显示画面生动,配合触摸板即可实现人机交互的功能,可传输信息量大,操作简单。但是,TFT-LCD和触摸板硬件驱动方式相对困难,占用系统资源较大,外围电路较为复杂,传统51单片机的刷新频率低,无法达到要求。而对于ARM等嵌入式芯片,则一般需要移植Linux操作系统或配置外部驱动模块,增加了医学诊断仪器企业的开发难度和研发成本。而对于大型医学诊断仪器,由于检测样品多,仪器结构复杂,返回信息量大,一般需要选用基于PC的人机交互方法。通过上位机接口对仪器进行控制,测量结果直接反馈回主机,从而进行快速处理和传输,此方法便于临床数据存储和处理,仪器控制简单快捷,易于维护,适合大中型医院大中型体外诊断仪器(例如流水线化临床检验仪器)的控制。但是,基于PC的人机交互技术使本已拮据的医院检验科室空间更加紧张,而且对医护人员的专业素质要求较高,间接增加了医院的成本。
综上所述,当今的医学诊断仪器人机交互界面存在着开发周期长,技术难度大,研发成本高等各种不足。因此,开发一种适合的人机交互界面,可以大大提高医学诊断仪器的可靠性,降低研发成本,颇具实用意义。针对此现状,本文旨在介绍一种的基于Visual C++的液晶模组人机交互界面开发方法。北京迪文工业串口屏(HMI)触控液晶模组,是高度集成液晶显示控制模块,采用异步、全双工串口(UART)进行交互控制,内存容量大,屏幕色彩逼真,大大地改善了的人机交互友好度,使仪器操作变得更为简单、直观、易懂,降低了对检验人员的专业技术要求。对于医学诊断仪器微处理器而言,该设备适合单片机、ARM等大多数嵌入式处理器控制,只需串口通过简单指令进行控制,占用系统资源较低。对于使用者来说,通过Visual C++开发平台可实现人机交互界面的开发,完成如数值输入、系统设置、分析样品、数据查询等指令的设置,开发过程较为简便,可以实现快速向医学诊断仪器嵌入式ARM处理器移植。此方法非常适用于中小型医学诊断仪器的人机交互界面。
图1 医学诊断仪器结构图Fig.1 Structure of MDI
一般地,医学诊断仪器包括MCU微处理器、人机界面、执行机构、数据处理和通信模块等组件(如图1),其中人机界面通过接口与MCU 相连。
本文提出的基于液晶模组的医学诊断仪器人机交互界面开发与移植,主要是在PC环境下利用VC++进行平台搭建,实现上位机(PC)和下位机(液晶模组)之间进行串行通信协议的接口设计,实现对人机界面的开发。人机界面开发完成后,可将液晶控制应用程序移植到ARM环境中,配置液晶与ARM的接口,即可实现对触控液晶模组的控制。人机交互界面开发的总体结构如图2所示。
图2 人机交互界面的总体结构Fig.2 Scheme for the structure of human-machine interface
如图1所示,在PC环境下,通过VC++平台进行应用程序开发,触控指令基于串口类,调用windows API应用函数控制PC串口,通过RS-232总线对液晶模组进行指令传输。然后,液晶模组将响应指令返回到windows API应用函数,通过串口类将指令发送到VC++平台,应用程序对返回值进行处理,同时发送新的触控命令。开发过程完成后,我们需要在ARM中定义新的外部接口,定义串口中断向量,通过RS-232连接液晶模组,把在VC++平台下开发完成的应用程序移植到ARM中。
图3 液晶接口示意图Fig.3 LCD interface
表1 液晶模块接口说明Tab.1 De fi nition of LCD module interface
首先,我们需要搭建开发人机交互界面的开发平台,选用体外诊断仪器合适的液晶模组类型,根据图3所示的液晶模组的硬件接口,按照表1选择对应的连接类型进行连接。PC环境下需使用DB9串口,在ARM环境下需要通过电平转换芯片连接串口模块的对应接口。
1.1.1 在PC环境下的开发平台搭建
笔者选取VC++6.0开发平台作为上位机软件开发环境,因为VC++是一种面向对象的开发工具,具有功能强大、简便易用和代码执行速度快等特点,尤其是在PC机的串口通信方面又很强的功能。选用+5 V的直流稳压电源作为液晶模组的供电电源,将液晶模组的VCC端口和GND端口分别与直流电源的电压端和地端相连。将液晶模组的DIN和DOUT接口与PC的串口DB9接口中的TXD和RXD接口连接。至此,PC环境下的开发平台搭建完成(图4)。
图4 PC环境的开发平台搭建Fig.4 Scheme for the development platform in PC environment
1.1.2 在ARM环境下的平台搭建
我们选取ARM7LPC2100系列作为处理器,该系列处理器具有256 kB嵌入的高速Flash存储器以及32 kB的SRAM,具有两个符合16C550工业标准的异步串行口(UART),16字节手法FIFO,触发点可为1、4、8和14字节,同时配置了向量中断控制器(VIC),用于执行对液晶模组的连接与控制。将液晶模组的VCC端口和GND端口分别与+5 V的直流电源和地端相连,一般使用电路板上电源网络。将液晶模组的DIN和DOUT接口通过电平转换芯片分别与ARM处理器中的RXD和TXD端口连接。至此,ARM环境下的平台搭建完成(图5)。
平台搭建完成后,我们需要进行接口定义。在PC开发平台下,我们基于VC++的开发环境,通过建立串口类,调用windows API应用程序,实现对串口的控制。
1.2.1 定义串口类
使用VC++编译环境控制串口时,利用windows API函数进行串口程序设计,具有很强的灵活性,但是需要使用者详细了解串口程序的开发过程和一些复杂的API函数。为了使用更加方便,我们通过建立串口类(COM CLASS)封装对串口的操作。这样,既提高了代码的可重用性,同时又减轻了开发者编程的复杂度,极大地提高了程序开发的效率(如图6)。
图5 ARM环境的平台搭建Fig.5 Scheme for the development platform in ARM7 environment
图6 串口类程序图Fig. 6 Structure of the UART class
串口类包括:打开/关闭串口函数,串口初始化函数,发送/接受数据函数以及错误信息处理程序。通过串口类调用windows API应用函数,大大降低了开发难度,增强了程序的可移植性。
1.2.2 液晶模组的配置
本方案采用北京迪文公司的TFT彩色液晶触摸屏作为人机交互界面的载体,首先应选取仪器适合的液晶尺寸,并根据规格制作交互界面的图片,用迪文液晶助手按照编号下载到液晶屏中。该液晶模组按照不同型号一般可存储100~300张图片。
图片下载完成后,可根据实际需要为人机界面添加按钮,利用液晶模组软件可以对按钮进行编辑(如图7),按照图片顺序设置每个按钮的4位16进制代码。最后生成的控制文件发送到液晶模组中,并设置液晶模组的工作模式。
图7 图片及按钮的配置Fig.7 Screen for the setting of pictures and command buttons
1.2.3 液晶模组与上位机的通信
液晶模组的配置完成后,需要在VC++环境下建立人机界面的通信模式。本液晶模块在串口传输时采用8 n1模式,即每个数据传送采用10个位:1个起始位,8个数据位(低位在前传送,LSB),一个停止位。
表2 串口数据帧Tab.2 The frame of UART data
串口连接液晶模组时,每次发送的相互传输的命令数据帧必须包括帧头、指令、数据和帧尾,通过改变指令和数据即可对液晶实现不同控制。按钮每次被点触时,液晶模组按照之前所设定的工作模式,对数据位进行判定,从而执行进一步操作。数据位就是在对液晶模组每个按钮设置的代码。例如,对某一个按钮的代码设置为0102,则当这个按钮被点触时,液晶模组上传的十六进制数据就为AA 78 01 02 CC 33 C3 3C。
平台搭建和接口定义完成后,可在VC++环境下建立人机界面的应用程序。使用者通过串口类函数定义的接口,实现PC与液晶模组的通信,具体操作步骤如下。
1.3.1 串口的打开和初始化
打开串口,初始化串口要设置串口的一系列参数,包括串口号、波特率、奇偶校验位、停止位和字符长度等。此类参数要与液晶模组的参数保持一致。
1.3.2 串口数据上传
程序可以使用串口类中的接收函数从串口中读取数据,首先要建立串口数据寄存器。如果读取过程中出现错误,程序停止。如果有数据上传,将数据放入串口寄存器中,清空串口缓存。
1.3.3 数据判定
本液晶模组每次触控时,上传的数据长度为8字节,因此当串口寄存器数据长度达到8时,应对数据内容进行判定,由于液晶模组上传的数据格式为帧头(1字节)+指令(1字节)+数据(2字节)+结束符(4字节),可对结束符进行判定。如果结束符无误,返回数据位,清空串口寄存器;如果结束符不符合,返回错误信息,清空串口寄存器。
图8 PC环境下液晶模组控制流程Fig.8 Flowchart of the controlling of LCD module in PC environment
1.3.4 执行应用程序
根据液晶模组返回的数据位,在VC++平台下建立handle()应用程序,作为液晶模组的控制程序。一般地,我们将每个按钮的代码设定为按钮的页数和序号,例如,某一按钮是人机界面第一页的第二个按钮,则此按钮的代码设定为0102,对应每一个代码,建立按钮响应函数。应用例程如下:
按钮响应函数包括液晶模组响应函数和仪器设备驱动函数。液晶模组响应函数可在VC++环境下进行开发,利用串口类函数中的发送数据函数实现对液晶模组控制。具体指令可查询迪文液晶指令集,而设备驱动函数需要根据实际电路和ARM选型。
在上位机对人机界面完成后,可以进行应用程序移植,还是以ARM7LPC2100系列为例。
首先,需要建立串口发送数据函数(发送长度为1字节):
定义移位寄存器,存储串口数据。由于液晶模组每次触控上传的指令长度为8字节,而ARM每次只能读取1字节,因此需要建立一个8字节移位寄存器,将每次从串口FIFO顶端(U0RBR)读取到的数据存入寄存器最低位,每次读取完成后,寄存器左移一个字节,准备读取下一字节(如图9)。
ARM人机界面的控制流程如下:
图9 移位寄存器读取液晶指令Fig.9 Reading LCD Command by the shift register
图10 ARM对液晶模组控制流程Fig.10 Flowchart of the controlling of LCD module in ARM environment
具体操作步骤如下:
①串口的初始化
首先,配置串口模式,设定串口波特率,须与液晶模组保持一致。使能FIFO,设定出发点为8字符长度,使能串口RDA中断,打开中断,液晶标志位置0。
②程序运行,等待串口中断响应
程序运行过程中,如果液晶没有被点触,则串口中断不会响应。如果液晶被点触,运行中断响应函数。
③串口数据读取、判定
每次液晶指令读取完成后,对移位寄存器进行判定,判定方法与上位机环境下相同,及判定指令的停止位是否为CC 33 C3 3C。如果判定成功,将液晶标志位置1,按钮代码分装为page、key。如果判定结果不符合,清楚中断标志,等待下一串口数据。每一次液晶指令需要运行8次中断响应函数,移位寄存器左移8个字节。
④ 执行应用程序
将VC++环境下编辑好的handle()应用程序移植到ARM程序中,每次运行应用程序前判定液晶标志位,如果标志位为1,执行handle()应用程序,如果为0,则跳过应用程序。需要说明的是,handle()应用程序中的串口发送数据函数,需要更改为ARM平台下的串口发送数据函数。
按钮响应函数包括液晶模组响应函数和仪器设备驱动函数。液晶模组响应函数可利用串口模块发送液晶指令控制,而设备驱动函数则根据实际需要,添加一系列外围设备控制函数。至此,人机交互界面开发完成(如图11)。
图11 人机界面移植到化学发光免疫分析仪Fig.11 The man-machine interface inchemiluminescence immunoassay analyzer
本文提出的人机交互界面目前已经成功运用到各种小型医学诊断仪器中,例如血液分析仪、电解质分析仪、生化分析仪等。经实践证明,采用本方法开发和移植的人体交互界面操作简单,运行稳定,开发周期短,节约研发成本,完全能满足医学诊断仪器的需求,在医疗仪器开发领域具有广泛的应用前景。
[1] 杜振辉, 蒋诚志, 陈文亮, 等. 基于液晶显示器的仪器仪表人机接口方案[J]. 仪器仪表学报, 2003, 24(4): 25-27.
[2] 程永亮, 江建民. 医疗器械的人机界面设计[J]. 中国医疗器械信息, 2006, 12(8):35-38.
[3] 郑秀聪, 谢运祥. DSP与单片机的串行通信及液晶显示系统的设计[J]. 计算机工程与科学, 2011, 33(6): 173-177.
[4] 司浩乐, 万波, 田玉敏. Windows CE下的串口驱动设计[J]. 计算机工程, 2008, 34(20): 86-90.
[5] 宋现春, 王全景. 图形液晶显示模块LG2401281在仪器仪表中的应用[J]. 仪器仪表学报, 2005, 29(8): 295-297.
[6] 张亚男, 耿国华, 周明全. 协同医诊环境下人机交互接口的实现[J]. 计算机应用研究, 2006, 5(2): 159-160.
[7] 孙天泽, 袁文菊, 王越峰, 等. 基于ARM处理器的地下输水管道渗漏检测仪[J]. 计算机应用研究, 2005, 4(2): 198-199.
[8] Ibrahim D. Using graphics lcds in embedded applications[J].Electronics World, 2011, 117(1907): 37-40.
[9] Petera MG. Leveraging LCD module designs for handheld applications[J]. Electronic Design, 1998, 46(8):95-95.
[10] Cheng Yi CYUN. A novel driver circuit for multiple cold-cathode fluorescent lamps of lcd backlight modules[C].IEEE Industry Applications Society Annual Meeting, Alberta, CANADA, OCT 05-09, 2008.
[11] Li Ming lei. Design of LCD display system for handheld devices based on Linux[C]. Electronics, Communications and Control(ICECC), Ningbo, PEOPLES R CHINA, 2011: 822-825.
[12] Huang Yu Jung. Design of LCD driver IP for SOC applications[C].4th IEEE Asia-Paci fi c Conference on Advanced System Integrated Circuits, Fukuoka, JAPAN, 2004: 62-65.
[13] Lu Man sha. The Implementation of LCD High Resolution Application Based on ARM9[C]. Information Science and Engineering (ICISE), 2009 1st International Conference on, 2009:2.