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

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动

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

3天内不再提示

【Renesas RA6M4开发板之I2C(模拟)驱动ssd1306 OLED屏幕】

RT-Thread单片机学习 来源:VOR234 作者:VOR234 2023-01-11 09:34 次阅读

1.0 OLED

在这里插入图片描述

此图转载优信电子

有机发光二极管(OrganicLight-Emitting Diode,OLED),又称为有机电激光显示、有机发光半导体(OrganicElectroluminesence Display,OLED),是指有机半导体材料和发光材料在电场驱动下,通过载流子注入和复合导致发光的现象。本篇通过0.96寸OLED包采用I2C软串口示例程序演示。

1.1产品特性:

OLED(Organic Light-Emitting Diode):有机发光二极管又称为有机电激光显示,OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,功耗低。OLED由于同时具备自发光、不需背光源(只上电是不会亮的,驱动程序和接线正确才会点亮)、对比度高、厚度薄、视角广、反应速度快、可用于挠曲面板、使用温度范围广、结构及制程简单等优异之特性。最先接触的12864屏都是LCD的,需要背光,功耗较高,而OLED的功耗低,更加适合小系统;由于两者发光材料的不同,在不同的环境中,OLED的显示效果更佳。模块供电可以是3.3V也可以是5V,不需要修改模块电路,OLED屏具有多个控制指令,可以控制OLED的亮度、对比度、开关升压电路等指令。操作方便,功能丰富。可显示汉字、ASClI、图案等。同时为了方便应用在产品上,预留4个M3固定孔,方便用户固定在机壳上。

1.2产品参数:

1、高分辨率:128*64(和12864LCD相同分辨率,但该OLED屏的单位面积像素点多)

2、超广可视角度:大于160°

3、超低功耗:正常显示时0.06W

4、宽供电范围:直流3.3V-5V

5、工业级:工作温度范围-30℃~70℃

6、体积小:27mm27mm2mm

7、通信方式:l2C

8:、亮度、对比度可以通过程序指令控制

9:、使用寿命不少于16000小时

10、OLED屏幕内部驱动芯片:SSD1306

2. RT-theard配置

2.1 硬件需求

1、需要0.96寸I2C驱动的OLED屏幕进行动态显示, SDA---p511(p50b);SCL---p512(p50c) ,公式首先将p去掉还有三位,以p511为例,最后转换的数字为 “(5x16x16)+(1x10)+1”算出来为 1291 转换为16进制为0x50b。注:在程序里的话需要将字符转为数字。

实现功能:

OLED屏幕;画直线、矩形框、画圆、画光标、字体。

板载按键中断交互,LED3 1Hz频闪。

在这里插入图片描述

ssd1306屏幕地址看电阻接线情况为:0x3c(后面需要用到)

2、RA6M4开发板

在这里插入图片描述

3、USB下载线,ch340串口和附带6根母母线,rx---p613;tx---p614

在这里插入图片描述

2.2 软件配置

Renesas RA6M4开发板环境配置参照:【基于 RT-Thread Studio的CPK-RA6M4 开发板环境搭建】

1、新建项目RA6M4-IIC工程

在这里插入图片描述

2、点击RT-theard Setting,在软件包下添加软件包,然后搜索ssd相关软件支持包,点击添加即可,然后出现对应包。

在这里插入图片描述

3、配置ssd306,右键选择配置项

在这里插入图片描述

4、在软件包中配置上述地址0x3c,开启示例

在这里插入图片描述

5、在硬件中,启动I2C,设置端口

在这里插入图片描述

6、全部保存刚刚的配置,更新当前配置文件

在这里插入图片描述

保存完是灰色,没有保存是蓝色。

3. 代码分析

1、刚刚加载软件包在packages文件夹下,示例代码为

ssd1306_tests.c

