在嵌入式系統中,有時候需要中文字符來表示我們的某些信息,但是中文字符庫本身占據空間比較大,因此有時候僅僅對系統中需要的字符進行編碼,其它的則省掉,但是這樣對于編程調用字符時是比較麻煩的,只能一個一個進行調用然戶顯示。然而,有時候在比較大的系統中需要很多的中文字符,如果還是對需要的進行一個個編碼將顯得非常費時,此時有必要采用一個字庫來完成我們的工作。
在嵌入式系統中,用得比較多的是GBK2312B編碼的字庫(還有一個是Unicode編碼),編碼后得到的是一個字符數組,每一個中文字符對應多個字節(具體字節數看取模的大小),需要顯示某個字符只需取得該字符的GBK內碼,然后找到該字符對應數組中的地址,最后將這個字符對應的所有字節按照預定的格式寫入液晶屏即可。這樣操作帶來的簡便就是,你想顯示某個字符只需以字符串的格式輸入該字符然后調用顯示函數就行了。這時有個問題出現了,7千多個字符編碼后得占用多大空間啊?
大概有200KB,但是對于現在的MCU,本身自帶的rom就很寶貴,另外MCU的ROM越大其成本就越高。所以,如果將200kb的字庫寫入MCU將不太劃算。不將字庫存入MCU,就得存入另外一種介質中,這種介質可能是SD卡, SPI Flash。對于SD卡我沒有試過,雖然容量大,但據說讀取速度比較慢,另外封裝較大,占板子面積,感覺適用與大的系統吧,比如MP3;而SPI flash, 體積小,容量也還可以,我所了解的也有8M的,可能還有更大容量的。好了,廢話了這么多,那么本文接下來就紹如何用SPI flash做中文字庫:
第一步,當然需要你將你所用的SPIflasn的初始化以及讀寫函數寫好(我使用的W25X16,2M,傳輸速率最大74MHZ,很快的;板子主芯片STM32F103RBT6)。寫函數:void W25X_Write_Bytes(uint32_t addr,u8* pBuffer, u16 nBytes) 注:W25X16寫時,需要先擦除。讀函數:void W25X_Read_Bytes(uint32_t addr, u8* pBuffer, u16 nBytes)第二步,編寫串口傳輸函數,采用串口中斷的方式,波特率設置為115200(測試沒有問題),接收外部輸入的一個字節后立馬將其寫入SPI FLASH。與之前兩個字符表示一個字節的方法速度提升一倍。代碼:
u8 result;
u32 pAddr=0;
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
result= USART_ReceiveData(USART1);
W25X_Write_Bytes(pAddr++,&result,1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);// 清除串口接受中斷
}
}
第三步,設置一個按鍵進行擦除操作,通過串口或者LCD進行交互,以提示是否擦除完成。可以進行寫FLASH。第四步,制作中文字庫,GB3212庫包含6768個簡體中文,首先打開“取點陣.exe”軟件,然后在軟件中打開“字符庫.txt”文件。
然后選擇取模方式,可以設置字體樣式、大小和方向設置等。注意“方向設置“選項,這里為了對應工程中的顯示程序,選擇——橫向取模,高位在坐。其它選項只要適當修改顯示程序就可以。
然后點擊“輸出“按鈕,將在該目錄下得到字模數組文件(temp.txt)。第五步,整理字庫文件。上一步得到的字模數組文件還不能直接使用,需要進行整理以適合串口發送,去除各種注釋符和標點字符,只保留兩位字符組成的十六進制格式。接著將“temp.txt”改名為“HzLib.txt”,然后運行“整理字庫.exe”,此時將得到整理好的字庫“OutHzLib.txt”然后就可以直接將該字庫通過串口發送到MCU了。
第六步,串口發送數據。推薦用附件中的串口調試軟件,因為有些軟件在對于文件發送這個功能做得似乎有些問題。本人也測試了兩款串口調試軟件,均不能得到結果,如果有其它好的也可以,反正只要達到目的就行。設置串口參數,然后在發送區設置中勾選“按十六進制發送”,點擊“啟動文件數據原”選項,選擇制作好的字庫“OutHzLib.txt”,不要點擊“文件載入”。
第七步,打開串口,將板子接通電源,首先對Flash進行擦除操作,提示擦除結束后,點擊串口發送,然后就慢慢等著字庫寫入FLASH。測試在波特率為115200下,取模大小為16*16,耗時為70s,似乎也不太久,如果取模越大,耗時就越長。寫好字模后,就可以在工程中調用字庫進行中文顯示了(取GBK內碼操作見工程)。另外如果flash容量夠大的話,還可以寫入其它字體樣式和大小的字庫,做一個專屬的字庫芯片。
-
FlaSh
+關注
關注
10文章
1598瀏覽量
147340 -
嵌入式系統
+關注
關注
40文章
3520瀏覽量
128809 -
SPI
+關注
關注
17文章
1669瀏覽量
90745
原文標題:采用SPI Flash存儲中文字符庫
文章出處:【微信號:gh_dae0718828df,微信公眾號:gh_dae0718828df】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論