【GD32F303红枫派使用手册】第二十二节 IIC-IIC OLED显示实验

22.1 实验内容

通过本实验主要学习以下内容:

  • OLED驱动原理
  • IIC驱动OLED显示操作

22.2 实验原理

OLED模块的驱动芯片为SSD1306,其显存大小总共为 128*64bit 大小,SSD1306 将这些显存分为了 8 页,其对应关系如下所示:

SSD1306 的命令比较多,这里我们仅介绍几个比较常用的命令,这些命令如下所示:

我们再来介绍一下 OLED 模块的初始化过程,SSD1306 的典型初始化框图如下图:

22.3 硬件设计

OLED电路如下所示,该OLED驱动使用PB10和PB11引脚,本例程采用IIC的驱动方式。

 

22.4 代码解析

22.4.1 主函数

主函数代码如下所示,调用bsp_oled_init进行OLED初始化,之后循环显示图片/字符串以及数字。

C
int main(void)
{delay_init();                                                                                                                                                                                                                        /* 延迟函数初始化 */BOARD_UART.uart_mode_tx=MODE_DMA;                                                                                                                                        /* 配置串口为DMA模式 */bsp_uart_init(&BOARD_UART);                                                                                                                                                          /* 初始化串口 */printf("Start OLED display demo! \r\n");                                                                                                        /* 显示启动OLED显示实验 */bsp_oled_init();                                                                                                                                                                                                        /* OLED初始化 */while (1){bsp_oled_clear(0);                                                                                                                                                                                /* 清除显示 */bsp_oled_logo(0,0,128,32,gImage_juwo2);                                                                                                /* 显示聚沃logo*/delay_ms(1000);                                                                                                                                                                                                /* 延迟1000ms间隔 */bsp_oled_clear(0);                                                                                                                                                                                /* 清除显示 */bsp_oled_logo(20,0,86,64,gImage_gd_logo);                                                                                        /* 显示GD logo*/delay_ms(1000);                                                                                                                                                                                                /* 延迟1000ms间隔 */bsp_oled_clear(0);                                                                                                                                                                                /* 清除显示 */bsp_oled_showstring(20,0,(uint8_t *)"ju wo ke ji",FONT_8_16); /* 显示聚沃科技字符串 */bsp_oled_shownum(30,3, 1234,4,FONT_8_16);                                                                                        /* 显示数字 */delay_ms(1000);                                                                                                                                                                                                /* 延迟1000ms间隔 */bsp_oled_clear(0);                                                                                                                                                                                /* 清除显示 */}
}

 

22.4.2 OLED初始化函数

OLED初始化函数如下,通过该函数可完成对外部OLED模块初始化。

C
void bsp_oled_init(void)
{bsp_i2c_config();                                   /* IIC接口初始化 */bsp_oled_write_byte(0xAE,OLED_CMD);                 /* 关闭oled 显示 */bsp_oled_write_byte(0x81,OLED_CMD);                 /* 设置对比度控制寄存器 */bsp_oled_write_byte(BRIGHTNESS,OLED_CMD);           /* 设置对比度, 0x00-0xff */bsp_oled_write_byte(0xA0,OLED_CMD);                 /* 设置seg/row映射,row地址127映射到seg0 */bsp_oled_write_byte(0xC0,OLED_CMD);                 /* 设置com/row扫描方向,从com[n-1]扫描到com0 */bsp_oled_write_byte(0xD5,OLED_CMD);                 /* 设置显示时钟分频比/振荡器频率 */bsp_oled_write_byte(0x80,OLED_CMD);                 /* 分频比为1,使用默认的内部时钟*/bsp_oled_write_byte(0xA8,OLED_CMD);                 /* 设置多路复用比率, 0x0f-0x3f */bsp_oled_write_byte(0x3F,OLED_CMD);                 /* 1/64 占空比 */bsp_oled_write_byte(0xD3,OLED_CMD);                 /* 通过com设置0d~63d的垂直偏移 */bsp_oled_write_byte(0x00,OLED_CMD);                 /* 不偏移 */bsp_oled_write_byte(0xD9,OLED_CMD);                 /* 设置预充电时间 */bsp_oled_write_byte(0xF1,OLED_CMD);                 /* 将预充电设置为15个时钟,将放电设置为1个时钟 */bsp_oled_write_byte(0xDA,OLED_CMD);                 /* 设置com引脚硬件配置 */bsp_oled_write_byte(0x12,OLED_CMD);                 /* 顺序com引脚配置和禁用com左/右重映射 */bsp_oled_write_byte(0xDB,OLED_CMD);                 /* 调整Vcom调节器输出 */bsp_oled_write_byte(0x30,OLED_CMD);                 /* 设置 Vcom 为 0.83Vcc */bsp_oled_write_byte(0x20,OLED_CMD);                 /* 设置存储器寻址模式, 0x00-0x02 */bsp_oled_write_byte(0x02,OLED_CMD);                 /* 页面寻址模式 */bsp_oled_write_byte(0x8D,OLED_CMD);                 /* 电荷泵设置 */bsp_oled_write_byte(0x14,OLED_CMD);                 /* 使能电荷泵*/bsp_oled_write_byte(0xA4,OLED_CMD);                 /* 禁用整个显示, 0xA4 or 0xA5 */bsp_oled_write_byte(0xA6,OLED_CMD);                 /* 设置正常显示,0为OFF显示,1为ON显示*/bsp_oled_write_byte(0xAF,OLED_CMD);                 /* 正常模式或睡眠模式, 0xAF or 0xAE */bsp_oled_clear(0);
}

 

