【51单片机】LED灯的进阶操作(闪烁、流水)

上篇文章我们讲到了Keil5STC的使用方式点亮第一个LED灯
这篇将继续进行一些LED灯的进阶操作

目录

  • LED灯闪烁:
  • LED流水灯
    • 普通LED流水灯
    • LED流水灯PLUS

LED灯闪烁:

上文我们说只要通过P2这个寄存器就可以控制LED亮灭,现在我们要将其变为闪烁状态,故:

void main()
{while(1){P2 = 0xFE;P2 = 0xFF;}
}

但由于寄存器的速度是非常快的,达到MHz(每秒100次)的等级,就导致这两句代码执行的特别快,最后的结果就是整体变暗一点

故我们需要进行一定的延时
这里说一下我们的STC软件中有一个下图的软件延时计算器在这里插入图片描述
我们可以通过设置系统频率(与你的开发板有关,我们使用的是STC89C52,用的是12MHz的频率)与定时长度,得到一段延时你目标秒数的代码,我们复制粘贴就可以使用

---------------------生成的代码-------------------

void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}

这段代码中_nop_的含义是
出自丿Zero
---------------------生成的代码-------------------

我们将其引用在C程序中

#include <REGX52.H>
#include <intrins.h>void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){P2 = 0xFE;Delay500ms();P2 = 0xFF;Delay500ms();}
}

这样就可以得到一个闪烁的LED灯了

LED流水灯

普通LED流水灯

流水灯的话,让每个灯按次序亮灭就可以得到,再嵌套一个循环。
我们说到,写程序时不能写P2 = 1111 1111这样的命令,要使用16进制,那么在这里插入图片描述
我们就可以

