



摘 "要: 在此計以STM32系列處理器作為控制器,利用uCGUI進行圖形界面設計,利用循環移位算法將黑白圖像定制成符合TFT?EFD顯示的數據格式,實現了靜態EFD圖像的數據傳輸,可以根據實際要求傳輸不同靜態EFD圖像,后期如果需要可以升級成傳輸數據流來支持動態顯示。
關鍵詞: 循環移位算法; EFD顯示; uCGUI; 數據傳輸
中圖分類號: TN919?34; TP274+.2 " " " " " " " 文獻標識碼: A " " " " " " " " " 文章編號: 1004?373X(2015)06?0097?04
Design of EFD image data transmission system
QIU Guang?dong, LUO Zhi?jie, ZHOU Guo?fu
(Institute of Electronic Paper Displays, South China Academy of Adavanced Optoelectronics, South China Normal University, Guangzhou 510006, China)
Abstract: In this design, STM32 series microprocessor is taken as the controller, uCGUI for graphical interface design and cyclic shift algorithm for making the black?and?white image meet the TFT?EFD (Electro? Fluidic Display) data format to realize static EFD image data transmission. It can transmit various static EFD images according to the practical requirement. If needs later on, it can be upgraded to transmit data flow to support the dynamic display.
Keywords: cycle displacement algorithm; electro? fluidic displays; uCGUI; data transmission
電子紙技術近年來發展迅速,憑借其超低耗能、閱讀視角廣、類紙顯示等一系列優點,可能引領新一代的顯示潮流。目前,電子紙的彩色動態圖像顯示是一個前沿研究方向。EFD(Electrofluidic Display)是一種將電潤濕與微流技術結合的新型顯示技術,其響應時間可小于10 ms,讓動態顯示成為了可能。動態圖像顯示的前提是實現靜態圖像顯示,如果將靜態圖像顯示成熟穩定,那么只要在1 s時間內刷新25幀以上的圖片就可以實現動態顯示。因此研究靜態圖像顯示對找到最佳時序來實現動態顯示有著積極的推動作用。
1 "設計原理
本設計采用的單色TFT?EFD顯示屏的分辨率是320×240,行線連接著晶體管的柵極,控制著晶體管的打開與關閉,列線連接著晶體管的源極,控制著數據的傳輸,整體的結構如圖1所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\24t1.tifgt;
圖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所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\24t2.tifgt;
圖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所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\24t3.tifgt;
圖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所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\24t4.tifgt;
圖4 圖像轉換算法
在Keil集成開發環境下利用C語言編寫數據格式轉換代碼,實現圖像轉換的重要代碼片段如下:
if(*(num++)=='1')
{
if((x%4==0)amp;amp;(x!=0))j++;
data[i][j]|=0x01;
if(x!=(3+4*j))data[i][j]lt;lt;=2;
}
else
{
if(x==320||x==321)continue;
if((x%4==0)amp;amp;(x!=0))j++;
data[i][j]|=0x02;
if(x!=(3+4*j))data[i][j]lt;lt;=2;
}
界面設計部分:進行完所有的移植工作之后,就可以進行界面的設計,具體的界面程序流程圖如圖5所示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\24t5.tifgt;
圖5 主程序流程圖
整個系統分成了3個界面,界面之間可以實現相互的切換。第一個界面是進入界面,第二個界面是控制界面,第三個界面是數據列表界面。具體實現方法是建立了非模態對話框,以第一個界面為例,其對話框建立代碼為:
GUI_CreateDialogBox(_aDialogCreate1,GUI_COUNTOF(_aDialogCreate1),
amp;_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), nbsp; "amp;listCallBack, 0, 0, 0); " " " " " " "http://界面轉換
break;
default:break;
}
第三個界面是圖像名稱的列表,是將對話框與列表結合顯示出存儲在SD卡中圖像名稱,進而來控制傳輸不同的圖像。三個界面的顯示效果如圖6所示。
3 "結 "語
本設計可以作為EFD圖像顯示的測試裝置來進行使用,通過顯示不同的圖像來找到合適的波形圖來輔助動態圖像顯示,同時實現了信息的可視化顯示[5],后期可以進行程序上的修改,對系統進行改進與升級,以數據流的形式傳輸數據,和終端的FPGA進行配合來實現動態顯示。
lt;E:\王芳\現代電子技術201506\現代電子技術15年38卷第6期\Image\24t6.tifgt;
圖6 整體控制界面
參考文獻
[1] 米波,賀鋒濤.基于STM32的視頻流圖像更新方法的研究[J].西安航空學院學報,2014,32(1):64?66.
[2] 王蘭英.基于STM32 嵌入式系統的uCGUI 移植與實現[J].四川理工學院學報,2012,25(1):56?58.
[3] 徐寶國,宋愛國.基于UCOS和UCGU I的嵌入式數字示波器[J].測控技術,2007,26(7):7?8.
[4] 王宜結.基于uCGUI 的觸摸屏消息流轉機制的研究[J].淮南師范學院學報,2013,15(3):35?37.
[5] 羅衛兵,胡健生.基于STM32+uCGUI的北斗導航定位系統設計[J].液晶與顯示,2014,29(2):195?201.
[6] 申智源.TFT?LCD技術:結構、原理及制造技術[M].北京:電子工業出版社,2012.