51单片机嵌入式开发:8、 STC89C52RC 操作LCD1602原理

STC89C52RC 操作LCD1602原理

  • 1 LCD1602概述
    • 1.1 LCD1602介绍
    • 1.2 LCD1602引脚说明
    • 1.3 LCD1602指令介绍
  • 2 LCD1602外围电路
    • 2.1 LCD1602接线方法
    • 2.2 LCD1602电路原理
  • 3 LCD1602软件操作
    • 3.1 LCD1602显示
    • 3.2 LCD1602 protues仿真
  • 4 总结


1 LCD1602概述

1.1 LCD1602介绍

在这里插入图片描述

LCD1602是一种常见的字符型液晶显示器,它由两行、每行16个字符构成,因此被称为LCD1602。它是一种低功耗、易于使用的显示设备,广泛应用于各种嵌入式系统和电子项目中。
以下是LCD1602的主要特点和介绍:

  1. 字符显示能力: LCD1602能够显示两行文本,每行可显示16个字符。每个字符由5x8点阵字形组成,可以显示各种字母、数字、符号和自定义字符。
  2. 背光显示: LCD1602通常具有背光功能,可以通过控制电源来开启或关闭背光。背光使得在光线较暗的环境下仍然能够清晰地看到显示内容。
  3. 并行接口: LCD1602使用并行接口与主控制器(如Arduino、树莓派等)进行通信。通常使用4位或8位并行模式进行数据传输。
  4. 控制器芯片: LCD1602通常使用HD44780或类似的控制器芯片,这种芯片提供了驱动液晶显示器所需的功能,包括字符生成、显示控制等。
  5. 显示控制: 使用主控制器通过并行接口向LCD1602发送指令和数据来控制显示内容。可以设置光标位置、显示开关、光标闪烁等。
  6. 低功耗: LCD1602采用液晶显示技术,相对于其他显示技术(如LED),具有较低的功耗,适合于需要长时间运行的电子设备。
  7. 简单驱动电路: 驱动LCD1602通常只需要几个IO引脚,并且无需复杂的外部电路。这使得它易于集成到各种嵌入式系统和电子项目中。
    LCD1602广泛应用于各种场景,例如温度显示、时间显示、系统状态显示等。通过编程控制,可以实现动态显示、滚动显示、自定义字符显示等丰富的功能。它是学习嵌入式系统和进行电子项目开发的常用显示设备之一。

1.2 LCD1602引脚说明

在这里插入图片描述

LCD1602液晶显示器通常具有16个引脚,这些引脚用于与主控制器(如Arduino、树莓派等)进行连接和通信。以下是LCD1602的常见引脚说明:

  1. VSS(地/负极):连接到电源的地(GND)引脚,提供电源的负极。
  2. VCC(电源正极):连接到电源的正极,通常为+5V。
  3. VEE(对比度调节):用于调节液晶显示的对比度。通过连接可变电阻或电位器来调整引脚电压,以改变显示的清晰度和对比度。
  4. RS(寄存器选择):寄存器选择引脚,用于选择数据和指令的类型。当RS为低电平(0)时,表示发送的是指令;当RS为高电平(1)时,表示发送的是数据。
  5. RW(读/写选择):读/写选择引脚,用于选择液晶显示器的读写模式。当RW为低电平(0)时,表示写入数据或指令;当RW为高电平(1)时,表示读取数据。
  6. E(使能引脚):使能引脚,用于触发液晶显示器的操作。当E由低电平变为高电平时,液晶显示器执行指令或数据的读/写操作。
    7-14. DB0-DB7(数据引脚):数据引脚用于传输8位数据。在4位并行模式下,通常只使用DB4-DB7引脚。
  7. LED+(背光正极):连接到背光源的正极。通常连接到+5V电源。
  8. LED-(背光负极):连接到背光源的负极。通常连接到电源的地(GND)。
    这些引脚的具体连接方式可能会根据不同的主控制器和电路设计而有所变化。在使用LCD1602之前,应仔细阅读液晶显示器的数据手册,并根据手册提供的引脚说明进行正确的连接。

1.3 LCD1602指令介绍

在这里插入图片描述

