标题: STM32驱动1602显示屏,E引脚产生高脉冲问题? [打印本页]

作者: liuhong213218    时间: 2019-12-12 08:46
标题: STM32驱动1602显示屏,E引脚产生高脉冲问题?
(1)STM32驱动1602液晶显示屏,需要使1602的E引脚为高脉冲,才能写指令和数据进1602显示屏。

(2)51单片机和STM32单片机产生高脉冲所写的程序不一样。

(3)我用示波器在STM32驱动1602上电后检验其每个引脚的波形,其它15个引脚波形都符合我写的程序,就E引脚始终是高电平。

(4)使STM32产生高脉冲要用到通用定时器,使其计时,然后产生一个脉冲吗?

需要你们指导一下。


作者: pcbboy    时间: 2019-12-12 14:12
用LED点灯程序看看那个引脚是否有问题,给个200U脉冲给哪个引脚出用示波器看看如果波形正常就没问题的。
作者: pcbboy    时间: 2019-12-12 14:41
补充一下。细看了你说的E引脚波形,哪些延时需要调整一下,比如下面两个延时里面,一个5uS,有人用到1uS,这个确实算高速脉冲,但这样做可靠性不高,建议给到10US左右,另外一个延时大约380uS,调整一下再试一试。
/*********************************************************************
*功    能:写入LCD初始化时的命令,不可以检测忙状态
*********************************************************************/
void LCD_WriteInitcmd(uchar cmd)
{                          
        LCD_RS_0;
        delay_nus(5);
        LCD_RW_0;
        delay_nus(5);
        DATAOUTCLR;
        DATAOUT |= cmd;
        LCD_EN_0;
        delay_nus(300);
        LCD_EN_1;
        delay_nus(300);
        LCD_EN_0;
        delay_nms(5);
}
/*********************************************************************
*名    称:LCD_Writecmd()
*功    能:写指令到LCD1602,指令数据占一个字节
*入口参数:cmd:待写入的指令
*出口参数:无
*********************************************************************/
void LCD_Writecmd(uchar cmd)
{  
       
        while(LCD_busy());
        LCD_RS_0;           //对同一个寄存器的两次写入,中间延时一会
        delay_nus(5);
        LCD_RW_0;
        delay_nus(5);
        LCD_EN_0;
        delay_nus(300);//产生脉冲
        DATAOUTCLR;
        DATAOUT |= cmd;
        LCD_EN_1;
        delay_nus(300);//必要的延时
        LCD_EN_0;           //下降沿,LCD1602开始工作
        delay_nus(5);
       
}
/*********************************************************************
*名    称:LCD_Writedata()
*功    能:写一字节数据到LCD1602
*入口参数:dat:无符号字节类型,0~255  包括各个ASCII码字符
*出口参数:无
*********************************************************************/
void LCD_Writedata(uchar dat)
{                        
        while(LCD_busy());//等待LCD1602空闲
        LCD_RS_1;
        delay_nus(5);
        LCD_RW_0;
        delay_nus(5);
        DATAOUTCLR;
        DATAOUT |= dat;
        LCD_EN_1;                //先拉高
        delay_nus(300);        //很重要的延时,经调试,延时300us以上才可以
        LCD_EN_0;       //下降沿,开始写入有效数据
        delay_nus(5);
}

作者: wulin    时间: 2019-12-12 15:21
将1602的E引脚使能端拉高是为制造有效的下降沿做准备,不是高电平或低电平有效,是陡峭的下降沿才有效。
作者: 李泽训    时间: 2019-12-12 15:54
用示波器抓一下波
作者: pcbboy    时间: 2019-12-12 17:24
李泽训 发表于 2019-12-12 15:54
用示波器抓一下波

示波器波形是按 (LCD_EN_1;delay_nus(10);)以下代码测试的,
当“LCD_EN_1;delay_nus(5);”这样就会乱码,但波形不明显,按这个测试当E=15uS时不可靠,见图片显示不完整。
       

/*********************************************************************
*功    能:写入LCD初始化时的命令,不可以检测忙状态
*********************************************************************/
void LCD_WriteInitcmd(uchar cmd)
{                          
        LCD_RS_0;
        delay_nus(1);
        LCD_RW_0;
        delay_nus(1);
        DATAOUTCLR;
        DATAOUT |= cmd;
        LCD_EN_0;
        delay_nus(1);
        LCD_EN_1;
        delay_nus(10);
        LCD_EN_0;
        delay_nms(1);
}
/*********************************************************************
*名    称:LCD_Writecmd()
*功    能:写指令到LCD1602,指令数据占一个字节
*入口参数:cmd:待写入的指令
*出口参数:无
*********************************************************************/
void LCD_Writecmd(uchar cmd)
{  
       
        while(LCD_busy());
        LCD_RS_0;           //对同一个寄存器的两次写入,中间延时一会
        delay_nus(1);
        LCD_RW_0;
        delay_nus(1);
        LCD_EN_0;
        delay_nus(1);//产生脉冲
        DATAOUTCLR;
        DATAOUT |= cmd;
        LCD_EN_1;
        delay_nus(10);//必要的延时
        LCD_EN_0;           //下降沿,LCD1602开始工作
        delay_nus(1);
       
}
/*********************************************************************
*名    称:LCD_Writedata()
*功    能:写一字节数据到LCD1602
*入口参数:dat:无符号字节类型,0~255  包括各个ASCII码字符
*出口参数:无
*********************************************************************/

void LCD_Writedata(uchar dat)
{
        while(LCD_busy());
         
        LCD_RS_1;
        delay_nus(1);
        LCD_RW_0;
        delay_nus(1);
  DATAOUTCLR;
        DATAOUT |= dat;
  delay_nus(1);       
        LCD_EN_1;  
  delay_nus(10);
        LCD_EN_0;  
        delay_nus(1);
         
       
}


lcd_20191212172320_NG.jpg (792.01 KB, 下载次数: 52)

lcd_20191212172320_NG.jpg

E_RS.jpg (1.08 MB, 下载次数: 48)

E_RS.jpg





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1