0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在OLED上實(shí)現(xiàn)字符的顯示

我快閉嘴 ? 來源:FPGA之旅 ? 作者:FPGA之旅 ? 2022-09-06 09:02 ? 次閱讀

一. 簡(jiǎn)介

這是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。

二. 字摸軟件簡(jiǎn)介

字摸軟件選用PCtoLCD2002,這個(gè)比較常用,也是比較方便,界面如下圖所示。

1dc6ae00-2d7e-11ed-ba43-dac502259ad0.png


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

1de4d510-2d7e-11ed-ba43-dac502259ad0.png

下。

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

1e117bce-2d7e-11ed-ba43-dac502259ad0.png

三. Python程序編寫

想著,大家對(duì)python可能不太了解,程序就不貼出來,可以作為一個(gè)工具來用,對(duì)每個(gè)字符生成如下的always塊,字體大小為16*16,方便FPGA讀取。

always@(posedge clk or negedge rst)begin if(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@(*)begin case(showfont_index)    'd0  showfont_data_reg <= {8'h78,8'h00,8'hB0 + 8'h03};  //'d3代表顯示的起始頁(yè)地址為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,即'd34    default: 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@(*)begin case(state) OLED_INIT:  if(init_finish == 1'b1)   next_state <= OLED_ShowFont;  else   next_state <= OLED_INIT; OLED_ShowFont:  if(showfont_finish == 1'b1)   next_state <= OLED_IDLE;  else   next_state <= OLED_ShowFont; OLED_IDLE:  next_state <= OLED_IDLE;
 default: next_state <= OLED_INIT; endcaseend

這里就進(jìn)行了一個(gè)簡(jiǎn)單的字符顯示例程,當(dāng)然在實(shí)際使用的時(shí)候,會(huì)復(fù)雜很多,例如有多個(gè)不同大小的字符進(jìn)行顯示,以及動(dòng)態(tài)顯示字符等等情況,但核心的寫法可以參考本例。

顯示效果如下

1e350076-2d7e-11ed-ba43-dac502259ad0.png


審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603385
  • OLED
    +關(guān)注

    關(guān)注

    119

    文章

    6200

    瀏覽量

    224207
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84689
  • 顯示字符
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    7251

原文標(biāo)題:FPGA驅(qū)動(dòng)OLED顯示字符

文章出處:【微信號(hào):FPGA之旅,微信公眾號(hào):FPGA之旅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OLED顯示流程(簡(jiǎn)析)

    ,,:比如我們想讓OLED顯示顯示一個(gè)字符串:“CODE:”,主函數(shù)是這么兩條語(yǔ)句:OLED_ShowString(63,48,"CODE
    發(fā)表于 05-07 20:26

    oled驅(qū)動(dòng)程序如何顯示變化的字符串?

    OLED_showString(10,2,"V=3.5m/s",16); //顯示字符串 問題:oled驅(qū)動(dòng)程序顯示
    發(fā)表于 10-25 16:42

    STM32驅(qū)動(dòng)OLED屏滾動(dòng)顯示的軟件該怎樣去設(shè)計(jì)呢

    何在OLED屏上去實(shí)現(xiàn)字符串滾動(dòng)顯示呢?STM32驅(qū)動(dòng)OLED屏滾動(dòng)
    發(fā)表于 12-08 06:11

    何在串口實(shí)驗(yàn)基礎(chǔ)添加OLED顯示溫濕度?

    何在串口實(shí)驗(yàn)基礎(chǔ)添加OLED顯示溫濕度?
    發(fā)表于 12-16 06:39

    何在oled實(shí)現(xiàn)鼠標(biāo)功能呢

    如題,在oled實(shí)現(xiàn)鼠標(biāo)功能,需要什么樣的環(huán)境,給點(diǎn)提議也可以。補(bǔ)充一下,能不能使用oled做為輸出屏,用oled屏代替LCD屏,
    發(fā)表于 01-12 06:28

    怎樣通過OLED模塊去顯示字符

    OLED是什么?OLED模塊有哪些特點(diǎn)?怎樣通過OLED模塊去顯示字符呢?
    發(fā)表于 01-19 07:00

    怎樣使用STM32在0OLED顯示實(shí)現(xiàn)字符滾動(dòng)呢

    基于SPI修改程序的數(shù)據(jù)顯示如何去實(shí)現(xiàn)呢?怎樣使用STM32在OLED顯示實(shí)現(xiàn)
    發(fā)表于 01-21 07:35

    怎樣使用STM32在0.96寸OLED顯示實(shí)現(xiàn)字符滾動(dòng)呢

    使用STM32在0.96寸OLED顯示實(shí)現(xiàn)字符滾動(dòng)一、初識(shí)OLED屏滾動(dòng)命令二、對(duì)所需
    發(fā)表于 02-24 07:25

    如何使用FPGA實(shí)現(xiàn)字符顯示

    在HDMI輸出實(shí)驗(yàn)中講解了HDMI顯示原理和顯示方式,本實(shí)驗(yàn)介紹如何使用FPGA實(shí)現(xiàn)字符顯示,通過這個(gè)實(shí)驗(yàn)更加深入的了解HDMI的
    的頭像 發(fā)表于 02-09 10:29 ?3610次閱讀
    如何使用FPGA<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>字符</b><b class='flag-5'>顯示</b>

    何在AB32VG1開發(fā)板OLED顯示使開發(fā)板

    中直接實(shí)現(xiàn)的,本編文章直接在MAIN函數(shù)實(shí)現(xiàn)OLED顯示,電自動(dòng)執(zhí)行。 根據(jù)說明書,AB32VG1開發(fā)板上有一路 I2C,本文通過 RT-
    的頭像 發(fā)表于 11-08 10:02 ?2622次閱讀
    如<b class='flag-5'>何在</b>AB32VG1開發(fā)板<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>使開發(fā)板<b class='flag-5'>上</b>電

    何在MAIN函數(shù)實(shí)現(xiàn)OLED顯示

    最近在玩AB32VG1,在做OLED顯示實(shí)驗(yàn)時(shí),在csdn搜索了很多關(guān)于AB32VG1驅(qū)動(dòng)OLED的文章,很多都是官方例程操作,在msh窗口中輸入測(cè)試指令,測(cè)試驅(qū)動(dòng)是否正常。很少有關(guān)于在main函數(shù)中直接
    的頭像 發(fā)表于 12-01 17:24 ?4416次閱讀
    如<b class='flag-5'>何在</b>MAIN函數(shù)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>

    使用STM32在0.96寸OLED顯示實(shí)現(xiàn)字符滾動(dòng)

    使用STM32在0.96寸OLED顯示實(shí)現(xiàn)字符滾動(dòng)一、初識(shí)OLED屏滾動(dòng)命令二、對(duì)所需
    發(fā)表于 01-12 17:25 ?16次下載
    使用STM32在0.96寸<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>屏<b class='flag-5'>上</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>字符</b>滾動(dòng)

    何在Raspberry Pi Pico中使用OLED顯示

    電子發(fā)燒友網(wǎng)站提供《如何在Raspberry Pi Pico中使用OLED顯示器.zip》資料免費(fèi)下載
    發(fā)表于 10-18 09:15 ?4次下載
    如<b class='flag-5'>何在</b>Raspberry Pi Pico中使用<b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>器

    教大家如何在OLED顯示漢字

    我們使用的OLED屏是由方形的發(fā)光點(diǎn)陣列組成的,分辨率為128x64。英文和數(shù)字最小可用8x8像素,漢字最小顯示像素為16x16,通常為了顯示效果,英文和數(shù)字通常使用8x16像素表示。要顯示
    發(fā)表于 06-13 14:37 ?4251次閱讀
    教大家如<b class='flag-5'>何在</b><b class='flag-5'>OLED</b>屏<b class='flag-5'>上</b><b class='flag-5'>顯示</b>漢字

    何在I2C 128X32 OLED顯示滾動(dòng)文本

    電子發(fā)燒友網(wǎng)站提供《如何在I2C 128X32 OLED顯示滾動(dòng)文本.zip》資料免費(fèi)下載
    發(fā)表于 06-28 15:59 ?0次下載
    如<b class='flag-5'>何在</b>I2C 128X32 <b class='flag-5'>OLED</b><b class='flag-5'>顯示</b>器<b class='flag-5'>上</b>滾動(dòng)文本