LCD(Liquid CrystalDisplay):液晶显示器的缩写,一种被动式的显示器,即液晶本身并不发光,而是经液晶经过处理后能改变光线通过方向的特性,而达到白底黑字或黑底白字显示的目的。
液晶显示器具有功耗低、抗干扰能力强等优点,广泛用在仪器仪表和控制系统中。
LCD的分类:
按排列形状分:字段型、点阵字符型和点阵图形。
字段型:广泛用于电子表、数字仪表、计算器中。
点阵字符型: 显示字母、数字、符号。它是由5×7或5×4点阵组成,广泛应用在单片机应用系统中。
点阵图形型:笔记本电脑和彩色电视等设备中。
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有也有间隔 起到了字符间距和行间距的作用
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶
接口电路示例
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,
对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共
同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读
忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
LCD1602的写操作时序:
LCD1602代码模板
#define DataPort P0
sbit RS = P2^4; //定义端口
sbit RW = P2^5;
sbit EN = P2^6;
void LCD_Write_Com(uchar dat) //写命令函数
{
DelayMs(5);
RS = 0;
RW = 0;
DataPort= dat;
EN = 0;
_nop_();
_nop_();
EN= 1;
}
void LCDWRITEDAT(uchar dat) //写数据函数
{
DelayMs(5);
RS = 1;
RW = 0;
DataPort= dat;
EN = 0;
_nop_();
_nop_();
EN= 1;
}
void LCDwritestring(uchar x,uchar y,uchar*s) //写字符串s函数
{
if(y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xc0 + x);
}
while(*s)
{
LCDWRITEDAT(*s);
s++;
}
}
void LCDINIT() /初始化函数
{
DelayMs(15);
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x08); //关显示
DelayMs(5);
LCD_Write_Com(0x01); /*显示清屏*/
DelayMs(5);
LCD_Write_Com(0x06); //指针自加
DelayMs(5);
LCD_Write_Com(0x0c); /*显示光标移动设置*/
DelayMs(5);
}
int main()
{
LCDINIT();
LCD_Write_Com(0x88); //在第一行第8个位置
LCDWRITEDAT(‘a’); //显示字符a;
LCDwritestring(0,1,”Hello World!”); //在第二行第0个位置起显示“Hello World!”字符串
扩展:LCD1602扩展功能
uchar tflag[8] = {0x01,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //℃
void LCD_FILLCGRAM(void) //在自定义第一个字符填充℃符号
//{
// int i = 0;
// LCD_Write_Com(0x40);
// for(i=0;i<8;i++)
// {
// LCDWRITEDAT(tflag[i]);
// }
//}
voidLCD_Show_CGRAM(uchar x,uchar y,uchar dat) //在第y行的第x位置显示位置为//dat的字符
//{
// if(y == 0)
// {
// LCD_Write_Com(0x80 + x);
// }
// else
// {
// LCD_Write_Com(0xc0 + x);
// }
// LCDWRITEDAT(dat);
//}
LCD_Show_CGRAM(3,1,0); //0代表填充域的第一个字符,是“℃”符号。