C51/C52--LCD1602

news2024/11/27 4:55:06

目录

一、LCD1602简介

二、LCD1602的工作(显示)原理

三、技术参数

四、外形参数,引脚功能

五、连接方式

六、示例程序与结果


一、LCD1602简介

        LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做到板子上。

二、LCD1602的工作(显示)原理

        点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。

        字符型液晶显示模块是一种专门用于显示字母、数字和符号等的点阵式LCD,常用16×1,16×2,20×2和40×2等的模块。一般的LCD1602字符型液晶显示器的内部控制器大部分为HD44780,能够显示英文字母、阿拉伯数字、日文片假名和一般性符号。

三、技术参数

(1)显示容量:16×2个字符。

(2)芯片工作电压:4.5~5.5V。

(3)工作电流:2.0mA(5.0V)。

(4)模块最佳的工作电压:5.0V。

(5)字符尺寸:2.95mm×4.35mm(宽×高) 

四、外形参数、引脚功能

外形:

 

 

 读操作时序

在这里插入图片描述

 写操作时序

在这里插入图片描述

        我们要写指令的时候,RS置为低电平,RW置为低电平,EN置为低电平,然后将指令数据送到数据口D0~D7,延时tsp1,让1602准备接收数据,这时候将EN拉高,产生一个上升沿,这时候指令就开始写入LCD,延时一段时间,将EN置低电平。

        当我们要写数据的时候,RS置为高电平,RW置为低电平,EN置为低电平,然后将指令数据送到数据口D0~D7,延时tsp1,让1602准备接收数据,这时候将EN拉高,产生一个上升沿,这时候数据就开始写入LCD,延时一段时间,将EN置低电平。

         各个电平所需维持的时长,周期。

各引脚的功能介绍如下。

·引脚1:VSS为地电源。

·引脚2:VDD接5V正电源。

·引脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10kQ的电位器调整其对比度。

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

·引脚5:R/W为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为高电平时,可以读忙信号;当RS为高电平,R/W为低电平时,可以写入数据。

·引脚6:E端为使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。

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

·引脚15:背光源正极。

·引脚16:背光源负极。

五、连接方式 

 

         LCD1602与单片机的连接有两种方式,一种是直接控制方式,另一种是所谓的间接控制方式。它们的区别只是所用的数据线的数量不同,其他都一样。

1.直接控制方式LCD1602的8根数据线和3根控制线E,RS和R/W与单片机相连后即可正常工作。一般应用中只须往LCD1602中写入命令和数据,因此,可将LCD1602的R/W读/写选择控制端直接接地,这样可节省1根数据线。VO引脚是液晶对比度调试端,通常连接一个10kΩ的电位器即可实现对比度的调整;也可采用将一个适当大小的电阻从该引脚接地的方法进行调整,不过电阻的大小应通过调试决定。

2.间接控制方式间接控制方式也称为四线制工作方式,是利用HD44780所具有的4位数据总线的功能,将电路接口简化的一种方式。为了减少接线数量,只采用引脚DB4~DB7与单片机进行通信,先传数据或命令的高4位,再传低4位。采用四线并口通信,可以减少对微控制器I/O的需求,当设计产品过程中单片机的I/O资源紧张时,可以考虑使用此方法。

六、示例程序与结果

///main.c

#include  <reg52.h>
#include  <lcd.h>

uchar disp[]="Hello World!    ";

void main()
{
	uint i;
	LcdInit();
	for(i=0;i<16;i++)
	{
		LcdWritedata(disp[i]);
	}
	while(1);
}

//lcd.h
#ifndef __LCD_H_
#define __LCD_H_

//#define LCD1602_4PINS


#include<reg52.h>


#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint 
#define uint unsigned int
#endif


#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

void Lcd1602_Delay1ms(uint c); 

void LcdWriteCom(uchar com);
	
void LcdWriteData(uchar dat);
	
void LcdInit();						  

#endif

//lcd.c
#include "lcd.h"



void Lcd1602_Delay1ms(uint c)   //Îó²î 0us
{
    uchar a,b;
	for (; c>0; c--)
	{
		 for (b=199;b>0;b--)
		 {
		  	for(a=1;a>0;a--);
		 }      
	}
    	
}


#ifndef 	LCD1602_4PINS	 //判断是否定义了这个
void LcdWriteCom(uchar com)	 
{
	LCD1602_E = 0;     
	LCD1602_RS = 0;	  
	LCD1602_RW = 0;	   
	
	LCD1602_DATAPINS = com;     
	Lcd1602_Delay1ms(1);		

	LCD1602_E = 1;	         
	Lcd1602_Delay1ms(5);	 
	LCD1602_E = 0;
}
#else 
void LcdWriteCom(uchar com)	  
{
	LCD1602_E = 0;	 
	LCD1602_RS = 0;	 
	LCD1602_RW = 0;	 

	LCD1602_DATAPINS = com;	
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	 
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;

	LCD1602_DATAPINS = com << 4;
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;
}
#endif
		   
