上篇中我们已经使用驱动库在OLED屏上显示出英文字符,除去数字、字母、符号等,OLED还能显示汉字、图片及任意图形。本篇介绍取模软件的使用,教大家如何在OLED屏上显示汉字。

1. 字模显示原理及取模软件的使用

我们使用的OLED屏是由方形的发光点阵列组成的,分辨率为128x64。英文和数字最小可用8x8像素,汉字最小显示像素为16x16,通常为了显示效果,英文和数字通常使用8x16像素表示。要显示需要的字符只需对应点亮像素区域中对应的发光点即可。

字模一般都是通过取模软件生成的,接下来介绍「PCtoLCD」取模软件的使用:

1. Windows系统下双击启动软件,点击「模式」,选择「字符模式」,通常默认就是字符模式。

2. 点击「选项」进行字模配置。通常字模配置要根据程序驱动方式来选择,本篇中我们选择阴码、逐行式、顺向,其他选项如下图所示。

3. 输入汉字。点击生成字模或者保存字模,就会得到对应的点阵数据。

2. 实验材料

  • Uno R3开发板
  • 配套USB数据线
  • 面包板及配套连接线
  • OLED显示屏

3. 实验步骤

1. 根据原理图搭建电路图。

IIC接口只需要两根线。OLED屏的VCC和GND分别连接开发板的3.3V和GND,OLED屏的SDA和SCL分别连接开发板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);//开像素点发光display.clearDisplay();//清屏display.setTextSize(1); //设置字体大小display.setCursor(35, 5);//设置显示位置display.println("-TonyCode-");//输出字符display.drawBitmap(32, 32, str1, 16, 16, 1); //画出字符对应点阵数据display.drawBitmap(48, 32, str2, 16, 16, 1); //画出字符对应点阵数据display.drawBitmap(64, 32, str3, 16, 16, 1); //画出字符对应点阵数据display.drawBitmap(80, 32, str4, 16, 16, 1); //画出字符对应点阵数据display.display();//开显示                }void loop() {}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

4. 实验现象

OLED显示出对应中文。

5. 实验分析

程序中我们使用了图像库「Adafruit_GFX」中的drawBitmap()函数,函数参数分别输入了要显示的坐标,字符数据源,字符的宽高,最后参数由于我们的OLED是单色的,默认为1。

我们可以选择不同的字体,也可以使用不同像素获取不同大小的字符,如下图显示的是32x32像素的汉字,注意drawBitmap()函数中对应字符宽高需要对应。

更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:

Arduino提高篇02—OLED屏汉字显示相关推荐

  1. fpga驱动oled iic显示代码_Arduino提高篇02—OLED屏汉字显示

    上篇中我们已经使用驱动库在OLED屏上显示出英文字符,除去数字.字母.符号等,OLED还能显示汉字.图片及任意图形.本篇介绍取模软件的使用,教大家如何在OLED屏上显示汉字. 1. 字模显示原理及取模 ...

  2. Arduino提高篇23—OLED电子时钟

    在前篇文章中,我们通过库函数驱动DS1302获取到时间数据并且通过串口输出,而串口只是方便调试,要制作电子时钟,我们需要使用显示模块,本篇结合OLED对时间数据进行展示. 1. 实验材料 Uno R3 ...

  3. Arduino提高篇24—摇杆调节时钟时间

    对于电子时钟而言,虽然我们可以在程序中对RTC芯片写入初始时间数据,但按键调时功能也是必不可少的,它可以让我们更加灵活的进行时间调节校准.本篇我们使用摇杆按键来调节时间数据,采用多级菜单的思路进行设计 ...

  4. Arduino 提高篇 1 —— 电子时钟

    一.实验器材 Arduino Uno R3开发板及扩展板 公对母.母对母杜邦线若干 面包板 0.96英寸 OLED显示屏 DS1302模块 二.实验步骤 Arduino DS1302 3.3V VCC ...

  5. oled屏无法显示问题

    oled屏无法显示时,请用万能表量下屏的电源脚.IIC脚,看下是不是3.3v.电压.电流不足会导致屏幕无法显示. 在开发项目时,屏的电源脚是通过线性稳压器(LDO)去控制的,在程序初始化时,打开LDO ...

  6. 0.96吋 OLED 12864 汉字 显示 优化

    辅助舍友做毕业设计中的显示部分,优化了OLED的汉字显示,简化了函数的调用方式,略有小得,留做记录.程序在最后面. 未经授权,不得转载!_(:з)∠)_ 前言 中景园的给的例程中的汉字显示函数调用方式 ...

  7. Arduino提高篇13—摇杆控制OLED移动显示

    很多经典的小游戏,例如贪吃蛇.俄罗斯方块等都是通过按键控制显示于屏幕,当摇杆遇上显示屏,我们可以尝试很多有意思的实验.本篇通过摇杆控制OLED上圆的移动. 1. 实验材料 Uno R3开发板 配套US ...

  8. Arduino提高篇04—U8g2库驱动OLED

    OLED显示屏的驱动库非常多,本篇介绍强大的U8g2库,通过使用U8g2库来驱动OLED屏. 1. U8g2库介绍 U8g2库是嵌入式设备单色图形库,支持非常多的嵌入式设备平台,如单片机.STM32. ...

  9. arduino nano 蓝牙_Arduino提高篇23—OLED电子时钟

    关注. 星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 在前篇文章中,我们通过库函数驱动DS1302获取到时间数据并且通过串口输出,而串口只是方便调试,要制作电子时钟,我们需 ...

最新文章

  1. 第10章 Python 数字图像处理(DIP) - 图像分割 基础知识 标准差分割法
  2. 只做两个龅牙门牙_孔子画像中的门牙格外突出,画师为何不给圣人开美颜?...
  3. ZJ-在线取色器的使用(RGB值转HSV值)
  4. 安泰测试新手教程-泰克数字示波器使用方法
  5. Virtualbox主机与虚拟机相互访问
  6. msp430中如何连续对位进行取反_【万泉河】论PLC编程中的高内聚与低耦合
  7. 【机器学习】【Apriori算法-1】Apriori算法原理详解 + 示例展示数学求解过程
  8. excel公式编辑器_动态提取符合多个条件的记录,公式躲远点
  9. 美团Robust热修复工具使用记录
  10. OKR使用经验 11-12双月
  11. 看完小区丰巢柜身上的字 我决定了
  12. 自动开关,每天写“日报......顺舟智能推动路灯“服务升级”
  13. 需求与商业模式创新-需求9-原型
  14. oracle中取月初,月末,季初,季末及年初,年末时间
  15. 转来的,激励激励自己
  16. 金色传说:SAP-ABAP-VK11/VK12/VK13保存时增强
  17. C# Spire简单实现导出word(去水印)
  18. 毕业生基本要素之计算机水平,2017非上海生源应届高校毕业生进沪就业评分办法公布!...
  19. 查看目标机的IP 地址
  20. 一些小方法诸如:交换值,排序,查找等等

热门文章

  1. 混合云的基本介绍,混合云主要有什么优缺点?
  2. 避坑:@Around与@Transactional混用导致事务无法回滚
  3. 阿里云国际版CDN的优势
  4. 友点 CMS V9.1 后台登录绕过 GetShell
  5. 史上最全面的python学生管理系统教程(二)
  6. Linux磁盘空间释放
  7. [BZOJ]1933: [Shoi2007]Bookcase 书柜的尺寸 DP
  8. 学习C语言的网站(中文的英文的都有)
  9. spring boot+Mybatis+mysql+atomikos+jta实现多数据源分布式事务
  10. 空字符串、NULL、空格串的区别