打印
[RISC-V MCU 应用开发]

【原创】 【RISC-V MCU CH32V103测评】驱动OLED显示屏

[复制链接]
662|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2020-11-21 10:36 编辑

OLED屏是一种自身发光的显示器件,它有许多种类,如按色彩分,可分为单色屏、双色屏及彩色屏等;按尺寸分,可分为0.91'0.96'屏等;按接口方式分,可分为I2C接口和SPI接口等。
其中,以I2C接口的OLED屏最有特点,它只用2I/O口就可完成显示任务,且比数码管所显示的内容要丰富。
在掌握GPIO口使用的基础上,就可十分轻松地实现驱动OLED屏显示的目标。
在这里OLED屏与MCU的连接关系为:
SCL---PA2
SDA--- PA3
驱动OLED屏所定义的输出高低电平的语句为:
#define SCL_high GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET)
#define SCL_low  GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET)
#define SDA_high GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET)
#define SDA_low  GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_RESET)
配置2个引脚为输出功能的函数为:
void OLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;                  //定义一个GPIO_InitTypeDef类型的结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //使能与LED相关的GPIO端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;    //配置GPIO引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //设置GPIO模式为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //设置GPIO口输出速度
GPIO_Init(GPIOA,&GPIO_InitStructure);                  //调用库函数,初始化GPIOA
GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3);              //设置引脚输出高电平
}
在参考厂家提供OLED屏驱动例程的情况下,可以快速地完成程序的移植。
辅助驱动的基本函数为:
void IIC_Start()
{
   SCL_high;
   SDA_high;
   SDA_low;
   SCL_low;
}
void IIC_Stop()
{
   SCL_low;
   SDA_low;
   SCL_high;
   SDA_high;
}
OLED屏的初始化函数为:
void Initial_M096128x64_ssd1306()
{
    Write_IIC_Command(0xAE);   //displayoff
    Write_IIC_Command(0x20);    //SetMemory Addressing Mode
    Write_IIC_Command(0x10);    //00,HorizontalAddressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode(RESET);11,Invalid
    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);//0xa4,Output follows RAM content;0xa5,Output ignores RAMcontent
    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
}
显示图片的函数为:
void Picture()
{
  unsigned char x,y;
  unsigned int i=0;
  for(y=0;y<8;y++)
  {
      Write_IIC_Command(0xb0+y);
      Write_IIC_Command(0x0);
      Write_IIC_Command(0x10);
      for(x=0;x<132;x++)
      {
          Write_IIC_Data(show[i++]);
      }
  }
}
经程序编译,其结果如图1所示。
1 完成编译

在通过编译后,使用下载工具即可完成下载,其界面如图2所示。
2 完成下载

在完成下载,程序的运行效果如图3所示。
3 运行效果

在添加字符库及相关显示函数的情况下,其效果为:
图5 混排显示效果

使用特权

评论回复
评论
jinglixixi 2020-11-5 16:17 回复TA
@21小跑堂 :感谢您的指导,明确了方向,继续努力! 
21小跑堂 2020-11-5 14:15 回复TA
感谢参与原创文章奖励活动,本篇文章字数方面还请多多加油哈! 

相关帖子

沙发
rh10000| | 2020-10-27 14:39 | 只看该作者
小屏哪来的?楼主小玩意不少啊

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2020-10-27 15:53 | 只看该作者
rh10000 发表于 2020-10-27 14:39
小屏哪来的?楼主小玩意不少啊

哈哈没人送,只能买了,有生产显示屏的厂家组织个活动就好了,我头一个参加!

使用特权

评论回复
地板
rh10000| | 2020-10-29 08:40 | 只看该作者
本帖最后由 rh10000 于 2020-10-29 08:42 编辑
jinglixixi 发表于 2020-10-27 15:53
哈哈没人送,只能买了,有生产显示屏的厂家组织个活动就好了,我头一个参加! ...

我的小板昨晚才搞定线材组装,点亮LED。过程还算是很顺利的。
---现在的问题是,外围电路都没有了,还得买模块

微信图片_20201029084026.jpg (210.11 KB )

微信图片_20201029084026.jpg

使用特权

评论回复
5
jinglixixi|  楼主 | 2020-10-29 11:13 | 只看该作者
rh10000 发表于 2020-10-29 08:40
我的小板昨晚才搞定线材组装,点亮LED。过程还算是很顺利的。
---现在的问题是,外围电路都没有了,还得买 ...

没错,这款只是个基本功能评估板,没有面向应用的考虑。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

37

粉丝