这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【液体流量检测仪DIY】3、OLED驱动实现

共1条 1/1 1 跳转至

【液体流量检测仪DIY】3、OLED驱动实现

高工
2025-02-03 23:12:51     打赏

        本次使用的OLED是Seeed的一款小显示模块,分辨率为128*64位,屏幕尺寸为0.96,这是一款单色显示模块,这一款用到的是SSD1315,实际上常用的还有SSD1306.oled屏幕的发光原理不同于lcd,上电后无法直接显示,需要初始化后才能正常显示,这一方面和IPS的彩屏有些类似。SSD1315是一款单芯片CMOS OLED/PLED驱动控制芯片,直接从内部128*64位GDDRAM中显示数据。

        使用SSD1315作为主控的OLED,硬件有两种接法,区别是是否使用DC引脚。使用DC引脚,需要主控来控制DC引脚确定当前发送的是命令还是数据,不使用DC引脚,需要主控在发送数据之前发送一个bit,来确定是命令还是数据,观察模块的接口,只有IIC的两个引脚和供电,所以需要通过第二种方法实现控制。

        作为单色的显示,实际上对于大多数的单片机控制起来都是比较富裕的,所要的资源还是挺少的,这一次我们采用的接口使用的是硬件IIC,实际上很多时候我都喜欢用IO口模拟的方式控制,这次尝试了一下硬件IIC,MX中的配置还是非常简单的:

image.png

        启动IIC后,直接就可以,采用常规模式100K的速度,什么都不用配置,初始化也不用像定时器那样需要启动,我们直接用一下进行适配就OK了:

void OLED_WR_CMD(uint8_t cmd)
{
    HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100);
}

void OLED_WR_DATA(uint8_t data)
{
    HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&data,1,0x100);
}

        关于SSD1315的驱动编写,我们可以通过网络搜索,实际上就是对一些寄存器的配置,这一方面中景园也有一些官方的例程,必须初始化才能进行显示,显示并不复杂,主要用的也是初始化和固定位置的且操作,这里我们显示的内容选用的英文方式,毕竟现实区域是有限的,英文的显示相对来说也是比较连贯的:

uint8_t CMD_Data[]={
0xAE, 0xD5, 0x80, 0xA8, 0x3F, 0xD3, 0x00, 0x40,0xA1, 0xC8, 0xDA,

0x12, 0x81, 0xCF, 0xD9, 0xF1, 0xDB, 0x40, 0xA4, 0xA6,0x8D, 0x14,

0xAF};

void OLED_Init(void)
{
    HAL_Delay(200);

    uint8_t i = 0;
    for(i=0; i<23; i++)
    {
        OLED_WR_CMD(CMD_Data[i]);
    }
    
}

        注意,初始化完的屏幕是花屏的,花屏证明这个时候显示是正常的,然后进行清屏操作,为统一的底色,单色要不为黑底,要不为白底。

        接下来就是字符串的显示,这里我们显示“EEPW_Flowmeter”,本章节主要进行功能展示,简单显示一下,效果如下:

image.png





关键词: 驱动     OLED    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]