LCD1602液晶显示器使用指令来控制其显示行为和操作。通过发送不同的指令,可以设置光标位置、显示模式、清除屏幕内容等。以下是一些常见的LCD1602指令:

  1. 清屏指令(Clear Display): 清除LCD屏幕上的所有内容,并将光标位置设置为起始位置。指令代码为0x01。
  2. 返回首页指令(Return Home): 将光标位置设置为起始位置,但不清除屏幕上的内容。指令代码为0x02。
  3. 光标和显示控制指令:
    • 显示开关指令(Display ON/OFF): 控制LCD的显示开关。可以设置是否显示光标和是否闪烁光标。指令代码为0x0C,其中C表示显示开关控制。
    • 光标和显示方向指令(Entry Mode Set): 控制光标的移动方向和显示的移位方式。可以设置光标移动后是否自动移动显示位置。指令代码为0x06,其中6表示光标和显示方向设置。
  4. 光标位置控制指令:
    • 设置光标位置指令(Set DDRAM Address): 设置光标的位置,即在屏幕上指定的行和列位置。指令代码的高4位为0x8,低4位为指定的位置。
    • 设置CGRAM地址指令(Set CGRAM Address): 设置自定义字符的存储位置。指令代码的高4位为0x4,低4位为指定的位置。
  5. 功能设置指令:
    • 显示模式设置指令(Function Set): 设置显示模式、数据线数和字符字体。指令代码为0x28,其中2表示功能设置。
    • 扩展指令设置(Extended Function Set): 扩展功能设置,用于设置显示模式和字符字体。指令代码为0x39,其中9表示扩展功能设置。
    这些指令通过并行接口或串行接口发送给LCD1602,以控制其行为和显示内容。在使用LCD1602时,可以根据需要选择适当的指令来实现各种显示效果和功能。详细的指令说明可以在LCD1602的数据手册或相关资料中找到。

2 LCD1602外围电路

2.1 LCD1602接线方法

根据数据手册,外围电路接法如图所示:

在这里插入图片描述

2.2 LCD1602电路原理

在开发板上的原理图接法如图所示:

在这里插入图片描述

3 LCD1602软件操作

LCD1602软件操作要注意时序等重要参数:
初始化流程如下所示:

在这里插入图片描述

3.1 LCD1602显示

AI例程如下:

