【新提醒】基于HC32V103开发板的OLED显示驱动
OLED屏是一种自身发光的显示器件,它有许多种类,如按色彩分,可分为单色屏、双色屏及彩色屏等;按尺寸分,可分为0.91'、0.96'屏等;按接口方式分,可分为I2C接口和SPI接口等。
其中,以I2C接口的OLED屏最有特点,它只用2个I/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 运行效果
赞 (0)