Arduino提高篇02—OLED屏汉字显示
上篇中我们已经使用驱动库在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屏汉字显示相关推荐
- fpga驱动oled iic显示代码_Arduino提高篇02—OLED屏汉字显示
上篇中我们已经使用驱动库在OLED屏上显示出英文字符,除去数字.字母.符号等,OLED还能显示汉字.图片及任意图形.本篇介绍取模软件的使用,教大家如何在OLED屏上显示汉字. 1. 字模显示原理及取模 ...
- Arduino提高篇23—OLED电子时钟
在前篇文章中,我们通过库函数驱动DS1302获取到时间数据并且通过串口输出,而串口只是方便调试,要制作电子时钟,我们需要使用显示模块,本篇结合OLED对时间数据进行展示. 1. 实验材料 Uno R3 ...
- Arduino提高篇24—摇杆调节时钟时间
对于电子时钟而言,虽然我们可以在程序中对RTC芯片写入初始时间数据,但按键调时功能也是必不可少的,它可以让我们更加灵活的进行时间调节校准.本篇我们使用摇杆按键来调节时间数据,采用多级菜单的思路进行设计 ...
- Arduino 提高篇 1 —— 电子时钟
一.实验器材 Arduino Uno R3开发板及扩展板 公对母.母对母杜邦线若干 面包板 0.96英寸 OLED显示屏 DS1302模块 二.实验步骤 Arduino DS1302 3.3V VCC ...
- oled屏无法显示问题
oled屏无法显示时,请用万能表量下屏的电源脚.IIC脚,看下是不是3.3v.电压.电流不足会导致屏幕无法显示. 在开发项目时,屏的电源脚是通过线性稳压器(LDO)去控制的,在程序初始化时,打开LDO ...
- 0.96吋 OLED 12864 汉字 显示 优化
辅助舍友做毕业设计中的显示部分,优化了OLED的汉字显示,简化了函数的调用方式,略有小得,留做记录.程序在最后面. 未经授权,不得转载!_(:з)∠)_ 前言 中景园的给的例程中的汉字显示函数调用方式 ...
- Arduino提高篇13—摇杆控制OLED移动显示
很多经典的小游戏,例如贪吃蛇.俄罗斯方块等都是通过按键控制显示于屏幕,当摇杆遇上显示屏,我们可以尝试很多有意思的实验.本篇通过摇杆控制OLED上圆的移动. 1. 实验材料 Uno R3开发板 配套US ...
- Arduino提高篇04—U8g2库驱动OLED
OLED显示屏的驱动库非常多,本篇介绍强大的U8g2库,通过使用U8g2库来驱动OLED屏. 1. U8g2库介绍 U8g2库是嵌入式设备单色图形库,支持非常多的嵌入式设备平台,如单片机.STM32. ...
- arduino nano 蓝牙_Arduino提高篇23—OLED电子时钟
关注. 星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 在前篇文章中,我们通过库函数驱动DS1302获取到时间数据并且通过串口输出,而串口只是方便调试,要制作电子时钟,我们需 ...
最新文章
- 第10章 Python 数字图像处理(DIP) - 图像分割 基础知识 标准差分割法
- 只做两个龅牙门牙_孔子画像中的门牙格外突出,画师为何不给圣人开美颜?...
- ZJ-在线取色器的使用(RGB值转HSV值)
- 安泰测试新手教程-泰克数字示波器使用方法
- Virtualbox主机与虚拟机相互访问
- msp430中如何连续对位进行取反_【万泉河】论PLC编程中的高内聚与低耦合
- 【机器学习】【Apriori算法-1】Apriori算法原理详解 + 示例展示数学求解过程
- excel公式编辑器_动态提取符合多个条件的记录,公式躲远点
- 美团Robust热修复工具使用记录
- OKR使用经验 11-12双月
- 看完小区丰巢柜身上的字 我决定了
- 自动开关,每天写“日报......顺舟智能推动路灯“服务升级”
- 需求与商业模式创新-需求9-原型
- oracle中取月初,月末,季初,季末及年初,年末时间
- 转来的,激励激励自己
- 金色传说:SAP-ABAP-VK11/VK12/VK13保存时增强
- C# Spire简单实现导出word(去水印)
- 毕业生基本要素之计算机水平,2017非上海生源应届高校毕业生进沪就业评分办法公布!...
- 查看目标机的IP 地址
- 一些小方法诸如:交换值,排序,查找等等
热门文章
- 混合云的基本介绍,混合云主要有什么优缺点?
- 避坑:@Around与@Transactional混用导致事务无法回滚
- 阿里云国际版CDN的优势
- 友点 CMS V9.1 后台登录绕过 GetShell
- 史上最全面的python学生管理系统教程(二)
- Linux磁盘空间释放
- [BZOJ]1933: [Shoi2007]Bookcase 书柜的尺寸 DP
- 学习C语言的网站(中文的英文的都有)
- spring boot+Mybatis+mysql+atomikos+jta实现多数据源分布式事务
- 空字符串、NULL、空格串的区别