一種低功耗的便攜式人機界面系統
2.3 SPI接口Flash存儲疊的特點(diǎn)
本文引用地址:http://dyxdggzs.com/article/150048.htm由于在本系統中整個(gè)的漢字字庫需要存儲在外部Flash中,所以需要選擇一種Flash存儲芯片,Flash芯片選擇需要滿(mǎn)足以下要求。第一,盡量占用少的IO口,因為液晶顯示器已經(jīng)采用了并行接口,如果繼續選用并行接口的Flash,對芯片的IO消耗較大,這樣勢必要選用IO更多的芯片,對于便攜式設備來(lái)說(shuō),這是不合理的,所以本系統的設計過(guò)程中選用的Flash為SST公司的SST25VF080B,它采用SPI接口,SPI是一種高速的,全雙工,同步的通信總線(xiàn),并且在芯片的管腳上只占用四根線(xiàn),節約了芯片的管腳,同時(shí)為PCB的布局上節省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,現在越來(lái)越多的芯片集成了這種通信協(xié)議,本文中的SPI Flash采用美國SST公司的SST25VF080B芯片,容量為8 M位,它工作電壓范圍為2.7~3.6 V,工作在SPI模式0或者模式3,最高工作在50MHz,最小擦除單位為4K字節的扇區,可擦寫(xiě)10萬(wàn)次,數據保持100年以上。而STM32F103RBT6帶有高速的硬件SPI接口,可以很方便與SST25VF080B連接通信。所以我們采用SPI Flash來(lái)完成對漢字字庫的存儲,字庫存儲部分的硬件電路接口圖如圖3所示。

3 系統軟件設計
系統軟件包括字庫的調用和TFT液晶顯示軟件設計兩個(gè)部分,字庫調用主要是通過(guò)STM32F103RBT6的SPI接口調用存儲在SST25VF080B中的中文字庫。TFT液晶顯示部分主要是通過(guò)STM32F103RBT6通用I/O口模擬16位的8080并口,實(shí)現對液晶顯示器的驅動(dòng),在軟件設計的過(guò)程中需要注意一個(gè)問(wèn)題。就是不同字庫編碼的標準時(shí)不一樣的,所以在解碼時(shí)略有不同,常用的漢字字庫有GB2312字庫和GBK字庫兩種。
3.1 GB2312字庫和GBK字庫
GB2312收錄簡(jiǎn)化漢字及符號、字母、日文假名等共7 445個(gè)圖形字符,其中漢字占6 763個(gè)。GB2312規定“對任意一個(gè)圖形字符都采用兩個(gè)字節表示,每個(gè)字節均采用七位編碼表示”,習慣上稱(chēng)第一個(gè)字節為“高字節”,第二個(gè)字節為“低字節”。GB2312—80包含了大部分常用的一、二級漢字,和9區的符號。該字符集是幾乎所有的中文系統和國際化的軟件都支持的中文字符集,這也是最基本的中文字符集。其編碼范圍是高位0xa1~0xfe,低位也是0xa1~0xfe;漢字從0xb0a1開(kāi)始,結束于0xf7fe。GB2312將代碼表分為94個(gè)區,對應第一字節(0xa1~0xfe);每個(gè)區94個(gè)位(0xa1~0xfe),對應第二字節,兩個(gè)字節的值分別為區號值和位號值加32(20H),因此也稱(chēng)為區位碼。01~09區為符號、數字區,16~87區為漢字區(0xb0~0xf7),10~15區、88~94區是有待進(jìn)一步標準化的空白區。GB2312將收錄的漢字分成兩級:第一級是常用漢字計3755個(gè),置于16~55區,按漢語(yǔ)拼音字母/筆形順序排列:第二級漢字是次常用漢字計3 008個(gè),置于56~87區,按部首/筆畫(huà)順序排列。故而GB2312最多能表示6763個(gè)漢字。
而GBK內碼完全兼容GB2312,同時(shí)支持繁體字,總漢字數有2萬(wàn)多個(gè),編碼格式如下,每個(gè)GBK碼由2個(gè)字節組成,第一個(gè)字節為0X81~0XFE,第二個(gè)字節分為兩部分,一是0X40~0X7E,二是0X80~0XFE。其中與GB2312相同的區域,字完全相同。把第一個(gè)字節代表的意義稱(chēng)為區,那么GBK里面總共有126個(gè)區(0XFE~0X81+1),每個(gè)區內有190個(gè)漢字(0XFE~0X80+0X7E~0X40+2),總共就有126x190=23 940個(gè)漢字。點(diǎn)陣庫只要按照這個(gè)編碼規則從0X8140開(kāi)始,逐一建立,每個(gè)區的點(diǎn)陣大小為每個(gè)漢字所用的字節數乘以190。這樣,就可以得到在這個(gè)字庫里面定位漢字的方法:
當GBKL0X7F時(shí):Hp=((GBKH-0x81)×190+GBKL-0X40)×(sizex2);
當GBKL>0X80時(shí):Hp=((GBKH-0x81)×190+GBKL-0X41)×(sizex2);
其中GBKH、GBKLL分別代表GBK的第一個(gè)字節和第二個(gè)字節(也就是高位和低位),size代表漢字字體的大小(比如16字體,12字體等),Hp則為對應漢字點(diǎn)陣數據在字庫里面的起始地址。
評論