显示有两种模式:
1、MCU RAM 操作之后一起写入显示屏的RAM
在MCU上分配一个成员大小为8位的数组 长度是像素点数的1/8(一位控制一个像素点)
如图:数组是Image_BW
之后是用 显示的操作算法将每个点由对应的数字或字母 汉字的字模写入数组中
最后将数组一起写入显示屏的RAM
OLED_GUIInit();
Paint_NewImage(Image_BW,OLED_W,OLED_H,90,WHITE);
OLED_Clear(WHITE); //F7
OLED_Display(Image_BW); //Clear
OLED_Clear实际就是 将Image数组中所有成员都变成对应的颜色对应字节
void OLED_Clear(u16 Color)
{
u16 X,Y;
u32 Addr;
for (Y = 0; Y < Paint.HeightByte; Y++)
{
for (X = 0; X < Paint.WidthByte; X++)
{//8 pixel = 1 byte
Addr = X + Y*Paint.WidthByte;
Paint.Image[Addr] = Color;
}
}
}
OLED_Display函数中的OLED_WR_DATA8 是将数据写入显示屏的RAM内
void OLED_Display(unsigned char *Image)
{
unsigned int Width, Height,i,j;
u32 k=0;
Width = 250;
Height = 16;
OLED_WR_REG(0x24);
for ( j = 0; j < Height; j++)
{
for ( i = 0; i < Width; i++)
{
OLED_WR_DATA8(Image[k]);
k++;
}
}
EPD_Update();
}
EPD_Update 函数是将显示屏内RAM空间的直接显示出来 显示效果由 寄存器0x22的值来控制,如下参考手册
void EPD_Update(void)
{
OLED_WR_REG(0x22); //Display Update Control
// OLED_WR_DATA8(0xF7); //zhongjingyuan
OLED_WR_DATA8(0xFF); //test FF 91
//F7 Mode1
//FF Mode2 不频闪 直接显示 刷新很快 咨询客服之后 说是局部刷新 但是测试之后显示效果不好,有些许残影,建议用算法操作一下 参考裸屏规格书P17
//91 Mode1 不显示
//C7 Mode1 不显示
//B1 Mode1 不显示
//CF Mode2 不显示
//B9 Mode2 不显示
//B1 Mode2 不显示
//99 不显示
//04 不显示
//03 不显示
//C0 不显示
OLED_WR_REG(0x20); //Activate Display Update Sequence
Epaper_READBUSY();
}
参考裸屏规格书P17
2、分字节先写入显示屏的 RAM 然后给指令显示
OLED_WR_REG(0x24);
for ( j = 0; j < 251; j++) //写入白色
{
for ( i = 0; i <16;i++)
{
OLED_WR_DATA8(WHITE);
}
}
EPD_Update();
以上两种 实际上是相同的显示原理
只是第二种将数据边操作边一位一位写入RAM
最后发指令显示