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)延时 15msDelay15ms();//(2)写指令 38H(不检测忙信号)Write_cmd(0x38);//(3)延时 5msDelay5ms();//(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)延时 15msDelay15ms();//(2)写指令 38H(不检测忙信号)Write_cmd(0x38);//(3)延时 5msDelay5ms();//(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.mzph.cn/news/791127.shtml

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

相关文章

在ChatGPT中,能用DALL·E 3编辑图片啦!

4月3日,OpenAI开始向部分用户,提供在ChatGPT中的DALLE 3图片编辑功能。 DALLE 3是OpenAI在2023年9月20日发布的一款文生图模型,其生成的图片效果可以与Midjourney、leonardo、ideogram等顶级产品媲美,随后被融合到ChatGPT中增强其…

matlab的歧视:simulink不能使用stm32f4系列的ADC?

2023b的matlab,stm32f407芯片,运行内容Using the Analog to Digital Converter Block to Support STMicroelectronics STM32 Processor Based Boards Using the Analog to Digital Converter Block to Support STMicroelectronics STM32 Processor Base…

基于SSM的社区疫情防控管理信息系统

目录 背景 技术简介 系统简介 界面预览 背景 随着时代的进步,计算机技术已经全方位地影响了社会的发展。随着居民生活质量的持续上升,人们对社区疫情防控管理信息系统的期望和要求也在同步增长。在社区疫情防控日益受到广泛关注的背景下&#xff0c…

【漏洞复现】通天星CMSV6车载主动安全监控云平台inspect_file接口处存在任意文件上传漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

电商技术揭秘一:电商架构设计与核心技术

文章目录 引言一、电商平台架构概述1.1 架构设计原则与架构类型选择1.2 传统电商平台架构与现代化架构趋势分析 二、高并发处理与负载均衡2.1 高并发访问特点分析与挑战2.2 负载均衡原理与算法选择 三、分布式数据库与缓存技术3.1 分布式数据库设计与一致性考量3.2 缓存策略与缓…

基于SpringBoot和Vue的金融融资管理系统的设计和实现【附源码】

1、系统演示视频(演示视频) 2、需要交流和学习请联系

vue弹出的添加信息组件中 el-radio 单选框无法点击问题

情景描述:在弹出的添加信息的组件中的form中有一个单选框,单选框无法进行点击切换 原因如下: 单选框要求有个默认值,因为添加和更新操作复用同一个组件,所以我在初始化时对相关进行了判定,如果为空则赋初始值 结果这样虽然实现了初始值的展示,但是就是如此造成了单选框的无法切…

代码随想录算法训练营第二十九天(回溯5)|491. 非递减子序列、46. 全排列、47. 全排列 II(JAVA)

文章目录 491. 非递减子序列解题思路源码 46. 全排列解题思路源码 47. 全排列 II解题思路源码 总结 491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 …

前端返回 List<Map<String, Object>>中的vaue值里面包含一个Bigdecimal类型,序列化时小数点丢失,如何解决?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

Linux 命令 top 详解

1 top命令介绍 Linux系统中,Top命令主要用于实时运行系统的监控,包括Linux内核管理的进程或者线程的资源占用情况。这个命令对所有正在运行的进程和系统负荷提供不断更新的概览信息,包括系统负载、CPU利用分布情况、内存使用、每个进程的内容…

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

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

Golang | Leetcode Golang题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; func reverse(x int) (rev int) {for x ! 0 {if rev < math.MinInt32/10 || rev > math.MaxInt32/10 {return 0}digit : x % 10x / 10rev rev*10 digit}return }

ETL工具-nifi干货系列 第八讲 处理器PutDatabaseRecord 写数据库(详细)

1、本节通过一个小例子来讲解下处理器PutDatabaseRecord&#xff0c;该处理器的作用是将数据写入数据库。 如下流程通过处理器GenerateFlowFile 生成数据&#xff0c;然后通过处理器JoltTransformJSON转换结构&#xff0c;最后通过处理器PutDatabaseRecord将数据写入数据库。如…

keepalived+LVS高可用部署

目录 一.两台设备&#xff08;2.130和2.133&#xff09;作为调度器&#xff0c;前主后备 1.部署keepalived 2.修改配置文件准备启动 3.配置keepalived的系统日志并启动 二.模拟调度器掉点和web服务进程丢失 1.调度器掉点 2.当类似于httpd这种网站服务掉点 三.以三种健康…

C++ 前K个高频单词的六种解法

目录 大堆 小堆 vectorsort vectorstable_sort multimap set/multiset 与GPT的对话 1.对于比较类型中 < 运算符重载的理解 2.map有稳定性的说法吗 ​编辑 3.为什么map和set类的仿函数后面要加const来修饰*this 5.关于名词的理解 6.匿名对象对类要求 7.map和set的…

新手使用GIT上传本地项目到Github(个人笔记)

亲测下面的文章很有用处。 1. 初次使用git上传代码到github远程仓库 - 知乎 (zhihu.com) 2. 使用Git时出现refusing to merge unrelated histories的解决办法 - 知乎

【大数据存储】实验五:Mapreduce

实验Mapreduce实例——排序&#xff08;补充程序&#xff09; 实验环境 Linux Ubuntu 16.04 jdk-8u191-linux-x64 hadoop-3.0.0 hadoop-eclipse-plugin-2.7.3.jar eclipse-java-juno-SR2-linux-gtk-x86_64 实验内容 在电商网站上&#xff0c;当我们进入某电商页面里浏览…

windows@软件显示模糊@屏幕显示器分辨率和精细度

文章目录 refsDPIPPIPPI (Pixels Per Inch)DPI (Dots Per Inch) 屏幕尺寸数windows中DPI设置对单个应用设置DPI兼容性设置使用系统全局设置 获取屏幕(监视器)信息&#x1f47a;获取监视器的型号pnp 监视器windows 获取屏幕分辨率 高分辨率屏幕高分辨率和高精细度屏幕&#x1f4…

RedHat9中KVM虚拟机的配置与管理

KVM虚拟技术介绍 Linux的KVM&#xff08;Kernel-based Virtual Machine&#xff09;虚拟技术是一种基于Linux内核的虚拟化解决方案。它允许在单个物理服务器上创建和运行多个隔离的虚拟机&#xff0c;每个虚拟机都有自己的操作系统和应用程序&#xff0c;就像运行在独立的物理…

MyBatis入门到掌握(JAVA)

建立连接可能涉及到的问题&#xff08;只需要自己改一下就行&#xff09; 1、MyBatis是⼀款优秀的 持久层 框架&#xff0c;⽤于简化JDBC的开发 2、数据库连接配置 &#xff08;1&#xff09;yml配置 # 数据库连接配置 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/…