基于UCGUI的触摸屏显示设计
2014-02-05王学俊孔新伟周晨晨
刘 勇,王学俊,孔新伟,周晨晨
(大连工业大学 机械工程与自动化学院,辽宁 大连 116034)
1 引 言
随着工业控制技术的迅猛发展,在控制中人们越来越多的用到液晶触摸屏,液晶触摸屏作为新型人机交互装置具有坚固耐用、反应速度快、节省空间、操作直观等诸多优点。利用这种技术,用户只要用手指碰触屏上的图符或文字就能实现对主机控制,从而实现人机交互功能,这种技术大大方便了那些不懂操作的用户。 触摸屏作为一种最新的输入设备,它是目前最简单、方便、自然的一种人机交互方式[1]。
虽然触摸屏的操作简单,但是触摸屏的图形界面的设计部分,对于不懂触摸屏原理以及不精通编程的普通用户来说,却是一个晦涩难懂的难题。本文正是基于这一点,结合UCGUI嵌入式图形支持系统技术,开发研制一款操作设计简单的智能触摸显示屏,用户只需要掌握很少的电脑操作知识,在电脑上执行几步简单的操作,即可设计出自己想要的图形界面,并且可以下载到下位机上运行并显示出来。
2 系统流程
图1 系统总流程图Fig.1 Overall system flow chart
本设计的主要流程是先在上位机上产生图形界面数据库,然后通过RS232加载到下位机主控制器上,下位机主控制器将图形界面数据经过分析处理后再在液晶触摸屏上显示出来,并同时在下位机主控制器上运行监控程序,当液晶触摸屏上发生触碰事件时,把信号反馈给下位机主控制器,下位机主控制器根据不同的信号做出相应的反应并在液晶屏上显示出来。
其主流程图如图1所示。
3 系统组成
本设计分为硬件和软件两大部分。
3.1 硬件部分
3.1.1 液晶屏控制器
本设计采用RA8875芯片作为液晶屏控制器。RA8875是一个文字与绘图模式的双图层液晶显示 (TFT-LCD) 控制器,可结合文字或2D图形应用,最大可支持到800×480 点分辨率的中小尺寸数字面板。内建 768 KB 显示内存,可为大多数使用者提供一个更具弹性的解决方案。此外,使用者可藉由选用外部串行式Flash 接口,支持BIG5/GB 编码,最大可提供达32×32 pixel的字型输入。在图形的使用上,RA8875 支持2D 的BTE 引擎 (Block Transfer Engine),此功能兼容于一般通用的2D BitBLT 功能,可处理大量图形数据转换与传送。同时RA8875 也内建几何图形加速引擎 (Geometric Speed-up Engine),提供使用者透过简单的设定轻松画出直线、矩形、圆形和椭圆的几何图形[2]。
相对于其他的TFT控制器解决方案,RA8875是一个功能强大及低成本的彩色TFT 控制器,让使用者顺利解决软硬件开发上的困难,同时达成低成本、高效能的系统方案。
3.1.2 触摸屏控制器
本设计采用TSC2046作为触摸屏的控制器。触摸屏一般分为电容、电阻、矢量压力传感、表面声波以及红外线扫描等类型,使用最多的是四线和五线电阻式触摸屏。四线电阻式触摸屏由2个透明的电阻薄膜组成[3],当水平和垂直方向电阻网有电压时,就可以通过A/D转换面板在触摸点测量出电压从而求出对应的坐标值[3-4]。TSC2046是新一代四线触摸屏控制器,是典型的逐次逼近寄存器型A/D 变换器。其结构以电容再分布为基础,包含了取样/保持功能,支持低电压的I/O接口。
TS2046接口电路图如图2所示。
图2 触摸屏控制器接口电路Fig.2 Touch screen controller interface circuit
3.1.3 下位机主控制器
图3 上位机与下位机信息交换电路Fig.3 Upper machine and lower machine information exchange circuit
本设计采用STM32103VET6芯片作为下位机主控制器。STM32系列32位闪存微控制器使用来自于ARM公司的具有突破性Cortex-M3内核,该内核是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域要求。STM32103VET6芯片CPU可达72 MHz,具有512 KB内部存储空间、64 KB RAM、100个引脚,可以充分满足程序设计者的要求[5]。由于该芯片集成了更丰富的资源、方便使用的架构以及低功耗等特性,加上有竞争力的价格,使得从16位升级到32位变得容易,使该系列芯片正在逐步取代ARM7系列芯片。使用该芯片开发产品更简便快捷。
上位机与下位机主控制器信息加载电路如图3所示。其中PA9为STM32芯片的串口数据发送端USART1_TX,PA10为STM32芯片的串口数据接收端USART1_RX。
3.2 软件部分
3.2.1 移植UCGUI到主控制器
UCGUI是一种嵌入式应用中的图形支持系统。能够为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务以及多任务系统环境, 并适用于任意LCD控制器和CPU控制的真实显示或虚拟显示[6]。
3.2.2 建立用户图形界面数据库
用户想要在屏幕上显示的窗口、文字、控件等的集合称为用户图形界面。用户图形界面数据库就是这些窗口、文字、控件的属性的集合。通过用户图形界面数据库,可以实现用户想要设计的界面的显示。
3.2.3 触摸屏、图形界面、监控程序设计
软件部分重点在于UCGUI的移植与配置,液晶屏的初始化以及下位机主控制器的监控程序设计。
其中,UCGUI的移植与配置是根据选用的液晶屏参数对GUIConf.h、LCDConf.h、LCDDummy.c 3个文件进行相关的配置[7]。
GUIConf.h文件主要是对ucgui进行相关的配置,具体如下:
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0)/*这里指的是对操作系统的支持,因为只有单纯的移植UCGUI,所以要把这个设置为0*/
#define GUI_SUPPORT_TOUCH (1)
/* 是否支持触摸 */
#define GUI_SUPPORT_UNICODE(1)
/*UNICODE编码支持*/
#define GUI_ALLOC_SIZE 5000 /*
动态内存机制 */
#define GUI_WINSUPPORT 1
/*支持窗口*/
#define GUI_SUPPORT_MEMDEV 1
/* 内存控制*/
#define GUI_SUPPORT_AA 1
/* 抗锯齿*/
#endif
LCDConf.h文件是对液晶屏做相应的配置,具体如下:
#defineLCD_XSIZE (800) /*定义液晶屏长度为800*/
#defineLCD_YSIZE (480) /*定义液晶屏宽度为480*/
#defineLCD_CONTROLLER (8875) /*控制器编号*/
#defineLCD_BITSPERPIXEL (16) /*16位点显示格式*/
#defineLCD_FIXEDPALETTE (565) /*对应红绿蓝为565位*/
#defineLCD_INIT_CONTROLLER() /*定义控制器型号RA8875*/
配置层的相关配置都已完成,然后就是接口层,LCDDummy.c文件为接口层配置文件,具体如下:
将其中的LCD_L0_Init函数定义如下:
int LCD_L0_Init(void)
{
RA875_Init ();//液晶屏初始化函数
return0;
}
将其中的LCD_L0_SetPixelIndex函数定义如下:
void(intx,inty,intPixelIndex)
{
RA875_SetPoint(u16 x,u16 y,u16 point);//调用置点程序
}
将其中的LCD_L0_GetPixelIndex函数定义如下
unsignedintLCD_L0_GetPixelIndex(intx,inty)
{
return RA875_GetPoint(u16 x,u16 y);//调用取点程序
}
至此,UCGUI的移植完毕,移植的难点在于设备驱动函数的编写以及接口层的设计。
液晶屏的初始化主要是在Init_RA875()中实现的,首先程序调用GPIO_Configuration()函数对液晶屏使用的GPIO管脚进行初始化,具体代码如下:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIOA到E口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =
GPIO_Mode_AF_PP;
GPIO_Init(GPIOE,&GPIO_InitStructure); // RS指令/数据选择控制讯号端口
GPIO_InitStructure.GPIO_Pin =
GPIO_Pin_11 ;
GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =
GPIO_Mode_AF_PP;
GPIO_Init(GPIOD,&GPIO_InitStructure);
…………
GPIO_SetBits(GPIOD,GPIO_Pin_4);//MCU选用的是6800系列时置1
GPIO_SetBits(GPIOD,GPIO_Pin_5);
}
在对TFT LCD使用的GPIO管脚进行初始化后就可以正常的访问液晶屏驱动芯片了,程序根据驱动芯片的ID进行初始化[8],其初始化部分程序如下:
void Init_RA875(void)
{
WriteCommand(0x88);
WriteData(0x0c);//PLL(锁相回路)控制寄存器参数设置,PLLDIVN[4:0] = 20 FIN = 16 MHz
DelayMs(1);
WriteCommand(0x89);
WriteData(0x02);//PLLDIVK[2:0] =2
DelayMs(10);
WriteCommand(0x10); //色彩深度设定
WriteData(0x0F);//256色0x0F/65K色0x0C
……………
TP_auto_mode(); //触摸面板自动模式设置
WriteCommand(0x70);//设置采样时间和ADC时钟
WriteData(0xB2);
Enable_TP();
RA8875_WAITSTATUS();
clear_TP_interrupt(); //清TP中断
Active_Window(0,799,0,479);//设定面板分辨率为800 pixel×480 pixel
………………………
PWM1_enable();
PWM1_fnuction_sel();
PWM1_clock_ratio(0x03);//2MHz PWM1
PWM1_duty_cycle(0x00);//亮度设置
//设置数字光标
Text_Cursor_Horizontal_Size(24);
Text_Cursor_Vertical_Size(4);
Text_Blink_Time(0x35);
Text_Cursor_Blink_Enable();
Text_Cursor_Enable();
MemoryWrite_Cursor_autoIncrease();//写光标加1
}
至此完成了液晶屏的底层驱动设计,为以后用户图形界面的显示做好了准备。
用户图形界面监控程序重点在于函数_cbCallback(WM_MESSAGE*pMsg)。
其主要内容如下:
static void _cbCallback(WM_MESSAGE * pMsg)
{
int NCode, Id;
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId) //判断发生什么触发事件,根据触发事件做出相应变化。
{
case WM_PAINT:
PaintDialog(pMsg);
break;
case WM_INIT_DIALOG:
……………
(((WM_KEY_INFO*)(pMsg->Data.p))->Key) //判断是否有按键按下
{
…………
WM_NOTIFICATION_VALUE_CHANGED:
…………
WM_DefaultProc(pMsg);
}
4 结 论
本设计采用STM32F103VET6作为主控芯片,RA8875作为液晶屏控制芯片,有效降低了开发成本,并且缩短了图形界面显示与反应的时间,保证了显示界面的稳定性。利用RS232通信技术实现用户图形数据库的加载,使用户图形界面的设计简单易懂,易于操作,即便不懂编程的用户也可以很快设计出自己想要的图形界面。
[1] 杜诗超,宋永昌,王建.触摸屏、组态软件入门与典型应用 [M].北京:中国电力出版社,2012.
Du S C, Song Y C, Wang J.IntroductiontoTouchScreen,ConfigurationSoftwareandTypicalApplications[M].Beijing: China Electric Power Press,2012. (in Chinese)
[2] 韩超.嵌入式GUI开发设计[M].北京:电子工业出版社,2009.
Han C.EmbeddedGUIDevelopmentandDesign[M]. Beijing: Electronic Industry Press,2009. (in Chinese)
[3] 胡冰.EP7212处理器的LCD控制及触摸屏接口设计[J].单片机与嵌入式系统应用,2002(5):49-54.
Hu B. EP7212 processor of LCD and touch screen control interface design [J].Microcontrollers&EmbeddedSystems,2002(5):49-54.(in Chinese)
[4] 刘荣林,程晓东.SSP接口的触摸屏软硬件系统设计[J].单片机与嵌入式系统应用,2009(11): 64-67.
Liu R L, Cheng X D. Hardware and software system design of touch of the SSP interface pitcher [J].Microcontrollers&EmbeddedSystems,2009(11): 64-67. (in Chinese)
[5] 黄福睿.基于ARM和WindowsEmbeddedCE6.0的嵌入式车载系统的设计及研究[D]. 沈阳:沈阳理工大学.2011.
Huang F R. Based on ARM and embedded on-board WindowsEmbeddedCE6.0 system design and research [D]. Shenyang:Shenyang Ligong University,2011. (in Chinese)
[6] 陈超.MATLAB应用实例精讲:图像处理与GUI设计篇[M].北京:电子工业出版社,2011.
Chen C.MATLABApplicationExample:ImageProcessingandGUIDesign[M]. Beijing:China Electric Power Press,2011.(in Chinese)
[7] 刘军.例说STM32[M].北京:北京航空航天大学出版社,2011.
Liu J.CaseSaysSTM32 [M]. Beijing: Beijing University of Aeronautics and Astronautics Press,2011. (in Chinese)
[8] Urwin-Wright S, Sanders D A. Rugged LCD touch screens for embedded applications [J].MechanicalSystemsandSignalProcessing,2008(2):23-24