微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 无字库12864液晶的驱动方法

无字库12864液晶的驱动方法

时间:12-27 来源:互联网 点击:

函数应用举例

1. 在指定位置画1点
先给定页和列坐标,就指定了1列8个像素点,1个点的位置从上到下对应数值为0X01、0X02、0X04、0X08、0X10、0X20、0X40、0X80。
例如在第9列、第3页最低位画点:
LcdSetxy(9,3);
LcdWriData(0X80);
2. 在指定位置画连续8个点构成的短竖线
例如位置同上,则
LcdSetxy(9,3);
LcdWriData(0XFF);
3. 画水平线
例如从第10列起在第3页底部画1根长度50像素点的连续直线:
unsigned char i;
LcdSetxy(10,3);
for(i=0;i50;i++)
{
LcdWriData(0X80); //循环中列地址自动递增
}

明白了以上基础,我们就可以进一步画出长短竖线、更粗的水平线、水平双线矩形方框、黑块等,这样就可以画简单图形了。

怎样显示字符或汉字

字符和汉字实质是在一个矩形区域内由一系列像素点构成的图形,也就是点阵图。例如在一个8×8点阵区域内,字母“L”点阵如图8左所示。如果要在第0页第0……第7列显示这个字符,那么就应该在相应的显示缓冲区装入相应的数据如右边图所示,这里用1表示显示像素,不显示的像素都是0,为清楚起见图中就不标出,上方表示列号0……7,那么从0列开始,各列的二进数和16进数分别表示为:
0B00000000 : 0X00
0B01000010 : 0X42
0B01111110 : 0X7E
0B01000010 : 0X82
0B01000000 : 0X40
0B01000000 : 0X40
0B01100000 : 0X60
0B00000000 : 0X00

所以我们就用一个8元素的数组来表示这个“L”:
const unsigned char L[8]={0X00,0X42,0X7E,0X82,0X40,0X40,0X60,0X00};

要在液晶上的第3页第6列显示这个“L”,就使用如下函数:
LcdShow88(unsigned x,unsigned y, const char *p);

其中p指向8点阵字符数组,那么具体代码为:
LcdShow88(6,3, L);

打造字模就是按照所需显示的文字符号一一编制各自的数组,上述8×8点阵就可以在1页高度内显示,实际上其上下左右都要留空,这样有效的点阵只有6×6,要显示数字和ASCII字符尚可,简单笔画的汉字也行,可是笔画稍多的汉字就不行了。对于汉字显示我们一般使用16×16点阵的字模。这样的汉字高度占2页,宽度是16列,12864的液晶可以显示4行,每行8个字。所有的12864液晶不论尺寸大小都是如此。

一个16点阵字模数组具有32个元素,每一页有16个元素。因此显示这样的汉字时,就要给同一列的某一页和下一页分别写入各自的16个元素。例如汉字“钟”的字模数组为:
const unsigned char ZHONG[]={0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF8,0x10,0x00, 0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00};

要在第2页、第6列开始显示“钟”,我们用一个函数:
LcdShow1616(unsigned x,unsigned y, const char *p);

其中参数x 是列,y是页,p指向字模数组,具体的代码为:
LcdShow1616(6,2, ZHONG);

这样,汉字就显出来了。

最后,交代一下取得点阵汉字字模的方法。

编制字模数组的好帮手——字模软件的使用

因为我们现在需要的汉字量很少,所以可以使用一些字模提取软件自己制作所需的字模。以一个很好用的绿色免费“畔畔字模提取软件”为例加以说明。

此软件在各大程序网站都有下载,下载解压后就可使用,开启界面如图9所示。选取Shape :方形,Mode:C51,取模顺序选第4种,即点阵图右上为A,右下为B,左上为C,左下为D,这是按照先右半从上到下,后左半从上到下的顺序取模。

然后在下面输入框里输入汉字回车后,左边显示点阵字,见图10。对点阵自行修饰改动,用鼠标点选即可,例如竖笔加粗等,这里没改。

点右旋90度按钮,点阵汉字右旋90度,其目的是由上往下取码,相当于显示时从左往右显示。点“提取字模”按钮,字模代码呈现在点阵下面,见图11。注意字模码有2行,上行对应旋转后的右半区域从上往下取码,下行对应左半区域从上往下取码,这就等同于旋转前的汉字从左往右取码,而上行代码对应的是汉字的上半代码,下行则对应的是汉字的下半代码。正好符合上述汉字显示程序先显示上半部后显示下半部的要求。这样就取得了例子中的字模代码。

可以把所需的汉字逐一取码,然后存在二维表中,就形成了16×16点阵字模数组。

因为单片机FLASH ROM程序存储空间较大而RAM较小,而一个16点阵汉字占据32字节,10个字就320字节,对于RAM通常在几百到1K字节以下的单片机嫌太大,所以字库应该存放在FLASH区比较合理。但是读出FLASH中的数据,程序还要变

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top