为进行中文字库文件的生成与验证,其硬件的基本构成如图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字库显示验证
|