上图是一个16行,8列的数据, 术语叫做1608字库。
看A这一列是16行,每个格子是1个bit,(注意没有填的都是0)值是0x00 0x00, (注意方向是从上到下,最高bit是在上面)
同理可得到B 这一列的值是 0x0E 0x38
得到c 这一列的值是 0x11 0x44
得到D 这一列的值是0x1084
得到E这一列的值是0x1084
得到F这一列的值是 ,0x1144,
得到G这一列的值是0x0E38,
那么A这列的
得到H这一列的值是0x0000
问: 为什么要从上面第一开始算?
答:这个是编程序比较方便。一般都是认为屏幕的左上角是(0,0)点,
从左到右,X方向,逐渐增多。 从上到下y方向,依次增大。
另外lcd扫描的特性, 可以从Z字形开始扫描。 常规的是,从上到下扫描,再从左到右扫描。以左上角为例,有两种方式,先向下扫描,到屏幕的底部的时候,再从左向右扫描。 那么同理右上角,左下角,右下角也是每个都有2 种扫描方式。4个角加起来,总共有8种扫描方式。根据常规(即符号正常人的思维和编程方便),所以都是选择第一个左上角的,先下扫描,再从左到右扫描。
明显,上面的图,如果不是色盲的话,看到的就是一个数字8。在编程的时候,
每个格子都对应lcd屏幕上的一个点。已经知道lcd从上到下扫描的,
假设要把数字8,显示在lcd屏幕的左上角(认为坐标是0,0)。 那么就要先把第一列的值A1,A2,A3,…A16, 把这16个bit的数据写到对应的坐标位置,如下面代码(注意y方向在变化)
WriteDot(0,0,A1)
WriteDot(1,0,A2)
WriteDot(2,0,A3)
WriteDot(3,0,A4)
WriteDot(4,0,A5)
WriteDot(5,0,A1)
WriteDot(6,0,A2)
WriteDot(7,0,A3)
WriteDot(8,0,A4)
WriteDot(9,0,A5)
WriteDot(10,0,A1)
WriteDot(11,0,A2)
WriteDot(12,0,A3)
WriteDot(13,0,A4)
WriteDot(14,0,A5)
WriteDot(15,0,A16)
然后再写第二列数据
WriteDot(0,0,B1)
WriteDot(1,0,B2)
WriteDot(2,0,B3)
…..
WriteDot(14,0,B14)
WriteDot(15,0,B15)
那么可以写成一个两层的for循环来实现。
先把图中的bit数据,弄成一个数组
U8 digit8 = { 0x0000,0x0E38,0x1144,0x1084,0x1084,0x1144,0x0E38,0x0000};
For(i=0 ;i<8; i++)
{
Temp = digit8[i]
For(j=0 ;j<16; j++)
//此处显示16个bit,代码省略具体结果lcd编程手册
}
//----------------------------------
一般如果显示0~9 ,就要把所有的数字对应的数组都要,放到二维数组里面。下面给出一个
unsigned short digital_Array[10][8] = {
{0x0000,0x07F0,0x0808,0x1004,0x1004,0x0808,0x07F0,0x0000},/*\"0\" */
{0x0000,0x0804,0x0804,0x1FFC,0x0004,0x0004,0x0000,0x0000},/*\"1\" */
{0x0000,0x0E0C,0x1014,0x1024,0x1044,0x1184,0x0E0C,0x0000},/*\"2\" */
{0x0000,0x0C18,0x1004,0x1104,0x1104,0x1288,0x0C70,0x0000},/*\"3\" */
{0x0000,0x00E0,0x0320,0x0424,0x0824,0x1FFC,0x0024,0x0000},/*\"4\" */
{0x0000,0x1F98,0x1084,0x1104,0x1104,0x1088,0x1070,0x0000},/*\"5\" */
{0x0000,0x07F0,0x0888,0x1104,0x1104,0x1888,0x0070,0x0000},/*\"6\" */
{0x0000,0x1C00,0x1000,0x10FC,0x1300,0x1C00,0x1000,0x0000},/*\"7\" */
{0x0000,0x0E38,0x1144,0x1084,0x1084,0x1144,0x0E38,0x0000},/*\"8\" */
{0x0000,0x0700,0x088C,0x1044,0x1044,0x0888,0x07F0,0x0000},/*\"9\" */
};
简单例子,
U8 str[10] = “0123567”;
U8 temp;
U16 * p;
For(i=0; i<10; i++)
{
P = digital_Array[str[i] – ‘0’];
For(i=0 ;i<8; i++)
{
Temp = p[i]
For(j=0 ;j<16; j++){
//此处显示每个bit,代码省略,具体结合lcd编程手册
}
}
}