lcd显示数字--原创
{
Temp = digit8[i]
For(j=0 ;j<16; j++)
//此处显示16个bit,代码省略具体结果lcd编程手册
}
//----------------------------------
一般如果显示0~9,就要把所有的数字对应的数组都要,放到二维数组里面。下面给出一个
unsigned short digital_Array[10][8] = {
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)
For(i=0 ;i<8; i++)
{
Temp = p[i]
For(j=0 ;j<16; j++){
//此处显示每个bit,代码省略,具体结合lcd编程手册
}
}
}
上图是一个16行,8列的数据,术语叫做1608字库。
看A这一列是16行,每个格子是1个bit,(注意没有填的都是0)那么A这列的值是0x000x00,(注意方向是从上到下,最高bit是在上面)
同理可得到B这一列的值是0x0E0x38
得到c这一列的值是0x110x44
得到D这一列的值是0x1084
得到E这一列的值是0x1084
{0x0000,0x0700,0x088C,0x1044,0x1044,0x0888,0x07F0,0x0000},/*"9" */
};
简单例子,
U8 str[10] = “012356789”;
U8 temp;
U16 * p;
For(i=0; i<10; i++)
{
P = digital_Array[str[i] – ‘0’];
{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" */
明显,上面的图,如果不是色盲的话,看到的就是一个数字8。在编程的时候,
每个格子都对应lcd屏幕上的一个点。已经知道lcd从上到下扫描的,
假设要把数字8,显示在lcd屏幕的左上角(认为坐标是0,0)。那么就要先把第一列的值A1,A2,A3,…A16,把这16个bit的数据写到对应的坐标位置,如下面代码(注意y方向在变化)
…..
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++)
{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"列的值是0x0E38,
得到H这一列的值是0x0000
问:为什么要从上面第一开始算?
答:这个是编程序比较方便。一般都是认为屏幕的左上角是(0,0)点,
从左到右,X方向,逐渐增多。从上到下y方向,依次增大。
另外lcd扫描的特性,可以从Z字形开始扫描。常规的是,从上到下扫描,再从左到右扫描。以左上角为例,有两种方式,先向下扫描,到屏幕的底部的时候,再从左向右扫描。那么同理右上角,左下角,右下角也是每个都有2种扫描方式。4个角加起来,总共有8种扫描方式。根据常规(即符号正常人的思维和编程方便),所以都是选择第一个左上角的,先下扫描,再从左到右扫描。
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)
{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" */