22.4.3 OLED显示图片函数

OLED显示图片函数如下,其中形参说明如下:x为图片起始地址的x坐标,y为图片起始位置的y坐标,x_res为图片分辨率的x轴分辨率,y_res为分辨率的y轴分辨率,比如图片为128*32显示,则x_res为128,y_res为32,pbuff为图片数组的指针。

C
void bsp_oled_logo(uint8_t x, uint8_t y, uint8_t x_res, uint8_t y_res, uint8_t *pbuff)
{uint8_t i,n;uint8_t y_num;uint16_t pixel;pixel = x_res*y_res;if(y_res%8>0){y_num = y_res/8 +1;}else{y_num = y_res/8;}/* 显示log */for(i=0;i<y_num;i++){/* 设置页面寻址模式的页面起始地址(B0h~B7h) */bsp_oled_write_byte (0xB0+i,OLED_CMD);/* 为页面寻址模式设置低四位列起始地址(00h~0Fh) */bsp_oled_write_byte (0x00,OLED_CMD);/* 为页面寻址模式设置高四位列起始地址(10h~1Fh) */bsp_oled_write_byte (0x10,OLED_CMD);/* 设置坐标 */bsp_oled_set_pos(x,y+i);/* l传输图片数据 */for(n=0;n<x_res;n++){if(i*x_res+n<pixel){bsp_oled_write_byte(pbuff[i*x_res+n],OLED_DATA);}else{break;}}}
}

 

在图片显示的应用中需要对图片进行取模,开发板配套资料中有取模软件以及使用说明,本文档中简要介绍取模方法:

  • 调整图片为合适分辨率和格式

将图片调整到合适分辨率,如果分辨率比较大的话,可以使用PS等工具,调整到128*64分辨率以内,格式的话建议调整为bmp格式文件。

  • 使用取模工具进行取模

取模可使用资料中带的以下工具。

选择图片模式。

点击文件,打开要取模的图片,点击选项,进行设置。

最后点击生成字模。

将生成的字模复制到代码的数组中。

另外也可以对汉字和英文进行取模,使用方法类似,可以参考资料中的说明。

22.4.4 字符串显示函数

字符串显示函数如下所示,通过该函数可在任意起始地址显示字符串。

