《lcd汉字程序重要.docx》由会员分享,可在线阅读,更多相关《lcd汉字程序重要.docx(12页珍藏版)》请在第一文库网上搜索。
1、断断续续搞12864两三天了,到今天大概明白是怎么回事了,具体的工作原理,在我另外一篇转载有写,请参看(12864点阵型液晶显示屏的基本原理与使用方法)我感觉这篇写的还是比较详细的,下面我写一下,我在学习过程中碰到的一些问题,或许会对你的学习有点启发。12864与1602比起来,差别还是很大的,1602的话,基本上,就是写数据,写指令,其它一些清屏,显示设置什么的,看着数据手册是容易搞定的。12864了,我参考的书是一款带字库的FYD12864,相比PROTEUS里的AMP1RE12864这款就简单多了,直接写汉字的对应的编码就行了,AMPIREI2864的话,是要用取模软件的,有需要的朋友可
2、以BA1DU一下“字模提取V2.2”我要说明的是,我代码参照别人的写好了,然后用取模软件,取了几个字的,COPY到KEI1C的时候,在仿真中显示乱码,因为这个问题,耽误了好多时间,解决方法其实很简单,在取模软件中,设置一下参数软件里设置好纵向取膜,字节倒反。;项置取模方式搔向取模1当您输入缶独取模,在把姒向取模把输入的文字(字节倒序字节倒序是为保留文字字模数据的最后一个逗如果保留的话/*文字保留)*-集看120x01,0x00,Ox12864学习过程中,还有一个难题,就是页page行row歹Uco1umn学过数据库的朋友都知道,数据表就是由行与列组成的,那么12864的行与列也是这个意思128
3、64顾名思义就是128*64的大小,我们看一下屏幕,很容易看到,列是128也就是所谓的长。行了就是64,所谓的宽,这是你直观的感受,事实上,它是由两块64*64的液晶屏组成的,这就是数据手册上,CS1CS2的用处了,正如你所想,CS1CS2就是选择这两块液晶屏的作用,至于是O或是1这个就要看你所使用液晶手册上面的参数了,PROTEUS里的是低电平,选通。这个可以在后面我给的代码中看到。行列说了,下面来说页,学过操作系统的朋友,都知道WINDOWS的虚拟内存就是一页页组成的,同样的,在NANDF1ASH中,也有这样的概念,在手册上可以看到页是0-7也就是8页,为什么是8页了。我们在取模软件看可以
4、看到,一个字是16*16的,而屏幕是64*64不难看出,一屏可以显示4*4个字,那么半个字就是一页o这点可以在后面的代码中看到。讲了上面这些概念之后,我们来接合代码讲一下,你就会明白其实很简单。这个是公共函数,显示图像,字符,汉字,都要调用这个函数。理解了它,基本上12864就学会了define1CDSTARTROWOxCO设置起始行指令define1CDPAGE0xB8设置页指令#define1CD1INE0x40设置列指令voidvShowCustomRow(unsignedcharucPage,unsignedcharuc1ine,unsignedcharucWidth,unsigned
5、char*ucaRow)(取值范围:UCPage:07;uc1ine:0127;/unsignedcharucCount;UCWidth:0127;uc1ine+ucWidth1128oif(uc1ine64)如果小于64显示在左半屏CS1=O;选中CS2=1;WriteCommand(1CDPAGE+ucPage);设置页地址WriteCommand(1CD1INE+uc1ine);设置列地址if(uc1ine+ucWidth)64)for(ucCount=0;ucCountueWidth;ucCount+)WriteData(*(ucaRow+ucCount);)e1sefor(ucCou
6、nt=0;UCCOUnt64-UC1inejucCount+)WriteData(*(ucaRow+ucCount);CS1=I;CS2=0;WriteCommand(1CDPAGE+ucPage);WriteCommand(1CD1INE);for(uCCOUnt=64-UC1ine;ucCountucWidth;ucCount+)WriteData(*(ucaRow+ucCount);)e1se(CS1=I;CS2=0;WriteCommand(1CDPAGE+ucPage);WriteCommand(1CD1INE+uc1ine-64);for(ucCount=0;ucCountucWi
7、dth;ucCount+)WriteData(*(ucaRow+ucCount);下面是写汉字函数voidVShowOneChin(unsignedcharucPage,unsignedcharuc1ine,unsignedcharcaChinMap)vShowCustomRow(ucPage,uc1ine,16,UcaChinMap);先画上面8行也就是一页,一个字的半个字vShowCustomRow(ucPage+1,Uc1ine,16,ucaChinMap+16);/后半个字下面是字符函数voidVShowOneChar(unsignedcharucPage,unsignedcharuc
8、1ine,unsignedchar*ucaCharMap)vShowCustomRow(ucPage,uc1ine,8,UcaCharMap);vShowCustomRow(ucPage+1,uc1ine,8,ucaCharMap+8);ASCn码瘦一点,是汉字一半下面是图像函数voidvShowGraph(unsignedcharucPage,unsignedcharuc1ine,unsignedcharucWidth,unsignedcharucHigh,unsignedchar*ucaGraph)unsignedcharucCount;for(ucCount=0;ucCountucHigh;ucCount+)vShowCustomRow(ucPage+ucCount,uc1ine,ucWidth,ucaGraph+ucCount*ucWidth);/图像的话,当然是要连续画了上面这个三个函数搞懂之后,12864差不多。写一个新驱动一是看手册,这点很重要,二是搜资料,代码,三是看别人的代码,关键就的调试,调试别人写的代码,搞懂是怎么回事,下面就是模仿,吸收,转化成你自己的东西