原创 关于LCD128*64(st7565)的驱动和自建汉字库的实现

2010-4-10 23:37 5964 11 20 分类: MCU/ 嵌入式

       手头有一块深圳拓普威公司的128*64的LCD液晶屏(型号为LCM6059B),驱动IC为Sitronix的ST7565,为132*65点阵。LCM6059B采用的是并口通信,(当然更改电路一些参数可以做到串行的),先不管了,凑合着用先,由于它不带字库,如果要显示GBK汉字那可麻烦了,单单一个字库就几百KB对于普通MCU来说是挺恐怖的了。对于那些需要显示汉字和中文的,ROM空间要大的惊人了。不过话有说回来,并不是所有的应用都需要用完所有的汉字,不过倒有一个不是办法的好办法,那就是自建字库,这样就可以根据所需自由裁减了。


     关于自建字库,以16*16格式为例,包括 机内码(2字节)+字模(1字节,共32个字节显示16*16点阵字) 方式存储,虽然会引入2个字节机内码的额外存储(GBK没有单独存储机内码空间),但对比于要全部存储GBK汉字字库来说,在一定条件下,所耗费的空间要小得多。这样通过查找机内码,来获取存储字模的初始地址,从而实现汉字显示。自建字库如下:


。。。


0xb8,0xe8, //机内码
//歌
0x80,0xBA,0xAA,0xAA,0xBA,0x82,0xFE,0xA2,0x90,0x0C,0xEB,0x08,0x28,0x18,0x08,0x00,
0x00,0x1E,0x12,0x12,0x5E,0x80,0x7F,0x40,0x20,0x18,0x07,0x08,0x30,0xE0,0x40,0x00,
0xc7,0xfa,


。。。
        基于ST7565驱动的128*64点阵LCD的驱动见附件。驱动中附有各种实用函数,如画图函数,ASCII与汉字显示函数,画线函数。可以在任意128*64点内开始和结束(不用考虑跨页操作,参数正确,直接调用即可),不说了,看图说话__呵呵


=============示例函数====================


     InitLCM6059B();
     PrintAscii(1,2,"    Hello World !   ");                    
     DrawLine(0,0,127,0);
     DrawLine(0,0,0,63);
     DrawLine(127,0,127,63);
     DrawLine(0,63,127,63);
     DrawLine(0,11,127,11);
     PrintText(48,13,"真的爱你#");
     ShowBMP(4,13,43,40,PicTAB);
     DrawLine(56,33,110,60);
     DrawLine(110,33,56,60);


效果图:


点击看大图


源码包下载:https://static.assets-stash.eet-china.com/album/old-resources/2010/4/9/b2031dc5-2324-46a6-b387-8a99de571fa2.rar

文章评论9条评论)

登录后参与讨论

用户224973 2011-3-23 12:50

我的C基础比较差 现在就是处理不了交叉线 说白了就是读取当前液晶显示的数据 同一个页写会冲掉之前的显示信息 需要读回来处理 但是我用KEIL编译不了你的程序...汗 不太会改啊

用户1369714 2011-3-18 15:05

回ayumi7: 哪里搞不定,这些代码是和硬件无关的。并不需要做多大修改。 回AYUMI7: 无需头文件也可以

用户224973 2011-3-16 13:47

唉~~~ 我用C51 修改来修改去的 搞不定啊 我要这个画线驱动啊.......求救!!!!!!qq272218189.

用户224973 2011-3-10 20:55

唉 没有头文件什么的 没法弄啊 又是个太监程序

用户1059843 2010-12-22 14:26

还以为是LINUX下的驱动,失望......

用户777688 2010-10-31 18:46

您好, 能将这个完整的程序发给我一下么,我刚学单片机!!!! 谢谢您!!您有 ST7565 的 51单片机的驱动么?发给我下呵呵 1!!! 1073060905@qq.com

用户1369714 2010-9-30 09:32

sfr_GP_CONTROL1 这些代表控制寄存器的地址的,根据自己实际的寄存器地址来写吧,"redefs."似乎源码包已经包含在里边了

用户325238 2010-9-29 17:50

兄弟,能不能把下面的这几个头文件也发一下 #include "regdefs.h" #include "user.h" #include "LCM6059B.h" 不然像下面的宏定义不好理解 #define LCD_PORT_CFG sfr_GP_CONTROL1 &=(~0x01) //bit0

用户325238 2010-9-29 17:46

兄弟,能否顺便把这几个库也发一下: #include "regdefs.h" #include "user.h" #include "LCM6059B.h" 不然一下的程序不好理解: #define LCD_PORT_CFG sfr_GP_CONTROL1 &=(~0x01) //bit0 #define LCD_PORT_OUT sfr_GPIOA_DIRECTION &=(~0xff); #define LCD_PORT_IN sfr_GPIOA_DIRECTION |=0xff; #define LCD_PORT sfr_GPIOA_DATA 而且下面的关键函数都是基于这些宏定义来编写的!!
相关推荐阅读
用户1369714 2012-04-12 12:34
大家好,我是itspy,关于这个博客,请大家看过来!
大家好,我是itspy,关于这个博客...,很失望,以后不会用了 如果大家有什么问题,请到我的另一个博客去留言吧 我也很希望跟大家做交流,有什么技术问题,itspy会很乐意帮助的,新博客欢...
用户1369714 2011-08-07 14:35
uip 移植在rt-thread上的源码
*/本人在以前开发过程中移植uIP到RT-Thread实时线程系统,有需要用到项目中的朋友可以参考一下。 附件是源码包,在以太网驱动采用DM9000,驱动程序和移植文件uipif.c在源码包下(rt...
用户1369714 2011-01-13 10:32
Linux内核的社会视角--Mr. Process的一生
         Linux内核是一个无比复杂的系统,要想看清大致的脉络也非易事。其实,可以把运行中的Linux想像成一个人类的社会,当中的进程就是社会中的人。人有生老病死,进程有创建、异常、终止。人...
用户1369714 2011-01-08 12:39
RT-Thread Radio 网络播放器--初次零距离接触!
      今天很高兴, 收到了RT-Thread Radio套件,还有ffx和RT-Thread工作室写的新书《RT-Thread 实时操作系统 编程指南》。 如此令人快乐的事,如此高兴,实在是想不...
用户1369714 2011-01-05 15:43
如何编写linux的驱动程序
如何编写Linux的驱动程序编写linux驱动程序,应该是一件得心应手的事,因为linux是开源的,从上往下或从下往上,一切都是那么的光明磊落的呈现于眼前。只要你愿意,你可随意了解你所想知道的东西。L...
用户1369714 2010-12-28 10:12
Busybox制作Linux根文件系统
Busybox ——嵌入式Linux中的瑞士军刀利用busybox-1.13.0制作linux根文件系统(yaffs2)源码下载:http://www.busybox.net/downloads/操作...
我要评论
9
11
关闭 站长推荐上一条 /2 下一条