SSD1306俗讲4

图片的显示

这个图片的取模方式和第三讲一样
先附上代码

//x,y:起点坐标
//sizex,sizey,图片长宽
//BMP[]:要写入的图片数组
//mode:0,反色显示;1,正常显示
void OLED_ShowPicture(u8 x,u8 y,u8 sizex,u8 sizey,u8 BMP[],u8 mode)
{
	u16 j=0;
	u8 i,n,temp,m;
	u8 x0=x,y0=y;
	sizey=sizey/8+((sizey%8)?1:0);
	for(n=0;n<sizey;n++)
	{
		 for(i=0;i<sizex;i++)
		 {
				temp=BMP[j];
				j++;
				for(m=0;m<8;m++)
				{
					if(temp&0x01)OLED_DrawPoint(x,y,mode);
					else OLED_DrawPoint(x,y,!mode);
					temp>>=1;
					y++;
				}
				x++;
				if((x-x0)==sizex)
				{
					x=x0;
					y0=y0+8;
				}
				y=y0;
     }
	 }
}

sizey=sizey/8+((sizey%8)?1:0)
代表算出纵坐标有多少个字节,距离64*128的图片,纵坐标有8个字节

for(n=0;n<sizey;n++)
最大循环把这8个字节全部写入显存,由于取模是行列式,一定要注意这里的取模方式,所以没写完一个字节,横坐标要++
for(i=0;i<sizex;i++)

temp=BMP[j];
从数组0元素开始取,取完j++

每个数组元素有8个bit
for(m=0;m<8;m++)
{
if(temp&0x01)OLED_DrawPoint(x,y,mode);
else OLED_DrawPoint(x,y,!mode);
temp>>=1;
y++;
}
然后调用画点函数,由于是低位像素再显存的上方,所以 从低位取temp>>=1; y++ 就是纵坐标+1

整个字节写完后 x加1

if((x-x0)==sizex)
如果写完了一行,x=x0 x0记录的是图片的初始横坐标,y0需要下降8行,y=y0,记录y0是方便下一次直接+8,从新定位y的地址

切记这个函数的取模方式是行列式,如果你的取模不一样,那么需要修改此函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值