Bootstrap

OLED显示图片

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)
	{
	}
}

显示图片

在这里插入图片描述

;