这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 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引脚。

image.png

1 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);

    Write_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 跳转至

回复

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