1. 串口通信電路 在ESK32-360開發(fā)板上提供了串行通訊功能,其接口如圖1所示。
1.jpg (16.91 KB, 下載次數(shù): 84)
下載附件
2020-8-31 22:51 上傳
圖1 RS232接口
2.jpg (21.41 KB, 下載次數(shù): 95)
下載附件
2020-8-31 22:51 上傳
圖2 DB9的引腳連接
2.基本應(yīng)用 有了串行通訊后,我們用它可以做什么呢? 我們還是將它與LCD屏顯示結(jié)合起來,最簡單的就是發(fā)送數(shù)據(jù)在LCD屏上進(jìn)行繪制,如動態(tài)地指定一個寬度,然后進(jìn)行指定色彩的填充,見圖3和圖4所示。
3.jpg (36.46 KB, 下載次數(shù): 71)
下載附件
2020-8-31 22:57 上傳
3.通訊傳輸顯示圖片 有了前面簡單的測試,我們就可以大膽地期待著通過傳輸數(shù)據(jù)來顯示圖片了,因為前面用數(shù)組來顯示大的圖片時會導(dǎo)致下載崩潰。 首先以小圖片來測試,成功通過!其效果如圖5所示。
4.jpg (14.67 KB, 下載次數(shù): 78)
下載附件
2020-8-31 22:57 上傳
圖5 以傳送數(shù)據(jù)來顯示圖片
傳送數(shù)據(jù)的界面如圖6所示,其中“00 38”是圖片寬度,即56個像素,而“00 44”是圖片的高度,即68個像素。別小看這個圖片,它可是占用了7616個字節(jié)呀!
5.jpg (44.96 KB, 下載次數(shù): 90)
下載附件
2020-8-31 22:57 上傳
圖6 傳送圖片數(shù)據(jù)
那么把膽子再放大些呢?能傳送153600個字節(jié)嗎?它可是滿屏圖片的規(guī)格,153600=240*320*2
( 320=0140H 240=F0H 153600=240*320*2 )
首先用Image2Lcd軟件將一幅240*320像素點(diǎn)的圖片轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)文件BIN,其格式設(shè)置如圖7所示,然后進(jìn)行串口傳送,則效果如圖8所示,一樣的成功!
當(dāng)然在執(zhí)行時有些嚇人,首先是讀入文件時串口調(diào)試器有點(diǎn)懵,像是被打暈,好一會沒找到北;好容易在發(fā)送窗口有了數(shù)據(jù),這次該輪到發(fā)送器暈了,也是一段時間沒響應(yīng),近乎是要崩潰!還在還算頑強(qiáng),終于挺過來了,屏幕上一絲絲彩線在游走,終于是一個圓滿!
3.jpg (29.04 KB, 下載次數(shù): 81)
下載附件
2020-9-1 01:06 上傳
圖7 準(zhǔn)備數(shù)據(jù)文件
4.jpg (14.11 KB, 下載次數(shù): 72)
下載附件
2020-9-1 01:06 上傳
圖8 圖片顯示
為防止偶然,又傳第2幅、第3幅 ... ... 完全抗擊打!
8.jpg (24.16 KB, 下載次數(shù): 75)
下載附件
2020-8-31 22:58 上傳
圖9 演示效果
最后請出我們的主角,功能程序: - int main(void)
- {
- u32 err = 0, result;
- u16 uData,a,b;
- u32 xid = 0;
- u32 ImgAdds = 0;
- u32 yid = 0;
- u32 i = 0, j = 0, color = 0;
- u8 X_Location=0, Height;
- u16 Y_Location=0, Width;
- /* Initialize LEDs */
- HT32F_DVB_LEDInit(HT_LED1);
- HT32F_DVB_LEDInit(HT_LED2);
- HT32F_DVB_LEDInit(HT_LED3);
- LCD_Init();
- LCD_Config();
- LCD_BackColorSet(Black);
- LCD_TextColorSet(Yellow);
- LCD_StringLineDisplay(Line3, " Holtek ");
- LCD_StringLineDisplay(Line4, " HT32 Series ");
- LCD_StringLineDisplay(Line5, " LCD Example ");
-
- UxART_Configuration();
- UxART_TxTest();
-
- for (i = 0; i < 4; i++)
- {
- while (USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
- uData = USART_ReceiveData(HTCFG_UART_PORT);
- Tx_Buffer[i]=(u8)uData;
- UxART_TxSend(uData);
- }
-
- a=Tx_Buffer[0];
- b=Tx_Buffer[1];
- Width=a << 8 | b;
- a=Tx_Buffer[2];
- b=Tx_Buffer[3];
- Height=a << 8 | b;
-
- xid = X_Location;
- yid = Y_Location;
-
- LCD_StarterSet(xid, yid);
- for (i = 0; i < Height; i++)
- {
- LCD_WriteRAMPrior();
- for (j = 0; j < Width; j++)
- {
- while(USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
- a = USART_ReceiveData(HTCFG_UART_PORT);
-
- while(USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
- b = USART_ReceiveData(HTCFG_UART_PORT);
- color = a << 8 | b;
-
- LCD_WriteRAM(color);
- }
- xid++;
- LCD_StarterSet(xid, yid);
- }
- while (1);
- }
復(fù)制代碼 |