/*
 * Copyright (c) 2020, RudyLo 

#include 
#include 
#include 

#include 
#include 
#include "ssd1306.h"
#include "ssd1306_tests.h"

void ssd1306_TestBorder()
{
    ssd1306_Fill(Black);

    uint32_t start = rt_tick_get();
    uint32_t end = start;
    uint8_t x = 0;
    uint8_t y = 0;
    do {
        ssd1306_DrawPixel(x, y, Black);

        if((y == 0) && (x < 127))
            x++;
        else if((x == 127) && (y < 63))
            y++;
        else if((y == 63) && (x > 0)) 
            x--;
        else
            y--;

        ssd1306_DrawPixel(x, y, White);
        ssd1306_UpdateScreen();
    
        rt_thread_mdelay(5);
        end = rt_tick_get();
    } while((end - start) < 8000);
   
    rt_thread_mdelay(1000);
}

void ssd1306_TestFonts()
{
    ssd1306_Fill(Black);
    ssd1306_SetCursor(2, 0);
    ssd1306_WriteString("Font 16x26", Font_16x26, White);
    ssd1306_SetCursor(2, 26);
    ssd1306_WriteString("Font 11x18", Font_11x18, White);
    ssd1306_SetCursor(2, 26+18);
    ssd1306_WriteString("Font 7x10", Font_7x10, White);
    ssd1306_SetCursor(2, 26+18+10);
    ssd1306_WriteString("Font 6x8", Font_6x8, White);
    ssd1306_UpdateScreen();
}

void ssd1306_TestFPS()
{
    ssd1306_Fill(White);
   
    uint32_t start = rt_tick_get();
    uint32_t end = start;
    int fps = 0;
    char message[] = "ABCDEFGHIJK";
   
    ssd1306_SetCursor(2,0);
    ssd1306_WriteString("Testing...", Font_11x18, Black);
   
    do {
        ssd1306_SetCursor(2, 18);
        ssd1306_WriteString(message, Font_11x18, Black);
        ssd1306_UpdateScreen();
       
        char ch = message[0];
        memmove(message, message+1, sizeof(message)-2);
        message[sizeof(message)-2] = ch;

        fps++;
        end = rt_tick_get();
    } while((end - start) < 5000);
   
    rt_thread_mdelay(1000);

    char buff[64];
    fps = (float)fps / ((end - start) / 1000.0);
    snprintf(buff, sizeof(buff), "~%d FPS", fps);
   
    ssd1306_Fill(White);
    ssd1306_SetCursor(2, 18);
    ssd1306_WriteString(buff, Font_11x18, Black);
    ssd1306_UpdateScreen();
}

void ssd1306_TestLine()
{
    ssd1306_Line(1,1,SSD1306_WIDTH - 1,SSD1306_HEIGHT - 1,White);
    ssd1306_Line(SSD1306_WIDTH - 1,1,1,SSD1306_HEIGHT - 1,White);
    ssd1306_UpdateScreen();
    return;
}

void ssd1306_TestRectangle()
{
    uint32_t delta;

    for(delta = 0; delta < 5; delta ++) 
    {
        ssd1306_DrawRectangle(1 + (5*delta),1 + (5*delta) ,SSD1306_WIDTH-1 - (5*delta),SSD1306_HEIGHT-1 - (5*delta),White);
    }
    ssd1306_UpdateScreen();
    return;
}

void ssd1306_TestCircle()
{
    uint32_t delta;

    for(delta = 0; delta < 5; delta ++) 
    {
        ssd1306_DrawCircle(20* delta+30, 30, 10, White);
    }
    ssd1306_UpdateScreen();
    return;
}

void ssd1306_TestArc()
{
    ssd1306_DrawArc(30, 30, 30, 20, 270, White);
    ssd1306_UpdateScreen();
    return;
}

void ssd1306_TestPolyline()
{
    SSD1306_VERTEX loc_vertex[] =
    {
        {35,40},
        {40,20},
        {45,28},
        {50,10},
        {45,16},
        {50,10},
        {53,16}
    };

    ssd1306_Polyline(loc_vertex,sizeof(loc_vertex)/sizeof(loc_vertex[0]),White);
    ssd1306_UpdateScreen();
    return;
}

void ssd1306_TestAll()
{
    ssd1306_Init();

    ssd1306_TestFPS();
    rt_thread_mdelay(3000);

    ssd1306_TestBorder();

    ssd1306_TestFonts();
    rt_thread_mdelay(3000);

    ssd1306_Fill(Black);
    ssd1306_TestRectangle();
    ssd1306_TestLine();
    rt_thread_mdelay(3000);

    ssd1306_Fill(Black);
    ssd1306_TestPolyline();
    rt_thread_mdelay(3000);

    ssd1306_Fill(Black);
    ssd1306_TestArc();
    rt_thread_mdelay(3000);

    ssd1306_Fill(Black);
    ssd1306_TestCircle();
    rt_thread_mdelay(3000);
}

#ifdef FINSH_USING_MSH
MSH_CMD_EXPORT(ssd1306_TestAll, test ssd1306 oled driver);
#endif

2、此库包含画直线(ssd1306_TestPolyline();)、矩形框(ssd1306_TestRectangle();)、画圆(ssd1306_TestCircle();)、画光标(ssd1306_TestArc();)、字体(ssd1306_TestFonts();)。调用时直接在串口CMD命令输入“ssd1306_TestAll”,即可查看对应切换。

在这里插入图片描述

3、main.c文件在re_gen文件夹下,主程序围绕“hal_entry();”函数(在src文件夹)

main.c

/* generated main source file - do not edit */
#include "hal_data.h"
            int main(void) {
              hal_entry();
              return 0;
            }

