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

【一】【单片机】有关LED的实验

点亮一个LED灯

根据LED模块原理图,我们可以知道,通过控制P20、P21...P27这八个位置的高低电平,可以实现D1~D8八个LED灯的亮灭。VCC接的是高电平,如果P20接的是低电平,那么D1就可以亮。如果P20接的是高电平,D1就不能亮,以此类推。

P20~P27一共有八个端口,依次可以用P2_0,P2_1,P2_2...P2_7进行表示。也可以直接用P2进行表示。

例如P2_0=0,表示P20是低电平,P2_1=1,表示P21是高电平。

如果只用P2表示,P2=0xFF,表示P20~P27全是高电平,因为0xFF是十六进制,转化为二进制是1111 1111,十六进制转二进制是四位一组,F表示15,1111。因此对应P20=1,P21=1,....P27=1

如果P2=0xFE,表示P20=0,P21~P27全是高电平,因为0xFE转化为二进制是1111 1110 从低位开始依次对应P20,P21,P22...P27。一个二进制数对应一个引脚。 低电平表示亮,高电平不亮。0表示低电平,1表示高电平。

 
#include <REGX52.H>
void main(){P2=0xFE;//1111 1110 点亮D1while(1){}
}

点亮一个LED

使一个LED灯闪烁

while循环使得程序一直运行下去。如果要使一个LED灯闪烁,那么就要使一个灯亮,然后灭,交替进行。

如果我们写这样的代码,可以使得一个LED灯闪烁吗?

 
#include <REGX52.H>
void main(){while(1){P2=0xFE;//1111 1110P2=0xFF;}
}

答案是不可以,因为机器的运算速度是非常的快的,我们的肉眼没办法区分两行代码的区别,所以我们看到的是灯一直亮着。如果要让肉眼看见LED灯闪烁,那就要让机器慢下来,也就是让机器延时,再运行下一段代码。

延时就是空跑,程序什么都不执行,但是需要耗费时间。一般用多个while循环函数实现。

我们可以利用STC-ISP软件自动生成延时函数。我们生成1毫秒的延时函数,然后封装成可以实现任意毫秒的延时函数。

 
#include <REGX52.H>void Delay(unsigned int xms)                //@11.0592MHz
{while(xms--){unsigned char i, j;i = 2;j = 199;do{while (--j);} while (--i);}}void main(){while(1){P2=0xFE;//1111 1110Delay(500);P2=0xFF;Delay(500);}
}

这段代码实现了周期为1s,使一个LED灯闪烁。

LED闪烁

LED流水灯

LED流水灯意思是,让D1亮,其他不亮,然后D2亮,其他不亮,.....,使得灯亮呈流水状亮。

D1对应P2_0,D2对应P2_1......D8对应P2_7。

D1对应P2 二进制的第一位(个位),D2对应P2 二进制的第二位(十位),......D8对应P2的第八位。(低位依次对应)

D1亮对应P2=0xFE,D2亮对应P2=0xFD,D3亮对应P2=0xFB,D4亮对应P2=0xF7。

D5亮对应P2=0xEF,D6亮对应P2=0xDF,D7亮对应P2=0xBF,D8亮对应P2=0x7F。

我们以四个LED灯为一组,对应的十六进制是E,D,B,7。分别表示第一个灯亮,第二个灯亮,第三个灯亮,第四个灯亮。

 
//main.c
#include <REGX52.H>
#include "Delay.h"
void main(){while(1){P2=0xfe;Delay(500);P2=0xfd;Delay(500);P2=0xfb;Delay(500);P2=0xf7;Delay(500);P2=0xef;Delay(500);P2=0xdf;Delay(500);P2=0xbf;Delay(500);P2=0x7f;Delay(500);}}
 
//Delay.c
void Delay(unsigned int xms)                //@11.0592MHz
{while(xms--){unsigned char i, j;i = 2;j = 199;do{while (--j);} while (--i);}}
 
//Delay.h
void Delay(unsigned int xms);                //@11.0592MHz

将这三个文件放到同一个组别中,实现模块化编写代码,提高代码的可移植性,便携性。我们只需要在主函数声明Delay.h的头文件即可使用Delay.c中的Delay的延时函数。

流水灯

LED流水灯plus版本

#include <REGX52.H>
#include "Delay.h"void liushui1(unsigned int xms){P2=0xfe;Delay(xms);P2=0xfd;Delay(xms);P2=0xfb;Delay(xms);P2=0xf7;Delay(xms);P2=0xef;Delay(xms);P2=0xdf;Delay(xms);P2=0xbf;Delay(xms);P2=0x7f;Delay(xms);
}
void liushui2(unsigned int xms){P2=0x7f;Delay(xms);P2=0xbf;Delay(xms);P2=0xdf;Delay(xms);P2=0xef;Delay(xms);P2=0xf7;Delay(xms);P2=0xfb;Delay(xms);        P2=0xfd;Delay(xms);        P2=0xfe;Delay(xms);        }
void ji(unsigned int xms){P2=0xAA;Delay(xms);
}
void ou(unsigned int xms){P2=0x55;Delay(xms);
}void man(){P2=0x00;Delay(500);P2=0xff;Delay(500);
}
void main(){unsigned int xms=300;while(1){int i;liushui1(xms);liushui1(xms);man();man();liushui2(xms);liushui2(xms);man();man();for(i=1;i<=5;i++){ji(xms);ou(xms);}xms-=50;if(xms==0) xms=300;}}

这段代码是用于单片机(基于8051架构)的程序,用来控制LED灯的流水灯效果和闪烁模式。程序包含几个关键函数,每个函数用于实现特定的灯光效果。

包含的头文件和自定义函数

 
#include <REGX52.H>

这行代码包含了一个专为8051单片机设计的头文件,其中包含了对单片机特定功能寄存器的定义和访问方法。

 
#include "Delay.h"

这行代码包含了一个自定义的延时函数库,里面定义的Delay函数被用来在程序中实现延时效果,使LED灯的变化速度符合人眼观察的需求。

liushui1函数

 
void liushui1(unsigned int xms){P2=0xfe;Delay(xms);P2=0xfd;Delay(xms);P2=0xfb;Delay(xms);P2=0xf7;Delay(xms);P2=0xef;Delay(xms);P2=0xdf;Delay(xms);P2=0xbf;Delay(xms);P2=0x7f;Delay(xms);
}

liushui1函数实现了LED灯的正向流水效果。通过改变P2端口的输出值,让LED依次点亮,模拟流水的效果。xms参数控制每个LED点亮的持续时间,从而影响流水的速度。

liushui2函数

 
void liushui2(unsigned int xms){P2=0x7f;Delay(xms);P2=0xbf;Delay(xms);P2=0xdf;Delay(xms);P2=0xef;Delay(xms);P2=0xf7;Delay(xms);P2=0xfb;Delay(xms);        P2=0xfd;Delay(xms);        P2=0xfe;Delay(xms);        }

liushui2函数实现了LED灯的反向流水效果,其工作原理与liushui1相似,但LED点亮的顺序相反。

ji函数和ou函数

 
void ji(unsigned int xms){ P2=0xAA; Delay(xms); }
void ou(unsigned int xms){ P2=0x55; Delay(xms); }

ji函数和ou函数用来实现特定的LED闪烁模式。ji函数让LED以0xAA(10101010二进制模式)的模式闪烁,而ou函数以0x55(01010101二进制模式)的模式闪烁。参数xms控制闪烁的持续时间。

man函数

 
void man(){ P2=0x00; Delay(500); P2=0xff; Delay(500); }

man函数用于实现所有LED全部点亮然后再全部熄灭的效果,每个状态持续500ms。

main函数

 
void main(){unsigned int xms=300;while(1){int i;liushui1(xms);liushui1(xms);man();man();liushui2(xms);liushui2(xms);man();man();for(i=1;i<=5;i++){ji(xms);ou(xms);}xms-=50;if(xms==0) xms=300;}}

main函数是程序的入口点,定义了一个无限循环,在这个循环中不断调用上述定义的函数,以实现不断变化的LED灯效果。通过调整xms的值,可以改变灯光效果的速度。当xms减到0时,程序会将其重置为300ms,保证了程序的连续运行和灯光效果的多样性。正向流水流两次,然后全部点亮全部熄灭两次,逆向流水流两次,然后全部点亮全部熄灭两次,奇偶交替变换五次,然后延时降低50毫秒,一直到延时为0,此时重新设置延时时间为300毫秒。

流水灯plus_0

结尾

最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。

同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。

谢谢您的支持,期待与您在下一篇文章中再次相遇!

相关文章:

【一】【单片机】有关LED的实验

点亮一个LED灯 根据LED模块原理图&#xff0c;我们可以知道&#xff0c;通过控制P20、P21...P27这八个位置的高低电平&#xff0c;可以实现D1~D8八个LED灯的亮灭。VCC接的是高电平&#xff0c;如果P20接的是低电平&#xff0c;那么D1就可以亮。如果P20接的是高电平&#xff0c;…...

面试算法-49-缺失的第一个正数

题目 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,2] 中的数字都…...

