為進行中文字庫文件的生成與驗證,其硬件的基本構成如圖1所示。 在前面曾介紹過以通訊方式傳送字庫文件來構建中文字庫,但要生成一個字庫文件也需要做一些基本工作。 圖1 硬件的基本構成
我們知道漢字的字模在字庫中是按區位碼的順序來排放的,因此在制作時也需要按此來處理,下面以16區的漢字為例來進行說明。
16區的漢字共有94個字,依次是: 啊阿埃挨哎唉哀皚癌藹矮艾礙愛隘鞍氨安俺按暗岸胺案骯昂盎凹敖熬翱襖傲奧懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙壩霸罷爸白柏百擺佰敗拜稗斑班搬扳般頒板版扮拌伴瓣半辦絆邦幫梆榜膀綁棒磅蚌鎊傍謗苞胞包褒剝。 然后在字庫提取軟件PCtoLCD2002完美版的生成文本文件界面,添加16區的漢字,并按圖2加以設置。點擊“開始生成”即可生成命名的文件K16.font,使用WinHex軟件可查看該文件的內容,其內容如圖3所示。 圖2 字庫文件生成工具
圖3 查看字庫文件
有了字庫文件后,我們就可以使用下面的程序將16區的字模轉存到W25Q16存儲模塊中。
轉存與查驗主程序: - void main(void)
- {
- BitStatus f;
- uint8_t j,x,no;
- uint16_t i;
- uint32_t Z;
- mdelay(500);
- GPIO_Init(GPIO0, GPIO_PIN_4,GPIO_MODE_OUT_PP);
- GPIO_WriteLow(GPIO0, GPIO_PIN_4);
- GPIO_Init(GPIO0, GPIO_PIN_5, GPIO_MODE_IN_PU);
- GPIO_Init(GPIO0, GPIO_PIN_6, GPIO_MODE_IN_PU);
- GPIO_Init(GPIO0, GPIO_PIN_7, GPIO_MODE_IN_PU);
- SPIInit();
- Uart0Init();
- enableInterrupts();
- printf("W25Q16 TEST: \n\r");
- printf("K3:WR K4:RD\n\r");
- while(GPIO_ReadPin(GPIO0, GPIO_PIN_7));
- while(1)
- {
- if(GPIO_ReadPin(GPIO0, GPIO_PIN_7)==0)
- {
- printf("WR\n\r");
- W25_SectorErase(0);
- Z=0;
- i=0;
- j=0;
- while(Z<3008) // 3008=32*94字
- {
- if(Uart0ReceiveFlag)
- {
- Send_DATA[0]=u;
- SPI_Flash_Write_NoCheck(Send_DATA,Z,1);
- Z++;
- Uart0ReceiveFlag=0;
- }
- }
- }
- if(GPIO_ReadPin(GPIO0, GPIO_PIN_6)==0)
- {
- printf("RD\n\r");
- Z=0;
- for(j=0;j<188;j++) // 188=3008/16行
- {
- SPI_Flash_Read(Rec_DATA,Z,16);
- for(i=0;i<16;i++)
- {
- printf("%c",Rec_DATA[i]);
- }
- Z=Z+16;
- }
- }
- }
- while(1);
- }
復制代碼
按K3鍵后,其轉存結果如圖4和圖5所示。圖4 轉存結果1
圖5 轉存結果2
按K4鍵后,其讀取結果如圖6和圖7所示,由此證明轉存是成功的。 圖6 讀取結果1
圖7 讀取結果2
使用下面的顯示驗證函數,可得到圖8所示的效果,說明顯示驗證也正確。
顯示驗證主程序: - void main(void)
- {
- BitStatus f;
- uint8_t j,x,no;
- uint16_t i;
- uint32_t Z;
-
- mdelay(500);
- GPIO_Init(GPIO0, GPIO_PIN_4,GPIO_MODE_OUT_PP);
- GPIO_WriteLow(GPIO0, GPIO_PIN_4);
- GPIO_Init(GPIO0, GPIO_PIN_5, GPIO_MODE_IN_PU);
- GPIO_Init(GPIO0, GPIO_PIN_6, GPIO_MODE_IN_PU);
- GPIO_Init(GPIO0, GPIO_PIN_7, GPIO_MODE_IN_PU);
- SPIInit();
- Uart0Init();
- enableInterrupts();
-
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"SC95F8616",16);
- OLED_ShowCHineset(0,6,0);
- while(GPIO_ReadPin(GPIO0, GPIO_PIN_7));
- OLED_ShowCHinese(0,2,0);
- OLED_ShowCHinese(16,2,1);
- OLED_ShowCHinese(32,2,2);
- OLED_ShowCHinese(48,2,3);
- OLED_ShowCHinese(64,2,4);
- OLED_ShowCHinese(0,4,5);
- OLED_ShowCHinese(16,4,6);
- OLED_ShowCHinese(32,4,7);
- OLED_ShowCHinese(48,4,8);
- OLED_ShowCHinese(64,4,9);
- OLED_ShowCHinese(0,6,10);
- OLED_ShowCHinese(16,6,11);
- OLED_ShowCHinese(32,6,12);
- OLED_ShowCHinese(48,6,13);
- OLED_ShowCHinese(64,6,14);
- while(1);
- }
復制代碼
顯示驗證功能函數:- void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
- {
- unsigned char t;
- uint32_t p=0;
-
- OLED_Set_Pos(x,y);
- p=p+no*32;
- SPI_Flash_Read(Rec_DATA,p,16);
-
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Rec_DATA[t],OLED_DATA);
- }
-
- OLED_Set_Pos(x,y+1);
- p=p+16;
- SPI_Flash_Read(Rec_DATA,p,16);
-
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Rec_DATA[t],OLED_DATA);
- }
- }
復制代碼
圖8字庫顯示驗證
|