在此计以STM32系列处理器作为控制器,利用uCGUI进行图形界面设计,利用循环移位算法将黑白图像定制成符合TFT?EFD显示的数据格式,实现了静态EFD图像的通信,可以根据实际要求传输不同静态EFD图像,后期如果需要可以升级成传输数据流来支持动态显示。
1 设计原理
本设计采用的单色TFT?EFD显示屏的分辨率是320×240,行线连接着晶体管的栅极,控制着晶体管的打开与关闭,列线连接着晶体管的源极,控制着数据的传输,整体的结构如图1所示。
图1 EPD Panel
基于EFD的图像显示经历了图像采集,图像传输,图像显示等步骤。EFD目前只支持黑白图像显示,因此图像采集利用Processing软件对图片进行一次加工,转换成黑白图像。数据生成之后需要进行传输,传递给微控制器进行处理,这时需要对数据进行二次加工,变成满足TFTEFD显示屏驱动芯片要求的格式,之后通过DMA方式传递给外部的SRAM。FPGA读取SRAM的数据,根据相应的时序控制驱动芯片输出数据,从而实现图像显示。如果控制好时序,能在1 s内刷新25帧以上,那么就可以实现图像的动态显示。
数据的传输是整个过程的中间阶段,需要进行不断的测试来找到最优的传输数据时序,构造出相对完善的波形序列来实现动态显示。因此搭建数据传输系统来显示不同的图像,测试其显示效果,对于实现稳定的动态显示有积极的作用。本设计利用uCGUI构造图形控制界面,可以传输不同的EFD图像数据给SRAM,FPGA读取其中的数据就可以进行图像显示,并且系统界面简单直观,操作起来也相对简便。
2 系统设计
2.1 硬件设计
利用STM32F103ZET6微处理器作为主控芯片,SD卡作为存储设备,SRAM作为转换数据的输送目的地,TFT?LCD用作显示与触摸控制,各个硬件相互配合构建起一个完整的数据传输系统。系统框图如图2所示。
图2 系统结构
显示模块采用2.8寸ALIENTEK TFTLCD模块,利用ILI9320控制器作为驱动芯片进行驱动。ILI9320液晶控制器自带显存,其显存总大小为172 820 b(240×320×[1818])。并且ALIENTEK TFTLCD模块自带电阻式触摸屏,可以实现触控的功能。ALIENTEK TFTLCD模块自带的触摸屏控制芯片为XPT2046,内部含有12位分辨率125 kHz转换速率逐步逼近型A/D转换器,是一款4导线制触摸屏控制器。
由于数据量比较大,将大量数据储存在SD卡中[1],SD卡的配置使用SPI驱动,最高通信速度可达18 Mb/s,每秒可传输数据2 MB以上,可以满足一般的应用需求。SRAM采用的是IS62WV51216芯片,存储容量为1 MB,采用STM32的FSMC接口对其进行配置。FSMC是灵活的静态存储控制器,能够与同步或异步存储器、16位PC存储器卡接口,STM32的FSMC接口支持包括SRAM,NAND FLASH,NOR FLASH等存储器。本设计使用FSMC的BANK1区域3来控制IS62WV51216芯片。
2.2 软件设计
FATFS文件系统:FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它用标准C 语言编写,一般只需要修改2个文件,即ffconf.h和diskio.c,之后进行简单配置就可以移植到单片机上,进而可以对SD卡和FLASH进行文件的读、写操作。
uCGUI移植:uCGUI 是一种小型化的嵌入式图形界面接口,该接口独立于处理器和LCD 控制器种类,对系统的要求很低[2]。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器和LCD控制器的图形用户接口[3],它适用单任务或是多任务系统环境,并且在任意LCD控制器和CPU下进行任何尺寸的真实显示或虚拟显示。
本设计依靠uCGUI进行界面设计,设计比较直观的按键和列表来控制图像传输和图像显示。使用uCGUI也需要做移植的工作,移植的工作包括显示屏和触摸屏两个部分。
显示屏:首先,TFT?LCD显示屏的底层驱动函数需要事先写好,保证单线程程序中正常显示。
其次,向工程中加入uCGUI程序包。
再次,根据自己的显示屏规格配置LcdConf.h GuiConf.h
GuiTouchConf.h文件
最后,修改LcdDriver使uCGUI与你的LCD驱动相互关联。
触摸屏:若要在uCGUI 中使用触摸屏, 则必须将GUI_SUPPORT_TOUCH (Config 目录下GUIConf.h中定义的宏)设置为1[4]。同时要编写底层的触摸屏源驱动函数,对gui_TouchConf.h文件中进行配置,然后在GUI_X_Touch.c文件中进行函数的改动。
具体的移植过程可以参考uCGUI使用手册,这里不再赘述。
数据转换算法?循环移位:显示屏里每一个像素格里有一滴彩色油墨,油墨在加电时会收缩,在不加电时会平铺。下极板是一层反光隔膜,里边每一个像素格里有一个TFT晶体管作为电压开关,上极板是玻璃板,当在上下极板间加入适当电压,像素格里的油墨就会打开,用光照射就显示出明亮状态,当不加电时就会平铺显示出的是油墨的颜色。EFD?Panel的微观结构如图3所示。
图3 EPD Panel微结构
由于EFD是国内新型显示技术,有着自身的图像数据格式,需要定制符合其显示格式的数据来实现图像显示。控制油墨打开与关闭的芯片要求一个像素格有两位进行控制,即“01”代表打开,“10”代表关闭,因此需要对原始图像数据进行二次加工来满足要求。EPD Panel 的规格是320×240,即240行,320列,由于驱动芯片的数据输出位数是8位,因此先定义一个字符型的二维数组data[240][80],然后利用内存管理单元开辟相应的区域来存放最终数据。利用FATFS模块的f_read函数从文本文档里读取数据,根据文档中每一个数据的内容是‘1’还是‘0’,分别对二维数组内的元素进行0x01或0x02的赋值操作,如果移位次数没有达到4次则进行左移两位操作,否则读取下一个数据重新进行判断。这样每4个数据构成二维数组里的一个元素值。接下来的.工作就是判断列数与行数是否小于预先设定数值,如果列数超出设定值,则行数加1,从新的一行开始读取数据,如果行数超出设定值,则循环结束,所有数据均被转换完。
算法流程图如图4所示。
图4 图像转换算法
在Keil集成开发环境下利用C语言编写数据格式转换代码,实现图像转换的重要代码片段如下:
if(*(num++)=='1')
{
if((x%4==0)&&(x!=0))j++;
data[i][j]|=0x01;
if(x!=(3+4*j))data[i][j]<<=2;
}
else
{
if(x==320||x==321)continue;
if((x%4==0)&&(x!=0))j++;
data[i][j]|=0x02;
if(x!=(3+4*j))data[i][j]<<=2;
}
界面设计部分:进行完所有的移植工作之后,就可以进行界面的设计,具体的界面程序流程图如图5所示。
图5 主程序流程图
整个系统分成了3个界面,界面之间可以实现相互的切换。第一个界面是进入界面,第二个界面是控制界面,第三个界面是数据列表界面。具体实现方法是建立了非模态对话框,以第一个界面为例,其对话框建立代码为: GUI_CreateDialogBox(_aDialogCreate1,GUI_COUNTOF(_aDialogCreate1),
&_cbCallback1, 0, 0, 0);
构造的ENTER按键用来控制界面的交换。第二个界面构造了三个按键来实现不同的控制,包括Begin Button,Exit Button,List Button,利用扫描方式来检测按键的触摸,从而执行不同的功能函数,代码片段如下:
switch(GUI_GetKey())
{
case GUI_ID_BUTTON0: datacopy(col); //控制数据传送
break;
case GUI_ID_BUTTON1: LED0=1; //界面转换标志置位
break;
case GUI_ID_BUTTON2: GUI_Clear();
BUTTON_Delete(hButton[0]);
BUTTON_Delete(hButton[1]);
BUTTON_Delete(hButton[2]);
GUI_CreateDialogBox(ImagelistDialog, GUI_COUNTOF(ImagelistDialog), &listCallBack, 0, 0, 0); //界面转换
break;
default:break;
}
第三个界面是图像名称的列表,是将对话框与列表结合显示出存储在SD卡中图像名称,进而来控制传输不同的图像。三个界面的显示效果如图6所示。
3 结 语
本设计可以作为EFD图像显示的测试装置来进行使用,通过显示不同的图像来找到合适的波形图来辅助动态图像显示,同时实现了信息的可视化显示[5],后期可以进行程序上的修改,对系统进行改进与升级,以数据流的形式传输数据,和终端的FPGA进行配合来实现动态显示。
【EFD图像数据传输系统设计论文】相关文章:
2.图像加密论文报告