0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

聚沃科技 2024-06-22 09:59 次阅读
wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

22.1实验内容

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

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

22.2实验原理

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

wKgaomZ2L02ACCtDAACHwKo-mE4970.png

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

wKgZomZ2L06ACwlGAAH46UEmfLQ851.png

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

wKgaomZ2L02AEga3AABQ2HiSAXE511.png

22.3硬件设计

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

wKgZomZ2L02AGZCvAAC-wsej3Hk092.pngwKgaomZ2L02AYyaiAADdp5teGmY672.png

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.2OLED初始化函数

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.3OLED显示图片函数

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 /* 设置页面寻址模式的页面起始地址(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 if(i*x_res+n {
bsp_oled_write_byte(pbuff[i*x_res+n],OLED_DATA);
}else{
break;
}
}
}
}

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

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

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

  • 使用取模工具进行取模

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

wKgZomZ2L02AD2x6AAA5KqtKsf4646.png

选择图片模式。

wKgaomZ2L02AYri2AAB4SgUNmsM326.png

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

wKgaomZ2L06AD69XAAMvhExUKa8220.png

最后点击生成字模。

wKgZomZ2L06AGp8nAAb2bzHXNAg255.png

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

wKgZomZ2L06AOgNmAADEha-Phdk086.png

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

22.4.4字符串显示函数

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

C
void bsp_oled_showstring(uint8_t x, uint8_t y, uint8_t *ch, oled_font size)
{
uint8_t j=0;

while(ch[j]!='\0'){
bsp_oled_showchar(x,y,ch[j],size);
x += 8;
if(x>120){
x = 0;
y += 2;
}
j++;
}
}

22.5实验结果

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

wKgZomZ2L0-ASt4_AAcsxFVoS28708.png


wKgaomZ2L06AbdyeAAZc6ch3cyI764.pngwKgaomZ2L06AQ69JAAZnxnC5AL0622.png

教程GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OLED
    +关注

    关注

    119

    文章

    6171

    浏览量

    223662
  • 显示
    +关注

    关注

    0

    文章

    433

    浏览量

    45099
  • IIC
    IIC
    +关注

    关注

    11

    文章

    298

    浏览量

    38240
  • 开发板
    +关注

    关注

    25

    文章

    4895

    浏览量

    97031
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24100
收藏 人收藏

    评论

    相关推荐

    GD32F303固件库开发(14)----IIC之配置OLED

    本章配置GD32F303使用IIC进行驱动SSD1306的12864OLED
    的头像 发表于 07-26 08:55 3508次阅读
    <b class='flag-5'>GD32F303</b>固件库<b class='flag-5'>开发</b>(14)----<b class='flag-5'>IIC</b>之配置<b class='flag-5'>OLED</b>

    GD32F303】星空介绍

    一、开发板介绍星空GD开发板是由旗点科技推出的一款GD32开发板,板载
    发表于 09-11 17:55

    【星空GD32F303开发板试用体验】开箱+环境搭建

    https://bbs.elecfans.com/jishu_2179209_1_1.html感谢 发烧友学院以及广州旗点智能科技有限公司为我和孩子提供此产品星空gd32F303开发板。收到了星空
    发表于 11-02 15:36

    迅为iMX6ULL开发板使用手册资料下载

    按键例程第十三章 GPT定时器延时例程第十四章 串口通信例程第十五章 串口格式化函数例程第十六章 LCD屏幕显示例程第十七章 SRTC实时时钟例程第十八章 I2C操作第十九章 电容触摸实验第二十章 屏幕背光调节例程
    发表于 12-02 14:13

    星空GD32F303开发板的相关资料下载

    一、开发板介绍星空GD开发板是由旗点科技推出的一款GD32开发板,板载
    发表于 12-10 08:27

    第二十二 同步时序逻辑电路的分析方法

    第二十二 同步时序逻辑电路的分析方法 内容提要7.1 概述一、时序电路的定义二、电路构成三、分类:1 同步2 异
    发表于 03-30 16:26 5119次阅读
    <b class='flag-5'>第二十二</b><b class='flag-5'>讲</b> 同步时序逻辑电路的分析方法

    模拟电路网络课件 第二十二节:功率放大电路的一般问题

    模拟电路网络课件 第二十二节:功率放大电路的一般问题 5.1 功率放大电路的一般问题 一、功率放大电路的定义
    发表于 09-17 11:05 805次阅读

    STM32CUBEMX开发GD32F303(14)----IIC之配置OLED

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。
    的头像 发表于 07-26 13:52 1877次阅读
    STM32CUBEMX<b class='flag-5'>开发</b><b class='flag-5'>GD32F303</b>(14)----<b class='flag-5'>IIC</b>之配置<b class='flag-5'>OLED</b>

    GD32F303固件库开发

    的可以加群申请:615061293 。 GD32F303固件库开发(1)----前期准备与烧录 使用GDLINK、jlink、串口下载程序到GD芯片。 [https://blog.csdn.net
    的头像 发表于 07-27 09:27 1081次阅读
    <b class='flag-5'>GD32F303</b>固件库<b class='flag-5'>开发</b>

    GD32F303红枫开发板使用手册第二 GPIO-流水灯实验

    GD32F303系列MCU最多可支持 112 个通用I/O 引脚(GPIO),分别为 PA0 ~ PA15, PB0 ~ PB15, PC0 ~ PC15,PD0 ~ PD15, PE0
    的头像 发表于 05-29 10:02 1428次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】<b class='flag-5'>第二</b><b class='flag-5'>讲</b> GPIO-流水灯<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册】第五 FMC-片内Flash擦写读实验

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字节空间内, CPU执行指令零等待,具有相同主频下最快的代码执行效率。FMC也
    的头像 发表于 06-02 10:05 673次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第五<b class='flag-5'>讲</b> FMC-片内Flash擦写读<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册】第十六 USART-DMA串口收发实验

    在前面ADC章节中,我们介绍了DMA的工作原理,这里就不多做介绍。从GD32F303用户手册中可以查到,各串口的TX和RX分别对应DMA的不同通道,比如USART0的TX对应DMA0的通道3,而RX对应DMA0的通道4。
    的头像 发表于 06-15 09:54 923次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第十六<b class='flag-5'>讲</b> USART-DMA串口收发<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册第二十 SPI-SPI NAND FLASH读写实验

    通过本实验主要学习以下内容: •SPI通信协议,参考19.2.1东方红开发板使用手册GD32F303 SPI操作方式,参考19.2.2东方红
    的头像 发表于 06-20 09:50 722次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】<b class='flag-5'>第二十</b><b class='flag-5'>讲</b> SPI-SPI NAND FLASH读写<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册第二十一讲 I2C-EEPROM读写实验

    21.1 实验内容 通过本实验主要学习以下内容: •AT24C16 EEPROM的工作原理; •IIC模块原理以及IIC驱动原理。
    的头像 发表于 06-21 10:23 698次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】<b class='flag-5'>第二十</b>一讲  I2C-EEPROM读写<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册第二十 USB-虚拟键盘实验

    ,传输速度也很快,这些特性使支持USB接口的电子设备更易用、更大众化。GD32F303系列MCU集成了USB2.0全速设备USBD模块,可以满足作为USB设备与主机
    的头像 发表于 06-27 09:42 669次阅读
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>红枫</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】<b class='flag-5'>第二十</b>七<b class='flag-5'>讲</b>  USB-虚拟键盘<b class='flag-5'>实验</b>