C51单片机LCD1602驱动程序

C51单片机LCD1602驱动程序C51单片机LCD1602驱动程序LCD1602简介1602的引脚操作时序写操作时序时序参数LCD1602关键性操作一、初始化二、清屏指令二、进入模式设置指令三、显示开关控制指令四、功能设定指令RAM地址映射图LCD1602简介LCD1602字符型液晶(每行显示16个字符,一共可以显示两行)——一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个57或者510的点阵字符组成,每个点阵字符位都可以用来显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此

大家好,又见面了,我是你们的朋友全栈君。

本篇为学习普中科技单片机开发板HC68000-EM3 V2.2后的笔记汇总;

LCD1602简介

LCD1602字符型液晶(每行显示16个字符,一共可以显示两行)——一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个5×7或者5×10的点阵字符组成,每个点阵字符位都可以用来显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

1602的引脚

引脚图
我们只需要关注以下几个管脚:
3 脚:VL,液晶显示偏压信号,用于调整LCD1602 的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。
4 脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602 进行数据字节的传输操作,而为电平时,则是进行命令字节的传输操作。命令字节,即是用来对LCD1602 的一些工作方式作设置的字节;数据字节,即使用以在1602 上显示的字节。值得一提的是,LCD1602的数据是8 位的。
5 脚:R/W,读写选择端。当此脚为高电平可对LCD1602 进行读数据操作,反之进行写数据操作
6 脚:E,使能信号,其实是LCD1602 的数据控制时钟信号,利用该信号的上升沿实现对LCD1602 的数据传输。
7~14 脚:8 位并行数据口,使得对LCD1602 的数据读写大为方便。
1602技术参数图

操作时序

操作时序
由于我们不需要读1602,因此下面只看写操作:
① 当我们要写指令字时,设置LCD1602 的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入
② 当我们要写入数据字,在1602 上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E 引脚一个高脉冲将数据写入
发现了么,写指令和写数据,差别仅仅在于RS的电平不一样而已。以下是LCD1602的时序图:

写操作时序

写操作时序

时序参数

时序参数
当要写命令字节的时候,时间由左往右,RS 变为低电平,R/W 变为低电平,注意看是RS的状态先变化完成。然后这时,DB0~DB7 上数据进入有效阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽度。然后E引脚负跳变,RS电平变化,R/W 电平变化。这样便是一个完整的LCD1602写命令的时序。

LCD1602关键性指令操作

一、清屏指令

清屏指令

  1. 清除液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码20H;
  2. 光标归位,将光标撤回液晶显示屏的左上方;
  3. 将地址计数器(AC)的值设置为0;

二、进入模式设置指令

模式设置
功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:
位名 ———— 设置;
I/D —— 0=写入新数据后光标左移 ; 1=写入新数据后光标右移;
S —— 0=写入新数据后显示屏不移动 ;1=写入新数据后显示屏整体右移1个字符;

三、显示开关控制指令

开关控制
功能 : 控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:
位名 ———— 设置
D —— 0=显示功能关 ; 1=显示功能开;
C —— 0=无光标 ; 1=有光标;
B —— 0=光标闪烁 ; 1=光标不闪烁;

四、功能设定指令

功能设定
功能 : 设定数据总线位数、显示的行数及字型。参数设定的情况如下:
位名 ———— 设置
DL —— 0=数据总线为4位 ; 1=数据总线为8位;
N —— 0=显示1行 ; 1=显示2行;
F —— 0=5×7点阵/每字符 ; 1=5×10点阵/每字符;

五、RAM地址映射图

在设置完成之后我们就要明白具体是在哪显示,在哪个位置显示?在对液晶模块的初始化中要先设置其显示模式在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否还处于忙的状态。DDRAM就是显示数据RAM,用来寄存待显的字符代码。共80个字节,其地址和屏幕的对应关系如下表:
显示位置
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符;例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以确定光标定位;在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是:
0100000OB (40H)+10000000B(80H)=11000000B(C0H)。
在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:
RAM地址映射图

LCD1602驱动代码

写命令