C
void bsp_oled_logo(uint8_t x, uint8_t y, uint8_t x_res, uint8_t y_res, uint8_t *pbuff)
{uint8_t i,n;uint8_t y_num;uint16_t pixel;pixel = x_res*y_res;if(y_res%8>0){y_num = y_res/8 +1;}else{y_num = y_res/8;}/* 显示log */for(i=0;i<y_num;i++){/* 设置页面寻址模式的页面起始地址(B0h~B7h) */bsp_oled_write_byte (0xB0+i,OLED_CMD);/* 为页面寻址模式设置低四位列起始地址(00h~0Fh) */bsp_oled_write_byte (0x00,OLED_CMD);/* 为页面寻址模式设置高四位列起始地址(10h~1Fh) */bsp_oled_write_byte (0x10,OLED_CMD);/* 设置坐标 */bsp_oled_set_pos(x,y+i);/* l传输图片数据 */for(n=0;n<x_res;n++){if(i*x_res+n<pixel){bsp_oled_write_byte(pbuff[i*x_res+n],OLED_DATA);}else{break;}}}
}

 

22.5 实验结果

将本例程下载到红枫派开发板中,并将H10跳线帽加上,上电运行后将会看到OLED屏上循环显示聚沃科技logo、GD Logo、字符串以及数字。

由聚沃科技原创,来源于【红枫派开发板】第二十二讲 IIC-IIC OLED显示实验 - 苏州聚沃电子科技有限公司 (gd32bbs.com) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/357277.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 下载与安装以及配置

安装yum工具 yum install -y yum-ulits配置yum源 阿里云源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Docker 17.03后为两个版本&#xff1a; 社区版&#xff08;Community Edition&#xff0c;缩写为 CE&#x…

基于深度学习的图像识别技术与应用是如何?

基于深度学习的图像识别技术与应用在当今社会中扮演着越来越重要的角色。以下是对该技术与应用的详细解析&#xff1a; 一、技术原理 深度学习是一种模拟人脑处理和解析数据的方式的技术和方法论。在图像识别领域&#xff0c;深度学习主要通过深度神经网络&#xff08;如卷积…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压&#xff0c;创…

内容安全复习 8 - 视觉内容伪造与检测

文章目录 研究背景内容伪造方法虚假人脸生成人脸替换属性编辑表情重演跨模态人脸编辑 伪造检测方法眨眼检测交互式人脸活体检测一些了解方法挑战 研究背景 图像内容篡改造成新闻报道的偏颇易导致社会和公共秩序的不安&#xff0c;对公共安全产生不良影响。 造成的影响&#x…

JVM专题六:JVM的内存模型

前面我们通过Java是如何编译、JVM的类加载机制、JVM类加载器与双亲委派机制等内容了解到了如何从我们编写的一个.Java 文件最终加载到JVM里的&#xff0c;今天我们就来剖析一下这个Java的‘中介平台’JVM里面到底长成啥样。 JVM的内存区域划分 Java虚拟机&#xff08;JVM&…

MySQL 高级 - 第十二章 | 数据库的设计规范

目录 第十二章 数据库的设计规范12.1 为什么需要数据库设计12.2 范式12.2.1 范式简介12.2.2 范式都包括哪些12.2.3 键和相关属性的概念12.2.4 第一范式&#xff08;1st NF&#xff09;12.2.5 第二范式&#xff08;2nd NF&#xff09;12.2.6 第三范式&#xff08;3rd NF&#xf…

【鸿蒙 HarmonyOS】尺寸设置:size/layoutWeight/constraintSize

一、背景 常见尺寸&#xff1a;width&#xff08;宽度&#xff09;、height&#xff08;高度&#xff09;、padding&#xff08;内边距&#xff09;、margin&#xff08;外边距&#xff09; 主要整理下size&#xff08;设置高宽尺寸&#xff09;、layoutWeight&#xff08;对…

Linux之旅: 基础知识点的终极指南

文章目录 1、Linux的目录结构2、ls命令3、管理文件和目录4、linux命令使用细节和技巧5、权限管理基本命令6、搜索命令7、管道符与重定向8、压缩和解压命令9、用户及vim编辑器10、用户和用户组管理一、Linux系统用户账号的基本管理二、Linux系统用户组的管理 1、Linux的目录结构…

RedHat9 | Web服务配置与管理(Apache)

一、实验环境 1、Apache服务介绍 Apache服务&#xff0c;也称为Apache HTTP Server&#xff0c;是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器&#xff0c;经过多次修改和发展&#xff0c;逐渐成为世界上最流行的Web服务器软件之一。…

2024年6月大众点评成都餐饮店铺POI分析22万家

