LCD1602显示屏

news2024/10/7 6:43:04

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");
    }
    

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

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

相关文章

Python快速入门系列-8(Python数据分析与可视化)

第八章:Python数据分析与可视化 8.1 数据处理与清洗8.1.1 数据加载与查看8.1.2 数据清洗与处理8.1.3 数据转换与整理8.2 数据可视化工具介绍8.2.1 Matplotlib8.2.2 Seaborn8.2.3 Plotly8.3 数据挖掘与机器学习简介8.3.1 Scikit-learn8.3.2 TensorFlow总结在本章中,我们将探讨…

在Java中对SQL进行常规操作的通用方法

SQL通用方法 一、常规方法增删改查二、具体优化步骤1.准备工作2.getcon()方法,获取数据库连接对象3.closeAll()方法,关闭所有资源4.通用的增删改方法5.通用的查询方法6.动态查询语句 总结 一、常规方法增删改查 在常规方法中,我们在Java中对…

rocketmq的运维

1. admintool创建topic的时候 -o 的用法含义 https://rocketmq.apache.org/zh/docs/4.x/producer/03message2/ 有关orderMessageEnable和returnOrderTopicConfigToBroker的设置可以参考 https://blog.csdn.net/sdaujsj1/article/details/115741572 -c configFile通过-c命令指…

Sy6 编辑器vi的应用(+shell脚本3例子)

实验环境: 宿主机为win11,网络:10.255.50.5 6389 WSL2 ubuntu 目标机的OS:Ubuntu 内核、版本如下: linuxpeggy0223:/$ uname -r 5.15.146.1-microsoft-standard-WSL2 linuxpeggy0223:/$ cat /proc/version Linux vers…

MYSQL数据库:告别慢查询,优化性能大揭秘

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 MYSQL数据库:告别慢查询,优化性能大揭秘 文章目录 一、揭秘…

「每日跟读」句型公式 第2篇

「每日跟读」句型公式 第2篇 1. I’m thinking about____ 我在考虑____ I’m thinking about my future career (我正在思考我未来的职业) I’m thinking about our marriage (我在考虑我们的婚姻) I’m thinking about taking a vacation (我在考虑度一个假) I’m think…

书生·浦语大模型InternLM-Chat-1.8B 智能对话 Demo 第二期

文章目录 InternLM-Chat-1.8B 智能对话 Demo环境准备下载模型运行 InternLM-Chat-1.8B web 运行八戒 demo下载模型执行Demo InternLM-Chat-1.8B 智能对话 Demo 环境准备 在InternStudio平台中选择 10% A100(1/4) 的配置(平台资源有限),如下图…

【微服务】——Nacos注册中心

这里写自定义目录标题 1.认识和安装Nacos2.服务注册到nacos1)引入依赖2)配置nacos地址3)重启 3.服务分级存储模型3.1.给user-service配置集群3.2.同集群优先的负载均衡 4.权重配置5.环境隔离5.1.创建namespace5.2.给微服务配置namespace 6.Na…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(7)

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 PS敬伟01——90集等文件 https://www.alipan.com/s…

Typecho自媒体博客Spimes主题 X7.2

主题介绍 spimes主题专为博客、自媒体、资讯类的网站设计开发,自适应兼容手机、平板设备。一款简约新闻自媒体类的 typecho 主题,设计上简约、干净、精致、响应式,后台设置更是强大而且实用的新闻自媒体类主题。 已经更新到7.2,删…

优于五大先进模型,浙江大学杜震洪团队提出 GNNWLR 模型:提升成矿预测准确性

卡塔尔世界杯自 2010 年荣膺举办权,直至 2022 年辉煌成功举办,累计投入资金高达约 2,290 亿美元。相较之下,此前七届世界杯的总花费仅约 400 多亿美元。这场体育盛事展现出奢华无度的风采,归根结底源于卡塔尔这个国度的深厚底蕴。…

官宣!一文掌握2024百度CreateAI开发者大会最新议程

4月16日上午9:00,以“创造未来”为主题的2024百度Create AI开发者大会将在深圳国际会展中心(宝安)开幕。此次大会将是近十年来,粤港澳大湾区规格最高的AI大会,将聚焦炙手可热的AI话题,在大会主论坛、分论坛…

回溯算法|46.全排列

力扣题目链接 class Solution { public:vector<vector<int>> result;vector<int> path;void backtracking (vector<int>& nums, vector<bool>& used) {// 此时说明找到了一组if (path.size() nums.size()) {result.push_back(path);re…

阿里云数据库服务器价格表查询_一张表精准报价

阿里云数据库服务器价格表&#xff0c;优惠99元一年起&#xff0c;ECS云服务器2核2G、3M固定带宽、40G ESSD Entry云盘&#xff0c;优惠价格99元一年&#xff1b;阿里云数据库MySQL版2核2G基础系列经济版99元1年、2核4GB 227.99元1年&#xff0c;云数据库PostgreSQL、SQL Serve…

9.动态规划——4.最长公共子序列(动态规划类的算法题该如何解决?)

例题——最长公共子序列(一) 分析 设最长公共子序列 d p [ i ] [ j ] dp[i][j] dp[i][j]是 S 1 S_1 S1​的前 i i i个元素&#xff0c;是 S 2 S_2 S2​的前 j j j个元素&#xff0c;那么有&#xff1a; 若 S 1 [ i − 1 ] S 2 [ i − 1 ] S_1[i-1]S_2[i-1] S1​[i−1]S2​[…

基于深度学习的吸烟行为检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于深度学习的吸烟行为检测系统&#xff0c;核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行性能指标对比&#xff1b;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码&#xff0c;及基于Streamlit的交互式…

某音a_bogus 流程vmp分析

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 仅研究。网站链接自己去找。 前言 这里a_bogus 又是个vmp。 还是个多层嵌套…

小红数组操作(结构体模拟链表详细解析)(双向链表)c/c++

题目描述: 小红拿到了一个数组&#xff0c;初始数组为空&#xff0c;她希望你实现以下两种操作&#xff1a; 1. 输入x,y&#xff0c;将x插入在元素y的右边。保证此时数组中没有元素等于x&#xff0c;且数组中存在一个y。特殊的&#xff0c;如果将x插入在数组的最左边&#xff0…

微生物群落关键种识别:一种不依赖于网络的自上而下的方法

微生物群落在促进养分循环、协助植物生长、维持人体健康等方面发挥着重要的作用。群落关键种对维持微生物群落稳定性具有重要影响&#xff0c;识别关键种一直是微生物生态学中的热点话题。识别关键种主要有两种框架&#xff1a;数据驱动的方法&#xff08;data driven method&a…

用ENIGMA-toolbox作图

之前一直使用ggseg呈现结果&#xff0c;最近想试一试其他绘图工具。ENIGMA-toolbox有所了解&#xff0c;绘图功能看起来门槛不高&#xff0c;所以就试着用它呈现一些结果。Matlab版本的ENIGMA-toolbox直接使用就是SurfStat的功能绘图&#xff0c;Python版本的绘图功能应该是根据…