LCD1602显示屏

LCD1602显示

  • 概述

    LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 16×02 即 32 字符(16列两行)

    在这里插入图片描述

  • 引脚说明

    在这里插入图片描述

    //电源
    VSS -- GND
    VDD -- 5V
    //对比度
    VO -- GND
    //控制线
    RS -- P1.0
    RW -- P1.1
    E -- P1.4
    //背光灯
    A -- 5V
    K -- GDN
    //数据
    D0到D7 -- P0.0到P0.7
    

    在这里插入图片描述

  • 开发逻辑

    在这里插入图片描述

  • 在哪里显示

    在这里插入图片描述

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

  • 显示什么

    在这里插入图片描述

  • 读写操作时序

    1. 读操作时序

      在这里插入图片描述

    2. 写操作时序

      在这里插入图片描述

    3. 数序参数

      在这里插入图片描述

  • 显示一个字符

    #include "reg52.h"
    #include "intrins.h"
    
    #define BUFF P0
    /*
    控制线接口:
    RS -- P1.0
    RW -- P1.1
    E -- P1.4
    */
    sbit RS = P1^0;
    sbit RW = P1^1;
    sbit EN = P1^4;
    void check_busy()//每次写指令,读/写数据操作均需要检测忙信号
    {
    	char tmp = 0x80;
    	BUFF = 0x80;
    	while(tmp & 0x80){
    		RS = 0;
    		RW = 1;
    		EN = 0;
    		_nop_();
    		EN = 1;
    		_nop_();
    		tmp = BUFF;
    		_nop_();
    		_nop_();
    		EN = 0;
    		_nop_();
    	}
    }
    
    void Write_cmd(char cmd)//写指令
    {
    	check_busy();
    	RS = 0;
    	RW = 0;
    	
    	EN = 0;
    	_nop_();
    	BUFF = cmd;
    	_nop_();
    	EN = 1;
    	_nop_();
    	_nop_();
    	EN = 0;
    	_nop_();
    }
    void Write_data(char _data)//写数据
    {
    	check_busy();
    	RS = 1;
    	RW = 0;
    	
    	EN = 0;
    	_nop_();
    	BUFF = _data;
    	_nop_();
    	EN = 1;
    	_nop_();
    	_nop_();
    	EN = 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);
    }
    
    void LCD1602_init()//LCD1602初始化
    {
    	//(1)延时 15ms
    	Delay15ms();
    	//(2)写指令 38H(不检测忙信号)
    	Write_cmd(0x38);
    	//(3)延时 5ms
    	Delay5ms();
    	//(4)以后每次写指令,读/写数据操作均需要检测忙信号
    	//(5)写指令 38H:显示模式设置
    	Write_cmd(0x38);
    	//(6)写指令 08H:显示关闭
    	Write_cmd(0x08);
    	//(7)写指令 01H:显示清屏
    	Write_cmd(0x01);
    	//(8)写指令 06H:显示光标移动设置
    	Write_cmd(0x06);
    	//(9)写指令 0CH:显示开及光标设置
    	Write_cmd(0x0c);
    
    }
    void main()
    {
    	char cmd = 0x80 + 0x05;//第一行第五个位置
    	char _data = 'C';
    	LCD1602_init();
    	Write_cmd(cmd);
    	Write_data(_data);
    }
    
  • 显示一行字符

    #include "reg52.h"
    #include "intrins.h"
    
    #define BUFF P0
    /*
    控制线接口:
    RS -- P1.0
    RW -- P1.1
    E -- P1.4
    */
    sbit RS = P1^0;
    sbit RW = P1^1;
    sbit EN = P1^4;
    void check_busy()//每次写指令,读/写数据操作均需要检测忙信号
    {
    	char tmp = 0x80;
    	BUFF = 0x80;
    	while(tmp & 0x80){
    		RS = 0;
    		RW = 1;
    		EN = 0;
    		_nop_();
    		EN = 1;
    		_nop_();
    		tmp = BUFF;
    		_nop_();
    		_nop_();
    		EN = 0;
    		_nop_();
    	}
    }
    
    void Write_cmd(char cmd)//写指令
    {
    	check_busy();
    	RS = 0;
    	RW = 0;
    	
    	EN = 0;
    	_nop_();
    	BUFF = cmd;
    	_nop_();
    	EN = 1;
    	_nop_();
    	_nop_();
    	EN = 0;
    	_nop_();
    }
    void Write_data(char _data)//写数据
    {
    	check_busy();
    	RS = 1;
    	RW = 0;
    	
    	EN = 0;
    	_nop_();
    	BUFF = _data;
    	_nop_();
    	EN = 1;
    	_nop_();
    	_nop_();
    	EN = 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);
    }
    
    void LCD1602_init()//模块初始化
    {
    	//(1)延时 15ms
    	Delay15ms();
    	//(2)写指令 38H(不检测忙信号)
    	Write_cmd(0x38);
    	//(3)延时 5ms
    	Delay5ms();
    	//(4)以后每次写指令,读/写数据操作均需要检测忙信号
    	//(5)写指令 38H:显示模式设置
    	Write_cmd(0x38);
    	//(6)写指令 08H:显示关闭
    	Write_cmd(0x08);
    	//(7)写指令 01H:显示清屏
    	Write_cmd(0x01);
    	//(8)写指令 06H:显示光标移动设置
    	Write_cmd(0x06);
    	//(9)写指令 0CH:显示开及光标设置
    	Write_cmd(0x0c);
    
    }
    void LCD1602_print_line(char line,char col,char *string)//写入一行数据
    {
    	switch(line){//switch选择那一行
    		case 1:
    			Write_cmd(0x80+col);//col 决定从哪个地方开始
    			while(*string){
    				Write_data(*string);
    				string++;
    			}
    			break;
    		case 2:
    			Write_cmd(0x80+0x40+col);
    			while(*string){
    				Write_data(*string);
    				string++;
    			}
    			break;
    	}
    }
    void main()
    {
    	LCD1602_init();
    	LCD1602_print_line(1,0,"hello world");
    	LCD1602_print_line(2,0,"to be number one");
    }
    

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

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

