51单片机入门_江协科技_31~32_OB记录的自学笔记_LCD1602液晶显示屏

31. LCD1602

  • 31.1. LCD1602介绍
    •LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符
    •显示容量:16×2个字符,每个字符为5*7点阵

  • 31.2. 引脚及应用电路
    接线D0~D7与单片机P口高低位对齐
    在这里插入图片描述

  • 31.3. 内部结构框图
    CGRAM CGROM类似段码表,RAM可写,ROM不可写;
    DDRAM用户可写,DDRAM40x2,比屏幕大,但是前16映射屏幕;多出来的可以移屏显示;
    AC光标位置,地址计数器,指令确定AC的位置

在这里插入图片描述

  • 31.4. 存储器结构
    举例A的索引码:0100 0001 B, 0x41,上方的索引码填入到左侧的xxxx中
    索引码同ASIC码

在这里插入图片描述

  • 31.5. 时序结构(写的时序结构)
    RS=1(数据);RS=0(指令)
    RW=0;
    DB0~DB7放好数据;
    E=1写入数据;
    E=0完成写入;
    在这里插入图片描述

  • 31.6. LCD1602指令集
    下表是指令的格式,指令集;
    原LCD1602程序中显示(行,列,xxx)就是在设置DDRAM地址,光标位置;

在这里插入图片描述

  • 31.7. LCD1602操作流程
    •初始化:
    发送指令0x38 //八位数据接口,两行显示,5*7点阵
    发送指令0x0C //显示开,光标关,闪烁关
    发送指令0x06 //数据读写操作后,光标自动加一,画面不动
    发送指令0x01 //清屏

    •显示字符:
    发送指令0x80|AC //设置光标位置//实际地址最高为必须置1代表是地址设置的指令
    发送数据 //发送要显示的字符数据
    发送数据 //发送要显示的字符数据
    ……

  • 31.8. 字符、字符串
    •字符:根据一定规则建立的数字到字符的映射(ASCII码表)
    例如:0x21=’!’,0x41=’A’,0x00=’\0’
    定义方法:char x=‘A’;(等效于char x=0x41;)
    •字符数组:存储字符变量的一个数组
    定义方法:char y[]={’A’, ’B’, ’C’};
    (等效于char y[]={0x41,0x42,0x43}; )
    •字符串:在字符数组后加一个字符串结束标志,本质上是字符数组
    定义方法:char z[]=”ABC”;(等效于char z[]={’A’, ’B’, ’C’, ’\0’};)

32. LCD1602显示模块编程

  • 32.1. 编程思路:

    • 需要编写LCD写数据模块和写命令模块
    • 编写LCD初始化模块
    • 编写LCD光标位设置模块
    • 编写LCD_ShowChar显示单字节模块
  • 32.2. LCD1602.c和LCD1602.h程序如下:

#include <REGX52.H>sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
#define LCD_DataPort P0/*定义一个1ms延时函数*/
void LCD_Delay(void)	//@12.000MHz, 1ms延时
{unsigned char data i, j;i = 2;j = 239;do{while (--j);} while (--i);
}
/*LCD写命令函数*/
void LCD_WriteCommand(unsigned char Command)
{LCD_RS=0;LCD_RW=0;LCD_DataPort=Command;LCD_E=1;LCD_Delay();			//如果不延时会出错LCD_E=0;LCD_Delay();			//如果不延时会出错
}
/*LCD写数据函数*/
void LCD_WriteData(unsigned char Data)
{LCD_RS=1;LCD_RW=0;LCD_DataPort=Data;LCD_E=1;LCD_Delay();			//如果不延时会出错LCD_E=0;LCD_Delay();			//如果不延时会出错
}
/*LCD初始化函数*/
void LCD_Init(void)
{LCD_WriteCommand(0x38);LCD_WriteCommand(0x0c);LCD_WriteCommand(0x06);LCD_WriteCommand(0x01);
}
/*LCD光标位置设置函数*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{if(Line==1){LCD_WriteCommand(0x80|(Column-1));}if(Line==2){LCD_WriteCommand(0x80|(Column-1)+0x40); //0x40是根据表格进行的移位}
}
/*LCD显示一个字符函数*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{LCD_SetCursor(Line,Column); //光标位置LCD_WriteData(Char);		//写入数据
}
/*LCD显示字符串函数*/
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char String[]) //String[]传递的是首地址和指针一致
{unsigned char i;LCD_SetCursor(Line,Column);for(i=0;String[i]!='\0';i++){LCD_WriteData(String[i]);}
}/*定义一个次方函数*/
int LCD_Power(int X, int Y)
{unsigned char i;int Result=1;for(i=0;i<Y;i++){Result*=X;}return Result;
}
/*LCD显示无符号数函数*/
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData('0'+Number/LCD_Power(10,i-1)%10); //加'0'等于加0x30,对应码表,否则显示空}
}
/*LCD显示有符号数函数*/
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{unsigned char i;unsigned int Number1;		//借用Number1,防止-32768无法显示LCD_SetCursor(Line,Column);if(Number>=0)				//判断数字大于0加+号{LCD_WriteData('+');Number1=Number;}else						//判断数字小于0加-号{LCD_WriteData('-');Number1=-Number; //如果没有Number,char -32768会超出}for(i=Length;i>0;i--){LCD_WriteData('0'+Number1/LCD_Power(10,i-1)%10); //加'0'等于加0x30,对应码表,否则显示空}
}
/*LCD显示有16进制数函数*/
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;unsigned char SingleNumber;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){SingleNumber=Number/LCD_Power(16,i-1)%16;if(SingleNumber<10){LCD_WriteData('0'+SingleNumber); }else{LCD_WriteData('A'+SingleNumber-10); //A的偏移对应10~16, A~F,-10对齐表格}}
}
/*LCD显示有2进制数函数*/
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData('0'+Number/LCD_Power(2,i-1)%2); }
}
#ifndef _LCD1602_H_ 
#define _LCD1602_H_  void LCD_Init(void);
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char String[]); 
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_WriteCommand(unsigned char Command);#endif
  • main主程序为:
