51单片机外设系列:LCD1602 的详细编程

这篇具有很好参考价值的文章主要介绍了51单片机外设系列:LCD1602 的详细编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言,LCD1602是一个比较常用的单片机显示外设,下面我们从它的显示原理,来分析用51单片机编程的思路。另外结尾还提供了完成的程序代码参考。

一、LCD1602的外观、结构和基本参数

51单片机外设系列:LCD1602 的详细编程
51单片机外设系列:LCD1602 的详细编程

引脚功能解析:

第1引脚:GND为电源地脚。

第2引脚:VCC接5V电源正极。

第3引脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。

第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。

第7~14引脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背灯电源。第15引脚背光正极,第16引脚背光负极。

二、电路接线图

51单片机外设系列:LCD1602 的详细编程
51单片机外设系列:LCD1602 的详细编程

RD(也就是RS)\RW\E接口分别接单片机的1.1、1.2、1.3位。LCD0~7接P0刚好八个。

三、LCD1602的显示原理分析

LCD1602之所以是1602是因为它能够显示16(列)*2(行)个字符,如下图所示:

51单片机外设系列:LCD1602 的详细编程

其实LCD1602编程显示的原理并不是很难,简单来说就是要做好两步。

第一步就是要找出我们显示字符的位置

比如我们想把字符显示在上图的第一行的第九个位置,那么就可以选定08。08换算成二进制就是0000 1000。

但是还有个需要注意的地方就是,如果是要写入显示的地址信息的时候,D7是要求为高电平的。那么08就要变成10001000。就是88(0x88)。

第二步发送要显示的字符,1602的参考手册给出了查询字符的表格。如下:

51单片机外设系列:LCD1602 的详细编程

如图上所示,如果我们想发送一个D,那么我们只要找出来0100 0100,转换成16进制的就是0x44, 刚好对应Ascll码68。实际上我们输入的时候输入字符就可以了。编译器会自动转换成对应的Ascll码的。

这两个步骤,一个是传输地址,一个是传输字符。那么怎么去区分呢。通过RS引脚来做区分,RS为高电平1时选择数据寄存器(写数据)、低电平0时选择指令寄存器(写地址)。

四、LCD1602时序分析

①写操作的时序分析

51单片机外设系列:LCD1602 的详细编程
51单片机外设系列:LCD1602 的详细编程

RS:地址命令和数据的选择,写地址命令为0,写数据为1。

R/W:读和写的选择,0是写,1是读。可以从上图的时序可以看出来R/W贯穿了整个时序,因此我们将R/W置0即可。

E:初始状态为0,

然后延时至少tR之后置1(tR的值参考上表,25ns执行一个_nop_()函数就可以满足),

置1后要延时至少tPW(上图给出的tPW值为150ns,建议执行两个_nop_()函数),

接着再至少延时tF(执行一个_nop_()函数)后置0。

参考程序如下:

void Write_Cmd(unsigned char cmd)

{

Busy_Check();

Lcd_Rs=0;//写“地址命令标志”

Lcd_Rw=0;

Lcd_En=0;

_nop(); //执行一个空函数,延时月1us

P0=cmd;

Lcd_En=1;

_nop();

_nop();

Lcd_En=0;

_nop();

}

void Write_Dat(unsigned char dat)

{

Busy_Check();

Lcd_Rs=1;//写“ 数据”标志

Lcd_Rw=0;

Lcd_En=0;

_nop(); //执行一个空函数,延时月1us

P0=dat;

Lcd_En=1;

_nop();

_nop();

Lcd_En=0;

_nop();

}

读操作的时序和写操作的时序有点区别。读操作时序与写操作时序的区别在于:写操作时序在E=0的时候就开始传输数据,而读操作时序要等E=1之后才开始传输数据。

②读操作的时序分析

51单片机外设系列:LCD1602 的详细编程
51单片机外设系列:LCD1602 的详细编程

RS:因为是写入命令,所以这里是0。

RW:读标志,置1。

E:初始状态为0,延时tR后拉高,之后再延时tPW后拉低。

参考程序:

