0x00 前言html
以前看到一篇文章是關於TPYBoard v102控制OLED屏顯示的,看到以後就想嘗試一下使用OLED屏來顯示中文。最近利用空餘時間搞定了這個實驗,特此將實驗過程及源碼分享出來,方便之後使用。python
0x01 實驗器材git
TPYBoard v102 開發板 1塊(某寶上能夠買到,價格不貴)
0.96 寸OLED顯示屏(ssd1306) 1塊
杜邦線 若干github
0x02 前期準備工具
一、首先咱們先來看一下,以前參考的OLED顯示字符的文章。學習
http://docs.tpyboard.com/zh/latest/tpyboard/tutorial/v10x/oled/?highlight=oled編碼
文章中的源碼文件都已上傳到GitHub。地址:https://github.com/TPYBoard/developmentBoard/tree/master/TPYBoard-v10x-mastercode
找到11.學習使用OLED顯示屏]裏面就是源程序。我就是在font.py和ssd1306.py基礎上作的開發。htm
二、在font.py中增長中文字模。blog
font.py中已有英文、數字和符號的字符,咱們須要作中文的字模添加到font.py中。
2.1首先下載字模提取工具。地址:http://tpyboard.com/download/tool/187.html
解壓,雙擊運行PCtoLCD2002.exe。
2.2 頂端菜單欄,點擊[選項]按下方圖片設置,設置完畢後點擊[肯定]保存設置。
2.2回到主界面,在輸入框中輸入「我」點擊[生成字模]。
取得的字模數據以下:
2.2將取到的字模數據添加到font.py中。
綠色框中是「我」的16進制utf-8編碼。
參照以上方法,我依次添加了「我愛你祖國」這5個漢字的字模。
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 ],#國 }
一、在ssd1306.py 文件中增長了draw_chinese顯示中文的方法。
def draw_chinese(self,ch_str,x_axis,y_axis): offset_=0 y_axis=y_axis*8#中文高度一行佔8個 x_axis=127-(x_axis*16)#中文寬度佔16個 for k in ch_str: code = 0x00#將中文轉成16進制編碼 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/developmentBoard/tree/master/TPYBoard-v10x-master/
找到[20.學習OLED顯示中文]。
0x03 硬件鏈接
本次實驗使用OLED的SPI通信方式,TPYBoard v102帶有2個SPI接口,我用的SPI1。
具體接線方法以下:
0x04 效果展現
硬件接線OK後,將源碼所有拷貝到TPYBaord v102加載的磁盤中,按下RST按鍵復位或者使用Putty軟件Ctrl+D軟復位,從新運行效果以下: