【一】【单片机】有关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

结尾

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

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

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

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

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

相关文章

stm32-模拟数字转化器ADC

接线图&#xff1a; #include "stm32f10x.h" // Device header//1: 开启RCC时钟&#xff0c;包括ADC和GPIO的时钟//2&#xff1a;配置GPIO将GPIO配置为模拟输入模式//3&#xff1a;配置多路开关将左边的通道接入到规则组中//4&#xff1a;配置ADC转…

JNDI+LDAP攻击手法

服务端&#xff1a; package com.naihe3; import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL;import javax.net.ServerSocketFactory; import javax.net.SocketFactory; import javax.net.ssl.SSLSocketFactory;import com.unboundid.…

局部路径规划算法 - 多项式曲线法

参考&#xff1a;局部路径规划算法——曲线插值法 0 前言 1 多项式曲线法 1.1 算法简介 曲线插值的方法是按照车辆在某些特定条件&#xff08;安全、快速、高效&#xff09;下&#xff0c;进行路径的曲线拟合&#xff0c;常见的有多项式曲线、双圆弧段曲线、正弦函数曲线、…

Redis各场景应用集合

应用场景 1、缓存&#xff08;Cache&#xff09;,分布式缓存 有一些存储于数据库中的数据会被频繁访问&#xff0c;如果频繁的访问数据库&#xff0c;数据库负载会升高&#xff0c;同时由于数据库IO比较慢&#xff0c;应用程序的响应会比较差。此时&#xff0c;如果引入Redis来…

CTF题型 SSTI(2) Flask-SSTI典型题巩固

CTF题型 SSTI(2) Flask-SSTI典型题巩固 文章目录 CTF题型 SSTI(2) Flask-SSTI典型题巩固前记1.klf__sstiSSTI_Fuzz字典&#xff08;网上收集自己补充&#xff09; 2.klf_2数字问题如何解决了&#xff1f;|count |length都被禁&#xff1f; 3.klf_3 前记 从基础到自己构造paylo…

手机备忘录怎么导出到电脑,如何将手机备忘录导出到电脑

备忘录是我们日常生活和工作中常用的工具之一&#xff0c;我们可以在手机上轻松地记录重要的事务、想法和灵感。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将手机备忘录导出到电脑进行更详细的整理和管理。那么&#xff0c;手机备忘录怎么导出到电脑&#xff0c;如…

【tls招新web部分题解】

emowebshell (php7.4.21版本漏洞) 非预期 题目提示webshell&#xff0c;就直接尝试一下常见的后门命名的规则 如 shell.php这里运气比较好&#xff0c;可以直接shell.php就出来 要是不想这样尝试的话&#xff0c;也可以直接dirsearch进行目录爆破 然后在phpinfo中直接搜素c…

企业信息安全怎么防护?迅软科技有方法!

一、企业信息防护策略 1、数据加密 使用迅软DSE加密系统&#xff0c;对敏感数据进行加密处理&#xff0c;确保数据在传输和存储过程中的安全性&#xff0c;防止数据泄露。 2、数据备份和恢复 定期备份重要数据&#xff0c;并确保可以在发生灾难性事件后迅速恢复业务运作。 …

力扣大厂热门面试算法题 43-45

43. 字符串相乘&#xff0c;44. 通配符匹配&#xff0c;45. 跳跃游戏 II&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.18 可通过leetcode所有测试用例。 目录 43. 字符串相乘 解题思路 完整代码 Python Java 44. 通配符…

计算机网络的分类

目录 <计算机网络的分类> 1.按网络覆盖范围分 1)个人区域网PAN 2)局域网 3)城域网 4)广域网 5)互联网 2.按传输介质分类 3.按网络传输技术分类 4.按网络的使用性质分类 <计算机网络的分类> 计算机网络分类的方法很多&#xff0c;可以从不同的角度观察网络…

如何使用IDE端通义灵码

如何使用IDE端通义灵码 第一步&#xff1a;安装IDE插件&#xff08; VS Code 和 JetBrains 二选一&#xff09; 如何下载安装VS Code &#xff1a;https://code.visualstudio.com 如何下载安装JetBrains&#xff1a;https://www.jetbrains.com/idea/download 第二步&#x…

Python 中异常处理介绍

异常处理是编程中一个非常重要的概念&#xff0c;它允许程序在出现错误时进行适当的处理&#xff0c;而不是直接崩溃。在 Python 中&#xff0c;异常处理是通过 try、except、finally 和 raise 语句来实现的。本文将详细介绍 Python 中的异常处理机制。 异常的基本概念 异常是在…

【人工智能】Gitee AI 天数智芯有奖体验开源AI模型,一定能有所收货,快来体验吧

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章。 这是《人工智能》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 目录 前言两大赛道天数智芯1.模型地址2.天数智芯专区3.选择模型4.模型详情页5.部署模型6.成功部署7.执行例子8.移除模型 千模盲…

PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包

近年来&#xff0c;电商行业的迅猛发展&#xff0c;越来越多的商户开始寻求搭建自己的在线商城。然而&#xff0c;传统的商城系统往往功能单一&#xff0c;无法满足商户个性化、多样化的需求。同时&#xff0c;搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…

JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、转换成整数计算后再转换成小数二、toFixed三、math.js四、bignumber.js五、big.js总结 前言 原始计算 let aNum 6.6 0.3;let bNum 6.6 - 0.2;let cNum 6.6 * 0.3;let dNum 6.6 / 0.2;console.log(…

【科普】气体检测仪使用时常见的几点误区,你占了几条?

气体检测仪的作用是检测环境中的气体浓度&#xff0c;及时发现并报警&#xff0c;以确保人员和设备的安全。气体检测仪在多个领域发挥着重要作用。 首先&#xff0c;它是对工业安全的重要保障。在生产现场&#xff0c;有毒、可燃或有爆炸性的气体泄漏可能导致严重的后果。气体检…

LabVIEW湍流等离子体束热效率优化

LabVIEW湍流等离子体束热效率优化 利用LabVIEW虚拟仪器技术&#xff0c;对湍流等离子体束的热效率进行了实时监测与优化&#xff0c;提高其在材料处理领域的应用效率和精度。通过双进气湍流等离子体发生器&#xff0c;实现了在不同工作参数下对热效率的实时在线监测&#xff0…

【Streamlit学习笔记】实现包含多个sheet的excel文件下载

1、什么是Streamlit Streamlit是一个免费的开源框架&#xff0c;用于快速构建和共享漂亮的机器学习和数据科学Web应用程序&#xff0c;官网链接 Streamlit Streamlit API链接 API reference 实际项目中遇到的问题&#xff1a;包含多个sheet的excel文件下载&#xff0c;下面将给…

【早鸟优惠|高录用|EI稳定检索】2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会!

【早鸟优惠|高录用|EI稳定检索】 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVISP 2024&#xff09;诚邀投稿/参会&#xff01; # 早鸟优惠 # 先投稿先送审 # #投稿免费参会、口头汇报及海报展示# 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;I…

递推算法C++

所谓递推&#xff0c;是指从已知的初始条件出发&#xff0c;依据某种递推关系&#xff0c;逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定&#xff0c;或是通过对问题的分析与化简后确定。从已知条件出发逐步推到问题结果&#xff0c;此种方法叫顺推…