化拓教育网
您的当前位置:首页lcd显示数字--原创

lcd显示数字--原创

来源:化拓教育网


上图是一个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编程手册

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容