void Busy_Check(void) //判断是否忙碌的函数。

{

P0=0xFF;

do

{

Lcd_Rs=0;

Lcd_Rw=1;

Lcd_En=0;

_nop();

Lcd_En=1;

_nop();

_nop();

} while(Lcd_Busy==1) ;

Lcd_En=0;

_nop();

}

五、LCD1602的初始化

查看手册的时候可以看到初始化的说明

51单片机外设系列:LCD1602 的详细编程

这里我们做了程序的简化:

void Lcd1602_Init(void)

{

Write_Cmd(0x38);

Write_Cmd(0x0C);

Write_Cmd(0x06);

Write_Cmd(0x01);

}

完整代码:

一、LCD1602 显示一个字符,参考程序

#include <reg52.h>

sbit Lcd_Rs=P1^2;// 通过位操作把LCD的命令、使能、数据引脚等跟单片机的对应IO定义好。

sbit Lcd_Rw=P1^3;

sbit Lcd_En=P1^4;

sbit Lcd_Busy=P0^7; //这个是LCD的忙碌标志,通过获取这个引脚的电平就可以判断LCD是否在忙碌,

void Busy_Check(void) //判断是否忙碌的函数。

{

P0=0xFF;

do

{

Lcd_Rs=0;

Lcd_Rw=1;

Lcd_En=0;

_nop();

Lcd_En=1;

_nop();

_nop();

} while(Lcd_Busy==1) ;

Lcd_En=0;

_nop();

}

void Write_Cmd(unsigned char cmd)

{

Busy_Check();

Lcd_Rs=0;//写“地址命令标志”

Lcd_Rw=0;

Lcd_En=0;

_nop(); //执行一个空函数,延时月1us

P0=cmd;

Lcd_En=1;

_nop();

_nop();

Lcd_En=0;

_nop();

}

void Write_Dat(unsigned char dat)

{

Busy_Check();

Lcd_Rs=1;//写“ 数据”标志

Lcd_Rw=0;

Lcd_En=0;

_nop(); //执行一个空函数,延时月1us

P0=dat;

Lcd_En=1;

_nop();

_nop();

Lcd_En=0;

_nop();

}

void Lcd1602_Init(void)

{

Write_Cmd(0x38);

Write_Cmd(0x0C);

Write_Cmd(0x06);

Write_Cmd(0x01);

}

void main(void)

{

Lcd1602_Init();

Write_Cmd(0x80+0x08);// 发送命令,规定显示的位置。

Write_Dat('x') ;// 发送显示的数据。

while(1);

}

显示效果如下:文章来源地址https://www.toymoban.com/news/detail-449209.html

51单片机外设系列:LCD1602 的详细编程

二、LCD1602显示字符串,参考程序

#include <reg52.h>

#include <intrins.h>

sbit Lcd_Rs=P1^2;// 通过位操作把LCD的命令、使能、数据引脚等跟单片机的对应IO定义好。

sbit Lcd_Rw=P1^3;

sbit Lcd_En=P1^4;

sbit Lcd_Busy=P0^7; //这个是LCD的忙碌标志,通过获取这个引脚的电平就可以判断LCD是否在忙碌,

unsigned char code str1[]={"12345678"};

unsigned char code str2[]={"zhongguojiayou"};

void Busy_Check(void) //判断是否忙碌的函数。

{

P0=0xFF;

do

{

Lcd_Rs=0;

Lcd_Rw=1;

Lcd_En=0;

_nop();

Lcd_En=1;

_nop();

_nop();

} while(Lcd_Busy==1) ;

Lcd_En=0;

_nop();

}

void Write_Cmd(unsigned char cmd)

{

Busy_Check();

Lcd_Rs=0;//写“地址命令标志”

Lcd_Rw=0;

Lcd_En=0;

_nop(); //执行一个空函数,延时月1us

P0=cmd;

Lcd_En=1;

_nop();

_nop();

Lcd_En=0;

_nop();

}

void Write_Dat(unsigned char dat)

