目录
一,什么是1602?
二,管脚功能
特性
特征应用
三,字符集
五,显示汉字和数字代码
六,仿真
602液晶也叫
1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字
符和数字)。
1602采用标准的16脚接口,其中:
第1引脚:GND为电源地
第2引脚:VCC接5V电源正极
第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最
高(对比度过高时会 产生"鬼影",使用时可以通过一个10K的电位器调整对比度)。
第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5引脚:RW为读写信号线,高电平(1)时进行读操作,以51为例的简单原理图低电平(0)时进行写操作。
第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。
第7~14引脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。第15引脚背光正极,第16引脚背光负极。
3.3V或5V工作电压,对比度可调
内含复位电路
提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM
微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。
操作控制
注:关于E=H脉冲--开始时初始化E为0,
1602液晶模块内部的字符发生存储器(CGROM)
已经存储了160个不同的点阵字符图形,
这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母"A"的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母"A"。
在单片机编程中还可以用字符型常量或变量赋值,如'A'。因为CGROM储存
的字符代码与我们PC中的字符代码是基本一致的,因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。PC在编译时就把'A'先转换为41H代码了。
CGROM中字符码与字符字模关系对照表
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。
0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。
以下是1602的16进制ASCII码表地址:读的时候,先读上面那行,再读左边那列,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
四,显示英文代码
#include
#define uint unsigned int
#define uchar unsigned char
sbit RS=P3^2;// RS为寄存器选择,高电平时选择寄存器,低电平时选择指令寄存器
sbit RW=P3^1;// RW为读写信号线,高电平时进行读操作,低电平时进行写操作
sbit E=P3^0; // E为使能端,当EN端由高电平跳变成低电平时,液晶模块执行命令
uchar code k4[]={"I LOVE YOU"};
uchar code k5[]={"YUAN YUAN!"};
void det()
{
uint i,j;
for(i=0;i<=5;i++)
{
for(j=0;j<500;j++);
}
}
void write_ml(uchar sum)//写命令
{
RS=0;
RW=0;
P2=sum;
det();
E=1;
det();
E=0;
}
void write_sj(uchar sum) //写数据
{
RS=1;
RW=0;
P2=sum;
det();
E=1;
det();
E=0;
}
void init() //LCD初始化
{
write_ml(0x38);
det();
write_ml(0x0c);
det();
write_ml(0x01);
det();
}
void main()
{
uint i=0;
init();
while(1)
{
i=0;
write_ml(0x80+0x00);
for(i=0;i<=9;i++)
{
write_sj(k4[i]);
det();
}
write_ml(0x80+0x45);
for(i=0;i<=9;i++)
{
write_sj(k5[i]);
det();
}
}
}
#include
#define uchar unsigned char
sbit RS=P3^2;
sbit RW=P3^1;
sbit EN=P3^0;
uchar code table[]={
0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//一
0x00,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,//二
0x00,0x1F,0x00,0x0E,0x00,0x1F,0x00,0x00,//三
0x02,0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,//年
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x11,//月
0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日
0x00,0x04,0x04,0x0E,0x15,0x04,0x0C,0x00,//小
0x04,0x1F,0x04,0x0E,0x15,0x00,0x15,0x00,//杰
0x00,0x0A,0x15,0x11,0x11,0x0A,0x04,0x00,//心
};
void delay(int x){ //延迟
int i;
while(x--) for(i=0;i<120;i++);
}
char Busy(){ //忙函数
char a=0;
RS=0,RW=1,EN=1;
if(P0&0x80==0x80) a=1;
EN=0;
return a;
}
void W_CMD(uchar dat){ //命令函数
while(Busy());
RS=0,RW=0,EN=0;
P2=dat;
EN=1,delay(1),EN=0;
}
void W_DATA(uchar dat){ //数据函数
while(Busy());
RS=1,RW=0,EN=0;
P2=dat;
EN=1,delay(1),EN=0;
}
void Init_LCD(){ //LCD初始化
int i=0;
W_CMD(0x38);
W_CMD(0x01);
W_CMD(0x06);
W_CMD(0x0c);
W_CMD(0x40); //写地址
for(i=0;i<72;i++) W_DATA(table[i]); //写入字模
}
void Show_txt(uchar x,uchar y,uchar i){ //显示对应的汉字
if(y==0) W_CMD(0x80 |x);
if(y==1) W_CMD(0xc0 |x);
W_DATA(i);
}
void Show_str(uchar x,uchar y,uchar *s){ //显示字符串
int i=0;
if(y==0) W_CMD(0x80 |x);
if(y==1) W_CMD(0xc0 |x);
for(i=0;i<16;i++) W_DATA(s[i]);
}
void main(){
Init_LCD();
Show_str(0,0,"2021n11n24n ");
Show_txt(4,0,3);
Show_txt(7,0,4);
Show_txt(10,0,5);
Show_txt(2,1,6);
Show_txt(4,1,7);
Show_txt(5,1,8);
while(1){
}
}