【疯道】字库型LCD12864显示图片(基于51)
字库型LCD12864显示图片在网上看到好多大牛用LCD12864显示图片,作为新手的我,顿时感到其无比神奇(好奇归好奇,要学会还得下点功夫),萌生学习的念头,再网上找了好多资料,代码。经过几天研究略有成就(自我感觉良好,其实就是能够显示出来一个整屏的图片而已)。
呵呵,,,仅供同为新手,同样好奇的朋友参考,(大牛勿笑,可以多多指教,分享经验哦),好了废话少说,先上几张效果图
(手机拍摄,像素不佳,还望体谅。图片大小用画图工具进行了调整,,被逼的,不然太大穿不上来啊。。。)
打一下广告,哈哈哈
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911175757747.jpg.pagespeed.ic.lsr8VkLBXB.jpg
搞笑一下(是个冷笑话)
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911175816869.jpg.pagespeed.ic.f5sCra5Hpj.jpg
欣赏一下美女吧。。。。(本想养眼,,没想到点阵屏。。5555.。。)
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911175841234.jpg.pagespeed.ic.uBmt25M0s8.jpg
小时候回家,在坑坑洼洼的土路上,骑个自行车还是蛮高兴地,,,,
现在呢。。。。。。。。。。。。。。
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911175900395.jpg.pagespeed.ic.jvbTfnCm-R.jpg
好了,,不多说了,,分享一下
(基本的操作大家自己查看手册,仅分享主体部分,当然代码等会上传)
1、12864绘图分为上下两个半屏
上半屏:x地址为0x80-0x80+7共8列
y地址为0x80-0x80+31共32行
上半屏:x地址为0x88-x88+7共8列
y地址为0x80-0x80+31共32行
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911171213664.jpg.pagespeed.ic.RK3Lm9KdmL.jpg
2、绘图 RAM(GDRAM)
绘图显示 RAM提供 128 ×8 个字节的记忆空间,在更改绘图RAM时, 先连续写入水平与垂直的坐标值,
再写入两个字节的数据到绘图 RAM,而地址计数器( AC)会自动加一;在写入绘图RAM的期间,绘图
显示必须关闭,整个写入绘图 RAM的步骤如下:
1)、关闭绘图显示功能。
2)、先将水平的位元组坐标(Y )写入绘图RAM地址;
再将垂直的坐标(X )写入绘图 RAM地址;
将D15—— D8写入到 RAM中;
将D7——D0写入到 RAM中;
打开绘图显示功能。
注意:这部分是手册上的,地址计数器( AC)会自动加一,(这句话我的理解是在一个X地址中连续写入两个字节时,AC自动加一),,,网上有资料说,每次只需改变Y地址,X自动加不用改,我用时发现X也必须修改,,(可能是我对资料理解有误,愿大家共同讨论)。
3、绘图显示指令
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911172205967.jpg.pagespeed.ic.gdu0dHvjF8.jpg
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911172232877.jpg.pagespeed.ic.Btiow2vjWb.jpg
(1)、首先设置绘图RAM地址时需要先写入一条指令,将指令集设置为扩充功能,
(2)、写入地址之前关闭绘图RAM.
(综上两条,需写入指令0x34)
(3)、先写入Y,在写入X,然后打开绘图RAM。故写入地址后,需要写入指令0x36.
说的再多不如代码看着感性,,哈哈,,下面把这部分代码赋值过来。(为了保证的代码整齐,直接截图,)
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911173437799.jpg.pagespeed.ic.9Y7BP_6k5G.jpg
(为了能够用一副图表示,缩小了字号,不过大家应该看得清,,代码会上传,,,不要着急哦,,可以下下来白看代码边看资料 哦)
4、分析代码(水平有限,错误在所难免,望指正,高手跳过)
该代码用了for的嵌套,第一个for是为了控制上下半屏,第二个for是Y地址,第三个for是X地址控制。
在最内层,先写指令WriteCommand_LCD12864(0x34);打开扩充指令集,关闭绘图RAM,
再写入Y地址,由于上下半屏Y都是从0x80-(0x80+31),故无需考虑j值,即半屏控制。
写入X地址时需要考虑j的值,(对代码改进的话可以省略半屏控制,,楼主很懒,,这里跳过,,哈哈哈)
打开绘图RAM,WriteCommand_LCD12864(0x36);
注意: WriteData_LCD12864(*(ucpWriteGDRAM++));为两条。每个X地址为16位,而我们的数据传输用的8位,故先要写入高位在写入低位。
5、显示效果
效果图已经传了,,还有几张要修改大小,,,楼主很懒,,,,这里跳过喽。。。。
6、图片需要用单色位图(BMP格式),这里就不多说了,,可以自己制作(楼主也不会啊,,,,求指教,,求带,,求罩。。。)
当然,,可以网上下载的哦,,,(其实楼主用的是现成的,,,别人用过的)
7、对位图需要进行编码,这里可以用的软件很多,,
本人用的zimo软件
http://image.ednchina.com/GROUP/uploadfile/201409/x20140911181137151.jpg.pagespeed.ic.2xqI_d7Pv5.jpg
标记2处,用横向取模
标记3处,必须去掉勾,即不选择,,因为先写入的是高位
好了,,就歇着吧。。。希望大家指正,,多多交流,,多多指导,,
希望高手教我动画现实啊 ,,,,
整个程序,包括BMP图片都在压缩包中,,,,
厉害。感谢分享。 jianhong_wu 发表于 2014-9-11 23:39
厉害。感谢分享。
多谢鸿哥支持,,呵呵,,鸿哥以后多指教哦 不错,学习学习:lol:lol 程序编译通不过啊?? 又一个暑假 发表于 2014-9-12 20:56
程序编译通不过啊??
不可能啊,,,等一下,我下下来试一下 疯道 发表于 2014-9-12 22:10
不可能啊,,,等一下,我下下来试一下
能通过啊。。。只是有两个函数没用,有警告而已,不影响,没来得及改,你可以删掉那两个函数 可以看这个,,这个把那两个函数删了,,没有警告 自己顶。。。哈哈
代码不通过问题1
这个问题已解决,,软件未破解,有代码大小限制
欢迎指教,欢迎交流,,欢迎,,,,,,
感谢分享。资料很好很不错。 弱弱问一句图片.jpg怎么转成.bmp 又一个暑假 发表于 2014-10-6 10:35
弱弱问一句图片.jpg怎么转成.bmp
用电脑自带的画图工具,保存成BMP格式,就OK了
“疯道“我原来那QQ被盗了,现在需要你协助,麻烦你加我新QQ帮忙一下3030034835
页:
[1]