#include <REGX52.h>
#include "LCD1602.h"
#include "delay_xms.h"void main()
{LCD_Init();LCD_ShowChar(1,1,'A');	//索引码A=0x41; \反斜杠用于转义,如'\'';'\\'标准ASIC是反斜杠,中文是钱币符号LCD_ShowString(1,3,"Hello");LCD_ShowNum(1,9,66,2);LCD_ShowSignedNum(1,12,-88,2);LCD_ShowHexNum(2,1,0xA5,2);LCD_ShowBinNum(2,4,0xA5,8);LCD_ShowChar(2,13,0xdf); //直接输入码表地址0xdf,0xe0=@LCD_ShowChar(2,14,'C'); //直接输入码表地址0xdf,0xe0=@LCD_ShowString(1,16,"Welcome to China!");while(1){LCD_WriteCommand(0x18); //流动字幕效果的移屏命令地址delay_xms(500);}}

Proteus测试无误
在这里插入图片描述

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

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

相关文章

二、Maven安装

Maven安装 一、Centos7.9安装1.下载2.安装3.设置国内镜像4.设置maven安装路径 一、Centos7.9安装 1.下载 第一种&#xff1a;官网下载最新版本&#xff1a;http://maven.apache.org/download.cgi第二种&#xff1a;其他版本下载&#xff1a;https://archive.apache.org/dist/…

数据中心的新动脉:探索ADOP 800G MPO/MTP单模光纤跳线

在数据传输领域&#xff0c;随着技术的不断进步&#xff0c;对于更快、更高效的传输解决方案的需求日益增长。ADOP 800G MPO/MTP单模光纤跳线便是在这样的背景下应运而生的产品。本文将为您提供一个全面而详细的介绍&#xff0c;带您深入了解这款创新产品的特点、优势以及应用场…

国产主流数据库存储类型简析

国产数据库在技术架构上主要分为集中式、基于中间件分布式和原生分布式架构&#xff0c;衍生出集中式架构和分布式架构。那么在这些部署架构中&#xff0c;从数据分布的视角来看&#xff0c;在数据库中数据分布的形态是怎样的。本文将简要分析OceanBase、PolarDB、OpenGauss、G…

探索数据中台的力量:企业数据资产管理的未来_光点科技

随着数字化时代的到来&#xff0c;"数据中台"这一概念逐渐为人所知&#xff0c;并迅速成为推动企业数据驱动转型的重要基石。数据中台不仅是集数据接入、管理、分析于一身的综合平台&#xff0c;更是企业实现数据资源集中管理、分析决策和业务创新的核心支撑。 一、数…

【好书推荐6】《Excel函数与公式应用大全for Excel 365 Excel 2021》

【好书推荐6】《Excel函数与公式应用大全for Excel 365 & Excel 2021》 写在最前面《Excel函数与公式应用大全for Excel 365 & Excel 2021》关键点内容简介作者简介前言/序言目录 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&…

预付费水表充值系统

预付费水表充值系统是一种为用户提供水费预付服务的系统&#xff0c;旨在方便用户预先充值水费&#xff0c;实现用水时按照预付金额自动扣费&#xff0c;从而实现水费的实时管理和节约用水。这种系统在社会生活中越来越受欢迎&#xff0c;下文将从核心功能、工作流程、优势特点…

4.2.5- 4.2.7

4.2.5 深拷贝与浅拷贝 #### 4.2.5 深拷贝与浅拷贝 深浅拷贝是面试经典问题&#xff0c;也是常见的一个坑 浅拷贝&#xff1a;简单的赋值拷贝操作 深拷贝&#xff1a;在堆区重新申请空间&#xff0c;进行拷贝操作 **示例&#xff1a;** class Person { public://无参&#xff0…

SSRF题目进阶+SSRF正则绕过+进制绕过SSRF限制

[题目信息]&#xff1a; 题目名称题目难度SSRF题目进阶3 [题目考点]&#xff1a; SSRF绕过[Flag格式]: SangFor{h3bvbopR6L2EQOXv}[环境部署]&#xff1a; docker-compose.yml文件或者docker tar原始文件。 docker-compose up -d[题目writeup]&#xff1a; 1、实验主页 …

学习大数据的第一天

今天学习如何安装hapood安装 1.安装hapood安装 2.需要的资料 3.开始安装 1.创建目录 mkdir -p /export/server 2.进入目录下 cd /export/server/ 3.安装 安装需要的依赖 yum install gcc gcc-c make autoconf automake libtool curl lzo-devel zlib-devel openssl opens…

算法与数据结构要点速学——排序算法

排序算法 所有主要的编程语言都有一个内置的排序方法。假设并说排序成本为 O(n*log n)&#xff0c;通常是正确的&#xff0c;其中 n 是要排序的元素数。为了完整起见&#xff0c;这里有一个图表&#xff0c;列出了许多常见的排序算法及其完整性。编程语言实现的算法各不相同&a…

DBUtils工具类的使用

1、DBUtils是什么 为了更加简单地使用JDBC&#xff0c;Apache组织提供了一个DBUtils工具&#xff0c;它是操作数据库的一个组件&#xff0c;实现了对JDBC的简单封装&#xff0c;可以在不影响数据库访问性能的情况下简化JDBC的编码工作量。DBUtils工具要有2个作用。 写数据&am…

【电力大数据服务平台】项目可行性研究报告概述

一、项目简介 随着数据采集、存储和传输技术的飞速发展&#xff0c;各种智能电表、智能终端在电网中被快速推广应用。电力大数据云平台是大数据应用的基础和技术支撑&#xff0c;为大数据应用提供数据基础以及存储、计算、分析等能力&#xff0c;因此大数据平台是大数据应用真正…

光明与速度:AI网络中GPU与光模块的协奏曲

&#x1f3b6;在人工智能&#xff08;AI&#xff09;的世界里&#xff0c;GPU和光模块是实现高速计算和数据传输的关键。它们如同一场精心编排的交响乐&#xff0c;每个部分都不可或缺&#xff0c;共同创造出美妙的和谐。&#x1f3bc; GPU&#xff1a;AI网络的心脏&#x1f4…

redis部署模式,以及各自的优缺点介绍

在Linux服务器上进行Redis部署时&#xff0c;可以采用多种部署模式&#xff0c;每种模式都有其优缺点。以下是几种常见的部署模式以及它们的特点&#xff1a; 单节点部署&#xff1a; 描述&#xff1a;在单个服务器上部署 Redis 服务。优点&#xff1a;简单易用&#xff0c;适…

Java多线程の小知识杂糅

设置优先级 在Java多线程中&#xff0c;可以通过对线程设置优先级的方法&#xff0c;来调节线程被优先执行的概率。 package cn.edu.Lab;class MyThread extends Thread {public MyThread(String s) {this.setName(s);}public void run() {for(int i 0; i < 6; i) {Syste…

创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸

前端javascript的公共方法太多了&#xff0c;时间日期的&#xff0c;数值的&#xff0c;字符串的&#xff0c;搞复制的&#xff0c;搞网络请求的&#xff0c;搞数据转换的&#xff0c;几乎就是每个新项目&#xff0c;有的拷一拷&#xff0c;没有的继续写&#xff0c;放个utils目…

Julia劳动力市场经济数学模型价值策略选择

&#x1f3af;要点 &#x1f3af;数据元素&#xff1a; &#x1f58a;变量处理 | &#x1f58a;代码多重调用 | &#x1f58a;集合&#xff1a;数组、字典、元组和命名元组 | &#x1f58a;矢量化代码&#xff1a;广播 | &#x1f58a;字符串处理 | &#x1f58a;提取HTTP查询…

SpringBoot将上传的文件保存到临时文件

介绍 当前端上传文件到后端&#xff0c;后端将文件上传到第三方&#xff0c;在后端不需要保存文件时可以考虑使用临时文件进行存储。好处是&#xff1a;不必再为文件找一个临时的存储位置。 使用场景 #mermaid-svg-wEocgeoz3nUibGPg {font-family:"trebuchet ms",v…

AJAX (异步的JavaScript 和 XML)

目录 1、什么是AJAX 2、作用 1&#xff09;与服务器通信 2&#xff09;异步交互&#xff08;更新局部页面&#xff09; 3、AJAX 的基本工作原理 4、应用举例 5、jQuery与AJAX 6、使用jQeury实现AJAX 1&#xff09;$.ajax()&#xff1a;发送异步请求 2&#xff09;$.g…

2024五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…