hal_entry.c

/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author        Notes
 * 2021-10-10     Sherman       first version
 * 2021-11-03     Sherman       Add icu_sample
 */

#include 
#include "hal_data.h"
#include 

#define LED3_PIN    BSP_IO_PORT_01_PIN_06
#define USER_INPUT  "P105"

void hal_entry(void)
{
    rt_kprintf("
Hello RT-Thread!
");

    while (1)
    {
        rt_pin_write(LED3_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED3_PIN, PIN_LOW);
        rt_thread_mdelay(500);
    }
}

void irq_callback_test(void *args)
{
    rt_kprintf("
 IRQ00 triggered 
");
}

void icu_sample(void)
{
    /* init */
    rt_uint32_t pin = rt_pin_get(USER_INPUT);
    rt_kprintf("
 pin number : 0x%04X 
", pin);
    rt_err_t err = rt_pin_attach_irq(pin, PIN_IRQ_MODE_RISING, irq_callback_test, RT_NULL);
    if(RT_EOK != err)
    {
        rt_kprintf("
 attach irq failed. 
");
    }
    err = rt_pin_irq_enable(pin, PIN_IRQ_ENABLE);
    if(RT_EOK != err)
    {
        rt_kprintf("
 enable irq failed. 
");
    }
}
MSH_CMD_EXPORT(icu_sample, icu sample);

4. 下载验证

1、编译重构

在这里插入图片描述

在这里插入图片描述

编译成功

2、下载程序

在这里插入图片描述

下载成功

3、CMD串口调试

在这里插入图片描述

然后板载复位

输入:ssd1306_TestAll,开始显示!

审核编辑:汤梓红

  • OLED
    +关注

    关注

    112

    文章

    5101

    浏览量

    219053
  • I2C
    I2C
    +关注

    关注

    24

    文章

    1144

    浏览量

    119111
  • Renesas
    +关注

    关注

    0

    文章

    1748

    浏览量

    22089
  • 开发板
    +关注

    关注

    21

    文章

    2911

    浏览量

    91095
  • RA6M4
    +关注

    关注

    0

    文章

    48

    浏览量

    309
收藏 人收藏

    评论

    相关推荐

    SSD1306的相关资料分享

    SSD1306(OLED驱动芯片介绍)在介绍0.96寸 SSD1306之前先附上模块链接:点击购买SSD1306 OLED显示模块概述SSD1306是一款单片CMOS OLED/PLED驱动器,具有
    发表于 11-17 06:24

    SSD1306I2C通信的方式

    SSD1306后,接上GND,VCC,SCL,SDA四条线后,屏幕是不会自动亮起的,需要CPU写入数据驱动它显示。查阅SSD1306的手册,我们可以发现与其通信的方式。在这里我们使用的是I2C通信方式:起始信号写入芯片地址,一般为0x78或者0x7a应答信号写入控制命令(D/
    发表于 12-01 08:35

    OpenHarmony轻量系统开发【7】驱动I2C显示OLED屏幕

    I2C去显示OLED屏幕,并且实现动画播放、中文英文显示、绘图等功能适合群体:适用于润和Hi3861开发板,L0轻量系统驱动开发文中所有代码仓库:https
    发表于 01-21 16:37

    浅论I2C驱动ssd1306 OLED显示屏示例程序演示

    OLED屏幕;画直线、矩形框、画圆、画光标、字体。板载按键中断交互,LED3 1Hz频闪。ssd1306屏幕地址看电阻接线情况为:0x3c(后面需要用到)2RA6M4开发板3、USB下载线
    发表于 07-13 10:41

    Renesas CPK-RA6M4开发板SDIO模块评测

    Renesas给我这次评测的机会,很荣幸成为本次评测的一员。本次评测的开发板Renesas的CPK-RA6M4开发板,它是一款Renesas官方基于RA6M4 MCU
    发表于 07-21 11:14

    【触觉智能 Purple Pi开发板试用】点亮I2C_SSD1306

    开发板 板载了两个i2c,今天使用i2c0来驱动SSD1306。1、前面有几个大佬已经驱动i2c,还有一个大佬用i2c驱动了LCD1602,那个教程写得非常的好。我查到了有个现成
    发表于 11-03 14:30

    Renesas RA6M4开发板USB-H评测活动

    Renesas RA6M4开发板USB-H评测  这次是第二次接触这块开发板了,但是还是第一次仔细观察这块开发板。  先贴两张手册中的图,开发板上方是一个板载的JLink调试接口和usb
    发表于 11-22 16:08

    【BPI-Pico-RP2040 开发板SSD1306 OLED显示

    驱动芯片是SSD1306。二、OLED驱动(一)接线OLED提供I2C接口,线序如下:RP2040OLED3.3V 3.3VGND GND14 SDA15 SCL(二)程序程序
    发表于 03-26 22:52

    使用RT-Thread Studio和CPK-RA2L1点亮0.96寸OLED ssd1306

    SSD1306 I2C example hardware  5、配置 RA Smart Configurator, 选择r_iic_master,根据上面使用的I2通的,配置SDA1和
    发表于 04-03 16:14

    基于SSD1306OLED开发模块

    SSD1306OLED开发模块,包含SSD1306-Revision-1.1.pdf和SSD1306命令.doc
    发表于 02-24 14:03 90次下载

    SSD1306(OLED驱动芯片介绍)

    SSD1306(OLED驱动芯片介绍)在介绍0.96寸 SSD1306之前先附上模块链接:点击购买SSD1306 OLED显示模块概述SSD1306是一款单片CMOS OLED/PLED驱动器,具有
    发表于 11-09 18:36 50次下载
    <b>SSD1306</b>(<b>OLED</b><b>驱动</b>芯片介绍)

    开发板评测】Renesas RA6M4开发板SDIO(SDHI)

    开发板Renesas的CPK-RA6M4开发板,它是一款Renesas官方基于RA6M4 MCU群组设计的一款中国本地评估。如下图所示: 图1 CPK-RA6M4开发板板载资源
    的头像 发表于 12-27 13:15 503次阅读

    Renesas RA6M4开发板I2C读取BMP180气压温度】

    Renesas RA6M4开发板采用I2C读取BMP180传感器的气压温度示例程序演示。
    的头像 发表于 01-16 09:29 2915次阅读
    【<b>Renesas</b> <b>RA6M4</b><b>开发板</b><b>之</b><b>I2C</b>读取BMP180气压温度】

    Renesas RA6M4开发板I2C读取mpu6050】

    Renesas RA6M4开发板采用I2C读取mpu6050传感器的角加速度,角速度和温度示例程序演示。
    的头像 发表于 01-17 09:07 2988次阅读
    【<b>Renesas</b> <b>RA6M4</b><b>开发板</b><b>之</b><b>I2C</b>读取mpu6050】

    Renesas RA6M4开发板DHT11温湿度读取】

    Renesas RA6M4开发板DHT11温湿度读取示例程序演示。
    的头像 发表于 01-18 17:18 905次阅读
    【<b>Renesas</b> <b>RA6M4</b><b>开发板</b><b>之</b>DHT11温湿度读取】

    下载硬声App