51单片机—LCD1602显示模块

- 什么是LCD1602

LCD:Liquid Crystal Display—液晶显示器,简称LCD,其主要显示原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面,通常把各种液晶显示器都直接叫做液晶。
1602:液晶的命名通常都是按照显示字符的行数或液晶点阵的行、列数来的。1602的意思是每行可以显示16个字符,一共可以显示俩行,类似还有0801、1601等。
注意:此类液晶都是字符液晶,即只能显示ASCII码字符,如数字、大小写字母、各种符号等。
LCD1602显示如图:
在这里插入图片描述

- 如何操作LCD1602

在操作之前先要了解LCD1602的几个重要知识点:
RS:数据/命令选择端,它控制着指令操作和数据操作,RS=0即对LCD指令操作,RS=1即对LCD数据操作。
RW:读写选择端,顾名思义其作用就是控制读和写的,RW=0即对LCD进行写操作(可以写指令或者数据),RW=1即对LCD进行读操作。
E:使能信号,E的一次脉冲代表操作的开始。
RAM地址映射:控制器内部带有80B的RAM缓冲区,对应关系如图所示。向图中的00-0F、40-4F地址中的任意一处写入数据时(对应着1602,即每行可以显示16个字符,一共可以显示俩行),液晶屏都可以立刻显示出数据,但当写入其他地址处时就得通过移屏指令将它们移入可显示区域方可显示。
在这里插入图片描述
数据指针:控制器内部设有一个数据地址指针,用户可以通过它们访问全部的80B的RAM(访问方式:0X80+相应地址码)。

说了这么多那到底如何使LCD1602显示字符呢?简单讲分为三块:初始化、指令操作、数据操作。接下来我们梳理一下这三块内容(以实际应用为主,不可能面面俱到,请谅解)。
初始化:初始化可以理解为设置LCD1602的显示方式,下面列出一组常用的初始化指令。

void LCD_1602_init()//初始化
{
	LCD_1602_Cmd(0X38);//开显示:8位一行、5x7显示点阵	
	LCD_1602_Cmd(0X06);//每写入一个字符后指针加一,即光标右移一位
	LCD_1602_Cmd(0X0c);//开显示但不显示光标
	LCD_1602_Cmd(0X01);//清屏
	//LCD_1602_Cmd(0X18):所有显示的字符向左移一位,
	//LCD_1602_Cmd(0X80):设置数据指针的起点如LCD_1602_Cmd(k2+0x80)。
}

指令操作:一般都是对LCD进行写指令的,所以RW=0、RS=0

void LCD_1602_Cmd(uchar cmd)//写指令
{
	RS=0;	 //时序为先RS再RW最后E
	RW=0;
	P0=cmd;//具体指令给P0,因为一般LCD的八位数据端口对应接在P0上
	E=1;		 //一次脉冲、一次使能信号
	dy(2);
	E=0;
}

数据操作:对LCD进行写数据操作,即RW=0、RS=1

void LCD_1602_Data(uchar dat)//写数据,写入数据dat(dat是ASCII码字符,如数字、大小写字母、各种符号等)
{
	RS=1;
	RW=0;
	P0=dat;//具体数据给P0
	E=1;
	dy(2);
	E=0;
}

显示的位置:显示是没有问题了,但要在LCD的哪个位置显示呢?这就要用到上文的数据指针了,数据指针指向哪一个地址,数据就显示在哪一位,我们以行为x、列为y来表示具体的位置

void LCD_1602_Display(uchar x,uchar y,uchar dat)//在x行、y列进行显示字符dat
{
	uchar k1=0x00,k2=0x40;//对照RAM地址,第一行显示出的16位都是0x0?,第二行都是0x4?
	if(x==1)//如果在第一行
	{
		k1+=y;//此时k1就对应是(x,y)地址了
		LCD_1602_Cmd(k1+0x80);//数据指针的访问位置
	}
	else//在第二行
	{
		k2+=y;
		LCD_1602_Cmd(k2+0x80);	
	}
	LCD_1602_Data(dat);//在(x,y)上显示对应数据
}

显示数字和单个字符:在显示数字时因为数字0的ASCII码为48,所以要LCD_1602_Data(6+48);,显示单个字符时要上单引号LCD_1602_Data('k');,所以显示数字也可以LCD_1602_Data('6');
有关LCD1602的操作这些就足够了。

- 上代码

在下利用LCD1602实现了一个简单的’‘i love you’'显示,代码如下(亲测可以使用):

#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar p[]="i love you";
sbit E=P2^7;//使能E,以脉冲形式发送信号
sbit RS=P2^6;//0:指令      1:字符
sbit RW=P2^5;//0:写        1:读

void dy(uint x)
{
	uint i;
	i=x*100;
	while(i--);	
}

void LCD_1602_Cmd(uchar cmd)//写指令
{
	RS=0;	 //时序为RS、RW、E
	RW=0;
	P0=cmd;
	E=1;		 //一次脉冲、一次使能信号
	dy(2);
	E=0;
}

void LCD_1602_Data(uchar dat)//写字符
{
	RS=1;
	RW=0;
	P0=dat;
	E=1;
	dy(2);
	E=0;
}
void LCD_1602_init()//初始化
{
	LCD_1602_Cmd(0X38);//开显示:8位一行、5x7显示点阵	
	LCD_1602_Cmd(0X06);//每写入一个字符后指针加一,即光标右移一位
	LCD_1602_Cmd(0X0c);//开显示但不显示光标
	LCD_1602_Cmd(0X01);//清屏
	//LCD_1602_Cmd(0X18):所有显示的字符向左移一位,
	//LCD_1602_Cmd(0X80):设置数据指针的起点如LCD_1602_Cmd(k2+0x80)。
}

void LCD_1602_Display(uchar x,uchar y,uchar dat)//在x行、y列进行显示字符dat
{
	uchar k1=0x00,k2=0x40;
	if(x==1)
	{
		k1+=y;
		LCD_1602_Cmd(k1+0x80);
	}
	else
	{
		k2+=y;
		LCD_1602_Cmd(k2+0x80);	
	}
	LCD_1602_Data(dat);
}

void display(uint l,uchar *p)//显示字符串
{
	uint i;
	for(i=0;i<l;i++)
		LCD_1602_Data(p[i]);
}

void main()
{
	uchar i;
	LCD_1602_init();
	//LCD_1602_Display(2,0,6+48);//显示数字时加48,因为0的ascii码为48
	for(i=0;i<sizeof(p)-1;i++)
	{
		LCD_1602_Display(1,i,p[i]);
	}
	LCD_1602_Cmd(0X80+0X40);	 
	display(sizeof(p)-1,p);
}

希望可以对读者的学习助力!

  • 16
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
51单片机是一种常用的单片机芯片,可以用来控制各种外设,包括液晶显示屏(LCD)。LCD1602是一种常见的液晶显示屏,能够显示16行2列的字符。 要编写51单片机的超声波测距程序,我们首先需要连接超声波模块LCD1602显示屏到单片机上。超声波模块用来测量物体与传感器的距离,LCD1602显示屏用来显示测得的距离数值。 编写程序的主要步骤如下: 1. 在51单片机上配置超声波模块LCD1602显示屏的引脚连接。这可以通过引用相应的库文件或手动配置引脚进行实现。 2. 初始化LCD1602显示屏。这包括设置显示模式、清除屏幕等操作。可以使用相应的函数或指令完成这些设置。 3. 初始化超声波模块。这需要设置超声波模块的引脚并进行一些初始化工作,例如设置发送和接收引脚、配置计时器等。 4. 在主循环,通过发送触发信号并计算返回的高电平时间,测量超声波传感器与物体之间的距离。具体的测距算法可以根据超声波模块的型号和数据手册来选择。 5. 将测得的距离数值转换为字符,并将其显示LCD1602显示屏上。可以使用相应的函数或指令将字符写入到指定位置。 6. 可以根据需要在LCD1602显示屏上显示其他相关信息,例如单位、警告信息等。 7. 程序运行结束后,关闭超声波模块LCD1602显示屏的相关引脚,并进行相应的清除和释放工作。 通过以上步骤,我们可以编写一个基本的51单片机的超声波测距程序,并将测得的距离数值显示LCD1602显示屏上。具体的代码可以根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值