打印

求大神帮忙,关于LCD1602里E(使能端)的问题

[复制链接]
3228|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
i足以|  楼主 | 2013-4-14 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在关于E的问题,/*?????*/处发现如果E=1在RS,RW之前的话会出现数据丢失,而如果E在两者之后就没问题了。可是我查了很多资料都没看到E的先后问题,求解
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BF=P0^7;
uchar code string[]={"HELLO.WORLD"};
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
void delay1ms(uchar i)
{
        uchar j;
        while(i--)
        {
                for(j=0;j<115;j++);
        }
}
/*****************************************************
函数功能:判断液晶模块的忙碌状态
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
bit busy_lcd()
{
        bit result;
        E=1;           /*大大问题??????????*/
        RS=0;
        RW=1;
        /*E=1;大大问题*/
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result=BF;
        E=0;
        return result;
}
/*****************************************************
函数功能:将模式设置指令或显示地址写入液晶模块
入口参数:dictate
***************************************************/
void com_lcd(uchar com)
{
        while(busy_lcd()==1);
       
        RS=0;
        RW=0;
        E=0;
        _nop_();
        _nop_();
        _nop_();
        P0=com;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=0;

}

/*****************************************************
函数功能:指定字符显示的实际地址
入口参数:x
***************************************************/
void addrrom_lcd(uchar add)
{
        com_lcd(0x80|add);
        delay1ms(10);
}
/*****************************************************
函数功能:将数据(字符的标准ASCII码)写入液晶模块
入口参数:y(为字符常量)
***************************************************/
void writer_lcd(uchar dat)
{
        while(busy_lcd()==1);
       
        RS=1;
        RW=0;
        E=0;
        P0=dat;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=0;
}
/*****************************************************
函数功能:对LCD的显示模式进行初始化设置
***************************************************/
void init_lcd()
{
        delay1ms(15);
        com_lcd(0x38);
        delay1ms(5);
        com_lcd(0x38);
        delay1ms(5);
        com_lcd(0x38);
        delay1ms(5);
        com_lcd(0x01);
        delay1ms(5);
        com_lcd(0x06);
        delay1ms(5);
        com_lcd(0x0f);
        delay1ms(5);

}
void main()
{
        uchar i;
        init_lcd();
        delay1ms(10);
        while(1)
        {
                 i=0;
                 com_lcd(0x01);
                delay1ms(2);
                 addrrom_lcd(0x00);
                 delay1ms(2);
                 while(string[i]!='\0')
                 {
                         writer_lcd(string[i]);
                        delay1ms(100);
                        i++;
                 }
                 while(1);
        }       
}

相关帖子

沙发
hlzhaowu| | 2013-4-14 23:02 | 只看该作者
建议楼主那种方式行得通就用那种方式好了

使用特权

评论回复
板凳
rabbitws1987| | 2014-3-8 21:31 | 只看该作者
说明书上的E时序有问题,能显示就好了,不必纠结于资料怎么说

使用特权

评论回复
地板
ningling_21| | 2014-3-8 21:55 | 只看该作者
资料没错的话要严格按照资料的时序来写程序...

使用特权

评论回复
5
天风立马| | 2014-3-9 22:35 | 只看该作者
估计你没满足时序要求。你可以试一下放前面再加个延时,如果也没问题,那真是你没按照时序写。

使用特权

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

本版积分规则

3

主题

6

帖子

0

粉丝