【一】【单片机】有关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.mzph.cn/news/747753.shtml

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

相关文章

【四 (4)数据可视化之 Ploty Express常用图表及代码实现 】

目录 文章导航一、介绍二、安装Plotly Express三、导入Plotly Express四、占比类图表1、饼图2、环形图3、堆叠条形图4、百分比堆叠条形图 五、比较排序类1、条形图2、漏斗图3、面积漏斗图 六、趋势类图表1、折线图2、多图例折线图3、分列折线图4、面积图5、多图例面积图 七、频…

逻辑数据平台的 NoETL 之道(内含QA)

作者简介&#xff1a; 余俊&#xff0c;Aloudata 合伙人 & 技术副总裁。拥有 18 年互联网技术和大数据平台相关架构经验。作为主架构师及核心研发主导并完成了 Alibaba B2B 首个海量分布式 KV 存储系统&#xff0c;作为网站架构师负责 Aliexpress 全球买全球卖交易系统的第…

【云原生-kubernetes系列】--kubernetes日志收集

1、ELK架构 1.1、部署ES集群 https://mirrors.tuna.tsinghua.edu.cn/elasticstack/apt/7.x/pool/main/e/elasticsearch/ 1、下载软件包 rootes-server1:~# wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/apt/7.x/pool/main/e/elasticsearch/elasticsearch-7.12.0-…

STL库中的string

文章目录 一、STL的六大组件二、string类2.1string中的size()方法2.2隐式类型的转换2.3string的多种构造2.4string中size与length是否有差异&#xff1f;2.4string中的capacity2.5string中的push_back和append2.6string中运算符重载operator2.7string中的reserve扩容2.8string中…

数据结构——字符串

1.leetcode 151 题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/reverse-words-in-a-string/…

体验OceanBase OBD V2.5.0 组件内扩容和组件变更

背景 OBD 是OceanBase的命令行部署工具&#xff0c;在 obd V2.5.0 版本之前&#xff0c;其主要功能主要是部署各类组件&#xff0c;例如 oceanbase-ce,obproxy-ce,obagent 等。然而&#xff0c;它并不支持组件的变更操作以及组件内部的扩缩容调整。具体来说&#xff1a; 1、若…

网络层_IP

传输层解决的是传输控制&#xff0c;而实际真正决定数据能否发送到对端的是网络层。网络层是有概率传输&#xff0c;而传输层是可靠性传输。所以传输层网络层就可以做到将数据可靠发送到对端。网络层的常见协议有&#xff1a;IP、ICMP等&#xff0c;其中最重要的是IP协议&#…

STM32F103 CubeMX 使用USB生成鼠标设备

STM32F103 CubeMX 使用USB生成鼠标设备 1 配置cubeMX1.1配置外部晶振&#xff0c;配置debug口1.2 配置USB1.3 配置芯片的时钟1.4 生成工程 2. 编写代码2.1 添加申明2.2 main函数代码 1 配置cubeMX 1.1配置外部晶振&#xff0c;配置debug口 1.2 配置USB 1.3 配置芯片的时钟 需…

云与云计算:从传统到云端的IT资源变革

云&#xff1a;从分散到集约&#xff0c;资源服务化的新模式 让我们先通过一个生活化的场景来理解“云”这一概念。几十年前&#xff0c;诸如农村地区的居民需要自给自足&#xff0c;比如在自家院子里打井取水&#xff0c;冬季烧煤取暖&#xff0c;一切满足自己生活需要的都要…

html和winform webBrowser控件交互并播放视频(包含转码)

1、 为了使网页能够与winform交互 将com的可访问性设置为真 [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name "FullTrust")][System.Runtime.InteropServices.ComVisibleAttribute(true)] 2、在webBrow…

idea+vim+pycharm的块选择快捷键

