OLED显示图片
前提:根据数据手册编写好OLED的IIC时序程序,有发送命令和发送数据的函数,OLED初始化后设置页模式,能成功显示文字,字母和数字后再尝试显示图片
准备要显示的图片
1.先打开画图工具,重新调整画布的大小,因为OLED屏是128x64像素的,所以画布大小也调成128x64
2.按住Ctrl和滚轮调大画布,就可以在上面画出自己想显示的图案,画图过程略
3.画完后点击另存为,在保存类型中选择单色位图,保存
4.然后打开取模软件打开刚刚保存的位图
5.打开后便可以看到位图显示在了点阵中,点击取模方式中的C51格式,生成点阵,然后复制到程序中,用数组保存着,不用分开保存
/*-- 调入了一幅图像:C:\Users\Administrator\Desktop\1.bmp --*/
/*-- 宽度x高度=128x64 --*/
code char bmp[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
……………………
};
编写程序
1.编写显示图片的函数,与清屏函数很像,两层循环,第一层遍历页,第二层遍历列,在遍历列时写入位图数组的内容即可
页可以想象为行,共有8行,每一行里都有128列,每一列的数据是8bit的
/**
* @brief 显示图片
* @param 位图图片数组
* @retval无
*/
void Show_Bmp(unsigned char* bmp)
{
unsigned i,j;
//i选择每一页,Page0~Page7
for(i = 0;i<8;i++)
{
//第一页加偏移量,就能遍历完全部页
OLED_WritCommand(0xB0+i);
//设置列开始位置,从第0列开始
OLED_WritCommand(0x00);
OLED_WritCommand(0x10);
/*因为每一页有128列,j就要控制每次刷完128列,即bmp数组中每次取128个数据
因为数据都是8bit的数据,所以一列8位二进制的数就可以不用管
当i = 0,即Page0时,j刷0~127列,即放入数组下标为0~127的数据
当i = 1, 即Page1时,j也是刷0~127列,但从数组中取出的就是下标为128~255的数据,因为不能再从数组开头处取数据,要不断 往下取数据才能将图案完整显示出来
i = 0,j = 0, j<128 =》 取数组下标为0~127的数据
i = 1, j = 128, j<128*2=256 =》 取数组下标为128~255的数据
i = 2, j = 256, j<128*3=384 =》 取数组下标为256~383的数据
……
*/
for(j = 128*i;j<128*(i+1);j++)
{
OLED_WritData(bmp[j]);
}
}
}
2.main函数中直接调用显示图片的函数即可
void main()
{
//1.OLED初始化
OLED_Init();
//2.确认页寻址模式
OLED_WritCommand(0x20); //设置内存地址
OLED_WritCommand(0x02); //设置页寻址模式
OLED_Clear(); //先清屏
//显示图片
Show_Bmp(bmp);
while(1)
{
}
}