Arduino提高篇02—OLED屏漢字顯示

上篇中我們已經使用驅動庫在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字模
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容