2024年6月大众点评成都餐饮店铺POI共有221002家 店铺POI点位示例&#xff1a; 店铺id CACuqlcUQApLA7Ki 店铺名称 峨眉山豆腐脑(百吉街店) 十分制服务评分 7.3 十分制环境评分 7.5 十分制划算评分 7.1 人均价格 18 评价数量 38 店铺地址 百吉街86号1层 大类 美食 中类…

css布局之flex应用

/*父 100*/.parent-div {/* 这里添加你想要的属性 */display: flex;flex-direction: row; //行justify-content: space-between; //左右对齐align-items: center;flex-wrap: wrap; //换行}/*中 90 10 */.middle-div {/* 这里添加你想要的属性 */display: flex;flex-direction:…

idea2022激活

下载激活脚本 解压后&#xff0c;打开文件夹如下&#xff1a;ja-netfilter.jar 为激活补丁&#xff1a; 复制补丁所在的整个文件夹到硬盘某个位置 将 ja-netfilter补丁所在的整个文件夹移动到电脑上某个位置&#xff0c;我是放到了 D 盘下&#xff1a; &#xff08;路径中不…

Docker配置阿里云加速器(2续)

默认情况下镜像是从docker hub下载&#xff0c;由于docker hub服务器在国外&#xff0c;由于网络原因镜像下载速度较慢&#xff0c;一般会配置镜像加速进行下载 国内镜像加速器有阿里云、网易云、中科大等&#xff0c;本章配置阿里云镜像加速器&#xff0c;速度较快 镜像加速源…

【鸿蒙】 模拟器运⾏

【鸿蒙】HUAWEI DevEco Studio安装-CSDN博客 【鸿蒙】创建第⼀个鸿蒙项⽬-CSDN博客 点击 Tools 菜单下的 Device Manager 点击 Install &#xff0c;安装模拟器 下载模拟器相关的SDK&#xff0c;点击 Finish 选择安装⽬录&#xff0c;点击 New Emulator 选择设备类型&#…

FlinkCDC sink paimon 暂不支持exactly-once写入,而通过 幂等写

幂等写入&#xff1a; 一个幂等操作无论执行多少次都会返回同样的结果。例如&#xff0c;重复的向hashmap中插入同样的key-value对就是幂等操作&#xff0c;因为头一次插入操作之后所有的插入操作都不会改变这个hashmap&#xff0c;因为hashmap已经包含这个key-value对了。另一…

Linux 文件权限

优质博文&#xff1a;IT-BLOG-CN 一、使用者与群组的概念 【1】在Linux里面&#xff0c;任何一个文件都具有[User,Group及Other]三种身份的个别权限&#xff1a;不过需要注意的是root用户&#xff0c;具有所有权限。 ✔ User(文件拥有者)&#xff1a;只有文件拥有者&#xf…

【yolov8语义分割】跑通:下载yolov8+预测图片+预测视频

1、下载yolov8到autodl上 git clone https://github.com/ultralytics/ultralytics 下载到Yolov8文件夹下面 另外&#xff1a;现在yolov8支持像包一样导入&#xff0c;pip install就可以 2、yolov8 语义分割文档 看官方文档&#xff1a;主页 -Ultralytics YOLO 文档 还能切…

Minillama3->sft训练

GitHub - leeguandong/MiniLLaMA3: llama3的迷你版本,包括了数据,tokenizer,pt的全流程llama3的迷你版本,包括了数据,tokenizer,pt的全流程. Contribute to leeguandong/MiniLLaMA3 development by creating an account on GitHub.https://github.com/leeguandong/MiniLL…

Android招聘市场技术要求越来越高,从事三年开发是否应该考虑转行?

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训&#xff0c;学会这小块知识就能随便找到不错的工作了。 不过很显然现在远远不够了&#xff0c;拒绝无休止的CV&#xff0c;亲自去项目实战&#xff0c;读源码&#xff0c;研究原理吧&#xff01; 《Framework精编…

Apple - Cocoa Event Handling Guide

本文翻译整理自&#xff1a;Cocoa Event Handling Guide&#xff08; https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html#//apple_ref/doc/uid/10000060i 文章目录 一、导言本文件的组织另见 二、事件…