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

%E8%BF%9E%E6%8E%A5DAP.jpg

前言

在之前的两篇评测文章:

介绍了系统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模块,只需要两根数据线和两根电源线就可以直接驱动,非常方便。

IIC%E6%8E%A5%E5%8F%A3OLED.jpg

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左右。

BMP.jpg

2.取模方式的配置

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

PCtoLCD.jpg

3.生成图片字模数据

点击生成字模数据,即可生成图片对应的C语言格式的字模数据。

几个BMP格式的LOGO图片

东芝半导体LOGO

TOSHIBA_128x64.bmp

中科创达LOGO

ThunderSoft_128x64.bmp

面包板社区LOGO

MBB2_128x64.bmp

实际显示效果

显示东芝半导体LOGO

OLED_TOSHIBA.jpg

显示中科创达LOGO

OLED_THUNDER.jpg

显示面包板LOGO

OLED_MBB.jpg

仿手机状态栏

OLED_CLOCK.jpg

源码下载


推荐阅读


欢迎大家关注我的个人博客

或微信扫码关注我的公众号
%E6%B1%82%E5%85%B3%E6%B3%A8.jpg

转载于:https://www.cnblogs.com/whik/p/11522987.html

### 回答1: 制作一个日程显示器,可以使用D1 Mini开发板OLED显示屏。下面是一些步骤: 1. 准备所需材料:D1 Mini开发板OLED显示屏、杜邦线、面包板和USB电缆。 2. 连接D1 Mini和OLED显示屏。使用杜邦线将D1 Mini和OLED显示屏连接在一起。具体连接方式可以参考相关的电路图和说明书。 3. 在Arduino IDE中编写程序。编写一个程序来控制OLED显示屏上的文字和图形。在程序中,可以设置每天的计划和日程,以便在OLED显示屏上显示。 4. 上传程序到D1 Mini开发板。将编写好的程序上传到D1 Mini开发板中,以便控制OLED显示屏。 5. 测试程序。将D1 Mini开发板OLED显示屏连接到电源,并观察OLED显示屏上是否显示正确的计划和日程。 通过以上步骤,您就可以制作一个简单的日程显示器。可以进一步优化程序,添加更多的功能,例如自动同步在线日历或使用Wi-Fi连接到您的手机或计算机。 ### 回答2: 用d1mini开发板OLED显示屏制作日程显示器的步骤如下: 1. 硬件准备:准备一块d1mini开发板和一个OLED显示屏。将OLED显示屏连接到d1mini开发板上,确保接线正确。 2. 软件准备:在电脑上安装Arduino IDE开发环境,并将d1mini开发板驱动程序安装到电脑上。 3. 编写代码:打开Arduino IDE,创建一个新的项目。在项目中导入相应的OLED库,比如Adafruit SSD1306库。然后,编写代码来控制OLED显示显示日程信息,比如日期、时间、重要事件等。 4. 上传代码:将代码上传到d1mini开发板上。确保开发板与电脑连接,选择正确的开发板和端口,并点击“上传”按钮进行上传。 5. 测试:等待上传完成后,将d1mini开发板连接到电源。OLED显示屏应该开始显示设置的日程信息。调整代码以达到预期的显示效果。 6. 安装:将d1mini开发板OLED显示屏安装到一个合适的外壳中,如木制盒子或亚克力板。确保连接线不被压损或扭曲。 7. 使用:将日程显示器放置在合适的位置,如办公室桌面或家庭墙壁。每天查看显示屏上的日程信息,有效地管理时间安排。 通过按照以上步骤,使用d1mini开发板OLED显示屏制作日程显示器是可行的。这种日程显示器可以帮助人们更好地规划和管理自己的工作和生活,提高效率和时间管理。 ### 回答3: 使用D1 Mini开发板OLED显示屏制作日程显示器的步骤如下: 1. 首先,准备好所需的材料和工具。需要的材料有D1 Mini开发板OLED显示屏、杜邦线和面包板等。工具包括电脑、Micro USB数据线和焊锡工具等。 2. 接下来,将D1 Mini和OLED显示屏通过杜邦线连接起来。OLED显示屏的VCC引脚连接到D1 Mini的3V3引脚,GND引脚连接到D1 Mini的GND引脚,SCL引脚连接到D1 Mini的D1引脚,SDA引脚连接到D1 Mini的D2引脚。 3. 之后,将D1 Mini通过Micro USB数据线连接到电脑上,并用Arduino IDE软件进行编程。打开Arduino IDE软件,选择正确的开发板类型(如NodeMCU 1.0)和端口。 4. 在Arduino IDE中编写代码实现日程显示功能。可以利用ESP8266的WiFi模块连接到网络,获取日程信息并显示OLED显示屏上。还可以采用按钮或者按键开关来切换不同的日程显示状态。 5. 编写完代码后,点击编译并上传到D1 Mini开发板。确保上传成功后,将Micro USB数据线从电脑上拔掉,并将D1 Mini通过面包板和OLED显示屏连接好。此时,D1 Mini即可独立工作,无需连接电脑。 6. 将D1 Mini连接到电源(如5V电池或电源适配器),代码开始运行。日程显示器将能够显示当前的日程信息,并且可以按需切换日程显示状态。 通过以上步骤,你就可以使用D1 Mini开发板OLED显示屏制作一个简单的日程显示器了。当然,根据实际需求,你还可以进行更多的扩展和改进,比如增加音频提醒、加入可视化的界面等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值