#include <reg52.h>#define LCD_DATA P0     // 设置LCD数据线连接到P0口
sbit RS = P2^4;         // RS引脚
sbit RW = P2^5;         // RW引脚
sbit EN = P2^6;         // EN引脚// 延时函数
void delay(unsigned int count) {unsigned int i, j;for(i = 0; i < count; i++) {for(j = 0; j < 120; j++);}
}// 发送命令到LCD
void lcdCommand(unsigned char command) {RS = 0;             // 设置为命令模式RW = 0;             // 设置为写入模式EN = 1;             // 使能LCDLCD_DATA = command; // 发送命令EN = 0;             // 禁用LCDdelay(5);           // 等待一段时间
}// 初始化LCD
void lcdInit() {lcdCommand(0x38);   // 8位数据线,2行显示,5x8点阵字体lcdCommand(0x38);   // 8位数据线,2行显示,5x8点阵字体lcdCommand(0x38);   // 8位数据线,2行显示,5x8点阵字体lcdCommand(0x01);   // 清屏delay(10);          // 等待清屏完成lcdCommand(0x06);   // 设定输入方式,光标右移,不移动显示lcdCommand(0x0C);   // 打开显示,关闭光标
}// 在指定位置显示字符
void lcdPrintChar(unsigned char row, unsigned char col, unsigned char c) {unsigned char address;if(row == 0) {address = 0x80 + col;   // 第一行} else if(row == 1) {address = 0xC0 + col;   // 第二行}lcdCommand(address);        // 设置显示位置RS = 1;                     // 设置为数据模式RW = 0;                     // 设置为写入模式EN = 1;                     // 使能LCDLCD_DATA = c;               // 发送字符数据EN = 0;                     // 禁用LCDdelay(5);                   // 等待一段时间
}void main() {lcdInit();                  // 初始化LCDwhile(1) {lcdCommand(0x0F);       // 光标闪烁// 在第一行显示文本lcdPrintChar(0, 0, 'C');lcdPrintChar(0, 1, 'u');lcdPrintChar(0, 2, 'r');lcdPrintChar(0, 3, 's');lcdPrintChar(0, 4, 'o');lcdPrintChar(0, 5, 'r');lcdPrintChar(0, 6, ' ');lcdPrintChar(0, 7, '1');delay(1000);            // 延时一段时间lcdCommand(0x0C);       // 关闭光标delay(1000);            // 延时一段时间}
}

自己演示的例程如下:

/*1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK*//*-----------------------------------------------名称:LCD1602内容:通过标准程序静态显示2行字符
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h> //标准输入输出
#include<intrins.h>sbit RS = P2^4; //Pin4
sbit RW = P2^5; //Pin5
sbit E  = P2^6; //Pin6#define Data  P0//数据端口char data TimeNum[]="                ";
char data Test1[]="                  ";
/******************************************************************/
/*                    函数声明                                    */
/******************************************************************/
/******************************************************************/
/*                    微秒延时函数                                */
/******************************************************************/
void DelayUs(unsigned char us)//delay us
{unsigned char uscnt;uscnt=us>>1;        /*12MHz频率*/while(--uscnt);
}
/******************************************************************/
/*                    毫秒函数声明                                */
/******************************************************************/
void DelayMs(unsigned char ms)
{while(--ms){DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);}
}
/******************************************************************/
/*                   写入命令函数                                 */
/******************************************************************/
void WriteCommand(unsigned char c)
{DelayMs(5);//操作前短暂延时,保证信号稳定E=0;RS=0;RW=0;_nop_();E=1;Data=c;E=0;
}
/******************************************************************/
/*                   写入数据函数                                 */
/******************************************************************/
void WriteData(unsigned char c)
{DelayMs(5);  //操作前短暂延时,保证信号稳定E=0;RS=1;RW=0;_nop_();E=1;Data=c;E=0;RS=0;
}
/******************************************************************/
/*                   写入字节函数                                 */
/******************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{unsigned char p;if (pos>=0x10)p=pos+0xb0; //是第二行则命令代码高4位为0xcelse p=pos+0x80; //是第一行则命令代码高4位为0x8WriteCommand (p);//写命令WriteData (c);   //写数据
}
/******************************************************************/
/*                   写入字符串函数                               */
/******************************************************************/
void ShowString (unsigned char line,char *ptr)
{unsigned char l,i;l=line<<4;for (i=0;i<15;i++)ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/******************************************************************/
/*                   初始化函数                                   */
/******************************************************************/
void InitLcd()
{DelayMs(15);WriteCommand(0x38); //display modeWriteCommand(0x38); //display modeWriteCommand(0x38); //display modeWriteCommand(0x06); //显示光标移动位置WriteCommand(0x0F); //显示开及光标设置WriteCommand(0x01); //显示清屏 }/******************************************************************/
/*                   主函数                                       */
/******************************************************************/
void main(void){
InitLcd();         //初始化LCD
DelayMs(15);       //延时保证信号稳定sprintf(Test1,"    Welcome!    "); //打印输出第一行信息
ShowString(0,Test1);sprintf(TimeNum,"LCM1602 Test ok!");//打印输出第二行信息
ShowString(1,TimeNum);while(1);}

3.2 LCD1602 protues仿真

光标可显示的例程:

在这里插入图片描述
在这里插入图片描述

4 总结

LCD1602液晶显示器在各种嵌入式系统和电子项目中有广泛的应用场景。由于其低功耗、易于使用和成本效益等特点,LCD1602被广泛应用于以下领域:

  1. 温度和湿度显示器: LCD1602可以用于显示温度和湿度传感器的读数,提供实时的环境信息。
  2. 时间和日期显示器: LCD1602常用于显示当前时间和日期,可以与实时时钟模块(RTC)或其他时间源配合使用。
  3. 系统状态显示器: 在嵌入式系统中,LCD1602可用于显示系统状态信息,如CPU负载、内存使用情况、网络连接状态等。
  4. 计数器和计时器: LCD1602可以用作计数器和计时器的显示器,显示计数值或计时器的剩余时间。
  5. 数字测量显示器: 通过连接传感器和测量模块,LCD1602可以显示各种数字测量值,如距离、压力、光强等。
  6. 报警和警告显示器: 可使用LCD1602来显示报警和警告信息,如安全系统的警报状态、设备故障等。
  7. 文本提示和菜单导航: 对于用户界面设计,LCD1602可用于显示文本提示、菜单选项和导航信息,提供交互式操作界面。
  8. 自定义字符显示器: LCD1602允许用户定义自己的字符,可以用于显示特定的符号、图标或自定义文本。
    这些仅是LCD1602的一些常见应用场景,实际上它在各种嵌入式系统和电子项目中的应用非常广泛。通过编程和控制,可以实现更多复杂的显示功能和交互特性,使LCD1602在项目中发挥更大的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven——(重要)手动创建,构建项目

创建项目 手动按照maven层级建好文件夹&#xff0c;并写上java&#xff0c;测试代码和pom文件 构建项目 在dos窗口中执行如下命令 compile编译 当前maven仓库中什么都没有。 在pom所在层级下&#xff0c;执行&#xff1a; mvn compile 就开始显示下面这些&#xff0c;…

数据库-ubuntu环境下安装配置mysql

文章目录 什么是数据库&#xff1f;一、ubuntu环境下安装mysql二、配置mysql配置文件1.先登上root账号2.配置文件的修改show engines \G; mysql和mysqld数据库的基础操作登录mysql创建数据库显示当前数据库使用数据库创建表插入students表数据打印students表数据select * from …

前端使用Vue和Element实现可拖动弹框效果,且不影响底层元素操作,Cesium作为底图(可拖拽的视频实时播放弹框,底层元素可以正常操作)

简述&#xff1a;在前端开发中&#xff0c;弹框和实时视频播放是常见的需求。这里来简单记录一下&#xff0c;如何使用Vue.js和Element UI实现一个可拖动的弹框&#xff0c;并在其中播放实时视频。同时&#xff0c;确保在拖拽弹框时&#xff0c;底层元素仍然可以操作。这里来记…

vue 画二维码及长按保存

需求 想要做如下图的二维码带文字&#xff0c;且能够长按保存 前期准备 一个canvas安装qrcode&#xff08;命令&#xff1a;npm i qrcode&#xff09; 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…

JAVASE进阶day07(泛型,集合,Set,TreeSet,枚举,数据结构)

泛型 1.泛型的基本使用 限制集合存储的数据类型 package com.lu.day07.generics;/*** 定义了一个泛型类* E 泛型通配字母(不固定代替真实数据类型A-Z都可以)* 常见的泛型通配字母:* E:element 元素* T:type 类型* R:return 返回值类型* K:key 键* …

14.爬虫---Selenium 经典动态渲染工具的使用

14.Selenium 经典动态渲染工具的使用 1.查看chrome浏览器版本2.ChromeDriver 安装3.Selenium 安装4.验证安装5.基本用法5.1启动浏览器5.2导航到页面5.3查找元素5.3.1单个元素 find_element5.3.2多个元素 find_elements 5.4 执行操作5.5 动作链ActionChains5.6 执行 JavaScript …

Python基础语法:运算符详解(算术运算符、比较运算符、逻辑运算符、赋值运算符)②

文章目录 Python中的运算符详解一、算术运算符二、比较运算符三、逻辑运算符四、赋值运算符五、综合示例结论 Python中的运算符详解 在Python编程中&#xff0c;运算符用于执行各种操作&#xff0c;例如算术计算、比较、逻辑判断和赋值。了解并掌握这些运算符的使用方法是编写…

N-(4-Azido-2-nitrophenyl)-N‘‘-biotinylnorspemidine

​一、基本信息 常用名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine 英文名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine CAS号&#xff1a;786609-83-4 分子式&#xff1a;C22H33N9O4S 分子量&#xff1a;519.62 二、结构特点 该化…

SQL职场必备:掌握数据库技能提升职场竞争力

&#x1f482; 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

vue3 + tsx 表格 Action 单独封装组件用法

前言 先上图看右侧列 action 的 UI 效果&#xff1a; 正常来说&#xff0c;如果一个表格的附带 action 操作&#xff0c;我们一般会放在最右侧的列里面实现&#xff0c;这个时候有些UI 框架支持在 SFC 模板里面定义额外的 solt&#xff0c;当然如果不支持&#xff0c;更通用的…

Linux进行vi编译代码出现“E45: ‘readonly‘ option is set (add ! to override)”(完美解决)。

用vi修改文件&#xff0c;保存文件时&#xff0c;提示没有修改该文件的权限“E45: ‘readonly’ option is set (add ! to override)”的解决方法。 E45: ‘readonly’ option is set (add ! to override) 如果您遇到了“当前用户没有权限对文件作修改”的错误 1. 检查文件…

2024.7.11最新版IDM破解,操作简单

前言 IDM的强劲对手&#xff0c;100%免费&#xff0c;如果破解IDM失败&#xff0c;推荐使用FDM&#xff0c;下载地址&#xff1a;Free Download Manager 破解步骤 打开PowerShell&#xff0c;非CMD 在左下角开始菜单右键点击后选择PowerShell&#xff0c;注意不是打开CMD。…

园林类专刊《花卉》简介及投稿邮箱

园林类专刊《花卉》简介及投稿邮箱 《花卉》杂志是经国家新闻出版总署批准&#xff0c;广东省农业科学院主管&#xff0c;广东省农业科学院环境园艺研究所主办&#xff0c;面向国内外公开发行林业系统专业期刊&#xff0c;是全国从事林业、园林、生态、环保、旅游、自然资源、…

CentOS7安装部署git和gitlab

安装Git 在Linux系统中是需要编译源码的&#xff0c;首先下载所需要的依赖&#xff1a; yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker方法一 下载&#xff1a; wget https://mirrors.edge.kernel.org/pub/s…

【文档+源码+调试讲解】冷冻仓储管理系统

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个B/S结构的冷冻仓储管理系统&#xff0c;会使冷冻仓储管理系统工作系统化、规范化&#xff0c;也会提高冷冻仓储管理系统平台形象&#x…

现在国内的ddos攻击趋势怎么样?想了解现在ddos的情况该去哪看?

目前&#xff0c;国内的DDoS攻击趋势显示出以下几个特征&#xff1a; 攻击频次显著增加&#xff1a;根据《快快网络2024年DDoS攻击趋势白皮书》&#xff0c;2023年DDoS攻击活动有显著攀升&#xff0c;总攻击次数达到1246.61万次&#xff0c;比前一年增长了18.1%。 攻击强度和规…

微软子公司Xandr遭隐私诉讼,或面临巨额罚款

近日&#xff0c;欧洲隐私权倡导组织noyb对微软子公司Xandr提起了诉讼&#xff0c;指控其透明度不足&#xff0c;侵犯了欧盟公民的数据访问权。据指控&#xff0c;Xandr的行为涉嫌违反《通用数据保护条例》&#xff08;GFPR&#xff09;&#xff0c;因其处理信息并创建用于微目…

Shader每日一练(2)护盾

Shader "Custom/Shield" {Properties{_Size("Size", Range(0 , 10)) 1 // 控制噪声纹理缩放大小的参数_colorPow("colorPow", Float) 1 // 控制颜色强度的指数_colorMul("colorMul", Float) 1 // 控制颜色乘法因子_mainColor("…

多旋翼+VR眼镜:10寸FPV穿越机技术详解

FPV&#xff08;First Person View&#xff09;穿越机&#xff0c;是指通过第一人称视角来驾驶的无人机&#xff0c;特别强调速度和灵活性&#xff0c;常常用于竞赛、航拍和探索等领域。结合多旋翼设计和VR眼镜&#xff0c;FPV穿越机为用户提供了身临其境的飞行体验。 多旋翼技…

企业网站被攻击的常见方式是什么,该如何去做防护

随着互联网的普及和人们对网络使用的增加&#xff0c;网站安全问题变得越来越突出。无论是个人还是企业&#xff0c;都需要了解并采取措施来保护自己的网站和用户数据的安全。本文介绍常见的网站安全攻击方式、潜在危害及其预防措施&#xff0c;帮助全面了解网站安全的各个方面…