{

Busy_Check();

Lcd_Rs=1;//写“ 数据”标志

Lcd_Rw=0;

Lcd_En=0;

_nop(); //执行一个空函数,延时月1us

P0=dat;

Lcd_En=1;

_nop();

_nop();

Lcd_En=0;

_nop();

}

void Write_String(unsigned char addr_sta,unsigned char *p)

{

Write_Cmd(addr_sta) ;

while(*p!='\0')

{

Write_Dat(*p++);

}

}

void Lcd1602_Init(void)

{

Write_Cmd(0x38);

Write_Cmd(0x0C);

Write_Cmd(0x06);

Write_Cmd(0x01);

}

void main(void)

{

Lcd1602_Init();

Write_String(0x80,str1);// 发送字符串1的位置和数据。

Write_String(0xC0,str2);// 发送字符串2的位置和数据。

while(1);

}

显示效果如下:

51单片机外设系列:LCD1602 的详细编程

到了这里,关于51单片机外设系列:LCD1602 的详细编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机LCD1602的使用

    本篇文章将为大家讲解LCD1602的使用方法。 LCD1602是一种常用的液晶显示器,它的原理是通过液晶分子的振荡来控制显示内容的。液晶分子在电场的作用下,会发生振荡,从而改变液晶分子的极性,从而控制显示内容。液晶显示器的控制电路会根据输入的信号,控制电场的强度

    2024年02月06日
    浏览(37)
  • MCU-51:单片机LCD1602详解

    LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:16×2个字符,每个字符为5*7点阵 点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应

    2023年04月09日
    浏览(86)
  • 51单片机(五)LCD1602调试工具

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2023年04月27日
    浏览(57)
  • 51单片机矩阵键盘——LCD1602显示

    本次的实验需要用到LCD1602液晶屏,需要用到LCD1602.c 与LCD1602.h文件链接: https://download.csdn.net/download/YLG_lin/86404949 使用矩阵键盘随意按下按键,LCD1602第二行前两位就会显示对应按键按下的数字。 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用

    2023年04月09日
    浏览(42)
  • 51单片机 | LCD1602 液晶显示实验

      在前面章节,我们已经学习过几种显示装置,例如静态数码管、动态数码管、 8*8LED 点阵、串口通信。使用它们可以直观显示一些字符数据,但是它们也有各种局限性,比如显示字符数据太少,硬件设计复杂、代码编写难度大等。这一章就来介绍一种非常简单且常用的显

    2023年04月11日
    浏览(60)
  • 51单片机LCD1602液晶屏显示方法

    以显示hello,world!    2022.10.17  为例。 首先把LCD1602的模块化程序添加到项目目录中,模块化方法在51单片机之程序模块化_学习笔记吧的博客-CSDN博客这里可以学习。 实验程序: LCD1602.c文件代码: LCD1602.h文件代码: 把这两个代码,分别添加到LCD1602.c 和 LCD1602.h 文件,然后添加

    2023年04月08日
    浏览(50)
  • 51单片机学习笔记-12LCD1602液晶屏

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字

    2024年02月11日
    浏览(50)
  • 简单的C51单片机项目之LCD1602时钟

    一,实验现象 实验项目现象如下:     这个项目需要用到51单片机板上的功能如下: 1.独立按键 2.LCD1602 3.定时器中断 功能介绍 1.独立按键实现三个功能,选择键,增大键,减小键。 2.lcd1602显示时间 3.定时器中断确定时间 代码如下:    

    2024年02月11日
    浏览(44)
  • 基于51单片机驱动MPU6050模块(LCD1602显示)

    @TOC MPU-6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,可用IIC接口连接一个第三方的数字传感器。MPU-6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范

    2024年02月11日
    浏览(39)
  • 【51单片机】LCD1602 液晶显示实验指导书

             来介绍一种非常简单且常用的显示装置——LCD1602 液晶显示器,使用它可以显示更多的字符数字。这将有助于我们清晰的观察程序的运行结果,更加方便我们的后续调试和开发。         我们的开发板上集成了一个 LCD1602 液晶显示器接口,将LCD1602 液晶对应插

    2024年02月01日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包