打印

想以16×8显示字母,可LCD列值似乎只能按16的倍数取整

[复制链接]
1940|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
t-z-sh|  楼主 | 2008-7-26 17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
模块是ST7565R。
因为显示字母用16(行)×8(列)的格式,字库这样做的。连续字符本应各占用连续的8个column吧,可函数disps运行后第0、2、4个字符分别被第1、3、5个覆盖。disp1能把所有字符都连续显示出来,各自16列,很难看。
是否该芯片能把column自动按16取整,还是我哪里设置不对?
弄了整半天了唉,多谢!

void disp_16by8(uchar page,uchar column,uchar *str){
    uchar i;
    EA=0;WFEED1=0xA5;WFEED2=0x5A;EA=1;    
    page=page+0xb0;
    column=column&0x7f;                              // column<128.
    write_LCD_command(page);
    write_LCD_command(0x0f&column);                     //set start column adress    
    write_LCD_command(0x10|(0x0f&(column>>4)));
    for(i=0;i<8;i++)
        write_LCD_data(*(str+i));

    page++;
    write_LCD_command(page);
    write_LCD_command(0x0f&column);                       //set start column adress
    write_LCD_command(0x10|(0x0f&(column>>4)));
    for(i=8;i<16;i++)
        write_LCD_data(*(str+i));

void disps(uchar page,uchar column,uchar *str,uchar length){
    uchar i;
    for(i=0;i<length;i++){
       disp_16by8(page,column+8*i,asc_to_disp(*str));
       str=str+1;//
       delay_ms(100);
       }
}

void disps1(uchar page,uchar column,uchar *str,uchar length){
    uchar i;
    for(i=0;i<length;i++){
       disp_16by8(page,column+16*i,asc_to_disp(*str));
       str=str+1;//
       delay_ms(100);
       }
}

相关帖子

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

本版积分规则

13

主题

48

帖子

0

粉丝