999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于STM32平臺實現UCGUI外掛中文字庫

2014-11-27 08:15:30馬志剛
深圳職業技術學院學報 2014年1期
關鍵詞:定義

馬志剛

(深圳職業技術學院 計算機工程學院,廣東 深圳 518055)

UCGUI是一種輕量級的嵌入式圖形支持系統,它的設計架構是模塊化的,由不同的模塊中的不同層組成.UCGUI可以在任何的CPU上運行,因為它是100%的標準C代碼編寫的.UCGUI提供一個可擴展的2D圖形庫及占用極少RAM的窗口管理體系,非常適合如 STM32這樣的輕量級嵌入式平臺的圖形界面顯示[1],大量應用于各種智能儀器儀表的液晶屏人機界面.UCGUI原生的字符顯示機制需要程序員事先把程序中用到的字符點陣信息轉化為C語言數組并組成一個鏈表結構作為字庫,然后將該字庫與整個工程一起進行編譯鏈接,最終字庫是包含在目標文件中.此機制對于英文這樣基于字母的文字非常方便,生成內建的字庫很方便,也不會大量增加目標文件的體積.然而對于漢字這樣包含龐大字符數量的文字[2],采用此方法就存在很大的缺陷.因為在絕大部分應用場合都是無法事先預知有哪些漢字需要顯示,而如果把所有常用漢字按照 UCGUI的規則轉化為C語言鏈表結構,則工作量巨大且大大增加目標文件體積,如果應用于 STM32這樣程序存儲空間并不寬裕的平臺,很可能因為空間不足而無法實現程序的燒寫.所以對于大量文字的隨機顯示,更好的方案是將字庫與程序代碼分開.但是UCGUI本身并沒有提供從外部存儲器讀取字庫的接口,如果程序員自行編寫代碼從外部字庫讀取字符信息并使用UCGUI提供的上層繪圖接口直接在LCD上繪制漢字點陣的話,則顯示的漢字不能與 UCGUI的圖層機制兼容,無法配合UCGUI中的其他圖形控件使用,例如無法在按鈕上添加漢字.本文介紹一種通過修改UCGUI底層字符驅動函數的方法,為UCGUI實現將字庫獨立于目標文件存儲,并且充分兼容UCGUI圖形庫中的各種控件.

1 外部Flash

為了能夠存儲漢字庫中的大量數據,本文在STM32處理器上外接Flash存儲芯片來擴大存儲空間.例如可采用 SPI接口的 Nand Flash 芯片M25PX16來擴展存儲空間,該芯片具有16Mbit容量,具備4K字節子區擦除功能,最高支持75Mhz的SPI接口等特性,將其與主控芯片STM32進行連接如圖1所示.

圖1 外部Flash硬件連接圖

STM32處理器的IO管腳大部分都具有復用功能,為了對 M25PX16進行訪問,其 IO管腳PB13~PB15將分別配置為復用功能SPI2_SCK,SPI2_MISO和SPI2_MISI,即作為STM32的SPI2接口.然后對STM32的SPI2口進行配置,這里的配置主要是將SPI2設為全雙工主模式,數據位設為8位,另外還有時序模式,波特率因子,數據幀格式以及CRC多項式的相關配置,最后使能SPI2.

經過軟硬件的相關工作,現在外部Flash已經可以正常使用了,下一步工作是定義Flash的相關操作函數,如擦除,寫入,讀取等.然后利用串口或是USB接口等外部接口將漢字庫下載到STM32并燒寫到外部Flash中.本文使用的是16x16點陣的GBK碼漢字庫,大小為256 kB左右.

2 修改字符顯示驅動

使用 UCGUI提供的自定義字體轉換工具可以將指定的字符點陣信息轉化到一個由C語言實現的鏈表中并封裝到一個結構體里,以編譯到目標文件中供 UCGUI顯示時使用.為了最大限度地利用 UCGUI本身的這一顯示機制,提高外掛字庫的兼容性,本文先使用 UCGUI提供的的字體庫轉換工具針對16x16點陣字體生成一個含有數字0~9,英文字符a-z以及A-Z的鏈表式字體庫,并將其封裝到結構體 GUI_FontHZ_SimSun_16中,該結構體的第一個元素GUI_FONTTYPE_PROP_SJIS是在頭文件GUIType.h中定義的用于設定字體屬性的宏,此宏定義指明了該字體使用的字符顯示驅動函數為GUIPROP_DispChar.我們要做的事情就是要修改這個顯示驅動函數.首先,修改 GUI_FONTTYPE_PROP_SJIS的定義,將字符顯示驅動函數改為指向我們自定義的函數My_GUIPROP_DispChar,這樣,只需要在我們自定義的字符顯示驅動函數My_GUIPROP_DispChar中實現讀取外部 Flash中的漢字庫來顯示即可,此函數的源代碼如下:

