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,说了那么多废话,安装完上面的库和软件之后,我们就开始准备打印汉字吧!!
    首先是取模软件的使用,取模软件打开是这样的:
    Arduino使用OLED显示汉字——For初学者_第1张图片
    上面的是可以调节字体,字号,加粗等等,以及每一个字占的点阵大小,默认是16*16的。
    操作也是很简单的:
    Arduino使用OLED显示汉字——For初学者_第2张图片
    在图①位置处输入汉字即可,将会在取模器上看见改字,在②处点击生成字模,就会出现③处的矩阵,一般情况下,一个字用 一个数组表示,其次在④处有一个保存字模。 可以以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();    

完整的代码在文章末尾。
以上是代码的核心区 。
其次是硬件的连接,原理图如下:
Arduino使用OLED显示汉字——For初学者_第3张图片
该图的OLED为4管脚,本文用的是7管脚的,一般是6管脚和7管脚,6管脚默认CS接低电平,该图用Fritzing绘制,没有找到7管脚的OLED,大致原理看实物图。
实物图如下:
Arduino使用OLED显示汉字——For初学者_第4张图片
因此对应的管脚口代码是:

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

最后完整代码:

#include 
#include 
#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() 
{
  
}

最后的显示实物图如下:
Arduino使用OLED显示汉字——For初学者_第5张图片
到此就该说再见了,内容也就这么多,有问题欢迎评论,本文仅供学习,只是提供一个思路 ,由于能力有限,文章难免有错误,欢迎在文章下面评论,一起讨论,一起学习。

你可能感兴趣的:(Arduino,OLED)