基于篇一我已经介绍了IIC的一些基本时序,本篇文章将教会你们如何初始化程序以及点亮像素点。
一、OLED屏幕的简单介绍:
1.OLED显存介绍:
我所使用的OLED为128*64分辨率的,即RAM为128*64位。而RAM分为8个页面,从PAGE0到PAGE7,如图所示:
而每一页有8个像素,即八位,而刚好一个字节的数据就是八位,8*8=64就是这么来的。我想这不是巧合,可能就是为了让我们可以用一个字节的数据表示某一列的八个像素点的亮灭。从下图可知,其低位是在最上面的,高位依次往下。
而我们点亮OLED相当于将这128*64个像素点点亮的过程,和点阵屏类似。
下面来介绍如何点亮OLED:
二、OLED屏幕的驱动
1.向屏幕写数据:OLED_WR_Byte
IIC写时序图如下:
首先开始IIC通信(START),然后发送器件地址(DEVICE ADDRESS) :0X78;等待应答,然后发送命令(OLED命令寄存器地址:0x40;数据寄存器地址:0x00),等待应答,发送数据,等待应答,结束信号;
//发送一个字节
//mode:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 mode)
{
I2C_Start();
Send_Byte(0x78);
I2C_WaitAck();
if(mode)
Send_Byte(0x40);
else
Send_Byte(0x00);
I2C_WaitAck();
Send_Byte(dat);
I2C_WaitAck();
I2C_Stop();
}
2.OLED的初始化
初始化流程图:
//OLED的初始化
void OLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能A端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA0,1
GPIO_SetBits(GPIOA,GPIO_Pin_11|GPIO_Pin_12);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mo