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
主站蜘蛛池模板: 精品国产污污免费网站| 成人无码区免费视频网站蜜臀| 国产精品视频公开费视频| 97狠狠操| 国产在线小视频| 久久国语对白| 成年人久久黄色网站| 免费毛片网站在线观看| 72种姿势欧美久久久久大黄蕉| 91精品免费久久久| 国产亚洲精品自在久久不卡 | 亚洲精品制服丝袜二区| 精品国产中文一级毛片在线看| 日韩人妻少妇一区二区| 欧美a级在线| 激情乱人伦| 国产自产视频一区二区三区| 国产SUV精品一区二区| 国产精品yjizz视频网一二区| 亚洲午夜国产精品无卡| 精品久久人人爽人人玩人人妻| 91亚洲视频下载| 国产91无码福利在线| 国产激情第一页| 亚洲欧洲日本在线| 国产日产欧美精品| 欧美成人综合视频| 国产精品久久自在自线观看| 澳门av无码| 国产成人无码AV在线播放动漫| 国产精品久久久久无码网站| 青青久久91| 欧美三级不卡在线观看视频| 国产成人在线小视频| 久久久91人妻无码精品蜜桃HD| 欧美成人aⅴ| 日韩一区精品视频一区二区| 毛片网站在线播放| 亚洲男人在线| 免费看美女自慰的网站| 国产日韩精品欧美一区灰| 久久这里只有精品免费| 国产免费一级精品视频| 国产精品欧美在线观看| 狠狠v日韩v欧美v| a级毛片免费看| 九九九精品视频| 男女性色大片免费网站| 亚洲AV成人一区二区三区AV| 国产浮力第一页永久地址| 国产成人精品男人的天堂| 青青国产视频| 国产区人妖精品人妖精品视频| 国产欧美日韩va另类在线播放| 国产微拍精品| 国产人成在线观看| 亚洲免费三区| 亚洲成综合人影院在院播放| 全部毛片免费看| 免费一级毛片在线观看| 国产在线97| 久久伊人色| 天天色天天综合| 一区二区三区四区精品视频| 国产特级毛片aaaaaa| 亚洲无线视频| 久久国产精品77777| 91伊人国产| A级毛片无码久久精品免费| 久久黄色视频影| 精品国产污污免费网站| 精品无码国产一区二区三区AV| 人人妻人人澡人人爽欧美一区| 爽爽影院十八禁在线观看| 在线观看热码亚洲av每日更新| 国产三级视频网站| 天堂亚洲网| 天天干天天色综合网| 精品无码国产自产野外拍在线| 色亚洲激情综合精品无码视频| 香蕉国产精品视频| 欧美精品不卡|