这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » SWM221CBT7显示开发板驱动OLED屏显示

共1条 1/1 1 跳转至

SWM221CBT7显示开发板驱动OLED屏显示

菜鸟
2025-11-13 12:01:34     打赏

上一篇介绍了SWM221CBT7显示开发板的基本用法,这次来介绍如何用GPIO口以模拟I2C的方式来驱动OLED屏。

常见的OLED屏,有0.91寸和0.96寸这2种,除初始化的函数不同外,其它的基本相同。

为后续实现硬件驱动的方便,这里选取的连接引脚就选用对应的I2C引脚。

将所用引脚配置为输出模式的函数为:

void oled_config(void)
{
    GPIO_Init(GPIOA, PIN6, 1, 0, 0, 0);
    GPIO_Init(GPIOA, PIN7, 1, 0, 0, 0);
}


为便于输出高低电平的需要,相应的定义语句为:

#define OLED_SCLK_Clr()   GPIO_ClrBit(GPIOA, PIN6)

#define OLED_SCLK_Set()   GPIO_SetBit(GPIOA, PIN6) 

#define OLED_SDIN_Clr()   GPIO_ClrBit(GPIOA, PIN7)

#define OLED_SDIN_Set()   GPIO_SetBit(GPIOA, PIN7) 

使显示屏工作的参数设置为:

#define OLED_MODE   0

#define SIZE          16

#define XLevelL     0x02

#define XLevelH     0x10

#define Max_Column 128

#define Max_Row  64

#define Brightness 0xFF

#define X_WIDTH      128

#define Y_WIDTH      64

#define OLED_CMD    0

#define OLED_DATA    1 

使用GPIO口模拟I2C方式发送字节数据的函数为:

void Write_IIC_Byte(unsigned char IIC_Byte)
{
     unsigned char i;
     unsigned char m,da;
     da=IIC_Byte;
     OLED_SCLK_Clr();
     for(i=0;i<8;i++)
     {
        m=da;
        m=m&0x80;
        if(m==0x80)
        {
            OLED_SDIN_Set();
        }
        else 
        {
            OLED_SDIN_Clr();
        }
        da=da<<1;
        delay_us(3);
        OLED_SCLK_Set();
        delay_us(3);
        OLED_SCLK_Clr();
        delay_us(3);
     }
}


0.91寸屏的初始化函数为:

void OLED_Init(void)
{
    Write_IIC_Command(0xAE); 
    Write_IIC_Command(0x40);
    Write_IIC_Command(0xb0);
    Write_IIC_Command(0xc8);
    Write_IIC_Command(0x81);
    Write_IIC_Command(0xff);
    Writ e_IIC_Command(0xa1);
    Write_IIC_Command(0xa6);
    Write_IIC_Command(0xa8);
    Write_IIC_Command(0x1F);
    Write_IIC_Command(0xd3);
    Write_IIC_Command(0x00);
    Write_IIC_Command(0xd5);
    Write_IIC_Command(0xf0);
    Write_IIC_Command(0xd9);
    Write_IIC_Command(0x22);
    Write_IIC_Command(0xda);
    Write_IIC_Command(0x02);
    Write_IIC_Command(0x8d);
    Write_IIC_Command(0x14);
    Write_IIC_Command(0xdb);
    Write_IIC_Command(0x49);
    Write_IIC_Command(0xaf);
}

实现驱动测试的主程序为:

int main(void)
{
    SystemInit();
    GPIO_Init(GPIOA, PIN5, 1, 0, 0, 0);
    oled_config();
    OLED_Init();
    OLED_Clear();
     OLED_ShowString(0,0,"SWDM221CBA5",16);
    OLED_ShowString(0,2,"jinglixixi",16);
    while(1)
    {
       GPIO_SetBit(GPIOA, PIN5);
       delay_ms(300);
        GPIO_ClrBit(GPIOA, PIN5);
       delay_ms(300);
    }
}

经程序的编译和下载,其测试效果如图2所示,说明驱动有效。

image.png

2 测试效果 

若变更初始化函数,则可实现0.96寸显示屏的驱动,其初始化函数为:

void OLED_Init(void)
{
    Write_IIC_Command(0xAE); 
    Write_IIC_Command(0x20); 
    Write_IIC_Command(0x10);
    Write_IIC_Command(0xb0);
    Write_IIC_Command(0xc8);
    Write_IIC_Command(0x00);
    Write_IIC_Command(0x10);
    Write_IIC_Command(0x40);
    Write_IIC_Command(0x81);
    Write_IIC_Command(0xdf);
    Write_IIC_Command(0xa1);
    Write_IIC_Command(0xa6);
    Write_IIC_Command(0xa8);
    Write_IIC_Command(0x3F);
    Write_IIC_Command(0xa4);
    Write_IIC_Command(0xd3);
    Write_IIC_Command(0x00);
    Write_IIC_Command(0xd5);
    Write_IIC_Command(0xf0);
    Write_IIC_Command(0xd9);
    Write_IIC_Command(0x22); 
    Write_IIC_Command(0xda);
    Write_IIC_Command(0x12);
    Write_IIC_Command(0xdb);
    Write_IIC_Command(0x20);
    Write_IIC_Command(0x8d);
    Write_IIC_Command(0x14);
    Write_IIC_Command(0xaf);
}

经测试,去显示效果如图3所示,说明驱动有效且成功。

image.png

3 显示效果








关键词: SWM221CBT7    

共1条 1/1 1 跳转至

回复

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