C51--LCD1602显示屏

LCD602显示:

1、概述

LCD602是一种工业字符型液晶,能够同时显示16x02,即32字符(16列,2行)

2、引脚:

  1. VSS:电源地
  2. VDD:电源正极——5V电源
  3. VO: 液晶显示偏压
    (接正电源时液晶显示器对比度最弱,接地时对比度最高,对比度过高产生“鬼影”,可使用10K的电位器调整对比度)
  4. RS: 数据/命令选择
    (寄存器选择:高电平——数据寄存器;低电平——指令寄存器)
  5. R/W: 读/写选择
    (高电平——读;低电平——写。)
    (RS与R/W同为低电平——写入指令或者显示地址;RS为低电平R/W为高电平——读忙信号;RS为高电平R/W为低电平——写入数据)
  6. E: 使能信号
    (由高电平跳变为低电平时,液晶模块执行指令)
  7. D0: 数据 (8为双向数据线)
  8. D1: 数据 (8为双向数据线)
  9. D2: 数据 (8为双向数据线)
  10. D3: 数据 (8为双向数据线)
  11. D4:数据 (8为双向数据线)
  12. D5:数据 (8为双向数据线)
  13. D6:数据 (8为双向数据线)
  14. D7:数据 (8为双向数据线)
  15. BLA:背光源正极
  16. BLK:背光源负极

3.与C51的连接:

电源:
VSS——GND
VDD——5V
对比度:
VO——GND
控制线:
RS——P1.0
RW——P1.1
E——P1.4
背光灯:
ELA——5V
ELK——GND
数据:
D0–D7——P0.0–P0.7

4.在哪里显示:

在这里插入图片描述

例如:第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?
这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 :
01000000B(40H) +10000000B(80H)=11000000B(C0H)。

写入时序图:
在这里插入图片描述
RS = 1(高电平)写内容
RS = 0(低电平)写指令 / 地址

读取时序图:
在这里插入图片描述

根据读写操作时序图来写代码,控制命令的执行

显示一个字符 ” C “:

注意要添加LCD1602 8bit的初始化命令
(1)延时 15ms
(2)写指令 38H(不检测忙信号)
(3)延时 5ms
(4)以后每次写指令, 读/写数据操作均需要 检测忙信号
(5)写指令 38H:显示模式设置
(6)写指令 08H:显示关闭
(7)写指令 01H:显示清屏
(8)写指令 06H:显示光标移动设置
(9)写指令 0CH:显示开及光标设置

#include "reg52.h"
#include <intrins.h>

/*
VSS——GND
VDD——5V

VO——GND

RS——P1.0
RW——P1.1
E——P1.4

ELA——5V
ELK——GND

D0-D7——P0.0-P0.7
*/

#define databuffer  P0		//定义8位数据线,P0端口组

sbit RS = P1^0;
sbit RW = P1^1;
sbit E  = P1^4;

//检测忙信号, 读时序
void check_busy()
{
	char tmp = 0x80;		//忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
	databuffer = 0x80;
	
	while(tmp & 0x80){		//高电平时一直读取.与上高位为1
		RS = 0;
		RW = 1;		//读时序
	
		E  = 0;			
		_nop_();				
		E  = 1;			
		_nop_();		
		_nop_();
		tmp = databuffer;
		E  = 0;			
		_nop_();
	}
	
}

/*
高电平——数据寄存器;低电平——指令寄存器

RS = 1(高电平)写内容
RS = 0(低电平)写指令 / 地址
*/
void Write_Cmd_Func(char cmd)		
{
	check_busy();
	RS = 0;
	RW = 0;
	
	E  = 0;			//低电平
	_nop_();		//上升沿时间
	databuffer = cmd;		//传输数据
	_nop_();
	E  = 1;			//切换为高电平
	_nop_();		
	_nop_();
	E  = 0;			//变为低电平
	_nop_();
}

void Write_Data_Func(char dataShow)
{
	check_busy();
	RS = 1;
	RW = 0;
	
	E  = 0;			
	_nop_();		
	databuffer = dataShow;	
	_nop_();
	E  = 1;			
	_nop_();		
	_nop_();
	E  = 0;			
	_nop_();
}

void Delay15ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 27;
	j = 226;
	do
	{
		while (--j);
	} while (--i);
}

void Delay5ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 9;
	j = 244;
	do
	{
		while (--j);
	} while (--i);
}