#ifndef 	LCD1602_4PINS		   
void LcdWriteData(uchar dat)		
{
	LCD1602_E = 0;	
	LCD1602_RS = 1;	
	LCD1602_RW = 0;	

	LCD1602_DATAPINS = dat; 
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1; 
	Lcd1602_Delay1ms(5); 
	LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)			
{
	LCD1602_E = 0;	  
	LCD1602_RS = 1;	  
	LCD1602_RW = 0;	  

	LCD1602_DATAPINS = dat;	
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	  
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;

	LCD1602_DATAPINS = dat << 4;
	Lcd1602_Delay1ms(1);

	LCD1602_E = 1;	  
	Lcd1602_Delay1ms(5);
	LCD1602_E = 0;
}
#endif
		   
#ifndef		LCD1602_4PINS
void LcdInit()						
{
 	LcdWriteCom(0x38);  
	LcdWriteCom(0x0c);  
	LcdWriteCom(0x06);  
	LcdWriteCom(0x01);  
	LcdWriteCom(0x80);  
}
#else
void LcdInit()					
{
	LcdWriteCom(0x32);	
	LcdWriteCom(0x28);	
	LcdWriteCom(0x0c);
	LcdWriteCom(0x06); 
	LcdWriteCom(0x01); 
	LcdWriteCom(0x80);  
}
#endif

 

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

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

相关文章

chatgpt赋能python:如何使用Python找出重复元素

如何使用Python找出重复元素 在Python编程中&#xff0c;有时候需要查找并删除重复的元素。这些元素可以是列表、字符串等数据类型。在本文中&#xff0c;将介绍如何使用Python查找并删除重复元素。以下是我们将要涉及到的一些主题&#xff1a; 为什么需要查找重复元素&#…

深挖面试题讲解

面试题讲解&#x1f374; 文章目录 面试题讲解&#x1f374;和equals()的区别&#x1f354;1️⃣注意事项2️⃣明确问题3️⃣总结 什么是HashCode&#x1f347;1️⃣HashCode的描述2️⃣常见误区3️⃣hashCode的作用4️⃣总结 String、StringBuffer、StringBuilder的区别&#…

chatgpt赋能python:Python编程:如何找出给定的n个数中的最大值及其对应的最小下标

Python编程&#xff1a;如何找出给定的n个数中的最大值及其对应的最小下标 当需要在一组数字中找到最大值时&#xff0c;Python提供了内置函数 max() 。 但是&#xff0c;如果我们需要找出最大值的同时还需要找出其最小下标&#xff0c;该怎么办呢&#xff1f; 在本文中&#…

初始化命令

创建项目 vue2 vue3 create demo vue3 vue3 create demo vue2 webpack vue2 init webpack demo vue3 vite yarn create vite demo --template vue sass cnpm下载 --save-dev -D 开发环境 --save -S 生产环境 cnpm i node-sass4.14.1 sass-loader7.3.1 --save-…

[架构之路-215]- 架构 - 概念架构 - 模块(Module)、组件(Component)、包(Package)、对象、函数的区别

前言&#xff1a; 在软件架构中&#xff0c;一个重要的任务就是切分系统&#xff0c;而切分系统进程涉及到一个基本的概念&#xff0c;如模块&#xff08;Module&#xff09;、组件&#xff08;Component&#xff09;、包&#xff08;Package&#xff09;、对象&#xff0c;本…

管理类联考——写作——技巧篇——论证有效性——谬误概念汇总简释

批判性思维常见逻辑谬误 有些错误出现在我们澄清或定义某个观点的时候&#xff0c;有些错误出现在我们收集证据或者用证据和理由支撑某个观点的时候&#xff0c;有些错误出现在我们尝试从证据得出结论的时候&#xff0c;有些错误甚至出现在我们评估他人的观点或者理由的时候。…

美味度配方

8 种配料每种配料可以放 1 到 5 克&#xff0c;美味度为配料质量之和&#xff0c;给定一个美味度 n&#xff0c;求解 8 种配料的所有搭配方案及方案数量 。 (本笔记适合学了 Python 循环&#xff0c;正在熟炼的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a…

chatgpt赋能python:把图像放在中间的SEO优化指南

把图像放在中间的SEO优化指南 当我们在设计网站或博客时&#xff0c;经常会使用图像来增加文章的吸引力和清晰度。但是&#xff0c;图像的位置对于搜索引擎优化&#xff08;SEO&#xff09;很重要&#xff0c;因为搜索引擎无法理解和索引图像的内容&#xff0c;所以我们需要通…

chatgpt赋能python:Python抢商品:自动化实现秒杀购物的利器

