C编写,具体是哪些函数需要改变?我就改了初始化函数和写命令、写数据函数,但是输出屏幕空白代码如下voidLCD_Init(void)//初始化的{LCD_CTRL_DIR=0x00;//LCD控制用寄存器置为输出LCD... C编写,具体是哪些函数需要改变?我就改了初始化函数和写命令、写数据函数,但是输出屏幕空白
代码如下
void LCD_Init(void) //初始化的
{
LCD_CTRL_DIR = 0x00; // LCD控制用寄存器置为输出
LCD_DATA_DIR = 0x00; //LCD数据用寄存器也置为输出
LCD_DATA = 0x00; //清数据寄存器
DelayMS(5); //数据手册要求大于4.1ms
// 开始输出软件复位序列
LCD_Write_CMD(0x28);
DelayMS(1); //数据手册要求等待时间大于100us
LCD_Write_CMD(0x28);
DelayMS(1); //数据手册要求等待时间大于40us
LCD_Write_CMD(0x28);
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
LCD_Write_CMD(0x28); //显示模式设为2行,8位数据模式
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us
LCD_Write_CMD(DISP_OFF); // 关显示
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us
LCD_Write_CMD(ENTRY_INC); //设定输入方式为地址增量
DelayMS(1); //数据手册要求查忙信号或者等待时间超过40us
LCD_Write_CMD(CLR_DISP); // 清空屏幕显示
DelayMS(1) ; //数据手册要求查忙信号或者等待时间超过40us
// 复位序列结束
LCD_Write_CMD(DISP_ON); // 开启LCD显示
DelayMS(1);
}
//向LCD写指令
void LCD_Write_CMD( unsigned char LCD_CMD)
{DelayMS(1);
LCD_RS=0;
LCD_DATA &= 0x0F;
LCD_DATA |= (LCD_CMD&0xF0);
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;
LCD_CMD=LCD_CMD<<4;
LCD_DATA &= 0x0F;
LCD_DATA |= LCD_CMD&0xF0;
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;
}
//向LCD写数据
void LCD_Write_Data( unsigned char LCD_CMD)
{ DelayMS(1);
LCD_RS=0;
LCD_DATA &= 0x0F;
LCD_DATA |= (LCD_CMD&0xF0);
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;
LCD_CMD=LCD_CMD<<4;
LCD_DATA &= 0x0F;
LCD_DATA |= LCD_CMD&0xF0;
LCD_E = 1 ;
NOP();
NOP();
LCD_E = 0 ;
DelayMS(1) ;
}
可以写入COM的函数,要有两个:8位总线、4位总线。
1.硬件连接时选择高4位线。
2.初始化的diyi步,要按照8位线来写入;写入的命令字的高四位,即把LCD初始化成为4位总线。
3.后续的初始化、以及以后再写入数据,都按照4位总线来写入;即:先送原来一个字节的高4位,再送低4位。
工业字符型液晶,能够同时显示16x02即32个字符。注:为了表示的方便 ,后文皆以1表示高电平,0表示低电平。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。