stc15w4k32s4+12864(st7567芯片)任意位置显示任意大小图片

stc15w4k32s4+12864(st7567芯片)任意位置显示任意大小图片

新玩意儿用不来,看下面

使用的是STC的51单片机,ram需要1KB以上(毕竟屏幕显存就占用了1K(128*64/8=1024),加上其他参数,至少使用1280B的STC12系列)
屏幕是st7567主控的12864屏幕。
除了两个指示灯用了P4口外,其他没有用到STC的特殊功能,所以理论上只要ram大于1K的单片机都可以很方便的移植。
主代码是在网上下载的,自己删除了不需要的部分,添加了下面的代码,已记不清原作者了,抱歉Orz……
如有侵权,可以联系删除…………

实现方式

由于技术不到家,也没有仔细研究过ST7567芯片的PDF,不知道能不能实现读屏幕的操作。所以用了最笨的办法,使用1Kram作为屏幕显存,所有内容更新只在显存中操作,更改显存相对较为方便。

因为做了显存,所以实现方法很简单,计算出高度宽度,然后高度数据通过位移后与原始数据“或”显示即可。

具体代码:

/*********************************
函数名称:write_pic
功能:LCD显示任意大小图片
输入:x起始坐标,y起始坐标,x结束坐标,y结束坐标,图片数据
输出:无
备注:
*********************************/
void write_pic(unsigned char x,unsigned char y,unsigned char x0,unsigned char y0,unsigned char *pic)
{
	unsigned char i1,i2=0,j1,j2=0,k,y1;
	i1=x0-x;	   //计算宽度
	j1=(y0-y)/8;   //计算高度
	k=y%8;	       //计算高度偏移量
	y1=y/8;	       //起始行
	for(j2=0;j2<=j1;j2++)//高度循环
	{
		for(i2=0;i2<=i1;i2++)//宽度循环
		{
		buff[x+(y1+j2)*128+i2]|=pic[i2+j2*(y0-y+1)]<<k;
		buff[x+(y1+j2+1)*128+i2]|=pic[i2+j2*(y0-y+1)]>>(8-k);
		}
	}
}

到主循环中,就一句话

write_pic(0,0,11,11,&BMP2[0]);

就搞定了显示。

然后再加一点,就可以很容易的吧这个字动起来

asx++;
write_pic(asx,asx,asx+11,asx+11,&BMP2[0]);
if(asx>52){asx=0;}

最后的成果就是:动起来了(无奈的残影)在这里插入图片描述
代码下载地址:https://download.csdn.net/download/inced/87486575

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值