// 向LCD1602液晶写入一字节命令,cmd-待写入命令值 
// 写命令时序:RS=0,RW=0,D7——D0 = 数据,E=正脉冲,液晶在脉冲下降沿采样数据。
void lcd1602WriteCmd(unsigned char cmd)
{ 
   
	delayNms(5);//延时5ms
	RS=0;				// 命令
	RW=0;				// 写
	E=1;				// 使能LCD1602
	DPORT=cmd;			// 将命令码输出在数据端口上
	delay10us();            // 短暂延时10us
	E=0; 				// 关闭LCD1602使能,释放总线
}

写数据

// 向LCD1602液晶写入一字节数据,dat-待写入数据值 
// 写数据时序:RS=1,RW=0,D7——D0 = 数据,E=正脉冲,液晶在脉冲下降沿采样数据。
void lcd1602WriteByte(unsigned char dat)
{ 
   
	delayNms(5);//延时5ms
	RS=1;				// 数据
	RW=0;				// 写
	E=1;				// 使能LCD1602
	DPORT=dat;			// 将待写数据送到数据端口
	delay10us();            // 短暂延时10us
	E=0;			    // 关闭LCD1602使能,释放总线 
}

清屏指令

// 清屏命令:清除显示内容,将1602内部RAM全部填入空白的ASCII码20H
// 光标归位,将光标撤回到屏幕左上角的坐标原点
// 将1602内部显示地址设为0 
void lcd1602Clear()	      
{ 
   	
	lcd1602WriteCmd(0x01);
	delayNms(50);//50ms
} 

设置光标

void lcd1602SetCursor(unsigned char Para)	    // 设置光标
{ 
   
	switch(Para)
	{ 
   	
		case 0:
		{ 
   	
			lcd1602WriteCmd(0x08);	break;     	 // 关显示
		}
		case 1:
		{ 
   	
			lcd1602WriteCmd(0x0c);	break;	     // 开显示但无光标
		}
		case 2:
		{ 
   
			lcd1602WriteCmd(0x0e);	break;	     // 开显示有光标但不闪烁
		}
		case 3:
		{ 
   
			lcd1602WriteCmd(0x0f);	break;	     // 开显示有光标且闪烁
		}
		default:
			break;
	}
}

初始化

// LCD 1602初始化
void lcd1602Init()	    
{ 
   
	lcd1602WriteCmd(0x38);    /*显示模式设置*/ 
	delayNms(5); //5ms
	lcd1602WriteCmd(0x38); 
// delayNms(5); 
// lcd1602WriteCmd(0x38); 
// delayNms(5); 
// lcd1602WriteCmd(0x38); 
	lcd1602WriteCmd(0x08);	     // 显示关闭,不显示光标、光标不闪烁
	lcd1602WriteCmd(0x01);	     // 显示清屏
	lcd1602WriteCmd(0x06);	     // 显示光标移动位置
	delayNms(5);//5ms
	lcd1602WriteCmd(0x0c);	     // 显示开及光标设置
	lcd1602Clear();
}

函数封装

操作步骤:
1. 初始化
2. 写命令(RS=L) 设置显示坐标
3. 写数据(RS=H)

lcd1602.h文件

声明:请根据晶振自行编写延时函数

#include "delay.h" //请根据晶振自行编写延时函数

sbit	RS	=	P1^0;		 // 根据实际硬件连接修改
sbit	RW	=	P1^1;		 // 根据实际硬件连接修改
sbit	E		=	P1^2;		 // 根据实际硬件连接修改
#define DPORT P0 // 根据实际硬件连接修改

void lcd1602Init();		 // 初始化
void lcd1602Clear();           	 // 清屏命令
void lcd1602SetCursor(unsigned char Para);	//设置光标
void lcd1602WriteChar(unsigned char xPos,unsigned char yPos,unsigned char Dat);  // 写1个字符
void lcd1602WriteString(unsigned char xPos,unsigned char yPos,unsigned char *s); // 写字符串

lcd1602.c文件

#include "lcd1602.h"

void lcd1602WriteByte(unsigned char dat){ 
   }		//写数据
void lcd1602WriteCmd(unsigned char cmd){ 
   }		//写命令
void lcd1602Clear(){ 
   }		//清屏
void lcd1602SetCursor(unsigned char Para){ 
   }	    // 设置光标
