《lcd汉字程序重要 .doc》由会员分享,可在线阅读,更多相关《lcd汉字程序重要 .doc(7页珍藏版)》请在三一办公上搜索。
1、断断续续搞12864两三天了,到今天大概明白是怎么回事了,具体的工作原理,在我另外一篇转载有写,请参看(12864点阵型液晶显示屏的基本原理与使用方法)我感觉这篇写的还是比较详细的,下面我写一下,我在学习过程中碰到的一些问题,或许会对你的学习有点启发。12864与1602比起来,差别还是很大的,1602的话,基本上,就是写数据,写指令,其它一些清屏,显示设置什么的,看着数据手册是容易搞定的。12864了,我参考的书是一款带字库的FYD12864,相比PROTEUS里的AMPIRE12864这款就简单多了,直接写汉字的对应的编码就行了,AMPIRE12864的话,是要用取模软件的,有需要的朋友可
2、以BAIDU一下“字模提取V2.2”我要说明的是,我代码参照别人的写好了,然后用取模软件,取了几个字的,COPY到KEILC的时候,在仿真中显示乱码,因为这个问题,耽误了好多时间,解决方法其实很简单,在取模软件中,设置一下参数 软件里设置好纵向取膜,字节倒反。12864学习过程中,还有一个难题,就是页 page 行 row 列 column学过数据库的朋友都知道,数据表就是由行与列组成的,那么12864的行与列也是这个意思12864顾名思义就是128*64的大小,我们看一下屏幕,很容易看到,列是128 也就是所谓的长。行了就是64,所谓的宽,这是你直观的感受,事实上,它是由两块64*64的液晶
3、屏组成的,这就是数据手册上,CS1 CS2的用处了,正如你所想,CS1 CS2就是选择这两块液晶屏的作用,至于是0或是1这个就要看你所使用液晶手册上面的参数了,PROTEUS里的是低电平,选通。这个可以在后面我给的代码中看到。行列说了,下面来说页,学过操作系统的朋友,都知道WINDOWS的虚拟内存就是一页页组成的,同样的,在NAND FLASH中,也有这样的概念,在手册上可以看到页是0-7也就是8页,为什么是8页了。我们在取模软件看可以看到,一个字是16*16的,而屏幕是64*64不难看出,一屏可以显示4*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 uc
5、Count; 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(*
6、(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);下面是
7、写汉字函数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 *ucaCha
8、rMap)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); /图像的话,当然是要连续画了上面这个三个函数搞懂之后,12864差不多。 写一个新驱动一是看手册,这点很重要,二是搜资料,代码,三是看别人的代码,关键就的调试,调试别人写的代码,搞懂是怎么回事,下面就是模仿,吸收,转化成你自己的东西代码与PROTEUS的设计图附上