当前位置: 首页 > news >正文

【51单片机零基础-chapter6:LCD1602调试工具】

在这里插入图片描述

实验0-用显示屏LCD验证自己的猜想

如同c++的cout,前端的console.log()

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"
int var=0;
void main()
{LCD_Init();LCD_ShowNum(1,1,var+211,5);while(1){;}
}

在这里插入图片描述

实验1-编写LCD1602液晶显示屏驱动函数

LCD1602.c

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"sbit LCD_RS=P2^6;				//LCD1602 RS 数据/指令选择
sbit LCD_RW=P2^5;				//LCD1602 RW 读/写选择
sbit LCD_EN=P2^7;				//LCD1602 EN 使能 #define LCD_DataPort		P0	//LCD1602 D0~D7 数据端口/*** @brief  LCD1602延时函数,12MHz调用可延时1ms* @param  无* @retval 无*/
void LCD_Delay()		//@11.0592MHz 1ms
{unsigned char i, j;_nop_();i = 2;j = 199;do{while (--j);} while (--i);
}/*** @brief  LCD1602写命令* @param  Command 要写入的命令* @retval 无*/
void LCD_WriteCommand(unsigned Command)
{LCD_RS = 0;					//LCD1602指令LCD_RW = 0;					//LCD1602写LCD_DataPort = Command;		//写指令LCD_EN = 1;					//LCD1602 EN使能为高LCD_Delay();				//delay 1ms,防止时序太快LCD1602来不及执行LCD_EN = 0;					//LCD1602 EN使能为低LCD_Delay();				//delay 1ms
}/*** @brief  LCD1602写数据* @param  Data 要写入的数据* @retval 无*/
void LCD_WriteData(unsigned Data)
{LCD_RS = 1;				//LCD1602数据LCD_RW = 0;				//LCD1602写LCD_DataPort = Data;	//写数据LCD_EN = 1;				//LCD1602 EN使能为高LCD_Delay();			//delay 1ms,防止时序太快LCD1602来不及执行LCD_EN = 0;				//LCD1602 EN使能为低LCD_Delay();			//delay 1ms
}/*** @brief  LCD1602初始化函数* @param  无* @retval 无*/
void LCD_Init(void)
{LCD_WriteCommand(0x38);	//8位数据接口,两行显示,5*7点阵LCD_WriteCommand(0x0c);	//显示开,光标关,闪烁关	LCD_WriteCommand(0x06);	//数据读写操作后,光标自动加1,画面不动LCD_WriteCommand(0x01);	//清屏
}/*** @brief  LCD1602设置光标位置* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @retval 无*/
void LCD_SetCursor(unsigned char Line, unsigned char Column)
{unsigned char AC_DDRAM = 0;/* 计算写入到DDRAM(显示区)的光标AC的位置 */if(Line == 1){AC_DDRAM = 0x00 + (Column - 1);AC_DDRAM |= 0x80;}else if(Line == 2){AC_DDRAM = 0x40 + (Column - 1);AC_DDRAM |= 0x80;}LCD_WriteCommand(AC_DDRAM);	//设置光标地址
}/*** @brief  在LCD1602指定位置上显示一个字符* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @param  Char 要显示的字符* @retval 无*/
void LCD_ShowChar(unsigned char Line, unsigned char Column, char Char)
{LCD_SetCursor(Line, Column);	//设置光标位置LCD_WriteData(Char);
}/*** @brief  在LCD1602指定位置上显示一个字符* @param  Line 行位置,范围:1~2* @param  Column 列位置,范围:1~16* @param  Char 要显示的字符* @retval 无*/
void LCD_ShowString(unsigned char Line, unsigned char Column, char *String)
{unsigned char i = 0;LCD_SetCursor(Line, Column);	//设置光标位置/* 打印字符串 */i = 0;while(String[i] != '\0'){LCD_WriteData(String[i]); //光标AC每次自动加1i++;}
}/*** @brief  返回值=X的Y次方*/
signed int LCD_Power(int x, int y)
{int result = 1;while(y > 0){result *= x;y--;}return result;
}/*** @brief  在LCD1602指定位置开始显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~65535* @param  Length 要显示数字的长度,范围:1~5* @retval 无*/
void LCD_ShowNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length)
{unsigned char i = 0;unsigned char Chr;LCD_SetCursor(Line, Column);	//设置光标位置for(i=Length; i>0; i--){Chr = Num/LCD_Power(10,i-1)%10;if(Chr >=0 && Chr <= 9){Chr += 0x30;}LCD_WriteData(Chr);}
}/*** @brief  在LCD1602指定位置开始以有符号十进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:-32768~32767* @param  Length 要显示数字的长度,范围:1~5* @retval 无*/
void LCD_ShowSignedNum(unsigned char Line, unsigned char Column, int Num, unsigned char Length)
{unsigned char i = 0;unsigned char SingleNum;unsigned char Number1;LCD_SetCursor(Line, Column);	//设置光标位置if(Num>=0){LCD_WriteData('+');Number1 = Num;}else{LCD_WriteData('-');Number1 = -Num;			//-32768 转为32768之后可能会溢出}for(i=Length; i>0; i--){SingleNum = Number1/LCD_Power(10,i-1)%10;if(SingleNum >=0 && SingleNum <= 9){SingleNum += 0x30;}LCD_WriteData(SingleNum);}
}/*** @brief  在LCD1602指定位置开始以十六进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~0xFFFF* @param  Length 要显示数字的长度,范围:1~4* @retval 无*/
void LCD_ShowHexNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length)
{unsigned char i = 0;unsigned char SingleNum;LCD_SetCursor(Line, Column);	//设置光标位置for(i=Length; i>0; i--){SingleNum = Num/LCD_Power(16,i-1)%16;if(SingleNum >=0 && SingleNum <= 9){SingleNum += 0x30;				}else if(SingleNum >=10 && SingleNum <= 15){SingleNum = SingleNum - 10 + 'A';		//16进制A,B,C,D,E,F}LCD_WriteData(SingleNum);}
}/*** @brief  在LCD1602指定位置开始以二进制显示所给数字* @param  Line 起始行位置,范围:1~2* @param  Column 起始列位置,范围:1~16* @param  Number 要显示的数字,范围:0~1111 1111 1111 1111* @param  Length 要显示数字的长度,范围:1~16* @retval 无*/
void LCD_ShowBinaryNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length)
{unsigned char i = 0;unsigned char SingleNum;LCD_SetCursor(Line, Column);	//设置光标位置for(i=Length; i>0; i--){SingleNum = Num/LCD_Power(2,i-1)%2;SingleNum += 0x30;LCD_WriteData(SingleNum);}
}