void main()
{while(1){P2 = 0xFE;//1111 1110Delay500ms();P2 = 0xFD;//1111 1101Delay500ms();P2 = 0xFB;//1111 1011Delay500ms();P2 = 0xF7;//1111 0111Delay500ms();P2 = 0xEF;//1110 1111Delay500ms();P2 = 0xDF;//1101 1111Delay500ms();P2 = 0xBF;//1011 1111Delay500ms();P2 = 0x7F;//0111 1111Delay500ms();}
}

这样就得到一个流水灯了

LED流水灯PLUS

我们每次进行软件延时时都去调节比较麻烦,我们可以利用C语言的基础,用传参去解决每次都要调节的问题
我们先生成一个延时1ms的子函数,对这个子函数进行传参

void Delay1ms(unsigned int xms)		//@12.000MHz
{while(xms--){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}
}

运用到程序函数中就可以得到一个可以自由控制秒数的LED等啦

#include <intrins.h>void Delay1ms(unsigned int xms)		//@12.000MHz
{while(xms--){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{while(1){P2 = 0xFE;//1111 1110Delay1ms(100);P2 = 0xFD;//1111 1101Delay1ms(100);P2 = 0xFB;//1111 1011Delay1ms(100);P2 = 0xF7;//1111 0111Delay1ms(100);P2 = 0xEF;//1110 1111Delay1ms(100);P2 = 0xDF;//1101 1111Delay1ms(100);P2 = 0xBF;//1011 1111Delay1ms(100);P2 = 0x7F;//0111 1111Delay1ms(100);}
}

欢迎讨论

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

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

相关文章

React基础应用及常用代码

目录 基础知识 babel.config.js js,html,css,Vue,react,angular,nodejs,webpack,less,ES6,commonjs等的关系 ECMAScript 6&#xff08;ES6&#xff09; let、const、var 的区别 Webpack、npm、node关系 props和state区别 通用框架类 ES 6 export React React.Fragm…

pyparamvalidate 重构背景和需求分析

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、重构背景三、需求分析三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 param_validator 常用校验器的实现 3、本节目…

前端算法之堆 -- 计数排序

堆用于解决什么问题 堆排序&#xff08;Heap Sort&#xff09;&#xff1a;优先队列&#xff08;Priority Queue&#xff09;&#xff1a;图算法中的最短路径和最小生成树问题&#xff1a;中位数查找&#xff1a;合并K个有序数组&#xff1a; 例子&#xff1a;库存管理 III On时…

分享一个java中读取excel的方法

一、前端传递后端一个excel文件 代码&#xff1a; String file param.get("file").split(",")[1];byte[] content Base64.decodeBase64(file);InputStream inputStream new ByteArrayInputStream(content);Map<String, List<Map<String, Stri…

CAD二开—WblockCloneObjects函数用法

public void WblockCloneObjects(ObjectIdCollection identifiers, ObjectId id, IdMapping mapping, Autodesk.AutoCAD.DatabaseServices.DuplicateRecordCloning cloning, [MarshalAs(UnmanagedType.U1)] bool deferTranslation );其中各个参数的意义如下&#xff1a; ident…

git本地创建分支并推送到远程关联起来

git本地创建分支并推送到远程关联起来 git本地基于当前分支创建个新的分支&#xff0c;然后推送到远程&#xff0c;并把本地新创建的分支和远程分支关联 在当前分支下&#xff0c;新建分支 git checkout -b test推送到远程仓库 git push origin test将本地分支和远程分支关联…

SAP设置修改删除自动JOB

一、设置JOB 方法一 一个不需要单独记事务码的方式 如果FS要求开发做了程序的话&#xff0c;直接执行事务码&#xff0c;点击左上角 程序-后台执行 输出设备选择LP01 打勾&#xff0c;有可能还有一个对话框&#xff0c;也打勾 打勾后设置周期值 系统预设的会有小时、天、周…

论文阅读_InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits

InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits 时间&#xff1a;2018年 作者&#xff1a;Luc M. Augustin, Member, IEEE, Rui Santos, Erik den Haan, Steven Kleijn, Peter J. A. Thijs, Sylwester Latkowski, Senior Member, IEEE, Dan Zhao, Wei…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-01x11

如上表所示&#xff0c;MOE0&#xff0c;OSSI1&#xff0c;CCxE1&#xff0c;CCxNE1 时&#xff0c;如下框图OISx与CCxP异或&#xff0c;OISxN与CC1NP异或&#xff0c;然后相与后决定 OCx与OCxN的输出是否相对于OISx与OISxN取反。&#xff08;异或门参考逻辑门符号-CSDN博客&…

【华为OD真题 Python】查找众数及中位数

文章目录 题目描述输入描述输出描述示例1输入输出示例2输入输出示例3输入输出实现代码题目描述 1.众数是指一组数据中出现次数量多的那个数,众数可以是多个 2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组…

‘str‘ object has no attribute ‘capabilities‘

selenium 版本&#xff1a;4.16.0 报错代码&#xff1a; from selenium import webdriverdriver_pathrC:\\xxx\\drivers\\chromedriver\\win64\\120.0.6099.109\\chromedriver-win32/chromedriver.exe driver webdriver.Chrome(driver_path) 解决方法&#xff1a; 等待30秒时…

大数据情况下如何保证企业数据交换安全

数据交换是指在网络或其他方式下&#xff0c;不同主体按照规定的规则和标准实现数据的共享、传输和处理的过程。大数据时代的到来使得数据交换的重要性更为凸显&#xff0c;大数据带来了海量、多样、高速、低价值密度等特点&#xff0c;也带来了更多的价值挖掘和应用场景。 保障…

期货日数据维护与使用_日数据维护_sqlite3数据库创建

目录 写在前面&#xff1a; 初始准备 开始编写数据库代码 t_product t_symbol_basemsg t_main_symbol t_online_symbol t_last30_daily 小贴士 写在前面&#xff1a; 本文默认已经创建了项目&#xff0c;如果不知道如何创建一个空项目的&#xff0c;请参看以下两篇博…

亲测表白网制作源码,在线制作表白,无数据库上传就能用

在线制作表白网源码 没有数据库上传就能用 后台/admin 账号密码都是admin

Vue2 - 生命周期

目录 1&#xff0c;介绍1&#xff0c;初次渲染2&#xff0c;数据改变后的重渲染 2&#xff0c;生成周期钩子执行顺序 1&#xff0c;介绍 创建 vue 实例和创建组件的流程基本一样。 1&#xff0c;初次渲染 做一些初始化操作&#xff0c;主要设置一些私有属性到实例中。 运行 b…

Springboot整合Flowable Modeler(flowable6.4.0)

文章目录 Springboot整合Flowable Modeler1 项目准备1.1 新建一个Springboot项目1.2 项目的pom文件1.3 Flowable Modeler UI下载2 后端代码2.1 复制代码2.2 代码修改2.3 新增代码3 启动项目Springboot整合Flowable Modeler 1 项目准备 1.1 新建一个Springboot项目 ​ Spring…

vue实现项目部署成功之后提示用户刷新页面

vue实现项目部署成功之后提示用户刷新页面 1. 项目根目录新建 version.js require("fs").writeFileSync("./public/version.txt", new Date().getTime().toString()) 2. 改写package.json中打包命令 "scripts": {"dev": "vue-cl…

微信小程序 分享按钮 监听用户分享成功

代码 <view><button class"btnLq ed flex justify-center" open-type"share" click"getAward">点击分享</button> </view>export default {data(){return{shareMd:false,//分享埋点}},onShow(){//if(this.shareMd){uni.…

【Java集合篇】接上篇博文--为什么在JDK8中HashMap要转成红黑树

为什么在JDK8中HashMap要转成红黑树 ✔️为什么不继续使用链表✔️为什么是红黑树✔️红黑树的性能优势 ✔️ 拓展知识仓✔️为什么是链表长度达到8的时候转✔️为什么不在冲突的时候立刻转✔️关于为什么长度为8的时候转(源码注释解读)✔️为什么长度为6的时候转回来?✔️双向…

leetcode:136只出现一次的数字(详解),又名找到单身狗

期末考试临近&#xff0c;每天复习一点知识&#xff0c;还是可以复习完的&#xff0c;加油 前言 我后来才知道这是力扣上的一道题&#xff0c;我当时写他的时候名字叫找到单身狗&#xff0c;即使那个只出现了一次的数字 题目 136. 只出现一次的数字 给你一个 非空 整数数组…