串口上位機(jī)模擬OLED屏
一. 簡(jiǎn)介
這是FPGA之旅設(shè)計(jì)的第十例啦,在上一例中,已經(jīng)成功驅(qū)動(dòng)了OLED屏幕,本例將結(jié)合上一例,以及第四例多bytes串口通信做一個(gè)有趣的例程。
簡(jiǎn)單來(lái)說(shuō),就是利用Qt編寫(xiě)上位機(jī),通過(guò)串口與FPGA進(jìn)行通信,然后FPGA將接收到的數(shù)據(jù),通過(guò)IIC接口發(fā)送給OLED,就這么一個(gè)流程。
二. QT上位機(jī)
大家可能對(duì)QT部分不感興趣,也不熟悉,這里就只對(duì)上位機(jī)的功能進(jìn)行說(shuō)明,實(shí)現(xiàn)過(guò)程就不敘述了,想了解的可以點(diǎn)個(gè)贊,人多的話,就專門(mén)介紹一下。
上位機(jī)目前一共只實(shí)現(xiàn)了兩個(gè)功能,一個(gè)是添加文字,另外一個(gè)是添加圓。添加過(guò)后,會(huì)在OLED預(yù)覽區(qū)域中進(jìn)行顯示。等編輯好之后,就可以點(diǎn)擊執(zhí)行,這時(shí)候,上位機(jī)會(huì)解析這部分的數(shù)據(jù),然后通過(guò)串口發(fā)送給FPGA,接下來(lái)的就是FPGA里面的處理了。
上位機(jī)可以更加完善。例如字體的大小可調(diào),字體可選,圓的線寬可調(diào),像其他圖形矩形,橢圓,線等等,都是可以的。也可以擴(kuò)展功能,如添加圖片等等。上位機(jī)的介紹就到這里。

三. FPGA部分實(shí)現(xiàn)
一
(一). 串口部分
在第四例,多byte串口接收模塊中,默認(rèn)為每次接收到三個(gè)byte就使能一次。剛好這里發(fā)送給OLED的數(shù)據(jù)也是三個(gè)byte,就對(duì)應(yīng)上了,不需要修改任何程序,直接在top模塊里面例化即可。
UART_MulRX UART_MulRXHP( .sys_clk (sys_clk), /*系統(tǒng)時(shí)鐘 50M*/ .rst_n (rst_n), /*復(fù)位信號(hào)*/ .uart_rxs_done (uart_rxs_done), /*串口接收完成*/ .odats (uart_rxs_data), /*接收數(shù)據(jù)*/ .uartrx (UART_RX) /*uart rx信號(hào)線*/);
二
OLED部分
在上一例中,程序?qū)LED進(jìn)行初始化之后,就進(jìn)入了空閑態(tài),在空閑態(tài)的時(shí)候,是沒(méi)有任何處理的。但在本例中,需要對(duì)串口接收到的數(shù)據(jù)進(jìn)行處理,通過(guò)IIC發(fā)送給OLED,這部分也很簡(jiǎn)單,代碼如下。
module OLED_SelData( input sys_clk, input rst_n, input init_req, input[23:0] init_data, input uart_req, input[23:0] uart_data, output IICWriteReq, output[23:0] IICWriteData); reg IICWriteReqReg;reg[23:0] IICWriteDataReg; assign IICWriteReq = init_req | uart_req;assign IICWriteData = (init_req == 1'b1) ? init_data : uart_data; endmodule
這個(gè)例程,就是將前面的串口多byte串口通信和這個(gè)結(jié)和起來(lái)了,設(shè)計(jì)難點(diǎn)在上位機(jī)的編寫(xiě),對(duì)上位機(jī)感興趣的可以多了解一下,不感興趣的可以參考一下,例如說(shuō),將IIC模塊上包一個(gè)串口模塊,就可以將IIC接口變?yōu)榇诹?,就可以通過(guò)串口來(lái)配置OLED了。效果如下。