Python抢商品&#xff1a;自动化实现秒杀购物的利器 随着互联网和电商的高度融合&#xff0c;电商平台受到越来越多的用户关注和青睐。在线购物已成为人们日常生活中必不可少的一部分&#xff0c;不管是网购小白还是技术大牛&#xff0c;都喜欢在各种平台上刷到想要的商品。但…

chatgpt赋能python:让Python帮助你轻松抢券

让Python帮助你轻松抢券 在这个数字化时代&#xff0c;抢购已成为电商平台上最为火热的活动之一。限时抢购、秒杀活动、优惠券折扣等等&#xff0c;都吸引了大量消费者的关注。然而&#xff0c;随着购物热潮的兴起&#xff0c;商品的库存有限&#xff0c;抢购难度越来越大。在…

高效能研发团队-使用自动化改进效率

在开发过程中利用自动化技术&#xff0c;可以帮助我们&#xff1a; 节约开发人员的时间&#xff0c;让他们做更有价值的事情。减少了开发流程中的人员依赖和相互等待的情况。加快了迭代速度&#xff0c;提前把问题暴露出来。另外一种形式的知识沉淀&#xff0c;减少人员流动带…

【学习日记2023.6.19】 之 RabbitMQ服务异步通信_消息可靠性_死信交换机_惰性队列_MQ集群

文章目录 服务异步通信-高级篇4. 消息可靠性4.1 生产者消息确认4.1.1 修改配置4.1.2 定义Return回调4.1.3 定义ConfirmCallback 4.2 消息持久化4.2.1 交换机持久化4.2.2 队列持久化4.2.3 消息持久化 4.3 消费者消息确认4.3.1 演示none模式4.3.2 演示auto模式 4.4 消费失败重试机…

第六章 calendar模块(日历)

1. calendar模块介绍 calendar 模块&#xff08;日历模块&#xff09;的方法都是与日历相关的&#xff0c;例如生成指定年份的日历、判断指定年份是否为闰年等。默认情况下&#xff0c;这些日历把星期一当作一周的第一天&#xff0c;星期天为一周的最后一天&#xff08;按照欧…

【前端知识】React 基础巩固(十六)——脚手架的介绍和环境搭建

React 基础巩固(十六)——脚手架的介绍和环境搭建 前端脚手架 三大框架的脚手架 Vue: vue/cliAngular: angular/cliReact: create-react-app 作用&#xff1a;帮助我们生成一个通用的目录结构&#xff0c;并且已经将我们所需的工程环境配置好脚手架需要依赖什么&#xff1f; …

Win11 + VS2022 + CMake3. 26.4 编译VTK8.2.0

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载VTK源码二、生成解决方案三、编译安装VTK项目四、报错总结 前言 最近由于有项目要用到VTK&#xff0c;所以想重新学一遍VTK。当然要从编译VTK开始。因…

【pytorch】新的windows电脑从头搭建pytorch深度学习环境(完整版+附安装包)

文章目录 新的windows电脑搭建pytorch深度学习环境电脑环境的配置显卡驱动cudacudnn pytorch开发软件的安装minicondavscode pytorch环境的安装conda安装python环境安装pytorch和torchvision 附录1&#xff1a;部分torch、torchvision、torchaudio版本对应关系附录2&#xff1a…

chatgpt赋能python:Python抢票教程:快速抢到心仪的票

Python抢票教程&#xff1a;快速抢到心仪的票 随着互联网的飞速发展&#xff0c;越来越多人选择在网上购买演唱会、球赛、展览等门票&#xff0c;而这些热门票常常被秒杀一空&#xff0c;可怎么办呢&#xff1f;Python帮你解决这个问题&#xff01; 什么是Python抢票 Python…

JUC之CompletableFuture

文章目录 1 Future接口1.1 FutureTask相关接口关系1.2 Future接口的优缺点1.2.1 优点1.2.2 缺点 2 Complatable Future2.1 CompletionStage2.2 使用案例2.2.1 runAsync2.2.2 supplyAsync2.2.3 join和get的区别2.2.4 CF simple project使用案例2.2.5 CF 常用API2.2.5.1 获取结果…

chatgpt赋能python:Python中将局部变量赋值给全局变量的方法

Python中将局部变量赋值给全局变量的方法 Python是一种灵活、高效的编程语言&#xff0c;许多开发人员喜欢使用这种语言来开发应用程序。在Python中&#xff0c;我们可以定义全局变量和局部变量。全局变量是定义在整个程序中的变量&#xff0c;而局部变量是定义在函数中的变量…

io.netty学习(五)ChannelPipeline

目录 前言 ChannelPipeline 接口 创建 ChannelPipeline ChannelPipeline 事件传输机制 ChannelPipeline 中的 ChannelHandler ChannelHandlerContext 接口 总结 前言 我们在前面的文章中也对ChannelPipeline接口做了初步的介绍。 io.netty学习使用汇总 ChannelPipeli…