//初始化LCD
void LCD1602_INIT()
{
	Delay15ms(); 				//延时 15ms
	Write_Cmd_Func(0x38);		//写指令 38H(不检测忙信号)
	Delay5ms();					//延时 5ms
	check_busy();				//以后每次写指令,读/写数据操作均需要检测忙信号
	Write_Cmd_Func(0x38);		//写指令 38H:显示模式设置
	Write_Cmd_Func(0x08);		//写指令 08H:显示关闭
	Write_Cmd_Func(0x01);		//写指令 01H:显示清屏
	Write_Cmd_Func(0x06);		//写指令 06H:显示光标移动设置
	Write_Cmd_Func(0x0c);		//写指令 0CH:显示开及光标设置
}


void main()
{
	char position = 0x80 + 0x05;	//写入显示地址时要求最高位 D7 恒定为高电平 1
	char dataShow = 'C';
	
	LCD1602_INIT();					//初始化LCD
	Write_Cmd_Func(position);		//选择要显示的地址
	Write_Data_Func(dataShow);		//发送要显示的字符
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

激光切割机切割工件出现锯齿是什么原因?

金属激光切割机因切割速度快&#xff0c;效率高&#xff0c;切割效果好受到广大金属加工需求的厂家追捧&#xff0c;但在使用时不免出现一些小问题&#xff0c;如&#xff1a;在激光切割加工的时候出现锯齿的问题。 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff…

详解Python中httptools模块的使用

httptools 是一个 HTTP 解析器&#xff0c;它首先提供了一个 parse_url 函数&#xff0c;用来解析 URL。这篇文章就来和大家聊聊它的用法吧&#xff0c;感兴趣的可以了解一下 如果你用过 FastAPI 的话&#xff0c;那么你一定知道 uvicorn&#xff0c;它是一个基于 uvloop 和 h…

京东API商品详情接口,通过商品ID获取商品名称,淘宝主图,价格,颜色规格尺寸,库存,SKU数据等调用示例

要接入京东API接口以采集电商平台上的商品数据&#xff0c;可以按照以下步骤进行&#xff1a; 注册并获取API密钥&#xff1a;在使用API接口之前&#xff0c;需要注册并获取API密钥。API密钥是识别身份的唯一标识符。每个API接口都有自己的注册、认证和授权过程&#xff0c;因…

Find My电容笔|苹果Find My技术与电容笔结合,智能防丢,全球定位

随着平板电脑的流行&#xff0c;有不少厂商都投入到了电容笔的开发当中&#xff0c;现在的电容笔不仅在精度上有了提高&#xff0c;甚至在笔触和压感上的研究都有进步。电容笔是利用导体材料制作的具有导电特性、用来触控电容式屏幕完成人机对话操作用的笔&#xff0c;电容笔通…

tsx语法

安装JSX库 安装完之后在vite.config.ts进行插件使用&#xff0c;代码如下&#xff1a; 然后就可以愉快的使用TSX来开发Vue组件了&#xff0c;下面主要说一下SFC和TSX的部分区别。 基本语法对照 defineComponent 和 setup setup中函数的返回值有多种方式&#xff0c;可以直接…

异常数据检测 | Python实现oneclassSVM模型异常数据检测

支持向量机(SVM)的异常检测 SVM通常应用于监督式学习,但OneClassSVM[8]算法可用于将异常检测这样的无监督式学习,它学习一个用于异常检测的决策函数其主要功能将新数据分类为与训练集相似的正常值或不相似的异常值。 OneClassSVM OneClassSVM的思想来源于这篇论文[9],SVM使用…

挑战传统IT:RPA以更低的成本和更高的效率领跑数字化转型

在企业数字化进程中&#xff0c;传统的IT解决方案往往带来高成本和低效率的问题。因此&#xff0c;如何顺利地、平稳地进行数字化转型对企业来说是核心考虑。 为此&#xff0c;本文将深入探讨RPA&#xff08;Robotic Process Automation&#xff09;如何以其独特的优势&#xf…

RabbitMQ消息模型之发布订阅Publish-Subscribe

发布订阅模型 Publish/Subscribe 发布订阅模型也称为广播模型&#xff0c;交换机类型需要指定为Fanout&#xff0c;正如从名称中猜到的那样&#xff0c;它是将接收到的所有消息广播到它知道的所有队列中。每个消费者都监听自己的队列&#xff0c;所以同一个消息&#xff0c;会…

MNIST手写数字识别

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在Pytorch&#xff…

OpenMMlab导出FCN模型并用onnxruntime推理

导出onnx文件 直接使用脚本 import torch from mmseg.apis init_modelconfig_file configs/fcn/fcn_r18-d8_4xb2-80k_cityscapes-512x1024.py checkpoint_file fcn_r18-d8_512x1024_80k_cityscapes_20201225_021327-6c50f8b4.pth model init_model(config_file, checkpoin…

YOLOv8 代码部署

一、获取代码 YOLOv8官方GitHub网址 https://github.com/ultralytics/ultralytics 获取YOLOv8代码压缩包 二、虚拟环境配置 这个就不写了&#xff0c;装个Anaconda&#xff0c;网上教程很多 三、PyCharm安装与配置&#xff08;可选&#xff09; 这个也不写了&#xff0c;…

磁环电感参数计算

磁环电感参数计算 1.什么是电感磁饱和2.电感饱和的原因3.电感饱和带来的影响3.1 感应电动势变化3.2 电感值变化3.3 功率损耗增加3.4 系统稳定性受到影响4.饱和电流计算最近在做DC/DC电源,电感是用磁环绕制的,所以关注一下磁环绕制电感参数的计算,学习学习。 某款磁环参数。 …

SpringBoot——Swagger2 接口规范

优质博文&#xff1a;IT-BLOG-CN 如今&#xff0c;REST和微服务已经有了很大的发展势头。但是&#xff0c;REST规范中并没有提供一种规范来编写我们的对外REST接口API文档。每个人都在用自己的方式记录api文档&#xff0c;因此没有一种标准规范能够让我们很容易的理解和使用该…

3dMax导出glft和glb格式模型插件Max2Babylon教程

为了满足Autodesk提供自己的导出管道之前的迫切需要&#xff0c;Babylon.js导出器可用于3dMax。导出器可以将3dMax场景导出为.glTF文件、.glb文件或.babylon文件。 【适用版本】 3dMax2015 - 2024 【安装方法】 1.选择和自己电脑中3dMax所对应的插件版本&#xff0c;解压缩。…

基于Qt MP3音频播放器示例(可制作音频播放器)

​本次MP3文件也给出来,方便大家调试。话不多说直接上源码。 整个项目下载地址:CSDN:GetCode 昵称-》Qt魔术师:https://gitcode.com/m0_45463480/QtMP3/tree/main## .pro # 指定项目类型为应用程序。TEMPLATE = app# 指定项目的名称为musicplayerTARGET = musicplayer# 添…

Matlab下载许可证文件 教程(在账号有许可证的前提下)

文章目录 Part.I IntroductionPart.II 许可证文件过期解决方案Chap.I 使用 Internet 自动激活Chap.II 在不使用 Internet 的情况下手动激活 Part.I Introduction 本文主要介绍&#xff0c;在 Mathwork 账号有许可证的前提下&#xff0c;下载许可证的操作流程。 好久没有用 Mat…

使用Redis实现接口防抖

说明&#xff1a;实际开发中&#xff0c;我们在前端页面上点击了一个按钮&#xff0c;访问了一个接口&#xff0c;这时因为网络波动或者其他原因&#xff0c;页面上没有反应&#xff0c;用户可能会在短时间内再次点击一次或者用户以为没有点到&#xff0c;很快的又点了一次。导…

基于springboot的电影院管理系统的设计与实现 (含论文和源码视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的电影院管理系统7拥有两种角色 管理员&#xff1a;用户管理、购票统计、电影管理、电影类型管理、放映厅管理、订单管理等 用户&#xff1a;登录注册、查看各种信息、购票…

uniapp打包ios有时间 uniapp打包次数

我们经常用的解决方案有,分包,将图片上传到服务器上,减少插件引入。但是还有一个方案好多刚入门uniapp的人都给忽略了,就是在源码视图中配置,开启分包优化。 1.分包 目前微信小程序可以分8个包,每个包的最大存储是2M,也就是说你文件总体的大小不能超过16M,每个包的大…

【模板】KMP算法笔记

练习链接&#xff1a;【模板】KMP - 洛谷 题目&#xff1a; 输入 ABABABC ABA 输出 1 3 0 0 1 思路&#xff1a; 根据题意&#xff0c;用到的是KMP算法&#xff0c;KMP算法思想是通过一个一个匹配首字母的原理进行整个匹配效果&#xff0c;当某个首字母不匹配的时候&#x…