一. 簡介
這是FPGA之旅的第十一例了。在前面的例子中,已經(jīng)對(duì)OLED有了一個(gè)基礎(chǔ)的了解,本例將介紹如何在OLED上實(shí)現(xiàn)字符的顯示,為后面的例程做準(zhǔn)備。
顯示字符需要先使用字摸軟件取模,將得到的字摸數(shù)據(jù)存儲(chǔ)到寄存器當(dāng)中,這個(gè)過程可以利用Python生成。然后設(shè)置好顯示的XY坐標(biāo),最后發(fā)送字符數(shù)據(jù)即可。對(duì)于字符占兩個(gè)page的話,也就是字符高度大于8的情況,中間還需要重新設(shè)置page。
二. 字摸軟件簡介
字摸軟件選用PCtoLCD2002,這個(gè)比較常用,也是比較方便,界面如下圖所示。

點(diǎn)擊選項(xiàng),在彈出的界面中,對(duì)生成的字符數(shù)據(jù)進(jìn)行設(shè)置,為了方便python進(jìn)行解析,特意設(shè)置生成格式如

設(shè)置好后,×掉,設(shè)置好字寬和字高后,輸入需要生成的字符數(shù)據(jù),然后點(diǎn)擊生成字摸就可以在文本框中看到生成的數(shù)據(jù),然后點(diǎn)擊保存字摸,就可以將字摸數(shù)據(jù)保存到TXT文件中了。字摸軟件的介紹就到這里了。

三. Python程序編寫
想著,大家對(duì)python可能不太了解,程序就不貼出來,可以作為一個(gè)工具來用,對(duì)每個(gè)字符生成如下的always塊,字體大小為16*16,方便FPGA讀取。
always@(posedge clk or negedge rst)beginif(rst == 1'b0)begindata1[0]=8'h00;data1[1] = 8'h40;data1[2] = 8'h64;data1[3] = 8'h1C;data1[4] = 8'h8A;data1[5] = 8'h6C;data1[6] = 8'h1C;data1[7] = 8'h04;data1[8] = 8'hFC;data1[9] = 8'h8A;data1[10] = 8'h5C;data1[11] = 8'h64;data1[12] = 8'h54;data1[13] = 8'h54;data1[14] = 8'h10;data1[15] = 8'h00;endend
四. 字符顯示模塊
這里演示的是8*16大小的字符(中途沒有換行操作,便于理解顯示的過程),也就是顯示一個(gè)字符,需要向OLED發(fā)送16次IIC請(qǐng)求。
(一) 模塊信號(hào)列表
現(xiàn)在這個(gè)模塊和初始化模塊一樣,信號(hào)列表都是一樣的。當(dāng)字符請(qǐng)求來了,就把顯示的字符數(shù)據(jù)發(fā)送出去。
module OLED_ShowFont(input sys_clk,input rst_n,input ShowFont_req, //字符顯示請(qǐng)求input write_done, //iic一組數(shù)據(jù)寫完成output[23:0] ShowFont_Data, //字符顯示數(shù)據(jù)output ShowFont_finish //字符顯示完成);
(二). 具體代碼實(shí)現(xiàn)
1. 顯示一個(gè)8*16大小的字符,需要先指定對(duì)應(yīng)的XY坐標(biāo),也就是page數(shù)和Column地址,發(fā)送三個(gè)命令即可。
2. 隨后發(fā)送16byte的字符數(shù)據(jù),就完成了一個(gè)支符的顯示。
always@(*)begincase(showfont_index)'d0 showfont_data_reg <= {8'h78,8'h00,8'hB0 + 8'h03}; //'d3代表顯示的起始頁地址為4'd1: showfont_data_reg <= {8'h78,8'h00,8'h00 + 8'h02}; //'d2代表顯示的起始column的低四位為2'd2: showfont_data_reg <= {8'h78,8'h00,8'h10 + 8'h02}; //'d2代表顯示的起始column的高四位為2//即顯示的column的起始地址為8'h22,即'd34default: showfont_data_reg <= {8'h78,8'h40,fontdata};//顯示的數(shù)據(jù)endcaseendOLED_FontData OLED_FontData_HP(.sys_clk (sys_clk),.rst_n (rst_n),.index (showfont_index - 'd3),.data (fontdata));
3. 發(fā)送完3byte+16byte的數(shù)據(jù)后,即顯示結(jié)束,也就是當(dāng)showfont_index == 18的時(shí)候,并且在第19個(gè)數(shù)據(jù)剛剛寫完的時(shí)候。
(三). OLED_TOP模塊改動(dòng)
這部分的修改也很少,只需要添加一個(gè)狀態(tài),在OLED初始化完成后,進(jìn)入字符顯示狀態(tài),最后進(jìn)入空閑態(tài)即可,其他的添加和初始化部分一樣。
always@(*)begincase(state)OLED_INIT:if(init_finish == 1'b1)next_state <= OLED_ShowFont;elsenext_state <= OLED_INIT;OLED_ShowFont:if(showfont_finish == 1'b1)next_state <= OLED_IDLE;elsenext_state <= OLED_ShowFont;OLED_IDLE:next_state <= OLED_IDLE;default: next_state <= OLED_INIT;endcaseend
這里就進(jìn)行了一個(gè)簡單的字符顯示例程,當(dāng)然在實(shí)際使用的時(shí)候,會(huì)復(fù)雜很多,例如有多個(gè)不同大小的字符進(jìn)行顯示,以及動(dòng)態(tài)顯示字符等等情況,但核心的寫法可以參考本例。
顯示效果如下

審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1660文章
22412瀏覽量
636374 -
OLED
+關(guān)注
關(guān)注
121文章
6358瀏覽量
233663 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90046 -
顯示字符
+關(guān)注
關(guān)注
0文章
3瀏覽量
7351
原文標(biāo)題:FPGA驅(qū)動(dòng)OLED顯示字符
文章出處:【微信號(hào):FPGA之旅,微信公眾號(hào):FPGA之旅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
OLED顯示流程(簡析)
oled驅(qū)動(dòng)程序如何顯示變化的字符串?
STM32驅(qū)動(dòng)OLED屏滾動(dòng)顯示的軟件該怎樣去設(shè)計(jì)呢
如何在oled屏上實(shí)現(xiàn)鼠標(biāo)功能呢
怎樣使用STM32在0OLED顯示屏上實(shí)現(xiàn)字符滾動(dòng)呢
怎樣使用STM32在0.96寸OLED顯示屏上實(shí)現(xiàn)字符滾動(dòng)呢
如何使用FPGA實(shí)現(xiàn)字符顯示
如何在AB32VG1開發(fā)板OLED顯示使開發(fā)板上電
如何在MAIN函數(shù)實(shí)現(xiàn)OLED顯示
使用STM32在0.96寸OLED顯示屏上實(shí)現(xiàn)字符滾動(dòng)
如何在Raspberry Pi Pico中使用OLED顯示器
教大家如何在OLED屏上顯示漢字
如何在I2C 128X32 OLED顯示器上滾動(dòng)文本
如何在OLED上實(shí)現(xiàn)字符的顯示
評(píng)論