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

最后的显示实物图如下:
在这里插入图片描述
到此就该说再见了,内容也就这么多,有问题欢迎评论,本文仅供学习,只是提供一个思路 ,由于能力有限,文章难免有错误,欢迎在文章下面评论,一起讨论,一起学习。

  • 35
    点赞
  • 196
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
根据提供的引用内容,可以看出这段代码是用于控制Arduino连接0.96寸OLED显示屏的程序。该程序使用了Adafruit_SSD1306库来控制OLED显示屏的初始化和显示内容。在函数`oled_play`中,根据传入的参数`s`的不同,显示不同的文字内容,比如"Forward"、"Backward"、"Turn left"、"Turn right"和"Stop"。\[1\] 然而,根据提供的引用内容,没有直接提到如何在OLED显示屏上显示中文字符。因此,需要进一步查找相关资料或者参考其他资源来实现在OLED显示屏上显示中文字符。 #### 引用[.reference_title] - *1* [Arduino使用0.96OLED显示运行小车状态(C语言函数传参调用)](https://blog.csdn.net/weixin_53863236/article/details/124725446)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [第二篇、基于Arduino uno,用oled0.96寸屏幕显示数字和字符——结果导向](https://blog.csdn.net/qq_55490300/article/details/130777356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值