找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1862|回复: 0
打印 上一主题 下一主题
收起左侧

基于HC32V103开发板的OLED显示驱动

[复制链接]
跳转到指定楼层
楼主
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 运行效果

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表