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
主站蜘蛛池模板: 日韩久草视频| 国产国语一级毛片| 四虎永久在线| 男女猛烈无遮挡午夜视频| 亚欧乱色视频网站大全| 日韩亚洲高清一区二区| 69av在线| 国产精品久久久久久久伊一| 91在线丝袜| 凹凸国产熟女精品视频| 少妇被粗大的猛烈进出免费视频| 永久毛片在线播| 五月天福利视频| 亚洲欧美日韩另类在线一| 国产精品亚洲精品爽爽| 色老二精品视频在线观看| 国产精品一区在线观看你懂的| 2021国产精品自产拍在线观看| 国产1区2区在线观看| 精品视频一区在线观看| 青青青国产视频| 国内毛片视频| 六月婷婷激情综合| 三上悠亚一区二区| 亚洲三级a| 成人精品午夜福利在线播放 | 日韩欧美国产综合| 日韩精品毛片人妻AV不卡| 一级毛片在线播放免费观看| 日本尹人综合香蕉在线观看| 国产精品久久久久婷婷五月| 久久人与动人物A级毛片| 日韩毛片视频| 欧美综合成人| 中国国产A一级毛片| 一级成人欧美一区在线观看| 国产女同自拍视频| 国产在线一二三区| 狠狠干综合| 精品国产一区二区三区在线观看| 久久久噜噜噜| 国产精品三级专区| 国产精品永久久久久| 午夜福利网址| 狠狠色综合久久狠狠色综合| 日韩区欧美国产区在线观看| 国产一区二区色淫影院| 亚洲欧美日韩高清综合678| 久久精品无码国产一区二区三区| 人妻免费无码不卡视频| 亚洲人成在线免费观看| 欧美成人一级| 亚洲清纯自偷自拍另类专区| 国产偷倩视频| 中文无码精品a∨在线观看| 亚洲国产成人精品无码区性色| 成人午夜天| 999国产精品| 中国一级特黄视频| 国产精品精品视频| 国产在线专区| 免费高清a毛片| 久久伊伊香蕉综合精品| 婷婷五月在线| 2021最新国产精品网站| 日韩天堂视频| 91伊人国产| 欧美三级视频网站| 国产亚洲欧美日韩在线一区| 亚洲欧美精品日韩欧美| 2019年国产精品自拍不卡| 在线五月婷婷| 91福利在线看| 在线不卡免费视频| 中文毛片无遮挡播放免费| 成年人视频一区二区| 女人毛片a级大学毛片免费| 国产精品页| 大学生久久香蕉国产线观看| 天堂岛国av无码免费无禁网站 | 欧美在线精品一区二区三区| 重口调教一区二区视频|