东芝开发板驱动OLED模块显示LOGO图片

前言
在之前的两篇评测文章:
介绍了系统SysTick实现精确延时,GPIO的输入输出使用,并实现了位带方式操作GPIO,大大简化了GPIO的输入输出控制。有了精确延时函数+GPIO控制,那么就可以使用通用GPIO模拟的方式,来驱动各种接口的显示器件传感器等。本文以通用GPIO模拟IIC协议,来驱动0.96寸OLED模块为例,来实现OLED显示字符、LOGO图片等等。
OLED屏简介
对于显示屏,我想大家首先想到的是LCD液晶,而OLED显示屏属于新型显示器件,被称为“梦幻显示器”,相比于AMOLED具有反应速度较快、对比度更高、视角较广等特点。
优点
- 无需背光灯,可以做的更薄,厚度可以控制在1mm以内,而LCD屏幕厚度通常在3mm左右
- 面板自主发光,显示黑色几乎不耗电,可以自由弯曲,功耗低,视角广。
- 反应速度是LCD屏幕的千分之一,显示色彩更丰富,更亮,在白天户外也可以清晰的看到屏幕。
- 耐低温,可以在-40℃环境下正常显示内容。
缺点
- 相比LCD屏幕,OLED制造技术还不够成熟,量产率低、成本高
- 早期存在烧屏、红线等寿命较短的问题,但是经过不断改良和研发,现在的OLED屏幕已经相当成熟、稳定。
- 价格还是偏贵,以国产中景园的0.96寸单色OLED,价格在15RMB左右,而全彩的同尺寸OLED模块,价格在40RMB。
这次我使用的是这种0.96寸的OLED模块,驱动芯片是SSD1306,支持SPI、IIC、8080并口3种通信协议,显示颜色上有蓝色、白色、黄蓝黄色两种,其中黄蓝双色是指上面1/4是黄色,下面3/4是蓝色,并不是真正意义上的双色显示。我手上的这款是0.96寸IIC接口蓝色的OLED模块,只需要两根数据线和两根电源线就可以直接驱动,非常方便。