论文笔记:液体管道泄漏综合检测与定位模型

0 简介 An integrated detection and location model for leakages in liquid pipelines 1 摘要 许多液体&#xff0c;如水和油&#xff0c;都是通过管道运输的&#xff0c;在管道中可能发生泄漏&#xff0c;造成能源浪费、环境污染和对人类健康的威胁。本文描述了一种集成的…...

抖音视频批量提取软件|无水印视频下载

抖音视频批量提取软件&#xff0c;让您高效下载精彩内容&#xff01; 您是否经常需要下载抖音视频&#xff0c;但传统的下载方式繁琐且低效&#xff1f;别担心&#xff0c;我们为您提供了一款强大而智能的抖音视频批量提取软件&#xff0c;让您轻松实现下载无水印的精彩内容&am…...

Linux docker1--环境及docker安装

一、基础环境要求 Docker分为ce版本&#xff08;免费&#xff0c;试用7个月&#xff09;和ee版本&#xff08;收费&#xff09;。 最低配置要求&#xff1a;64位操作系统&#xff0c;centOS 7及以上&#xff0c;内核版本不低于3.10 二、部署docker 1、查看服务的基础环境是否满…...

uniapp使用uview - DatetimePicker 时间选择器 /时间戳转化

uniapp使用uview - DatetimePicker 时间选择器 /时间戳转化时转换日期格式后页面仍显示时间戳 单元格内显示时间&#xff0c;点击可出现时间选择器切换时间 <u-cell :isLinktrue click"selectTime" title"开始时间" :value"startTime">…...

python实现websocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时数据传输&#xff0c;而不是像 HTTP 协议那样&#xff0c;每次请求都需要建立新的连接。WebSocket 协议最初是由 HTML5 定义的&#xff0c;旨在提供一种更有效的替代方案&#xff0c;…...

ElasticSearch简介及常见用法

简介 Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。 Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。 Kibana 使您能够以交互方式探索、可视化和分享对数据的见解&#xff0c;并管理和监控堆栈。 Elasticsearch 可以快速索…...

js iframe获取documen中的对象为空问题

原因其实是iframe加载是需要时间的&#xff0c;它还没加载完我就在js中直接获取对象了&#xff0c;所以获取为空 var idocument.getElementById("iframe"); i.onloadfunction(){console.log(i.contentDocument)console.log(i.contentWindow.document.getElementById…...

vue3子父组件之间的调用

子组件&#xff1a; capacityIndex.vue 父组件&#xff1a; index.vue A.子组件获取父组件属性 1.在父组件中引用子组件 import capacityIndex from "./capacityIndex"; <capacityIndex :tankInfo"tankInfo" :deviceNameInfo"deviceNameInfo…...

