1883|2

1517

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【GD32L233C-START评测】彩色OLED屏的显示驱动 [复制链接]

除了常规的I2C接口单色OLED屏外,还有一种基于SPI接口的彩色OLED屏,这样就使得其表现力更强,能够实现彩色图片的显示 。

在OLED屏的驱动方式上有2种,即以硬件方式实现和以软件方式实现,相对来讲软件的方式其灵活性更强,移植起来也更方便,故这里也软件的方式来实现。

这里所使用的是0.96寸的OLED屏,其分辨率为80*160,共有8个引脚。

该显示屏与开发板的连接关系为:

SCLK----PB10

SDIN ----PB11

DC  ----PB13

RST ----PB14

CS  ----PB15

相关引脚输出高低电平的语句定义为:

#define OLED_SCLK_Clr()  gpio_bit_reset(GPIOB, GPIO_PIN_10)

#define OLED_SCLK_Set()  gpio_bit_set(GPIOB, GPIO_PIN_10)

#define OLED_SDIN_Clr()  gpio_bit_reset(GPIOB, GPIO_PIN_11)

#define OLED_SDIN_Set()  gpio_bit_set(GPIOB, GPIO_PIN_11)

#define OLED_DC_Clr()   gpio_bit_reset(GPIOB, GPIO_PIN_13)

#define OLED_DC_Set()   gpio_bit_set(GPIOB, GPIO_PIN_13)

#define OLED_RST_Clr()  gpio_bit_reset(GPIOB, GPIO_PIN_14)

#define OLED_RST_Set()  gpio_bit_set(GPIOB, GPIO_PIN_14)

#define OLED_CS_Clr()   gpio_bit_reset(GPIOB, GPIO_PIN_15)

#define OLED_CS_Set()   gpio_bit_set(GPIOB, GPIO_PIN_15)

在软件模拟SPI的过程中,数据传送的函数是十分关键的,该函数的内容为:

void LCD_Writ_Bus(u8 dat)
{
    u8 i;
    OLED_CS_Clr();
    for(i=0;i<8;i++)
    {
        OLED_SCLK_Clr();
        if(dat&0x80)
           OLED_SDIN_Set();
        else
           OLED_SDIN_Clr();
        OLED_SCLK_Set();
        dat<<=1;
    }
    OLED_CS_Set();
}

以该函数为基础,实现数据发送和指令发送发送的函数分别为:

void LCD_WR_DATA8(u8 dat)
{
    OLED_DC_Set();
    LCD_Writ_Bus(dat);
}


void LCD_WR_REG(u8 dat)
{
    OLED_DC_Clr();
    LCD_Writ_Bus(dat);
}

实现清屏处理的函数为:

void LCD_Clear(u16 Color)
{
    u16 i,j;
    LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
    for(i=0;i<LCD_W;i++)
    {
            for (j=0;j<LCD_H;j++)
            {
                    LCD_WR_DATA(Color);
            }
    }
}

以清屏函数为基础,可方便地完成图片显示函数的编写,其内容为:

void LCD_Picturea(void)
{
      int i;
      LCD_Address_Set(0,0,79,79);
      for(i=0;i<6400;i++)
      {
            LCD_WR_DATA8(gImage_cgq[i*2]);
            LCD_WR_DATA8(gImage_cgq[i*2+1]);
      }
}

需要指出的是,待显示的图片数据是保存在数组gImage_cgq[]中,生成该数据时可借助于相应的辅助工具来轻松实现。

实现字符串显示的函数为:

void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
{
    while(*p!='\0')
    {
        if(x>LCD_W-16){x=0;y+=16;}
        if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
        LCD_ShowChar(x,y,*p,0,color);
        x+=8;
        p++;
    }
}

以上面的功能函数为依托,实现图1和图2显示效果的主程序为:

int main(void)
{
    systick_config();
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOC);
    rcu_periph_clock_enable(RCU_GPIOB);
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7 | GPIO_PIN_8);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8);
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6 | GPIO_PIN_7);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);
    gpio_bit_reset(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);
    gpio_bit_reset(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);
    gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10 | GPIO_PIN_11| GPIO_PIN_13| GPIO_PIN_14| GPIO_PIN_15);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10 | GPIO_PIN_11| GPIO_PIN_13| GPIO_PIN_14| GPIO_PIN_15);
    delay_1ms(500);
    Lcd_Init();
    LCD_Clear(BLACK);
    LCD_ShowString(10,0,"CSM32RV20",RED);
    LCD_ShowString(10,20,"0.96'OLED",RED);
    LCD_ShowString(10,40,"jinglixixi",RED);
    LCD_ShowString(10,60,"2022.1.12",RED);
    delay_1ms(2000);
    LCD_Clear(BLACK);
    LCD_Picturea();
    while(1)
}

经程序的编译和下载,即可见到对应的显示效果。

 

图1 显示字符串

 

图2 显示图片

此帖出自GD32 MCU论坛

最新回复

一看驱动代码写得好,哪个板子都能快速移植!   详情 回复 发表于 2022-2-24 09:54
点赞 关注
 

回复
举报

7196

帖子

2

TA的资源

版主

沙发
 

一看驱动代码写得好,哪个板子都能快速移植!

此帖出自GD32 MCU论坛

点评

哈哈。。。  详情 回复 发表于 2022-2-24 14:15
 
 
 

回复

1517

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
本帖最后由 jinglixixi 于 2022-2-24 23:21 编辑
wangerxian 发表于 2022-2-24 09:54 一看驱动代码写得好,哪个板子都能快速移植!

哈哈,相对比较方便。

此帖出自GD32 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表