OLED的初始化
由于IIC协议的两根线,必须加上拉电阻才能之后使用,而模块本身已经添加了10K的上拉电阻,所以连接开发板时,只要选择任意两个GPIO即可,这里我使用的是SDA - PN2、SCL - PN4两个引脚,对应原理图中的CN7的3脚和1脚。由于我的这款OLED模块做工比较简单,没有带5v转3.3v的的转换芯片,所以只能使用3.3v来供电,不能直接使用5v供电,否则可以会烧坏模块,当然,如果你的模块已经带了5-3.3的芯片,那么可以直接使用5v供电。其中SCL引脚使用过程中始终为输出模式,而SDA引脚在写数据时配置为输出模式,在读数据时需要配置为输入模式。数据的输出和读取输入,这里使用了上一篇文章中介绍的位带操作方式实现的。
SCL和SDA的宏定义配置
#ifndef __OLED_IIC_H__
#define __OLED_IIC_H__
#include "bsp.h"
//SDA - PN2
//SCL - PN4
#define OLED_IIC_SDA_PORT GPIO_PORT_N
#define OLED_IIC_SCL_PORT GPIO_PORT_N
#define OLED_IIC_SDA_PIN GPIO_PORT_2
#define OLED_IIC_SCL_PIN GPIO_PORT_4
#define OLED_IIC_SCL_OUTPUT_FUN GPIO_PN4_OUTPUT
#define OLED_IIC_SDA_INPUT_FUN GPIO_PN2_INPUT
#define OLED_IIC_SDA_OUTPUT_FUN GPIO_PN2_OUTPUT
//配置输入输出模式
#define OLED_SDA_IN() gpio_func(&port, OLED_IIC_SDA_PORT, OLED_IIC_SDA_PIN, OLED_IIC_SDA_INPUT_FUN, GPIO_PIN_INPUT) //输入模式
#define OLED_SDA_OUT() gpio_func(&port, OLED_IIC_SDA_PORT, OLED_IIC_SDA_PIN, OLED_IIC_SDA_OUTPUT_FUN, GPIO_PIN_OUTPUT)
//位带方式操作IO
#define OLED_IIC_SCL PNout(4) //SCL
#define OLED_IIC_SDA PNout(2) //SDA
#define OLED_READ_SDA PNin(2) //输入SDA
#endif
IIC协议初始化
//初始化IIC
void OLED_IIC_Init(void)
{
port.p_pn_instance = TSB_PN; //PN时钟使能
gpio_init(&port, OLED_IIC_SDA_PORT);
gpio_init(&port, OLED_IIC_SCL_PORT);
gpio_func(&port, OLED_IIC_SDA_PORT, OLED_IIC_SDA_PIN, OLED_IIC_SDA_OUTPUT_FUN, GPIO_PIN_OUTPUT);
gpio_func(&port, OLED_IIC_SCL_PORT, OLED_IIC_SCL_PIN, OLED_IIC_SCL_OUTPUT_FUN, GPIO_PIN_OUTPUT);
OLED_IIC_SCL = 1;
OLED_IIC_SDA = 1;
}
限于文章篇幅,这里不贴出完整的底层驱动代码,可以到文末下载示例工程代码
显示BMP图片的函数:
//显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~8
void OLED_DrawBMP(u8 x0, u8 y0, u8 x1, u8 y1,const u8 BMPx[])
{
u16 j = 0;
u8 x, y;
if(y1 % 8 == 0) y = y1 / 8;
else y = y1 / 8 + 1;
for(y = y0; y < y1; y++)
{
OLED_Set_Pos(x0, y);
for(x = x0; x < x1; x++)
{
OLED_WriteData(BMPx[j++]);
}
}
}
开机LOGO的显示
void Display_LOGO(void)
{
u8 n;
OLED_DrawBMP(0, 0, 128, 8, TOSHIBA); //东芝LOGO全屏显示
OLED_DisString_F8X16(0, 3, "Starting...");
for( n = 5; n > 0; n--)
{
OLED_DisNumber_F8X16(12, 3, n); //启动倒计时
delay_ms(800);
}
OLED_Clear();//清屏
OLED_DrawBMP(0, 0, 128, 8, TT_M3HQ); //TT_M3HQ全屏显示
delay_ms(200);
OLED_Clear();//清屏
OLED_DrawBMP(0, 0, 128, 8, THUNDER); //中科创达LOGO全屏显示
delay_ms(200);
OLED_Clear();//清屏
OLED_DrawBMP(0, 0, 128, 8, MBB); //面包板社区LOGO全屏显示
delay_ms(800);
OLED_Clear();//清屏
OLED_DrawBMP(0, 0, 128, 2, BAR); //上1/4仿手机状态栏显示
}
BMP单色位图图片数据的取模
1.准备1张小于128*64像素的单色位图图片
即在图片详细信息中如下信息,颜色位深度为1,大小一般在1KB左右。

2.取模方式的配置
图片取模说明:阴码,列行式,逆向,点阵16*16,其中阴码、列行式、逆向,这几个配置要根据你的OLED驱动函数中的来修改,如果显示不正确,需要对应修改。

3.生成图片字模数据
点击生成字模数据,即可生成图片对应的C语言格式的字模数据。
几个BMP格式的LOGO图片
东芝半导体LOGO

中科创达LOGO

面包板社区LOGO

实际显示效果
显示东芝半导体LOGO

显示中科创达LOGO

显示面包板LOGO

仿手机状态栏

源码下载
- Github开源地址:https://github.com/whik/TT_M3HQ_OLED_Demo.git
- Gitee码云开源地址:https://gitee.com/whik/TT_M3HQ_OLED_Demo.git
- 直接下载:TT_M3HQ_OLED_Demo
推荐阅读
- 东芝MCU实现位带操作
- 使用系统定时器SysTick实现精确延时微秒和毫秒函数- 东芝半导体最新ARM开发板——TT_M3HQ开箱评测
- STM32F407外部晶体改为25M后检测不到芯片的解决办法
- 详解串行通信协议及其FPGA实现
- 玄铁910是个啥?是芯片吗?
- 国产处理器的逆袭机会——RISC-V
- 真正的RISC-V开发板——VEGA织女星开发板开箱评测
欢迎大家关注我的个人博客
或微信扫码关注我的公众号

