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