打印

求救!!!LCM读出来送回去错位

[复制链接]
1773|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wsl_5631|  楼主 | 2010-11-1 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//发送LCD数据
void send_lcd_data(uchar _data)
{
check_lcd_status();
LCD_DI = 1;
LCD_RW = 0;
LCD_DATA = _data;
delay_nop();
LCD_EN = 1;
delay_nop();
LCD_EN = 0;
}
uchar read_lcd_data()
{
uchar  dat;
check_lcd_status();
LCD_DATA =0xff;
LCD_DI = 1;
LCD_RW = 1;
LCD_EN = 1;
delay_nop();
dat = LCD_DATA;
LCD_EN = 0;
return(dat);
}

先显示一个汉字,用下面的程序,读出来显示到下一行,列的位置右移了一列。
请问大侠怎么回事?谢谢

for(i=0;i<16;i++)
{
  set_lcd_xy(0,i);
  k = read_lcd_data();   //读取显示的数据
  set_lcd_xy(2,i);
  send_lcd_data(k);
}

相关帖子

沙发
ayb_ice| | 2010-11-1 17:12 | 只看该作者
一般不需要读
错误肯定是程序问题

使用特权

评论回复
板凳
ninibaba| | 2010-11-1 17:40 | 只看该作者
查set_lcd_xy(0,i)这个函数里面是否有i++的操作

再说,你读出来有什么作用?
重新再显示一次不就行了么
又简单又快速

使用特权

评论回复
地板
wsl_5631|  楼主 | 2010-11-1 20:53 | 只看该作者
void        set_lcd_xy(uchar x,uchar y )
{
        if(y < 64)       
        {
                select_screen(2);                         //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
                set_lcd_x(x);                                //设置行
                set_lcd_y(y);                                //设置列       
        }
        else
        {
                select_screen(1);                         //否则 (8,9,10,11,12,13,14,15)写在第二屏上
                set_lcd_x(x);                                //设置行
                set_lcd_y(y-64);                        //设置列       
        }
                       
}
没有i++这种操作的。读出来,修改部分位的数值再送回去。主要是把字符显示在任意位置用,如果起始行不是8的整数倍就需要这样操作。我上面的只是个测试程序,查问题用的。

使用特权

评论回复
5
xwj| | 2010-11-1 21:08 | 只看该作者
1、屏幕上一个字节对应的点是横排的还是竖排的?
2、很多控制器有地址自动增加功能,看是否错误打开了

使用特权

评论回复
6
wsl_5631|  楼主 | 2010-11-2 12:42 | 只看该作者
1.竖排的
2.是自增的,可自减,但不能关闭。现在操作前全部重新设置地址了,不是这个原因

使用特权

评论回复
7
wsl_5631|  楼主 | 2010-11-5 10:22 | 只看该作者
顶上去

使用特权

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

本版积分规则

43

主题

335

帖子

2

粉丝