C51单片机LCD1602驱动程序

发布者:天涯拾遗最新更新时间:2022-05-26 来源: eefocus关键字:C51  单片机  LCD1602  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

LCD1602简介

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


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关键性指令操作

一、清屏指令

清除液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码20H;

光标归位,将光标撤回液晶显示屏的左上方;

将地址计数器(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个地址。对应如下:

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"  //请根据晶振自行编写延时函数


sbitRS=P1^0; // 根据实际硬件连接修改

sbitRW=P1^1; // 根据实际硬件连接修改

sbitE=P1^2; // 根据实际硬件连接修改

#define DPORTP0 // 根据实际硬件连接修改


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个字符外的数据丢弃

}

}

关键字:C51  单片机  LCD1602  驱动程序 引用地址:C51单片机LCD1602驱动程序

上一篇:C51入门小项目——双向路口交通信号灯
下一篇:C51单片机入门——按键篇

推荐阅读最新更新时间:2024-11-17 13:43

单片机系统应用中的抗干扰措施
单片机系统应用中的抗干扰措施 针对单片机系统应用中的干扰问题,介绍了几种抗干扰措施,从而有效地提高了单片机系统运行可靠性。   关键词:单片机;抗干扰;程序;软件;硬件 Power Grid, Jiang men 529100, China)   通常防护措施如下:   (1)供电系统   在微机系统中,最严重的干扰来源为电源的污染。为了防止从电源系统引入的干扰,一是要将微机的供电与大功率的用电设备的电源分开,最好单独供电;二是在单片机系统电源变压器的初级串接一低通滤波器(如图1所示),有效阻止高次谐波串入系统,改善电源波形,提高单片机系统的抗干扰能力。   (2)输入输出通道   输入输出通道是单片机与传感器、
[模拟电子]
<font color='red'>单片机</font>系统应用中的抗干扰措施
8051单片机串口编程知识总结
最近,把收集到有关单片机串口编程的资料总结一下,有利于把工作做好,材料整理如下: 单片机串口通信原理: 1、51系列单片机的串口有4个模式,可分别用作串并转换、并串转换、异步串行通信(2种模式)。异步串行通信中,有1+8+1和1+8+1+1两种帧格式,多机通信是特殊的通信方式。 2、基本原理是两组移位寄存器。将并行通信转换成串行通信模式(发送部分),或反之(接收部分)。可全双工运行。 3、速度通过移位脉冲决定。具体一般通过定时器1的自动装载模式产生的溢出脉冲给出。 4、电平上采用的是CMOS逻辑。 5、以上是物理层和数据链路层的单片机串口模块的约定,其他层需要软件人员根据需要自行把握。另外,电平需要根据实际通信环境做变换,如232
[单片机]
51单片机——定时/计数器
一.定时器操作步骤 定时器操作步骤 二.工作方式控制寄存器TMOD 工作方式控制寄存器TMOD TMOD的低半字节(D0,D1,D2,D3)用来控制定时器/计数器0 TMOD的高半字节(D4,D5,D6,D7)用来控制定时器/计数器1 对TMOD中的内容说明: GATE 门控制  GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。    当INT0引脚为高电平时TR0置位,启动定时器T0;    当INT1引脚为高电平时TR1置位,启动定时器T1。    GATE=0时,仅由TR0,TR1置位分别启动定
[单片机]
基于GPS的高精度无误差倒计时牌设计
引言 GPS是Global Positioning System的简称,是利用导航卫星进行测时和测距的全球定位系统,它具有精度高、全天候和全球覆盖能力,将GPS应用于时钟倒计时系统能实现高精度时间显示功能,基于GPS的高精度,倒计时牌是卫星测时技术,计算机技术及通信技术三者的有机结合。从功能模块上看,整个系统分为GPS测时接收系统和时钟显示系统,它主要完成以下功能: ◆ 定时接收GPS卫星发送的数据并进行识别和缓存; ◆ 对GPS测时数据进行格式转换,以使编码格式适于接收; ◆ 在给定时间内刷新DS12C887型时钟的时间; ◆ 读DS12C887时间,进行倒计时换算并显示。 硬件设计 基于GPS的高精度倒计时牌的硬件结构
[单片机]
基于8051的微控制器在系统编程
  介绍    Dallas Semiconductor基于8051的 微控制器 类产品中,许多型号都支持通过通用RS-232串口实现在 系统编程 。在系统编程意味着 程序 和/或数据存储器能够在不用拆解嵌入式系统来替换存储器的情况下进行修改。这种特性强调易使用性和多功能性,在所有嵌入式设计中增加了许多非常重要的特性:   允许硬件在工厂组装和存放,而在出厂前才进行软件定制,   需要进行软件升级时,消除了在现场拆解 器件 的高昂代价,   允许对位置不可达的应用进行软件升级,   访问专用配置与状态寄存器,以及使用存储器加密的方式把软件加载到安全微控制器。   具有这种特性的器件包括:    DS2250, DS2250T
[工业控制]
富昌电子上新英飞凌XMC7000系列MCU,推动复杂电机控制等高性能工业应用发展
中国上海–2023年4月18日–全球知名的电子元器件授权代理商富昌电子,近日上新来自英飞凌的工业级微控制器(MCU)产品组合XMC7000。 该系列产品通过提供更高的计算性能、更丰富的外设、更宽泛的工作温度范围等性能优势,可满足先进工业应用对高性能、高扩展性以及严苛工作环境的需求。 传承英飞凌XMC系列MCU在工业控制领域的出色表现,内核拥有高达350-MHz 主频的32位Arm® Cortex®-M7处理器,主频100-MHz 的32位Arm® Cortex®-M0+ 处理器,搭配容量最大高达8MB的嵌入式闪存和容量为1MB的片上静态随机存取存储器(SRAM)。该系列微控制器具有低至 8µA 的低功耗模式,并支持-40°C至
[工业控制]
51单片机读写AT24C02源代码(详细注释)
在P1口上接八个led灯,结果就显示在这八个灯上面。AT24C02的接线方式见程序的顶部的定义。以下是源代码: #include reg52.h //包含头文件 typedef unsigned char uchar; typedef unsigned int uint; #define write_c02 0xa0 #define read_c02 0xa1 sbit sda = P2^0; sbit scl = P2^1; void delay() { //delay:5us ;; } //i2c:init void i2c_init() { sda = 1; delay(); scl = 1; delay(); }
[单片机]
关于GD32F2系列增强型MCU的介绍和应用
GD32F205/207 基于ARM Cortex-M3内核的高性价比增强型GD32F205和GD32F207系列微控制器,在GD32F1系列产品的基础上提供了全面增强的处理能力与全新的外设接口资源。除了具有Cortex-M3 MCU业界最大的闪存容量外,还加强了对视频图像、液晶显示、存储扩展以及高速信号采集等应用的支持,并配备了增强的硬件加密模块与安全架构。 GD32F205/207资源配置 GD32F205/207产品型号 GD32F205/207产品特性 GD32F205/207开发生态
[单片机]
关于GD32F2系列增强型<font color='red'>MCU</font>的介绍和应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved