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

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

3天内不再提示

【RTT大赛作品连载】AB32VG1开发板之OLED屏

RT-Thread创新应用 来源:RT-Thread创新应用 作者:RT-Thread创新应用 2022-01-04 08:58 次阅读

AB32VG1开发板外设资源丰富,此次来分享一下AB32VG1开发板驱动OLED屏的具体步骤。板上预留了IIC接口,可通过杜邦线连接IIC接口的OLED模块,连接好OLED模块后进行软件上的设置。

pYYBAGHRtZmAYu-CAAL2_npQrkM546.png

打开“RT Thread setting”点击添加按钮,搜索框输入“SSD1306”

poYBAGHRusWAZY9yAAHtUVvdrXI506.png

组件成功添加,,如下图所示:

poYBAGHRvF2ABo48AACNMglSjZ4927.png

点击右键,选择详细配置,软件包选项卡配置如下:

poYBAGHRvTqAJ0aZAADa0jFn4vw934.png

硬件选项使能IIC接口

pYYBAGHRvXGAb3RRAABwcJSOiC0539.png

然后保存所勾选的配置,这样成功得将SSD1306模块所封装的库函数添加进工程中,所在目录“RT-ThreadStudio\workspace\open_OLED\packages\ssd1306-latest”

poYBAGHRwG-AVHktAABznv21lxM576.png

加载完成后,可以查看驱动SSD1306的源代码

#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(1000);

    ssd1306_TestBorder();

    ssd1306_TestFonts();
    rt_thread_mdelay(1000);

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

    ssd1306_Fill(Black);
    ssd1306_TestPolyline();
    rt_thread_mdelay(1000);

    ssd1306_Fill(Black);
    ssd1306_TestArc();
    rt_thread_mdelay(1000);

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

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

编译完成后,使用“Downloader.exe”下载器按照如下图所示的步骤,将生成的.dcf文件下载进开发板中

pYYBAGHRxQaAMhgxAAL_7xedxhQ833.png

终端中输入“ssd1306_TestAll”,即可启动检测OLED模块的线程,检测的效果如下:

pYYBAGHRydiAeU5sAH72Co5DlmM826.png

此次体验了RT- Thread Studio的强大便捷之处,支持的软件包组件更方便了IDE的外设驱动,的确不错。

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

    关注

    118

    文章

    5974

    浏览量

    221308
  • 接口
    +关注

    关注

    33

    文章

    7609

    浏览量

    148376
  • 开发板
    +关注

    关注

    25

    文章

    4400

    浏览量

    93767
  • RT-Thread
    +关注

    关注

    31

    文章

    1147

    浏览量

    38857
  • 中科蓝讯
    +关注

    关注

    8

    文章

    49

    浏览量

    9625
收藏 人收藏

    评论

    相关推荐

    RTT大赛作品连载AB32VG1上手

    AB32VG1上手操作,修改例程运行中的问题,成功点亮RGB。
    的头像 发表于 10-28 18:31 7296次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】 <b class='flag-5'>AB32VG1</b>上手

    RTT大赛作品AB32VG1开发板OLED显示实验

    最近在玩AB32VG1,在做OLED显示实验时,很多关于AB32VG1驱动OLED的文章,很多都是官方例程操作,在msh窗口中输入测试指令,测试驱动是否正常。很少有关于在main函数中
    的头像 发表于 11-05 16:03 5805次阅读
    <b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b>:<b class='flag-5'>AB32VG1</b><b class='flag-5'>开发板</b><b class='flag-5'>OLED</b>显示实验

    RTT大赛作品AB32VG1开发板—按键扫描

    ab32vg1开发板按键实验
    的头像 发表于 11-15 09:54 3846次阅读
    <b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b>:<b class='flag-5'>AB32VG1</b><b class='flag-5'>开发板</b>—按键扫描

    RTT大赛作品连载AB32VG1评估板到货控制彩灯测试

    RTT大赛作品连载AB32VG1评估板到货控制彩灯测试篇;接下来看看在如何AB32VG1评估
    的头像 发表于 11-07 19:39 4833次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】<b class='flag-5'>AB32VG1</b>评估板到货控制彩灯测试

    RTT大赛作品连载AB32VG1评估板 音乐播放器

    RTT大赛作品连载AB32VG1评估板 音乐播放器
    的头像 发表于 11-12 21:11 5870次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】<b class='flag-5'>AB32VG1</b>评估板 音乐播放器

    RTT大赛作品连载】中科蓝讯AB32VG1开发板开箱篇

    介绍电路原理图分析接口说明,AB32VG1开发板是以中科蓝讯(Bluetrum)公司推出的基于RISC-V架构的高配置芯片AB5301A为核心所组成的。【RTT
    的头像 发表于 11-13 10:01 9674次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】中科蓝讯<b class='flag-5'>AB32VG1</b><b class='flag-5'>开发板</b>开箱篇

    RTT大赛作品连载AB32VG1开发环境搭建

    基于RT-Thread的AB32VG1开发环境搭建.
    的头像 发表于 11-17 08:48 8896次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】<b class='flag-5'>AB32VG1</b>的<b class='flag-5'>开发</b>环境搭建

    RTT大赛作品连载AB32VG1评估板 炫酷音乐播放器

    AB32VG1评估板
    的头像 发表于 11-26 08:43 7396次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】<b class='flag-5'>AB32VG1</b>评估板 炫酷音乐播放器

    RTT大赛作品连载AB32VG1开发板之开箱篇

    中科蓝讯AB32VG1开发板的开箱之作,此开发板的硬件资源初略的介绍。
    的头像 发表于 01-04 09:19 4218次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】<b class='flag-5'>AB32VG1</b><b class='flag-5'>开发板</b>之开箱篇

    【文章连载】RT-Thread创新应用大赛文章汇总

    连载】中科蓝讯AB32VG1开发板开箱篇专栏作者:煲仔卤煮的炼钢【RTT大赛作品
    发表于 10-11 15:13

    RTT大赛作品连载AB32VG1开发板OLED显示实验

    中直接实现的,本编文章直接在MAIN函数实现OLED显示,上电自动执行。根据说明书,AB32VG1 开发板上有一路 I2C,本文通过 RT-Thread Studio 配置 AB32VG1
    发表于 11-05 14:33

    RTT大赛作品连载】中科蓝讯AB32VG1开发板开箱篇

    收到开发板先上靓照中科蓝讯AB32VG1开发板开箱AB32VG1开发板一块TypeCo数据线一条开发板
    发表于 11-24 08:00

    RTT大赛作品连载AB32VG1开发环境搭建

    AB32VG1开发板的RT-Thread新建好工程后, 会生成模板源码。点“编译”,开始编译工程编译好后,用官方提供工具(AB32VG1_DOC-master\AB
    发表于 11-25 08:00

    如何在AB32VG1开发板OLED显示使开发板上电

    中直接实现的,本编文章直接在MAIN函数实现OLED显示,上电自动执行。 根据说明书,AB32VG1开发板上有一路 I2C,本文通过 RT-Thread Studio配置 AB32VG1
    的头像 发表于 11-08 10:02 2209次阅读
    如何在<b class='flag-5'>AB32VG1</b><b class='flag-5'>开发板</b><b class='flag-5'>OLED</b>显示使<b class='flag-5'>开发板</b>上电

    RTT大赛作品连载】基于AB32VG1 sdk BLE例程

    RT-Thread基本中科蓝讯AB32VG1 BLE开发快捷方便.
    的头像 发表于 12-06 09:07 4412次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】基于<b class='flag-5'>AB32VG1</b> sdk BLE例程