lcd1602功能的介绍
1.简介
工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)
注:为了表示的方便 ,后文皆以1表示高电平,0表示第电平。
2.管脚功能
1602采用标准的16脚接口,其中:
第1脚:VSS为电源地
第2脚:VDD接5V电源正极
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端。
第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。
3.操作控制
操作控制表
操作
读状态
写指令
读数据
写数据
输入
RS=0,RW=1,E=1
RS=0,RW=0,
D0~7=指令码,E=H脉冲
RS=1,RW=1,E=1
RS=1,RW=0,
D0~7=数据,E=H脉冲
注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再
4.字符集
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
以下是1602的16进制ASCII码表地址:
读的时候,先读左边那列,再读上面那行,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
[编辑本段]指令集
1602通过D0~D7的8位数据端传输数据和指令。
显示模式设置: (初始化)
0011 0000 [0x38] 设置16×2显示,5×7点阵,8位数据接口;
显示开关及光标设置: (初始化)
0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)
0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),
N=0(读或写一个字符后地址指针减1 &光标减1),
S=1 且 N=1 (当写一个字符后,整屏显示左移)
s=0 当写一个字符后,整屏显示不移动
数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)
其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
这是LCD1602显示程序流程图,请帮我解释说明一下
让LCD1602显示字符前要输入字符所在的地址,这也是每显示一个字符地址要加一的原因,在下面的一段代码里你会明白怎么设置地址,怎么让地址自动加一,怎么清屏,怎么显示字符,希望你能看懂哦
sbit LCD_E=P2^0; //lcd1602控制置位
sbit LCD_RW=P2^1;//lcd1602控制置位
sbit LCD_RS=P2^2; //lcd1602控制置位
void LCD_command(unsigned char com)
{
LCD_E=0;
LCD_RW=0;
LCD_RS=0;
P1=com;
delay_us(100);
LCD_E=1;
delay_us(100);
LCD_E=0;
}
void LCD_date(unsigned char dat)
{
LCD_E=0;
LCD_RW=0;
LCD_RS=1;
P1=dat;
delay_us(100);
LCD_E=1;
delay_us(100);
LCD_E=0;
}
LCD_command(0x38);//设置LCD为16*2显示,5*7点阵,8位数据接口
LCD_command(0x0c); //设置LCD显示开,光标显示关
LCD_command(0x06); //写一个数据后地址加1
LCD_command(0x01);//显示清屏
LCD_command(0x80);//数据指针设置为第一行第一位
LCD_date('pi');
LCD_date('l');
LCD_date('e');
LCD_date('a');
LCD_date('s');
LCD_date('e');
LCD_date(' ');
LCD_date('c');
LCD_date('h');
LCD_date('e');
LCD_date('c');
LCD_date('k');
LCD_date(' ');
LCD_date('t');
LCD_date('h');
LCD_date('e');
LCD_command(0x80+0x40); //LCD地址指针指向第二行第一个位置
LCD_date('c');
LCD_date('o');
LCD_date('n');
LCD_date('n');
LCD_date('e');
LCD_date('c');
LCD_date('t');
LCD_date('i');
LCD_date('o');
LCD_date('n');
LCD_date('!');
LCD_date('!');