故事背景
有一次做项目用到了OLED显示器,需要用它来显示汉字,网上找了很多的资料,用OLED显示英文或者数字比较方便,至于显示汉字也不是很难,只是网上的资料都太零散,而且有的代码运行不了,基于此写下本文,便于初学或者第一次用OLED的朋友少走弯路。本文不讲LCD的使用
预先准备
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
#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()
{
}
最后的显示实物图如下:
到此就该说再见了,内容也就这么多,有问题欢迎评论,本文仅供学习,只是提供一个思路 ,由于能力有限,文章难免有错误,欢迎在文章下面评论,一起讨论,一起学习。