上篇中我們已經使用驅動庫在OLED屏上顯示出英文字符,除去數(shù)字、字母、符號等,OLED還能顯示漢字、圖片及任意圖形。本篇介紹取模軟件的使用,教大家如何在OLED屏上顯示漢字。
1. 字模顯示原理及取模軟件的使用
我們使用的OLED屏是由方形的發(fā)光點陣列組成的,分辨率為128x64。英文和數(shù)字最小可用8x8像素,漢字最小顯示像素為16x16,通常為了顯示效果,英文和數(shù)字通常使用8x16像素表示。要顯示需要的字符只需對應點亮像素區(qū)域中對應的發(fā)光點即可。

字模顯示
字模一般都是通過取模軟件生成的,接下來介紹「PCtoLCD」取模軟件的使用:
1. Windows系統(tǒng)下雙擊啟動軟件,點擊「模式」,選擇「字符模式」,通常默認就是字符模式。

字符模式
2. 點擊「選項」進行字模配置。通常字模配置要根據(jù)程序驅動方式來選擇,本篇中我們選擇陰碼、逐行式、順向,其他選項如下圖所示。

選項配置
3. 輸入漢字。點擊生成字模或者保存字模,就會得到對應的點陣數(shù)據(jù)。

生成字模
2. 實驗材料
- Uno R3開發(fā)板
- 配套USB數(shù)據(jù)線
- 面包板及配套連接線
- OLED顯示屏
3. 實驗步驟
1. 根據(jù)原理圖搭建電路圖。
IIC接口只需要兩根線。OLED屏的VCC和GND分別連接開發(fā)板的3.3V和GND,OLED屏的SDA和SCL分別連接開發(fā)板A4和A5。
實驗原理圖如下圖所示:

電路連接圖
實物連接圖如下圖所示:

實物連接圖
2. 新建sketch,拷貝如下代碼替換自動生成的代碼并進行保存。
/*
OLED顯示漢字
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
//取16X16漢字字模 逐行式 順向高位在前
static const unsigned char PROGMEM str1[] =
{
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x3F, 0xF8, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08,
0x21, 0x08, 0x21, 0x08, 0x3F, 0xF8, 0x21, 0x08, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00
};/*"中",0*/
static const unsigned char PROGMEM str2[] =
{
0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x08, 0x20, 0x08, 0x20,
0x04, 0x40, 0x02, 0x80, 0x01, 0x00, 0x02, 0x80, 0x04, 0x40, 0x08, 0x20, 0x30, 0x18, 0xC0, 0x06
};/*"文",1*/
static const unsigned char PROGMEM str3[] =
{
0x00, 0x00, 0x1F, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0,
0x04, 0x40, 0x44, 0x44, 0x24, 0x44, 0x14, 0x48, 0x14, 0x50, 0x04, 0x40, 0xFF, 0xFE, 0x00, 0x00
};/*"顯",2*/
static const unsigned char PROGMEM str4[] =
{
0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x01, 0x00,
0x01, 0x00, 0x11, 0x10, 0x11, 0x08, 0x21, 0x04, 0x41, 0x02, 0x81, 0x02, 0x05, 0x00, 0x02, 0x00
};/*"示",3*/
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);//開像素點發(fā)光
display.clearDisplay();//清屏
display.setTextSize(1); //設置字體大小
display.setCursor(35, 5);//設置顯示位置
display.println("-TonyCode-");//輸出字符
display.drawBitmap(32, 32, str1, 16, 16, 1); //畫出字符對應點陣數(shù)據(jù)
display.drawBitmap(48, 32, str2, 16, 16, 1); //畫出字符對應點陣數(shù)據(jù)
display.drawBitmap(64, 32, str3, 16, 16, 1); //畫出字符對應點陣數(shù)據(jù)
display.drawBitmap(80, 32, str4, 16, 16, 1); //畫出字符對應點陣數(shù)據(jù)
display.display();//開顯示
}
void loop() {
}
3. 連接開發(fā)板,設置好對應端口號和開發(fā)板類型,進行程序下載。

程序下載
4. 實驗現(xiàn)象
OLED顯示出對應中文。

1616字模
5. 實驗分析
程序中我們使用了圖像庫「Adafruit_GFX」中的drawBitmap()函數(shù),函數(shù)參數(shù)分別輸入了要顯示的坐標,字符數(shù)據(jù)源,字符的寬高,最后參數(shù)由于我們的OLED是單色的,默認為1。
我們可以選擇不同的字體,也可以使用不同像素獲取不同大小的字符,如下圖顯示的是32x32像素的漢字,注意drawBitmap()函數(shù)中對應字符寬高需要對應。

3232字模