void lcd1602Init(){ 
   }		//初始化

// 内部函数用于设置显示字符起始坐标
void lcd1602WritePos(unsigned char xPos,unsigned char yPos)	 
{ 
   
	unsigned char tmp;
	xPos&=0x0f;		      // x位置范围是0~15
	yPos&=0x01;		      // y位置范围是0~1
	if(yPos==0)	   	      // 显示第一行
		tmp=xPos;		  // 第一行字符地址从 0x00 开始
	else
		tmp=xPos+0x40;	  // 第二行字符地址从 0x40 开始
	tmp|=0x80;			  // 设置 RAM 地址
	lcd1602WriteCmd(tmp);
}

//在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符
void lcd1602WriteChar(unsigned char xPos,unsigned char yPos,unsigned char Dat)
{ 
   
	lcd1602WritePos(xPos,yPos);
	lcd1602WriteByte(Dat);
}

// 在液晶上显示字符串,xpos:行坐标,ypos:列坐标,str-字符串指针
void lcd1602WriteString(unsigned char xPos,unsigned char yPos,unsigned char *s)
{ 
   	
	unsigned char i=0;
	lcd1602WritePos(xPos,yPos);		  // 起始坐标
	while(s[i])
	{ 
   
		lcd1602WriteByte(s[i]);
		i++;
		if (i>=16)  break;	  // 超出16个字符外的数据丢弃
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160157.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 深度|常见IT人才外包存在的问题及解决建议

    深度|常见IT人才外包存在的问题及解决建议何谓“IT人才外包”IT人才外包,是指企业根据需要将某一项或几项项目开发中所涉及的工作外包出去,交由其他企业安排程序员驻点开发。IT人才外包也叫程序员外包、程序员外派。在IT人才外包中,外包公司提供程序员之后,就不再对程序员进行指挥。用工单位在生产经营上,对派遣员工拥有和正式员工一样完整的管理、指挥权力,但是每个程序员的工资、社保等费用由外包公司。IT人才外包的好处与存在的问题1人才外包的好处1、…

  • idea中如何配置maven项目_idea配置maven环境

    idea中如何配置maven项目_idea配置maven环境一、使用步骤1.在Idea中配置maven(1)、打开Idea,点击File,然后点击Settings,进入设置,或者直接按Ctrl+Alt+S进入设置在这里插入图片描述(2)、先在左上角的搜索框输入maven,找到maven后单击,然后在右边的mavenhomepath的右边选择你的maven安装路径,选择到根目录就好了,然后点击确定,具体步骤看下图:在这里插入图片描述(3)、Localrepository是maven的本地仓库,默认路径是C:UsersAdministrator.

  • 全部覆盖棋盘7×7_acwing题库

    全部覆盖棋盘7×7_acwing题库给定一个 N 行 N 列的棋盘,已知某些格子禁止放置。求最多能往棋盘上放多少块的长度为 2、宽度为 1 的骨牌,骨牌的边界与格线重合(骨牌占用两个格子),并且任意两张骨牌都不重叠。输入格式第一行包含两个整数 N 和 t,其中 t 为禁止放置的格子的数量。接下来 t 行每行包含两个整数 x 和 y,表示位于第 x 行第 y 列的格子禁止放置,行列数从 1 开始。输出格式输出一个整数,表示结果。数据范围1≤N≤100,0≤t≤100输出样例:8 0输出样例:32#include&l

  • 【Win7】【磁盘管理】删除相似“33fbc1d57e9aaf1ea88e6f08”缓存目录

    【Win7】【磁盘管理】删除相似“33fbc1d57e9aaf1ea88e6f08”缓存目录

    2021年12月31日
  • Nmap 源代码学习四 软件简单使用[通俗易懂]

    Nmap 源代码学习四 软件简单使用

  • java jpa是什么_jpa是什么框架?jpa是什么意思?

    java jpa是什么_jpa是什么框架?jpa是什么意思?你了解jpa吗?很多人表示,对于jpa是一个什么框架并不是很了解,那么下面就一起通过下面的文章内容来了解一下jpa吧!jpa其实就是JavaPersistenceAPI的简称,它的中文名字是Java持久层API,是JDK5.0注解或者XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库当中。JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致,总…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号