用 二层口 实现三层口 IP 通信的一个实现方法

我们一般用 undo portswitch 来将二层口转为三层口&#xff0c;但如果设备不支持的话&#xff0c;那么。。。 一、拓朴图&#xff1a; 二、实现方法&#xff1a; 起一个 vlan x&#xff0c;配置 vlanif地址&#xff0c;然后二层口划分到 vlan x 下&#xff0c;对端做同样的配置…...

(学习日记)2024.03.12:UCOSIII第十四节:时基列表

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…...

四.流程控制(顺序,分支,循环,嵌套)

c刚刚转过来的记得写在public static void main&#xff08;String[] args&#xff09;的花括号里 一.顺序结构 二.分支结构 if &#xff0c;switch 1.if (条件判断&#xff09; 2.if else 3.if else if else if ... else(它是一个一个否定来一个个执行判断的 4.s…...

了解常用开发模型 -- 瀑布模型、螺旋模型、增量与迭代、敏捷开发

目录 瀑布模型 开发流程 开发特征 优缺点 适用场景 螺旋模型 开发流程 开发特征 优缺点 适用场景 增量与迭代开发 什么是增量开发&#xff1f;什么是迭代开发&#xff1f; 敏捷开发 什么是敏捷开发四原则&#xff08;敏捷宣言&#xff09;&#xff1f; 什么是 s…...

使用 Vue CLI 创建一个 Vue2 项目

全局安装 Vue CLI 参考官网 Vue CLI&#xff0c;安装命令如下 npm install -g vue/cli 目前 Vue CLI 的最新版本为 v5.0.8 创建 Vue2 项目 在希望创建项目的目录下打开命令行&#xff0c;键入命令 vue create my-project 其中 my-project 更改为自己需要的项目名 随后&a…...

Linux工具 - 耀眼的git

~~~~ 前言耀眼的GitGit是什么&#xff08;本质&#xff09;Git出现的背景&#xff08;本着开源的精神&#xff09;在命令行中使用Git&#xff08;Come on 来使用Git吧&#xff09;.git文件说明新建仓库git clone 克隆云端仓库到本地git addgit commit -mgit pushgit pullgit st…...

Spring Security的开发

文章目录 1,介绍2, 核心流程3, 核心原理3.1 过滤器链机制3.2 主体3.3 认证3.4 授权3.5 流程图4, 核心对象4.1 UserDetailsService 接口4.2 PasswordEncoder 接口4.3 hasAuthority方法4.4 hasAnyAuthority方法4.5 hasRole方法4.5 hasAnyRole方法5, 核心注解5.1 @PreAuthorize5.1…...

C语言 实用调试技巧

我们的博客已经更新到了数据结构&#xff0c;但是当我在深耕数据结构时我发现我在C语言是遗漏了一个重要的东西&#xff0c;那就是C语言的使用调试技巧。这篇博客对数据结构非常重要&#xff0c;请大家耐心观看。 1. 什么是bug&#xff1f; 第一次被发现的导致计算机错误的飞蛾…...

GPT的实现细节

关于GPT的代码细节&#xff0c;这里梳理了一下&#xff1a; 数据集构造 原始数据集schema&#xff1a; inputwho is your favorite basketball player? outputOf course Kobe Bryant!那么在构造训练集时&#xff0c;根据chunk size构造多个输入&#xff1a; input_1who is …...

docker安装Milvus

docker安装Milvus 拉去CPU版本的milvus镜像 $ sudo docker pull milvusdb/milvus:0.10.0-cpu-d061620-5f3c00 docker pull milvusdb/milvus:0.10.0-cpu-d061620-5f3c00 mkdir -p milvus/conf cd milvus/conf ls wget https://raw.githubusercontent.com/milvus-io/milvus/v0.1…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

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 提…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...