LCD1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__void LCD_Init(void);
void LCD_WriteCommand(unsigned Command)
void LCD_ShowChar(unsigned char Line, unsigned char Column, char Char);
void LCD_ShowString(unsigned char Line, unsigned char Column, char *String);
void LCD_ShowNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line, unsigned char Column, int Num, unsigned char Length);
void LCD_ShowHexNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length);
void LCD_ShowBinaryNum(unsigned char Line, unsigned char Column, unsigned int Num, unsigned char Length);
#endif

main.c

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"void main()
{LCD_Init();LCD_ShowChar(1, 1, 'Y');//显示一个字符:1行1列LCD_ShowString(1, 3, "POSTGRADUATE");//显示一个字符串:1行3列开始LCD_ShowNum(2, 1, 985, 3);//2行1列显示数字985,如果指定两位则不显示高位,为85,如果是四位则高位补零显示,为0985//LCD_ShowSignedNum(2, 5, -5, 1);//显示有符号数(符号不计入位数)//LCD_ShowHexNum(2, 8, 0xA8, 2);	//显示十六进制LCD_ShowBinaryNum(2, 5, 0xAA, 8);//显示二进制while(1){;}
}

比较核心的
在这里插入图片描述
在这里插入图片描述

实验2-动态显示

#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
int var=0;
void main()
{LCD_Init();while(1){var++;Delay(1000);	LCD_ShowNum(1,1,var,3);Delay(1000);}
}

