本帖最后由 jinglixixi 于 2020-7-17 19:13 编辑
1. 串行通讯传送字库文件 首先制作一个测试文件HEX.TXT
然后编写主程序,其代码如下: - extern bit Uart0SendFlag;
- extern bit Uart0ReceiveFlag;
-
- uint8_t Send_DATA[16];
- uint8_t Rec_DATA[16];
- void main(void)
- {
- uint8_t j
- Uart0Init();
- enableInterrupts();
- while(1)
- {
- if(Uart0ReceiveFlag)
- {
- Uart0ReceiveFlag = 0;
- u=UART0_ReceiveData8();
- printf("%c",u);
- j++;
- }
- if(j==16)
- {
- j=0;
- }
- }
- }
复制代码
辅助函数为: - void Uart0Init(void)
- {
- GPIO_Init(GPIO2, GPIO_PIN_1, GPIO_MODE_IN_PU);
- UART0_Init(32000000, 9600, UART0_Mode_10B, UART0_CLOCK_TIMER1, UART0_RX_ENABLE);
- UART0_ITConfig(ENABLE, LOW);
- }
-
- char putchar(char c)
- {
- UART0_SendData8(c);
- while(!Uart0SendFlag);
- Uart0SendFlag = 0;
- return c;
- }
复制代码
通讯中断复位程序为:- void UART0Interrupt() interrupt 4
- {
- if(UART0_GetFlagStatus(UART0_FLAG_TI))
- {
- UART0_ClearFlag(UART0_FLAG_TI);
- Uart0SendFlag = 1;
- }
- else if(UART0_GetFlagStatus(UART0_FLAG_RI))
- {
- UART0_ClearFlag(UART0_FLAG_RI);
- Uart0ReceiveFlag = 1;
- UART0_SendData8(UART0_ReceiveData8());
- }
- }
复制代码
在下载程序后,首先打开串口调试器并设好通讯参数。然后按“读取文件”按钮,以载入发送文件。再将发送方式选为16 进制,点击“发送”按钮加以发送,则获得图示的结果,说明收发数据项一致是可行的。 串口收发效果
将下面的字库文件发送给存储模块并保存,以便后续测试。
2.以区位码进行汉字显示 在使用自建字库,由于规模小,一般是使用顺序号来调用字模,但要使用一个完整的字库,则要参照区位码来调用字模。 本打算以这种方式来进行OLED_ShowCHineseh(0,2,'啊'),无奈编译系统不支持,只好直接采用区位码的方式OLED_ShowCHineseh(0,2,0xB0A1),其运行效果如图所示。 以区位码显示中文
显示显示效果的主程序如下: - void main(void)
- {
- OLED_Init();
- OLED_Clear();
- OLED_ShowCHineseh(0,2,0xB0A1); //啊
- OLED_ShowCHineseh(16,2,0xB0A2); //阿
- OLED_ShowCHineseh(32,2,0xB0A3); //埃
- OLED_ShowCHineseh(48,2,0xB0A4); //挨
- OLED_ShowCHineseh(64,2,0xB0A5); //哎
-
- OLED_ShowCHineseh(0,4,0xB0A6); //唉
- OLED_ShowCHineseh(16,4,0xB0A7); //哀
- OLED_ShowCHineseh(32,4,0xB0A8); //皑
- OLED_ShowCHineseh(48,4,0xB0A9); //癌
- OLED_ShowCHineseh(64,4,0xB0AA); //蔼
- while(1);
- }
复制代码
按区位码显示中文函数为: - void OLED_ShowCHineseh(unsigned char x,unsigned char y,unsigned int no)
- {
- unsigned char t,q,w,u;
- // 暂未添加区码处理
- // q=(unsigned char) (no&0xff00)>>8;
- // w=(q-176)*94+w
- w=(unsigned char) no&0xff;
- w=(w-0xA1)*2;
- if(w>9)
- {
- OLED_ShowChar(16,0,w/10+'0',16);
- }
- OLED_ShowChar(24,0,w%10+'0',16);
- OLED_Set_Pos(x,y);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[w][t],OLED_DATA);
- }
- q=q+1;
- OLED_Set_Pos(x,y+1);
- for(t=0;t<16;t++)
- {
- OLED_WR_Byte(Hzk[w][t],OLED_DATA);
- }
- }
复制代码
这样在具备完整中文字库的情况下,我们就可以按汉字的编码从字库中读取字模来显示中文信息。
|