886|7

574

帖子

0

资源

一粒金砂(高级)

【GD32307E-START】+ 双色OLED屏驱动显示 [复制链接]

有了前面LED与KEY的使用经验,现在就可以在它的基础上盖房子了,先完成一个简单的,就是使用I/O模拟I2C通讯来驱动OLED屏。

由于开发板所配置外设资源十分有限,故所占用的引脚资源很少,用起来便有些随心所欲了。

为图省事,这里OLED屏与MCU的连接关系如下:

SCLK---PC0

SDIN ---PC1

 

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

#define OLED_SCLK_Clr()  GPIO_BC(GPIOC) = GPIO_PIN_0

#define OLED_SCLK_Set()  GPIO_BOP(GPIOC) = GPIO_PIN_0

 

#define OLED_SDIN_Clr()  GPIO_BC(GPIOC) = GPIO_PIN_1

#define OLED_SDIN_Set()  GPIO_BOP(GPIOC) = GPIO_PIN_1

 

而引脚功能配置的函数为:

void  gd_eval_oled_init(void)
{
    rcu_periph_clock_enable(RCU_GPIOC);
    gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_0|GPIO_PIN_1);
    GPIO_BC(GPIOC) = GPIO_PIN_0;
    GPIO_BC(GPIOC) = GPIO_PIN_1;
}

OLED屏的初始化函数为:

void OLED_Init(void)
{
    Write_IIC_Command(0xAE); //display off
    Write_IIC_Command(0x20); //Set Memory Addressing Mode
    Write_IIC_Command(0x10);
    Write_IIC_Command(0xb0);//Set Page Start Address for Page Addressing Mode,0-7
    Write_IIC_Command(0xc8);//Set COM Output Scan Direction
    Write_IIC_Command(0x00);//---set low column address
    Write_IIC_Command(0x10);//---set high column address
    Write_IIC_Command(0x40);//--set start line address
    Write_IIC_Command(0x81);//--set contrast control register
    Write_IIC_Command(0xdf);
    Write_IIC_Command(0xa1);//--set segment re-map 0 to 127
    Write_IIC_Command(0xa6);//--set normal display
    Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)
    Write_IIC_Command(0x3F);//
    Write_IIC_Command(0xa4);//
    Write_IIC_Command(0xd3);//-set display offset
    Write_IIC_Command(0x00);//-not offset
    Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency
    Write_IIC_Command(0xf0);//--set divide ratio
    Write_IIC_Command(0xd9);//--set pre-charge period
    Write_IIC_Command(0x22); //
    Write_IIC_Command(0xda);//--set com pins hardware configuration
    Write_IIC_Command(0x12);
    Write_IIC_Command(0xdb);//--set vcomh
    Write_IIC_Command(0x20);//0x20,0.77xVcc
    Write_IIC_Command(0x8d);//--set DC-DC enable
    Write_IIC_Command(0x14);//
    Write_IIC_Command(0xaf);//--turn on oled panel
}

值得指出的是,由于GD32307E的处理速度实在是快,故以往在IIC_Start()函数中是无需添加延时的,而如今不添加就无法完成显示的功能,

更新后的IIC_Start()函数如下:

void IIC_Start()
{
           OLED_SCLK_Set();
           delay_us(10);
           OLED_SDIN_Set();
           delay_us(10);
           OLED_SDIN_Clr();
           delay_us(10);
           OLED_SCLK_Clr();
           delay_us(10);
}

实现图示显示效果的主程序如下:

int main(void)
{
           gd_eval_oled_init();
           OLED_Init();
           OLED_Clear();
           OLED_ShowString(0,0,"GD32F307 TEST",16);
           OLED_ShowString(0,2,"OLED DISPLAY",16);
           OLED_ShowString(0,4,"jinglixixi",16);
           OLED_ShowString(0,6,"2020.11.8",16);
           while(1){
          }
}

image-20201114092034-1.png

OLED屏显示效果

image-20201114091334-2.png

回复

424

帖子

0

资源

版主

哈哈,是不是OLED显示是测评的必选之一。

点评

此外,我们看不到的,有多数是别人碰过钉子无法实现的,例如DHT11/DHT22是很普通的传感器,它在使用上我发现会在我用过的MCU上有1/4是无法实现的,不信你可以去试,使用的人多是看别人用过,才确定它是可行的,如果  详情 回复 发表于 2020-11-15 08:47
嘿嘿,那到不是,但起码每种开发板的性能是不一样的,你要知道他能支持什么,以及如何实现。比如这个屏吧,在大多数的开发板上其IIC_Start()函数中是无需加延时的,可能是GD32307E的主频速度太快了,没有延时是不能  详情 回复 发表于 2020-11-15 08:39

回复

2867

帖子

1

资源

五彩晶圆(初级)

谢谢分享@

个人签名人已离开,无事别找,找也找不到。

回复

574

帖子

0

资源

一粒金砂(高级)

w494143467 发表于 2020-11-14 21:19 哈哈,是不是OLED显示是测评的必选之一。

嘿嘿,那到不是,但起码每种开发板的性能是不一样的,你要知道他能支持什么,以及如何实现。比如这个屏吧,在大多数的开发板上其IIC_Start()函数中是无需加延时的,可能是GD32307E的主频速度太快了,没有延时是不能显示的,你不尝试一下可能会认为它不支持此OLED屏了其实不然,你说这样做有无意义呢?我们做过了,在用到时,或是其它人使用时心里才有底,做方案时才踏实!


回复

574

帖子

0

资源

一粒金砂(高级)


回复

574

帖子

0

资源

一粒金砂(高级)

w494143467 发表于 2020-11-14 21:19 哈哈,是不是OLED显示是测评的必选之一。

此外,我们看不到的,有多数是别人碰过钉子无法实现的,例如DHT11/DHT22是很普通的传感器,它在使用上我发现会在我用过的MCU上有1/4是无法实现的,不信你可以去试,使用的人多是看别人用过,才确定它是可行的,如果找不到先例,多半,呵呵。。。

点评

对,这倒也是,让大家觉得这个OLED屏幕是可以驱动起来的!点赞  详情 回复 发表于 2020-11-15 10:56

回复

424

帖子

0

资源

版主

jinglixixi 发表于 2020-11-15 08:47 此外,我们看不到的,有多数是别人碰过钉子无法实现的,例如DHT11/DHT22是很普通的传感器,它在使用上我 ...

对,这倒也是,让大家觉得这个OLED屏幕是可以驱动起来的!点赞

点评

此外,OLED屏尤其是I2C接口,占用引脚资源仅次于LED,但所表达的内容却是LED不能同日而语的呀!  详情 回复 发表于 2020-11-15 14:10

回复

574

帖子

0

资源

一粒金砂(高级)

w494143467 发表于 2020-11-15 10:56 对,这倒也是,让大家觉得这个OLED屏幕是可以驱动起来的!点赞

此外,OLED屏尤其是I2C接口,占用引脚资源仅次于LED,但所表达的内容却是LED不能同日而语的呀!


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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