平时开发的时候&#xff0c;有的时候我们想用矩形框住代码&#xff0c;或者想在某列上插入相同字符 例如下图所示&#xff0c;我想在22-24行的前面插入0000 1. Idea的快捷键&#xff1a;option 鼠标 2. Pycharm的快捷键&#xff1a;shift option 鼠标 2. Vim 块选择 v/V/c…

spy分析文件另存为弹框【selenium】

有时需要下载多个文件&#xff0c;但是不想保存在同一个目录下&#xff0c;需要做两步 selenium设置浏览器默认下载路径&#xff0c;这个路径需要是个不存在的路径操作文件另存为弹框 文章目录 selenium设置浏览器默认下载路径操作文件另存为弹框 selenium设置浏览器默认下载路…

Github和TeamCity的持续集成构建

一、简介 TeamCity是JetBrains旗下的一款持续集成[Continuous Integration&#xff0c;简称CI]工具&#xff0c;开箱即用。TeamCity提供一系列特性可以让团队快速实现持续集成&#xff1a;IDE工具集成、各种消息通知、各种报表、项目的管理、分布式的编译等等。 二、安装使用(…

Excel xlsx file:not supported

报错信息&#xff1a; 原因&#xff1a; Excel和xlrd版本不匹配 解决措施&#xff1a; 降低xlrd版本或Excel版本 方法一&#xff1a; 1) 先卸载了原来的版本&#xff1a;uninstal xlrd 2) 安装新的低版本xlrd模块pip install xlrd1.2.0 方法二&#xff1a; 1&#xff09…

AI日报:欧盟人工智能法案通过后行业面临合规障碍

文章目录 人工智能新规对web爬网的影响对英国的影响。 人工智能新规 立法者已经通过了欧盟人工智能法案。企业现在必须确保其人工智能应用程序符合规则。 全面的新规定对可能影响公民权利的人工智能系统实施制裁&#xff0c;并有可能彻底禁止某些系统。 违反规定的公司可能面…

【类和对象】类的作用域 | 类的实例化 | 类对象模型 | this指针

目录 5.类的作用域 6.类的实例化 6.1成员的声明和定义 6.2实例化出的对象大小 7.类对象模型❗❗ 7.1如何计算类对象的大小 7.2类对象的存储方式猜测 7.3结构体内存对齐规则 7.3.1内存对齐 7.3.2大小端 8.this指针 8.1this指针的引出 8.2this指针的特性 C和C实…

MySQL—redo log、undo log以及MVCC

MySQL—redo log、undo log以及MVCC 首先回忆一下MySQL事务的四大特性&#xff1a;ACID&#xff0c;即原子性、一致性、隔离性和持久性。其中原子性、一致性、持久性实际上是由InnoDB中的两份日志保证的&#xff0c;一份是redo log日志&#xff0c;一份是undo log日志&#xff…

了解常用测试模型 -- V模型、W模型

目录 V模型 测试流程 特点 优、缺点 w模型/双v模型 测试流程 特点 优、缺点 V模型 测试流程 用户需求&#xff1a;产品经理将用户需求转变为软件需求 需求分析与系统设计&#xff1a;验证需求是否正确&#xff0c;确定编程语言和框架 概要设计&#xff1a;项目结构设…

Java数据结构-优先级队列

文章目录 前言一、优先级队列1.1 概念 二、优先级队列的模拟实现2.1 堆的概念2.2 堆的存储方式2.3 堆的创建2.3.1 堆向下调整2.3.2 堆的创建2.3.3 建堆的时间复杂度 2.4 堆的插入与删除2.4.1 堆的插入2.4.2 堆的删除 2.5 用堆模拟实现优先级队列 三、常用接口介绍3.1 PriorityQ…

鼓楼夜市管理wpf+sqlserver

鼓楼夜市管理系统wpfsqlserver 下载地址:鼓楼夜市管理系统wpfsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于C#wpf架构和sql server数据库 功能模块&#xff1a; 登录注册 鼓楼夜市管理系统主界面所有店铺信…