相关文章

大数据学习第十一天(复习linux指令3)

1、su和exit su命令就是用于账户切换的系统命令 基本语法:su[-] [用户名] 1)-表示是否在切换用户后加载变量,建议带上 2)参数:用户名,表示切换用户 3)切换用户后,可以通过exit命令退…

欧拉路径欧拉回路

欧拉回路,指遍历图时通过图中每条边且仅通过一次,最终回到起点的一条闭合回路,适用于有向图与无向图,如果不强制要求回到起点,则被称为欧拉路径。 欧拉图:具备欧拉回路的图 无向图:图的所有顶…

Java解析实体类的属性和属性注释

前言 获取某个类的属性(字段)是我们经常都会碰到的,通常我们是通过反射来获取的。 但是有些特殊情况下,我们不仅要获取类的属性,还需要获取属性注释。这种情况下,我们只能通过注解去获取注释。可以自己定…

LC 111.二叉树的最小深度

111. 二叉树的最小深度 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出:…

python读取excel,转换成json格式,for国际化前端菜单

# -*- coding: utf-8 -*-import pandas as pd import json# 读取Excel文件中的数据 excel_file rD:\解析excel\zy.xlsx df pd.read_excel(excel_file)# 生成中文JSON和英文JSON cn_data {} en_data {} pu_data {} special_data_cn {} special_data_en {} special_data_p…

肿瘤免疫反应瀑布图(源于The Miller Lab)

目录 数据格式 绘图 ①根据剂量 ②根据type ③根据治疗响应度 添加水平线 数据格式 肿瘤免疫响应数据 rm(list ls()) library(tidyverse) library(dplyr) library(knitr)#模拟数据 # We will randomly assign the two doses, 80 mg or 150 mg, to the 56 subjects Me…

使用 Docker 部署 Puter 云桌面系统

1)Puter 介绍 :::info GitHub:https://github.com/HeyPuter/puter ::: Puter 是一个先进的开源桌面环境,运行在浏览器中,旨在具备丰富的功能、异常快速和高度可扩展性。它可以用于构建远程桌面环境,也可以作为云存储服…

【EI会议征稿】2024年智能计算、信号处理与计算机科学国际会议(ICSPCS 2024)

