打印

如何解读12864字符串显示?(包括反白)

[复制链接]
3143|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小弟不才,想实现12864(分屏)菜单功能的改进。但驱动中的显示函数读不懂。

      从 loc=string[j]-0x20;
    //确定要显示的字符在asc表中的位置(乘上16)
起不知道是什么意思?asc怎么用?如何实现反白也没有看懂,望各位大虾指教。

      最后附仿菜单真图一张。

//x:行0~7
//y:列0~127
//asc: 指向标准交换码
//string: 指向要显示的字符串
//flag:  0 反白显示
//n: the number of the string
void en_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code *asc,unsigned char *string,bit flag)
{
    unsigned char i,j,loc;

for (j=0;j<n;j++)

{

    loc=string[j]-0x20;
    //确定要显示的字符在asc表中的位置(乘上16)

    //显示上半个字母

    for(i=0;i<8;i++)

{

    //点的位置是在左还是右

if(y+8*j+i<64)

{

    LCDSel(1);

WriteCmdToLCD12864(LCD_ON);

SetX(x);

SetZ(0);

SetY(y+8*j+i);

if(flag)

    WriteDatToLCD12864(asc[16*loc+i]);

    else

    WriteDatToLCD12864(~asc[16*loc+i]);

}

else if(y+8*j+i<128)

{

    LCDSel(2);

WriteCmdToLCD12864(LCD_ON);

SetX(x);

SetZ(0);

SetY(y+8*j+i-64);

if(flag)

    WriteDatToLCD12864(asc[16*loc+i]);

    else

    WriteDatToLCD12864(~asc[16*loc+i]);

}

}

//显示下半个字母

for(i=8;i<16;i++)

{

    //先判断点是在左还是在右

if(y+8*j+i-8<64)

{  

    if(x+1<8)
//最后一行

{

       LCDSel(1);

   WriteCmdToLCD12864(LCD_ON);

   SetX(x+1);

   SetZ(0);

   SetY(y+8*j+i-8);

   if(flag)

      WriteDatToLCD12864(asc[16*loc+i]);

       else

      WriteDatToLCD12864(~asc[16*loc+i]);

}

}else if(y+8*j+i-8<128)

{

    if(x+1<8)
      //最后一行

{

        LCDSel(2);

    WriteCmdToLCD12864(LCD_ON);

    SetX(x+1);

    SetZ(0);

    SetY(y+8*j+i-8-64);

if(flag)

    WriteDatToLCD12864(asc[16*loc+i]);

    else

    WriteDatToLCD12864(~asc[16*loc+i]);

}

}

}

}  
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

1

粉丝