找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3158|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MicroPython之TPYBoard v102開發(fā)板控制OLED顯示中文

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

  0x00前言

  之前看到一篇文章是關(guān)于TPYBoardv102控制OLED屏顯示的,看到之后就想嘗試一下使用OLED屏來顯示中文。最近利用空余時(shí)間搞定了這個(gè)實(shí)驗(yàn),特此將實(shí)驗(yàn)過程及源碼分享出來,方便以后使用。

  0x01實(shí)驗(yàn)器材

  TPYBoardv102開發(fā)板1塊

  0.96寸OLED顯示屏(ssd1306)1塊

  杜邦線若干

  0x02前期準(zhǔn)備

  1、        首先我們先來看一下,之前參考的OLED顯示字符的文章。

  文章中的源碼文件都已上傳到GitHub。地址:https://github.com/TPYBoard/deve ... PYBoard-v10x-master

  找到[11.學(xué)習(xí)使用OLED顯示屏]里面就是源程序。我就是在font.py和ssd1306.py基礎(chǔ)上做的開發(fā)。

  2、        在font.py中增加中文字模。

  font.py中已有英文、數(shù)字和符號(hào)的字符,我們需要做中文的字模添加到font.py中。

  2.1首先下載字模提取工具。地址:tpyboard點(diǎn)com/download/tool/187.html

  解壓,雙擊運(yùn)行PCtoLCD2002.exe。



  2.2        頂端菜單欄,點(diǎn)擊[選項(xiàng)]按下方圖片設(shè)置,設(shè)置完畢后點(diǎn)擊[確定]保存設(shè)置。



  2.3        回到主界面,在輸入框中輸入“我”點(diǎn)擊[生成字模]。



  取得的字模數(shù)據(jù)如下:

  
  
0x04,0x0E,0x78,0x08,0x08,0xFF,0x08,0x08,0x0A,0x0C,0x18,0x68,0x08,0x08,0x2B,0x10
  
0x40,0x50,0x48,0x48,0x40,0xFE,0x40,0x44,0x44,0x48,0x30,0x22,0x52,0x8A,0x06,0x02/*"我",0*/
  

  2.4        將取到的字模數(shù)據(jù)添加到font.py中。



  綠色框中是“我”的16進(jìn)制utf-8編碼。

  在線工具:http://tool.lu/hexstr/

  參照以上方法,我依次添加了“我愛你祖國”這5個(gè)漢字的字模。

  
byte2  = {
  
  
0xe68891:
  
    [
  
     0x04,0x0E,0x78,0x08,0x08,0xFF,0x08,0x08,0x0A,0x0C,0x18,0x68,0x08,0x08,0x2B,0x10,
  
     0x40,0x50,0x48,0x48,0x40,0xFE,0x40,0x44,0x44,0x48,0x30,0x22,0x52,0x8A,0x06,0x02,
  
    ],#
  
0xe788b1:
  
    [
  
     0x00,0x01,0x7E,0x22,0x11,0x7F,0x42,0x82,0x7F,0x04,0x07,0x0A,0x11,0x20,0x43,0x1C,
  
     0x08,0xFC,0x10,0x10,0x20,0xFE,0x02,0x04,0xF8,0x00,0xF0,0x10,0x20,0xC0,0x30,0x0E,
  
    ],#
  
0xe4bda0:
  
    [
  
    0x08,0x08,0x08,0x11,0x11,0x32,0x34,0x50,0x91,0x11,0x12,0x12,0x14,0x10,0x10,0x10,
  
     0x80,0x80,0x80,0xFE,0x02,0x04,0x20,0x20,0x28,0x24,0x24,0x22,0x22,0x20,0xA0,0x40,
  
    ],#
  
0xe7a596:
  
    [
  
     0x20,0x11,0x11,0xF9,0x09,0x11,0x11,0x39,0x55,0x95,0x11,0x11,0x11,0x11,0x17,0x10,
  
     0x00,0xF8,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x08,0xFE,0x00
  
    ],#
  
0xe59bbd:
  
    [
  
     0x00,0x7F,0x40,0x40,0x5F,0x41,0x41,0x4F,0x41,0x41,0x41,0x5F,0x40,0x40,0x7F,0x40,
  
     0x00,0xFC,0x04,0x04,0xF4,0x04,0x04,0xE4,0x04,0x44,0x24,0xF4,0x04,0x04,0xFC,0x04
  
    ],#
  
}
  

  3、        在ssd1306.py文件中增加了draw_chinese顯示中文的方法。

  
  def  draw_chinese(self,ch_str,x_axis,y_axis):
  
    offset_=0
  
    y_axis=y_axis*8#中文高度一行占8個(gè)
  
    x_axis=127-(x_axis*16)#中文寬度占16個(gè)
  
    for k in ch_str:
  
        code = 0x00#將中文轉(zhuǎn)成16進(jìn)制編碼
  
        data_code =  k.encode("utf-8")
  
        code |= data_code[0]<<16
  
        code |= data_code[1]<<8
  
        code |= data_code[2]
  
        byte_data=font.byte2[code]
  
        for y in range(0,16):
  
             a_=bin(byte_data[y]).replace('0b','')
  
            while len(a_)<8:
  
                a_='0'+a_
  
               
  
             b_=bin(byte_data[y+16]).replace('0b','')
  
            while len(b_)<8:
  
                b_='0'+b_
  
            for x in range(0,8):
  
                 self.set_pixel(x_axis-x-offset_,y+y_axis,int(a_[x]))#文字的上半部分
  
                 self.set_pixel(x_axis-x-8-offset_,y+y_axis,int(b_[x]))#文字的下半部分
  
        offset_+=16
  

  github源碼地址:https://github.com/TPYBoard/deve ... YBoard-v10x-master/

  找到[20.學(xué)習(xí)OLED顯示中文]。

  0x03硬件連接

  本次實(shí)驗(yàn)使用OLED的SPI通訊方式,TPYBoardv102帶有2個(gè)SPI接口,我用的SPI1。

  具體接線方法如下:

  
TPYBoard v102 (SPI1)
  
OLED顯示屏(SPI)
3.3V
VCC 2.8V~5.5V
GND
GND
X6(SCK)
SCK/D0
X8(MOSI)
SDA/D1
Y10
RES
Y9
DC
NC(懸空)
CS

  0x04效果展示

  硬件接線OK后,將源碼全部拷貝到TPYBaordv102加載的磁盤中,按下RST按鍵復(fù)位或者使用Putty軟件Ctrl+D軟復(fù)位,重新運(yùn)行效果如下:







分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表