基于STM32的人机接口设计与实现
2012-08-16戴军建张传胜
戴军建, 张传胜
(1.长春理工大学 光电工程学院,吉林 长春 130022;2.中国科学院长春光学精密机械与物理研究所,吉林 长春 130033)
0 引 言
随着人们生活水平的提高,人机交互技术被广泛应用于人们的日常生活当中,其中,TFTLCD液晶显示器件以其体积小、重量轻、低电压、低功耗、低辐射、全色彩等特点得到广泛的应用[1-2]。
专用的人机交互界面系统的设计比较复杂,不仅需要软件的编写与调试,还需要与硬件电路和液晶屏类型相匹配,需要反复修改调试,如果需要在已经成型的系统中修改功能或更换屏幕,那就需要花费很多的时间去重新设计,所花费的时间不亚于重新设计一套新系统,十分繁琐。为此,文中设计了一种基于STM32的通用人机交互界面模块,模块使用STM32微控制器驱动液晶屏和触控板,并通过运行人机交互图像接口软件模块,在使用时只需要把要显示的界面图像放到FLASH存储器中,利用一个串口与上位MCU相连接即可,通过实测,通用人机交互界面模块达到了设计要求。
1 TFT-LCD的显示驱动原理
TFT-LCD的显示驱动原理采用逐行扫描方式,即当一行被选通以后,这一行中的各列信号同时加到列上,并维持一个扫描行的时间,当这一时间结束后选通下一行,各列的薄膜晶体管电路施加下一行的显示电压。
文中选用STM32F103ZET6微控制器,驱动TFT-LCD和触控板,该微控制器是ST公司生产的32位RISC处理器,基于ARM公司的CORTEX-M内核,拥有64KRAM、512KB NORFlash、1个USB2.0接口、1个CAN接口、8个定时器、5个USART接口、3个12位ADC模数转换器、2个12位数模转换器、112个通用I/O口、2个I2C接口、2个I2S接口、3个SPI接口、12通道DMA控制器、支持8080模式LCD并行接口,可直接支持8080总线接口的LCD控制器。STM32F103ZET6微控制器的工作频率高达72MHz,运算速率高达1.25MIPS,具有良好的功能和适用性,且价格低廉,在工业控制领域中有着大量的应用[3-6]。系统总体结构如图1所示。
图1 系统结构
2 触摸板模块驱动设计
触摸技术是当今最流行的一种人机交互接口。基于原理的不同,触摸屏可以分为电阻式、电容式、表面声波式等。电阻式触摸屏在工业上应用较广,其原理是通过测量横向和纵向的电阻值来获得触点的坐标,目前比较常见的是四线电阻触控屏。四线电阻触控屏由两层透明金属层组成,工作时每层均增加5V恒定电压:一个竖直方向,一个水平方向。总共需4根电缆,当有触控笔或手指按下时,触点处的上下两层金属层接触,由于在竖直方向和水平方向电阻都是线性的,可以测得触点在这两个方向的分电压值,进而得到触点相对于触屏边界的相对距离,并转换成触控板的坐标,通常触点坐标的检测是通过A/D采集转换来实现的。STM32F103ZET6微控制器有3个12位ADC模数转换器,所以,把触控板的4根引脚连接到A/D转换模块的四路通道上。
由于触摸屏和液晶屏是两种不同的物理器件。对于液晶屏而言,它的坐标以像素为单位。而触摸屏的触点数据是触点的物理坐标,该坐标是通过触摸屏连接的A/D转换器采集得到的。要想实现触摸屏上的物理坐标与液晶屏上的像素点坐标一一对应上,两者之间就需要一定的转换,即校正。而且电阻式触摸屏由于自身的原因,参数会发生变化,因此需要经常性地校正。比较常见的校正方法是三点校正法,它的原理如下:
设液晶屏上每个像素点的坐标为[XD,YD],触摸屏上每个触点的坐标为[XT,YT]。要实现触摸屏上的坐标转换为液晶屏上的坐标,需要下列公式进行转换:
因为其中一共有6个参数(A,B,C,D,E,F),因此只需要3个取样点就可以求得这6个参数。这6个参数一旦确定下来,只要给出任意触摸屏上的坐标值,代入上述公式,就可以得到它所对应的液晶屏上像素点的坐标值。如果不更换液晶屏,这几个参数就不变,为了以后校正方便,把这些参数通过SPI总线保存到外部FLASH中。经过校正的结果如图2所示。
图2 经过校正后的触屏和液晶屏
3 人机交互软件设计和仿真验证
目前,有一些商业化的人机交互软件可以买到,但一般售价都比较昂贵,在本系统中,所有的界面都是由界面开发者自行定义的,因此只用到快速显示图片和数据,其它的如汉字、字母等只要事先放到一个界面上,然后截图,拷贝到模块中,就可以作为图片的一部分显示出来,因此,软件部分只设计了图片快速显示与更新函数和数字快速显示函数。
由于前面在驱动液晶模块时设计了显示缓冲区,只要把待显示的图片放到显示缓冲区中就可以显示出来。由于显示缓冲区用32位表示一个像素,而写入的数据是24位色,需要把高8位屏蔽掉。以显示一副图片为例,给出主要的程序代码:
void PAINT_BMP (int x0,int y0,int h,int l,unsigned char bmp[])
{
int x,y;
U32c;
int p=0;
for(y=y0;y<l;y++ )
{
for(x=x0;x<h;x++ )
{
c= (bmp[p])|(bmp[p+1]<<8)|(bmp[p+2]<<16);
if(((x0+x)<SCR_XSIZE_TFT)&& ((y0+y)<SCR_YSIZE_TFT))
LCD_BUFFER[y0+y][x0+x]=c;
p=p+3;
}
}
}
利用该函数就可以把图片迅速显示出来,显示结果如图3所示。
图3 系统显示效果
把烧入程序的STM32微控制器与320×240分辨率的TFT液晶屏及3.5寸4线电阻触控板连接好,与一个上位MCU通过串口相连,模块中已经烧好了要使用的界面,上位MCU通过串口把数据发给STM32,STM32根据设定的显示参数配置液晶屏,然后接收的这些数据显示在屏幕相应的位置上,试验结果如图4所示。
图4 系统效果实测
4 结 语
通过实测,文中所述的基于STM32的通用人机交互界面设计方法具有设计简单、使用方便、成本低廉的特点,并且可以适用于大部分场合,具有良好的应用前景。若能以更高性能ARM处理器代替低廉的STM32微控制器[7-14],则可以实现高清视频录制和播放,具有更好的实用价值。
[1]付虹,刘桂方,李春善,等.S3C2440的LCD控制器的配置与应用[J].计算机工程与设计,2010(11):2470-2473.
[2]潘应云,曾伟,陈家胜.基于ARM的智能显示终端[J].电子测量技术,2008,31(1):160-162.
[3]刘跃锋,宋永霞,李松涛.一种基于直方图对二值图像进行处理的方法[J].长春工业大学学报:自然科学版,2010,31(5):554-558.
[4]熊文彬,蒋泉.基于FPGA实现的视频显示系统[J].液晶与显示,2011,26(1):92-95.
[5]武伟,王宏志,宋宇.基于偏微分方程的图像去噪算法[J].长春工业大学学报:自然科学版,2011,32(6):554-557.
[6]尹东辉,任彦楠,等.一种1024级灰度大电容负载的LCD驱动芯片设计[J].液晶与显示,2011,26(1):78-82.
[7]康艳霞,曹剑中,田雁,等.实时视频处理系统中乒乓缓存的设计[J].弹箭与制导学报,2007,24(1):218-222.
[8]王明富,杨世洪,吴钦章.大面阵CCD图像实时显示系统的设计[J].光学精密工程,2010,18(9):2053-2059.
[9]万永波,张根宝,田泽,等.基于ARM的LCD控制器的配置与编程应用[J].计算机工程与设计,2007,28(5):1196-1198.
[10]王运,颜昌翔.光谱仪图像的亚像素配准[J].光学精密工程,2012,20(3):661-667.
[11]李晓颖,蒋东方,李云娇.仪器仪表点阵式LED显示屏设计[J].液晶与显示,2011,26(6):764-767.
[12]靳永亮,王延杰,刘艳滢,等.红外弱小目标的分割预检测[J].光学精密工程,2012,20(1):171-178.
[13]王立文.智能仪器中液晶显示器的汉字显示方法[J].液晶与显示,2011,26(6):785-788.
[14]杨辉,冉峰,黄舒平.面阵CCD彩色视频图像实时采集系统的设计[J].光学精密工程,2010,18(1):273-280.