在上面的函數中,首先通過字符的機內碼c判斷要顯示的字符是否為漢字,如果不是漢字,則直接使用 UCGUI原來的顯示驅動GUIPROP_DispChar從鏈表字庫中讀取字符來顯示;如果是漢字,則調用我們自己定義的從外部Flash讀取字符的顯示驅動函數WriteHZ,該函數從漢字庫中讀取字符的點陣信息供 UCGUI顯示,其主要代碼如下:

即先根據漢字內碼p算出區位碼c1和c2,再根據區位碼計算出要顯示的漢字在漢字庫中的偏移量AddrInTable,然后調用Flash_Read函數從外部Flash中讀取漢字的點陣信息來進行顯示.其中FontLibStartPage是漢字庫燒寫入 Flash時的起始頁地址(本文使用的 Flash芯片每頁為 256字節),數組 pixeldata 是字符點陣信息的顯示緩沖區.

經過上面的改動,在需要顯示漢字的場合,只需要調用設置字體的函數將字體設置為我們最開始定義的字體 GUI_FontHZ_SimSun_16 即可.例如要在按鈕Button0上顯示漢字,可調用如下函數:

BUTTON_SetFont( Button0 , &GUI_FontHZ_SimSun_16);

通過對UCGUI原有的字符顯示機制進行改造,在充分兼容其控件系統的前提下,實現了將漢字庫獨立于目標代碼文件存儲在外部 Flash中,適合需要顯示大量不確定性漢字的場合,彌補了UCGUI在漢字顯示方面的先天缺陷,使得這一優秀的圖形系統有了更大的用武之地.

[1] 王蘭英.基于STM32嵌入式系統的uCGUI移植與實現[J].四川理工學院學報(自然科學版),2012,25(1):56-58.

[2] 國家標準總局.GB2312-80信息交換用漢字編碼字符集基本集[S].1981.

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統計概率解答題
例談橢圓的定義及其應用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
嚴昊:不定義終點 一直在路上
華人時刊(2020年13期)2020-09-25 08:21:32
定義“風格”
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定義快修連鎖
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 欧美在线导航| 亚洲伦理一区二区| 久青草免费视频| 国产精品无码作爱| 囯产av无码片毛片一级| 高清国产va日韩亚洲免费午夜电影| 午夜人性色福利无码视频在线观看| 福利小视频在线播放| 国产jizz| 91精品国产一区自在线拍| 欧美在线一二区| 国产午夜人做人免费视频| 色婷婷成人| 欧美精品v| 伊人久综合| 国产福利微拍精品一区二区| 99爱在线| 日韩a级毛片| 精品国产美女福到在线直播| 啦啦啦网站在线观看a毛片| 久久综合伊人77777| 九九精品在线观看| 国产综合无码一区二区色蜜蜜| 91精品国产麻豆国产自产在线| 制服无码网站| 人禽伦免费交视频网页播放| 蜜臀AV在线播放| 亚洲AV无码久久精品色欲| 国产理论最新国产精品视频| 中国丰满人妻无码束缚啪啪| 韩国自拍偷自拍亚洲精品| 日韩区欧美区| 永久免费精品视频| 国产麻豆91网在线看| 久久久噜噜噜| 国产精品所毛片视频| P尤物久久99国产综合精品| 日韩视频福利| 白浆免费视频国产精品视频| 在线观看国产精美视频| 国产欧美日韩综合在线第一| 欧美一道本| 亚洲香蕉在线| 午夜福利视频一区| 日韩精品成人在线| 噜噜噜久久| 日韩天堂网| 国产精品自在拍首页视频8| 婷婷综合在线观看丁香| 2020国产精品视频| 欧美亚洲一二三区| 久久情精品国产品免费| 欧美午夜视频在线| 国产精品极品美女自在线| 国产麻豆精品在线观看| 亚洲免费成人网| 中文字幕在线播放不卡| 国产精品欧美亚洲韩国日本不卡| 亚洲综合色婷婷| 精品久久久久成人码免费动漫| 伊人久久福利中文字幕| 久久久噜噜噜| 日韩在线影院| 国产成人乱无码视频| 国产又爽又黄无遮挡免费观看| 国产成人a在线观看视频| 国产乱肥老妇精品视频| 伊人久综合| 理论片一区| av一区二区人妻无码| 久久99国产综合精品女同| 97超爽成人免费视频在线播放| 欧美一区二区啪啪| 成人午夜天| 精品视频福利| 综合人妻久久一区二区精品 | 国产免费黄| 中文字幕在线播放不卡| 扒开粉嫩的小缝隙喷白浆视频| 欧美精品啪啪一区二区三区| 久久久受www免费人成| 国产美女精品一区二区|