51单片机学习6_LCD1602液晶显示

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 51单片机学习6_LCD1602液晶显示

实验目的:在1602液晶显示"I love you,china"两行字,从右边一步步向左滑进去.

Lcd1602液晶的控制学起来还是蛮简单的,主要是参考时序图去学习,在了解了LCD显示的原理之后,紧接着看着时序图就可以对液晶进行操作了.
首先我们对1602液晶做个大概的了解:1602意思是每行显示16个字符,一共可以显示两行,每个字符是由5*7的点阵,8位数据接口.类似的还有0801,0802,1601等一系列液晶,这些液晶是字符类液晶,只能显示ASC码.还有12232液晶,它属于图形类液晶,可以显示图形,汉字.

1602液晶接口有如下:

lcd1602接口

lcd1602接口

1602的几种时序如下:

基本操作时序

基本操作时序

本次实验,我们要向液晶里面写入 "I Love You! China."所以,我们看下写时序,一个会了,其他的也就跟着学会了,写时序大概就以下的步骤:

  1. 通过RS确定是写数据还是写命令;
  2. 读/写控制端设置为低电平;
  3. 将数据或命令送达数据线上;
  4. 给en一个高脉冲,将数据送入液晶显示器,完成写操作.

时序图如下:

写时序操作

写时序操作

具体代码如下所示:

 

/*引入头文件,宏定义*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit lcdrs = P3 ^ 5;//控制发数据还是发命令的控制位
sbit lcden = P3 ^ 4;//使能信号
sbit lcdwr = P3 ^ 6;//读写信号
sbit dula = P2 ^ 6;//段选
sbit wela = P2 ^ 7;//位选
uchar num = 0;
uchar code title[] = "I Love You!";//第一行显示数据
uchar code content[] = "China.";//第二行数据

/*
    函数声明
*/
void init();
void delay(uint time);
void write_cmd(uchar cmd);
void write_data(uchar content);

void main()
{
	init();
	//第一行数据写入,采用sizeof函数
	for (num = 0; num < sizeof(title) / sizeof(uchar) - 1; num++) {
		write_data(title[num]);
		delay(20);
	}
	
	write_cmd(0x80+0x53);//切换到第二行
	
	//第二行数据写入
	for (num = 0; num < sizeof(content) / sizeof(uchar) - 1; num++) {
		write_data(content[num]);
		delay(20);
	}
	
	//整屏移动数据,左移
	for (num = 0; num < 16; num++) {
		write_cmd(0x18);
		delay(200);
	}
	while (1);
}

void init()
{
	dula = 0;//关闭数码管段选锁存器
	wela = 0;//关闭数码管位选锁存器
	lcdwr = 0;//读写始终保持低电平
	write_cmd(0x38);//设置显示模式:16*2显示,5*7点阵,3位数据接口
	write_cmd(0x0c);//开显示,不显示光标,也不闪烁
	write_cmd(0x06);//当写一个字符的时候,指针会移动到下一个
	write_cmd(0x01);//数据指针清零,所有的数据清零
	write_cmd(0x80+0x10);//设置第一行起始指针地址
}

//延时函数
void delay(uint time)
{
	uint x, y;
	for (x = time; x > 0; x--)
		for (y = 110; y > 0; y--);
}

//写命令函数
void write_cmd(uchar cmd)
{
	lcdrs = 0;
	P0 = cmd;
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
}

//写数据函数
void write_data(uchar content)
{
	lcdrs = 1;
	P0 = content;
	delay(5);
	lcden = 1;
	delay(5);
	lcden = 0;
}

以上代码在TX-1C板子上正常运行,有误请拍砖.

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 51单片机学习6_LCD1602液晶显示

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: