lcd汉字程序(重要) .doc_第1页
lcd汉字程序(重要) .doc_第2页
lcd汉字程序(重要) .doc_第3页
lcd汉字程序(重要) .doc_第4页
lcd汉字程序(重要) .doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

断断续续搞12864两三天了,到今天大概明白是怎么回事了,具体的工作原理,在我另外一篇转载有写,请参看(12864点阵型液晶显示屏的基本原理与使用方法)我感觉这篇写的还是比较详细的,下面我写一下,我在学习过程中碰到的一些问题,或许会对你的学习有点启发。12864与1602比起来,差别还是很大的,1602的话,基本上,就是写数据,写指令,其它一些清屏,显示设置什么的,看着数据手册是容易搞定的。12864了,我参考的书是一款带字库的fyd12864,相比proteus里的ampire12864这款就简单多了,直接写汉字的对应的编码就行了,ampire12864的话,是要用取模软件的,有需要的朋友可以baidu一下“字模提取v2.2”我要说明的是,我代码参照别人的写好了,然后用取模软件,取了几个字的,copy到keilc的时候,在仿真中显示乱码,因为这个问题,耽误了好多时间,解决方法其实很简单,在取模软件中,设置一下参数 软件里设置好纵向取膜,字节倒反。12864学习过程中,还有一个难题,就是页 page 行 row 列 column学过数据库的朋友都知道,数据表就是由行与列组成的,那么12864的行与列也是这个意思12864顾名思义就是128*64的大小,我们看一下屏幕,很容易看到,列是128 也就是所谓的长。行了就是64,所谓的宽,这是你直观的感受,事实上,它是由两块64*64的液晶屏组成的,这就是数据手册上,cs1 cs2的用处了,正如你所想,cs1 cs2就是选择这两块液晶屏的作用,至于是0或是1这个就要看你所使用液晶手册上面的参数了,proteus里的是低电平,选通。这个可以在后面我给的代码中看到。行列说了,下面来说页,学过操作系统的朋友,都知道windows的虚拟内存就是一页页组成的,同样的,在nand flash中,也有这样的概念,在手册上可以看到页是0-7也就是8页,为什么是8页了。我们在取模软件看可以看到,一个字是16*16的,而屏幕是64*64不难看出,一屏可以显示4*4个字,那么半个字就是一页。这点可以在后面的代码中看到。讲了上面这些概念之后,我们来接合代码讲一下,你就会明白其实很简单。这个是公共函数,显示图像,字符,汉字,都要调用这个函数。理解了它,基本上12864就学会了#define lcdstartrow 0xc0 /设置起始行指令#define lcdpage 0xb8 /设置页指令#define lcdline 0x40 /设置列指令void vshowcustomrow(unsigned char ucpage,unsigned char ucline,unsigned char ucwidth,unsigned char *ucarow)/取值范围:ucpage:07;ucline:0127;/unsigned char uccount; ucwidth:0127;ucline+ucwidth1128。 if(ucline64) /如果小于64 显示在左半屏 cs1=0; /选中cs2=1;writecommand(lcdpage+ucpage); /设置页地址 writecommand(lcdline+ucline); /设置列地址if(ucline+ucwidth)64) for(uccount=0;uccountucwidth;uccount+)writedata(*(ucarow+uccount);elsefor(uccount=0;uccount64-ucline;uccount+)writedata(*(ucarow+uccount);cs1=1;cs2=0;writecommand(lcdpage+ucpage);writecommand(lcdline);for(uccount=64-ucline;uccountucwidth;uccount+)writedata(*(ucarow+uccount);elsecs1=1;cs2=0;writecommand(lcdpage+ucpage);writecommand(lcdline+ucline-64);for(uccount=0;uccountucwidth;uccount+)writedata(*(ucarow+uccount);下面是写汉字函数void vshowonechin(unsigned char ucpage,unsigned char ucline,unsigned char *ucachinmap)vshowcustomrow(ucpage,ucline,16,ucachinmap); /先画上面8行也就是一页,一个字的半个字vshowcustomrow(ucpage+1,ucline,16,ucachinmap+16); /后半个字下面是字符函数 void vshowonechar(unsigned char ucpage,unsigned char ucline,unsigned char *ucacharmap)vshowcustomrow(ucpage,ucline,8,ucacharmap);vshowcustomrow(ucpage+1,ucline,8,ucacharmap+8); /ascii码瘦一点,是汉字一半下面是图像函数 void vshowgraph(unsigned char ucpage,unsigned char ucline,unsigned char ucwidth,unsigned char uchigh,unsigned char * ucagraph)unsigned char uccount;for(uccount=0;uccountuchigh;uccount+)vshowcustomrow(ucpage+uccount,ucline,ucwidth,ucagraph+uccount*ucwidth); /图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论