东芝开发板驱动OLED模块显示LOGO图片的更多相关文章
- 迅为iTOP-4418/6818开发板-驱动-实现GPIO扩展
实现 GPIO 扩展,先弄清楚“复用”的概念,将调用这些 GPIO 的驱动去掉配置,重新编译,加到自己的驱动中,就可以实现扩展的 GPIO 的输入和输出.另外必须要先看文档“迅为iTOP-4418开发 ...
- RK30SDK开发板驱动分析(二):DDR频率配置
在内核配置界界面,我们可以很容易的配置DDR的频率,300M OR 600M, so easy! 那么它是如何起作用的呢? 回想 RK30SDK开发板驱动分析(一) 末尾提到MACHINE_START ...
- iTOP-4412开发板-LinuxC-继电器模块的测试例程
平台:iTOP-4412开发板 实现:继电器模块测试例程 继电器的 C 的测试程序,C 测试程序可以在 Android系统,Qt 系统以及最小 linux 系统上运行,文档以 Android 系统上测 ...
- [嵌入式开发板]iTOP-4412以模块的方式编译驱动
本文转自迅为:http://www.topeetboard.com 大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动.我们以内核里面蜂鸣器的 驱动为例来讲解. 1)首先 ...
- MicroPython之TPYBoard v102开发板控制OLED显示中文
转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 0x00前言 之前看到一篇文章是关于TPYBoardv102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近 ...
- MicroPython实例之TPYBoard开发板控制OLED显示中文
0x00 前言 之前看到一篇文章是关于TPYBoard v102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近利用空余时间搞定了这个实验,特此将实验过程及源码分享出来,方便以 ...
- 基于全志a33-vstar开发板的ap6210WiFi模块移植
可以去链接看更详细的,第一次用博客,这个编辑方式太不友好了. 文档:全志a33--系统移植--ap6210WiFi模块移?..链接:http://note.youdao.com/noteshare?i ...
- 使用FPGA开发板驱动VGA显示器
1. 本次使用的是cyclone4开发板,先看下原理图,因为右边的RGB应该是模拟信号量,但是本次例程只接了3根线,那就是说颜色只有8种. 2. 代码,输出信号有R,G,B三色,就是上图右边的,行同步 ...
- 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程
对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...
随机推荐
- Kafka use zkCli.sh to check topic offset on linux
> ./zkCli.sh -server zk1host:port,zk2host:port,zk3host:port >help ZooKeeper -server host:port ...
- 转:Java实现敏感词过滤
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- DP思想在斐波那契数列递归求解中的应用
斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativ ...
- 小白探究UE4网络系列(一)、UE4网络基础类分析
转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 捣鼓UE4也有两个多月了,从这儿开始,逐步探究UE4中经典的值复制,RPC两种同步方式.想要弄到其复制和调用的原 ...
- Linux编辑器vi使用方法详细介绍(转)
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...
- JVM内运行时数据区
JVM的基本区域: 类加载子系统 运行时数据区(内存区域) 执行引擎 运行时数据区域 方法区(Method Area) 类的所有字和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义.简单来 ...
- [TimLinux] docker CentOS7安装docker-ce最新版
1. 环境 $ lsb_release -a # 需要安装 redhat-lsb-core 包 LSB Version: :core-4.1-amd64:core-4.1-noarch Distrib ...
- python geohash算法逆地址编码原理初探
1.geohash有什么用途呢?这几天刚好有个测试任务是关于设备信息位置处理的,里面提及到geohash:抱着测试的警觉性,打算研读一下这个geohash到底是什么?Geohash 是一种地理编码系统 ...
- FPGA之驱动sdram控制兼容性移植实验
cb早在2012年就推出了VIP 视频开发板 V1.4 这套开发板是ep2的,摄像头是ov7670,虽然不如当前的vip20强大,但也算是其雏形. 在vip20后期,cb对sdram以及其他模块进行 ...
- Python3 类的继承小练习
1.打印并解释结果 class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print(Pa ...