2024 International Conference on Intelligent Computing, Signal Processing and Computer Science (ICSPCS 2024) ●会议简介 2024年智能计算、信号处理与计算机科学国际会议(ICSPCS 2024)即将在青岛隆重开幕。本次会议将汇聚全球智能计算、信号处理…

【动态】江西省小型水库安全监测能力提升试点项目通过验收

近日,由北京国信华源科技有限公司和长江勘测规划设计研究有限责任公司联合承建的江西省小型水库安全监测能力提升试点项目圆满通过验收。 在项目业主单位的组织下,省项目部、特邀专家、县水利局二级项目部以及项目设计、监理、承建等单位的代表组成验收工…

C/C++后台研发需要点亮哪些技能树?

引言 在当今高速发展的信息技术领域,C/C作为底层性能卓越、灵活性强的语言,在后台开发中仍然占据着至关重要的地位,尤其是在高性能服务器、实时计算、嵌入式系统、游戏引擎及云计算基础设施等领域。成为一名优秀的C/C后台研发工程师&#xf…

200元预算可购买的阿里云服务器配置价格表

阿里云服务器租用价格表2024年最新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元,ECS u1服务器2核4G5M固定带宽199元一年,2核4G4M带宽轻量服务器一年165元12个月,2核…

MySQL一条SQL语句的执行过程

MySQL一条SQL语句的执行过程可以大致分为以下几个步骤: mysq分层架构 为了理解这个问题,先从Mysql的架构说起,对于Mysql来说,大致可以分为3层架构。 网络连接层: 作为客户端和服务端的连接,连接器负责处…

共享单车安全保障利器,实名认证API名副其实!

🚀 引言 随着科技飞速跃进,共享单车已成为都市新宠儿, 为我们的生活带来方便的同时,一系列安全隐患也相伴而生: 公共资产需要大众守护,但有人却恶意损毁、任性挪用;让人揪心的现象愈发严重,是时候采取雷霆…

WHM面板安全设置与防护技巧

上周有一个Hostease的客户购买带WHM面板的服务器,咨询我们的在线客服,如何确保WHM面板的安全性,客户想要进行安全加固设置。可以尝试以下是一些WHM面板的安全设置和防护技巧: 定期更新软件和补丁:确保操作系统、WHM面…

实操:driver.js 实现产品导览、亮点、上下文帮助

官网 https://driverjs.com/ 依赖 <script src"https://cdn.jsdelivr.net/npm/driver.js1.0.1/dist/driver.js.iife.js"></script> <link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/driver.js1.0.1/dist/driver.css"/…

算法基础 - 并查集

&#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 算法 - 并查集前言Quick FindQuick Union加权 Quick Union路径压缩的加权 Quick Union比较&#x1f604;总结 算法 - 并查集 前言 用于解决动态连通性问题&#xff0c;能动态连接两个点&#xff0c;并且判断两个点是否连…

一个问题串联 Java 的几个基础知识

前言 关于 “” 和 equals() 的区别这个问题&#xff0c;我之前一直搞的很乱&#xff0c;虽然面试的时候一直没有被问到&#xff0c;但是我感觉这种是属于最基础的知识&#xff0c;如果不懂好像不是很好。后来我发现通过这个问题&#xff0c;可以串联起很多的知识点&#xff0…

使用Bitmaps位图实现Redis签到

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis提供了Bitmaps这个“数据类型”可以实现对位的操作: (1) Bitmaps…

定时器与晶振时钟、中断系统、定时中断

定时器 简介&#xff1a; C51中的定时器和计数器是同一个硬件电路支持的&#xff0c;通过寄存器配置不同&#xff0c;就可以将他当做定时器 或者计数器使用。 确切的说&#xff0c;定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使用时&#xff0…

求批量修改图片扩展名有哪些方法?一键批量修改文件扩展名

批量修改图片的扩展名还可以帮助我们更好地管理和分类图片。在日常生活和工作中&#xff0c;我们可能会收集大量的图片&#xff0c;这些图片可能来自不同的来源&#xff0c;具有不同的格式和特点。通过批量修改扩展名&#xff0c;我们可以将这些图片进行统一的管理和分类&#…