本帖最后由 jinglixixi 于 2020-7-17 19:13 編輯
1. 串行通訊傳送字庫文件 首先制作一個測試文件HEX.TXT
3.png (9.73 KB, 下載次數(shù): 42)
下載附件
2020-7-16 16:25 上傳
然后編寫主程序,其代碼如下: - 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;
- }
- }
- }
復制代碼
輔助函數(shù)為: - 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());
- }
- }
復制代碼
在下載程序后,首先打開串口調試器并設好通訊參數(shù)。然后按“讀取文件”按鈕,以載入發(fā)送文件。再將發(fā)送方式選為16 進制,點擊“發(fā)送”按鈕加以發(fā)送,則獲得圖示的結果,說明收發(fā)數(shù)據(jù)項一致是可行的。
1.png (18.07 KB, 下載次數(shù): 28)
下載附件
2020-7-16 16:20 上傳
串口收發(fā)效果
將下面的字庫文件發(fā)送給存儲模塊并保存,以便后續(xù)測試。
4.png (17.95 KB, 下載次數(shù): 27)
下載附件
2020-7-16 16:34 上傳
2.以區(qū)位碼進行漢字顯示 在使用自建字庫,由于規(guī)模小,一般是使用順序號來調用字模,但要使用一個完整的字庫,則要參照區(qū)位碼來調用字模。 本打算以這種方式來進行OLED_ShowCHineseh(0,2,'啊'),無奈編譯系統(tǒng)不支持,只好直接采用區(qū)位碼的方式OLED_ShowCHineseh(0,2,0xB0A1),其運行效果如圖所示。
2.png (282.11 KB, 下載次數(shù): 45)
下載附件
2020-7-16 16:21 上傳
以區(qū)位碼顯示中文
顯示顯示效果的主程序如下: - 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);
- }
復制代碼
按區(qū)位碼顯示中文函數(shù)為: - void OLED_ShowCHineseh(unsigned char x,unsigned char y,unsigned int no)
- {
- unsigned char t,q,w,u;
- // 暫未添加區(qū)碼處理
- // 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);
- }
- }
復制代碼
這樣在具備完整中文字庫的情況下,我們就可以按漢字的編碼從字庫中讀取字模來顯示中文信息。
|