晒下LCD的代码

2019-07-15 20:37发布

本帖最后由 alittleharry 于 2014-3-16 20:09 编辑

下面是1602液晶初始化代码 ,4位模式数据线模式;第2段到第5段是什么意思?LCD指令码没有0X0002和 0X0003
//LCD_DATA 为数据总线
//LCD_CMD_W_timing() 为写指令操作时序
void OpenLCD(void)

{               
        Temp_LCD_DATA = LCD_DATA ;                                // Save the Port Value of LCD_DATA
        LCD_E = 0 ;
        LCD_DATA &= 0xfff0;                                                // LCD DB[4:7] & RS & R/W --> Low
        DIR_LCD_DATA &= 0xfff0;                                        // LCD DB[4:7} & RS & R/W are output function
        DIR_LCD_E = 0;                                                        // Set E pin as output
        DIR_LCD_RS = 0 ;
        DIR_LCD_RW = 0 ;
//第2段
        LCD_DATA &= 0xfff0 ;
        LCD_DATA |= 0x0003 ;
        LCD_CMD_W_Timing() ;
        LCD_L_Delay() ;

        LCD_DATA &= 0xfff0 ;
        LCD_DATA |= 0x0003 ;
        LCD_CMD_W_Timing() ;
        LCD_L_Delay() ;

        LCD_DATA &= 0xfff0 ;
        LCD_DATA |= 0x0003 ;
        LCD_CMD_W_Timing() ;
        LCD_L_Delay() ;
//第5段
        LCD_DATA &= 0xfff0 ;
        LCD_DATA |= 0x0002 ;
        LCD_CMD_W_Timing() ;
        LCD_L_Delay() ;

        WriteCmdLCD(DISP_2Line_4Bit) ;
        LCD_S_Delay() ;

        WriteCmdLCD(DISP_ON) ;
        LCD_S_Delay() ;

        WriteCmdLCD(ENTRY_INC) ;
        LCD_S_Delay() ;

        WriteCmdLCD(CLR_DISP) ;
        LCD_L_Delay() ;

        LCD_DATA = Temp_LCD_DATA ;                        
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
woodmice
1楼-- · 2019-07-16 20:52
你还是没有看资料!,仔细看资料你就不会这样问了

LCD1602 按4位数据宽度连接时,数据线只连接DB7-DB4;

根据你提供的代码判断,主CPU是由db3-db0连接LCD1602的DB7-DB4;

LCD1602复位时是8位数据总线宽度方式工作,所以,设置数据总线宽度为4bit前,你发送的数据对于LCD1602来说低4位bit3-bit0的数据是不定的;

你标记的‘第2段’之前都是对CPU设置操作;

第2段到第4段都是发送指令0x3?(设置成8bit);

第5段操作是发送指令0x2?(设置成4bit,但该指令还是按8bit总线时序操作);

后面才是标准的C函数调用;
alittleharry
2楼-- · 2019-07-17 02:24
所以说为啥第2段到4段要重复3次发送指令0x3 然后第5段才发送指令0X2?
best_me
3楼-- · 2019-07-17 05:02
WriteLcd_Com(0x33);//原来1602初始化成4位数据线之前必需先初始化成8位(此时命令发送方式是8位格式,但数据线只需接4位)
delay(10);
WriteLcd_Com(0x32);//然后再改到4位线宽,这样初始化才稳定
delay(10);  
WriteLcd_Com(0x28);//四线模式设置
delay(10);
WriteLcd_Com(0x0c);//显示开--对应开关显示控制指令
delay(10);
WriteLcd_Com(0x06);
delay(10);
WriteLcd_Com(0x01);

一周热门 更多>