实验3-滚动显示

在这里插入图片描述
在这里插入图片描述

在Main.c中增加LCD1602移屏指令

#include <REGX52.H>
#include <INTRINS.H>
#include "LCD1602.h"
#include "Delay.h"
void main(){LCD_Init();while(1){LCD_ShowString(1, 16, "CONGRATULATIONS!");LCD_ShowString(2, 16, "WELCOME TO UESTC , WANG XIAO !");Delay(500);LCD_WriteCommand(0x18);//调用一次左移一次//LCD_WriteCommand(0x1c);//调用一次右移一次		Delay(500);}
}

在这里插入图片描述
参考1:LCD显示时期
参考2:笔记
参考3:笔记
参考4:lcd位移
参考5:lcd驱动程序

相关文章:

【51单片机零基础-chapter6:LCD1602调试工具】

实验0-用显示屏LCD验证自己的猜想 如同c的cout,前端的console.log() #include <REGX52.H> #include <INTRINS.H> #include "LCD1602.h" int var0; void main() {LCD_Init();LCD_ShowNum(1,1,var211,5);while(1){;} }实验1-编写LCD1602液晶显示屏驱动函…...

算法题(24):只出现一次的数字(二)

审题&#xff1a; 数组中除了答案元素只出现一次外&#xff0c;其他元素都会出现三次&#xff0c;我们需要找到并返回答案元素 思路&#xff1a; 由于现在会出现三次&#xff0c;所以利用异或运算符的方法就会失效。而所有数据都在32位二进制范围内&#xff0c;所以我们采用依次…...

趣味编程:心形曲线

目录 1.序言 2.代码展示 3.代码详解 3.1 头文件包含 3.2 绘制坐标轴函数 3.3 main 函数主体部分 4. 小结 1.序言 2025年的第一篇博客就用这个笛卡尔心形图开篇吧&#xff0c;寓意着新年大家能够有心有所属&#xff0c;祝诸位程序猿 / 程序媛 能够早点遇到自己的另一半。…...

C# 设计模式(结构型模式):享元模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;享元模式 (Flyweight Pattern) 在软件开发中&#xff0c;尤其是在处理大量对象时&#xff0c;我们常常会面临内存和性能上的挑战。当多个对象具有相似的状态时&#xff0c;通常会占用大量的内存资源&#xff0c;从而…...

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

mysql 死锁案例及简略分析

准备数据 # 创一个测试表&#xff0c;存储引擎使用 innodb create table test_lock (id int primary key auto_increment,name varchar(20),age int )engine innodb;insert into test_lock (name,age) values (ionc001,10); insert into test_lock (name,age) values (ionc00…...

第四届计算机、人工智能与控制工程

第四届计算机、人工智能与控制工程 The 4th International Conference on Computer, Artificial Intelligence and Control Engineering 重要信息 大会官网&#xff1a;www.ic-caice.net 大会时间&#xff1a;2025年1月10-12日 大会地点&#xff1a;中国合肥 (安徽大学磬苑…...

RIP配置实验

RIP配置实验 案例简介 天一公司下属三个分公司&#xff0c;属于不同的地区&#xff0c;三个公司之间用路由器连接&#xff0c;路由器名称分别为分别为 Router0、Router1、Router2&#xff0c;请把一公司的部门pc0,通过二公司路由器&#xff0c;连接三公司的部门pc1,公司之间通…...

C# 整型、浮点型 数值范围原理分析

总目录 前言 一、整型、浮点型 数值范围列表 二、什么是大小、范围 在上面的列表中&#xff0c;每个数据类型都有自己的Range (范围) 和 Size (大小)。 1. 范围 范围好理解&#xff0c;就是对应数据类型的数据范围&#xff0c;如 sbtyte 的数据范围是 -128~127&#xff0c;超…...

Adobe Acrobat Pro DC 2023 下载安装教程,附详细图文

简介&#xff1a; Adobe Acrobat Pro DC 2023 是由 Adobe 公司推出的一款全面的 PDF 编辑、查看和管理软件。这款软件无论是个人用户还是企业级用户&#xff0c;都可以凭借其强大的功能满足不同的需求。作为一款业内领先的 PDF 处理工具&#xff0c;Adobe Acrobat Pro DC 不仅…...

stable diffusion秋叶启动器安装roop插件

方法简洁明了&#xff1a; 第一步&#xff1a;下载秋叶启动器 第二步&#xff1a;输入网址&#xff1a;https://visualstudio.microsoft.com/zh-hans/downloads/&#xff0c;下载vs安装程序&#xff0c;安装开始会自动弹出如下窗口&#xff0c;选择2个环境&#xff1a;Python开…...

7-14 统计工龄

给定公司多名员工的工龄&#xff0c;按输入工龄顺序输出每个工龄段有多少员工。 输入格式: 给出多个整数&#xff0c;即每个员工的工龄&#xff0c;范围在[0, 50]。 输出格式: 按输入工龄顺序输出每个工龄的员工个数&#xff0c;格式为&#xff1a;“工龄:人数”。 每项占一…...

OLED的显示

一、I2C I2C时序&#xff1a;时钟线SCL高电平下&#xff1a;SDA由高变低代表启动信号&#xff0c;开始发送数据&#xff1b;SCL高电平时&#xff0c;数据稳定&#xff0c;数据可以被读走&#xff0c;开始进行读操作&#xff0c;SCL低电平时&#xff0c;数据发生改变&#xff1…...

本地测试文件解析

PostMapping("/test") public void test() throws IOException {Path csvFile Paths.get("D:\\test/27.csv");//虚拟机退出时删除临时文件csvFile.toFile().deleteOnExit();List<String> list Files.readAllLines(csvFile, Charset.forName("…...

Elasticsearch JavaRestClient版

文章目录 初始化RestHighLeveClient&#xff08;必要条件&#xff09;索引库操作1.创建索引库&#xff08;4步&#xff09;2.删除索引库&#xff08;3步&#xff09;3.判断索引库是否存在&#xff08;3步&#xff09;4.总结&#xff1a;四步走 文档操作1.创建文档&#xff08;4…...

ubuntu 使用s3fs配置自动挂载对象存储

一、环境准备 1.有访问对象存储权限的AKSK 2.服务器、对象存储 二、实施步骤 sudo apt update sudo apt install s3fs echo "AK:SK" >/home/ubuntu/.passwd-s3fs ---位置自定义 chmod 600 /home/ubuntu/.passwd-s3fs ---权限必须要有 mkdir /data sudo s3fs …...

SQL字符串截取函数——Left()、Right()、Substring()用法详解

SQL字符串截取函数——Left&#xff08;&#xff09;、Right&#xff08;&#xff09;、Substring&#xff08;&#xff09;用法详解 1. LEFT() 函数&#xff1a;从字符串的左侧提取指定长度的子字符串。 LEFT(string, length)string&#xff1a;要操作的字符串。length&#x…...

关系分类(RC)模型和关系抽取(RE)模型的区别

目标不同 关系分类模型&#xff1a;对给定的实体对在给定句子中预测其关系类型。两阶段&#xff08;RC&#xff09; 关系抽取模型&#xff1a;从句子中识别出所有潜在实体对&#xff0c;并为其预测关系类型。一阶段&#xff08;NERRE&#xff09; 训练/预测阶段输入输出数据不…...

什么是索引

在数据库管理系统中&#xff0c;索引是一种数据结构&#xff0c;用于快速定位数据库表中的特定记录。索引类似于一本书的目录&#xff0c;可以帮助数据库引擎迅速找到所需的数据&#xff0c;而不必扫描整个表。 类型&#xff1a;常见的数据库索引类型包括B树索引、哈希索引、全…...

OJ随机链表的复制题目分析

题目内容&#xff1a; 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a; 这道题目&#xff0c;第一眼感觉非常乱&#xff0c;这是正常的&#xff0c;但是我们经过仔细分析示例明白后&#xff0c;其实也并不是那么难。现在让我们一起来分析分析…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...