|
我在论坛上看到一个关于Launchpad驱动1602的代码,下载下来后驱动LCD1602没问题,但有一个地方实在不明白。其中LCD初始化的代码如下void LCD_init(void)
{
//delay_nms(10);
//LCD_DATA_DDR|=LCD_DATA; //数据口方向为输出
// LCD_EN_DDR|=LCD_EN; //设置EN方向为输出
//LCD_RS_DDR|=LCD_RS; //设置RS方向为输出
// delay_nms(10);
LCD_write_command(0x28); //4位数据接口
delay_nms(1);
// LCD_write_command(0x28); //4位数据接口
// delay_nms(10);
// LCD_write_command(0x28); //4位数据接口
//delay_nms(10);
LCD_en_write2();
delay_nms(10);
//LCD_write_command(0x28); //4位数据接口
// delay_nms(10);
LCD_write_command(0x01); //清屏
LCD_write_command(0x0c); //显示开,关光标,不闪烁
LCD_write_command(0x06); //设定输入方式,增量不移位
delay_nms(10);
}
现在发现如果去掉 LCD_en_write2();这段话,那么就不能显示了。但在 LCD_write_command(0x28); 的末尾应该也有一段 LCD_en_write2();的啊。LCD_write_command()具体如下
void LCD_write_command(unsigned char command)
{
delay_nus(16);
P2SEL=0x00;
LCD_RS_PORT&=~LCD_RS; //RS=0
LCD_en_write1();
LCD_DATA_PORT&=0X0f; //清高四位
LCD_DATA_PORT|=command&0xf0; //写高四位
delay_nus(16);
LCD_en_write2();
command=command<<4; //低四位移到高四位
LCD_en_write1();
LCD_DATA_PORT&=0x0f; //清高四位
LCD_DATA_PORT|=command&0xf0; //写低四位
LCD_en_write2();
}
void LCD_en_write2(void)
{
LCD_EN_PORT|=LCD_EN;
delay_nus(10);
LCD_EN_PORT&=~LCD_EN;
}
实在不明白,这样不是重复写两次LCD_en_write2吗?
|
|