打印

我LCD屏的字符显示列值只能取16的倍数,没法小步进

[复制链接]
1828|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
t-z-sh|  楼主 | 2008-7-26 17:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
模块是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);
       }
}

相关帖子

沙发
农民讲习所| | 2008-7-26 18:16 | 只看该作者

首先要完成写点函数

使用特权

评论回复
板凳
t-z-sh|  楼主 | 2008-7-26 18:36 | 只看该作者

请问楼上写点函数具体指什么?write_LCD_data?

使用特权

评论回复
地板
t-z-sh|  楼主 | 2008-7-26 18:39 | 只看该作者

我自己再说得细致点

现象就是以下三个语句得到相同显示列位置:
    disp_16by8(0,3,disp_A);
    disp_16by8(2,8,disp_A);
    disp_16by8(4,13,disp_A);

使用特权

评论回复
5
gwnpeter| | 2008-8-16 13:52 | 只看该作者

你的表达很有问题,搞不清楚你的需求

有这个语句看看
#define DISP_16BY8(a,b,c) disp_16by8(a,b|0xfff0,c)

使用特权

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

本版积分规则

13

主题

48

帖子

0

粉丝