Arduino使用OLED顯示漢字——For初學者

故事背景
有一次做項目用到了OLED顯示器,需要用它來顯示漢字,網上找了很多的資料,用OLED顯示英文或者數字比較方便,至於顯示漢字也不是很難,只是網上的資料都太零散,而且有的代碼運行不了,基於此寫下本文,便於初學或者第一次用OLED的朋友少走彎路。本文不講LCD的使用
預先準備

  • 軟件
    需要預先安裝兩個庫,即Adafruit_GFX.h和Adafruit_SSD1306.h,要控制OLED需要這兩個庫,如果顯示英文或者數字直接用函數可以調用,若用OLED顯示漢字並不是說不好顯示,而是直接編代碼比較麻煩,因爲(本文用到的)OLED是128*64的。若自己規劃漢字是比較麻煩的,所以我們推薦使用取模器,即PCtoLCD2002。至於Arduino的IDE相信大家都有,也相信大家熟練掌握了Arduino的基礎知識。下面的 網盤鏈接是上面的兩個庫和PCtoLCD2002。
    鏈接:https://pan.baidu.com/s/1dhCfwkeFCrzhlmdCDi2vbw
    提取碼:8d7q
  • 硬件
    硬件自然需要一塊OLED板子,一小塊麪包板(可有可無),七根公-公杜邦線,(若沒有面包板需要七根公-母杜邦線),一塊Arduino(型號是UNO的)。
    重點區
    OK,說了那麼多廢話,安裝完上面的庫和軟件之後,我們就開始準備打印漢字吧!!
    首先是取模軟件的使用,取模軟件打開是這樣的:
    在這裏插入圖片描述
    上面的是可以調節字體,字號,加粗等等,以及每一個字佔的點陣大小,默認是16*16的。
    操作也是很簡單的:
    在這裏插入圖片描述
    在圖①位置處輸入漢字即可,將會在取模器上看見改字,在②處點擊生成字模,就會出現③處的矩陣,一般情況下,一個字用 一個數組表示,其次在④處有一個保存字模。 可以以txt的形式保存到本地。一般直接複製生成的漢字字模就好了。定義兩個數組分別保存“漢”和“字”,生成如下的數組,多餘的花括號自行去掉。如下:
static const unsigned char PROGMEM str1[] =
{0x00,0x00,0x27,0xF8,0x12,0x08,0x12,0x08,0x82,0x08,0x41,0x10,0x49,0x10,0x09,0x10,
0x10,0xA0,0x10,0xA0,0xE0,0x40,0x20,0x40,0x20,0xA0,0x21,0x10,0x22,0x08,0x0C,0x06};/*漢*/
static const unsigned char PROGMEM str2[] =
{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,0x00,0x40,0x00,0x80,
0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00};/*"字",1*/

之後使用兩個函數調用就好了,如下:

  //我測試的時候,有這麼幾個是可以顯示的,至於漢字顯示多的話就將字體設小。
  //21 10
  //37 10
  //53 10
  //69 10
  //85 10
  //101 10
  //60 30
  //76 30
  //92 30
display.drawBitmap(5, 10, str1, 16, 16,1); 
//5 10是x y的座標,str1是第一個漢字的點列矩陣,16*16是矩陣大小,1是模式。
display.drawBitmap(21, 10, str2, 16, 16,1); 
display.display();    

完整的代碼在文章末尾。
以上是代碼的核心區 。
其次是硬件的連接,原理圖如下:
在這裏插入圖片描述
該圖的OLED爲4管腳,本文用的是7管腳的,一般是6管腳和7管腳,6管腳默認CS接低電平,該圖用Fritzing繪製,沒有找到7管腳的OLED,大致原理看實物圖。
實物圖如下:
在這裏插入圖片描述
因此對應的管腳口代碼是:

#define OLED_RES  12
#define OLED_SDA 13
#define OLED_SCK   9
#define OLED_DC 10
#define OLED_CS 8

最後完整代碼:

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RES  12
#define OLED_SDA 13
#define OLED_SCK   9
#define OLED_DC 10
#define OLED_CS 8
Adafruit_SSD1306 display(OLED_SDA, OLED_SCK, OLED_DC, OLED_RES, OLED_CS);//定義一個display函數 類似於實例對象
//取16X16漢字字模 逐行式 順向高位在前
static const unsigned char PROGMEM str1[] =
{0x00,0x00,0x27,0xF8,0x12,0x08,0x12,0x08,0x82,0x08,0x41,0x10,0x49,0x10,0x09,0x10,
0x10,0xA0,0x10,0xA0,0xE0,0x40,0x20,0x40,0x20,0xA0,0x21,0x10,0x22,0x08,0x0C,0x06};/*漢*/
static const unsigned char PROGMEM str2[] =
{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,0x00,0x40,0x00,0x80,
0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00};/*"字",1*/
void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//開始啓動的語句
  display.setTextColor(WHITE);//開像素點發光
  display.clearDisplay();//清屏

  display.drawBitmap(5, 10, str1, 16, 16,1); 
  display.drawBitmap(21, 10, str2, 16, 16,1);
  display.display();         
}
void loop() 
{
  
}

最後的顯示實物圖如下:
在這裏插入圖片描述
到此就該說再見了,內容也就這麼多,有問題歡迎評論,本文僅供學習,只是提供一個思路 ,由於能力有限,文章難免有錯誤,歡迎在文章下面評論,一起討論,一起學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章