基于51单片机的1602显示器实现详解

目录

一,什么是1602?

 二,管脚功能

特性

特征应用

 三,字符集

五,显示汉字和数字代码

六,仿真


一,什么是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,

然后置E为1。

 三,字符集

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<reg51.h>
#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<reg51.h>
#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){       
 }
}

六,仿真

 

物联沃分享整理
物联沃-IOTWORD物联网 » 基于51单片机的1602显示器实现详解

发表评论