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

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯

 

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。

 

 

 

目录

一.  延时函数的生成 

1.通过延时计算器得到延时函数 

2.可赋值改变的延时函数 

二.  LED模块编写原理 

1.LED模块图  

2.编写原理

(1)编写原理

(2)快捷编程 

(3)十六进制编程 

三.  具体编写程序 

1.通过生成没有改写的延时函数 

2.可赋值延时函数编写 

四.  LED流水灯视频

 

一.  延时函数的生成 

 

1.通过延时计算器得到延时函数 

 

 

步骤:

1.打开STC-ISP找到软件延时计算器

2.先了解所用51单片机的频率(这里的51单片机频率为11.0592),选择你需要定时的长度,然后注意这里51单片机为AT89C52属于89系列,所以8051指令集选择STC-Y1。

3.点击生成C代码再复制代码

源码如下:

void Delay250ms(void)	//@11.0592MHz
{unsigned char data i, j, k;_nop_();i = 2;j = 193;k = 57;do{do{while (--k);} while (--j);} while (--i);
}

 

2.可赋值改变的延时函数 

   这里我们可以在原有的延时函数的基础上,进行变量定义并运用while语句生成可赋值改变的延时函数。 

源码:

void Delay(unsigned int xms)	//@11.0592MHz//在Delay延时函数中新定义一个整型变量xms
{unsigned char data i, j;while(xms)     //运用while循环,注意while循环括号内非零即增{i = 2;j = 199;    do{while (--j);} while (--i);xms--;      //注意这里为循环条件改变,不改变无法实现同时写成xms++也无法实现
}}

 

二.  LED模块编写原理 

 

1.LED模块图  

1.单片机多个接口图,LED模块接在P2口 

 

 

2.LED模块图,这里我们需要注意LED的走向便于理解编写原理

 

 

3.LED与单片机连接部分

 

 

2.编写原理

(1)编写原理

  从上面LED的原理图中,我们对于LED知道LED具有单向导电的特征,而反向则电阻很大,所以我们需要使LED单向导电,这里我们规定0为低电平而1为高电平,根据电流的流向,判断当P2口接0即低电平时LED点亮,当P2口接1即高电平时LED不亮。

(2)快捷编程 

 1. 在编写时我们需要加上一个定义了P2口的头文件如下:

#include <REGX52.H>

该头文件定义了所有的接口,一般编写都需要,我们可以在开始时鼠标右键空白处找到并添加。 

2.由于该头文件定义了确切的接口如图:

点击打开

查看接口

 

这里直接定义了接口转为十六进制所以只需要对接口赋值0或1,即加高电平还是低电平。

例如:

1.定义第一个LED点亮 

P2_0=0;

2.定义第一个LED熄灭

P2_0=1;

(3)十六进制编程 

  十六进制编程与上述类似即对于接口没有转换为十六进制需要自己通过原理来设计编写,即对于每个LED的状态进行规定,然后写成一个二进制代码再转为十六进制。(之前的博客有具体的转换过程)。 

例如:

 

  这里定义D1接0,其余接1,则表示只让D1亮,这里写成二进制串需要从下往上写成1111 1110,接着由二进制转十六进制为FE,部分二进制转十六进制如图:

 

 

例如:这里在FE前面需要加上0x用于表明为十六进制,

	P2=0xFE;

对比:对于快捷编写来说即让人容易明白且编写方便,而对于十六进制编写则过于麻烦,但是该编写方式可以让人更加清楚的熟悉编写原理,从而更加灵活的编写同时有利于后续的编写。 

 

三.  具体编写程序 

 

1.通过生成没有改写的延时函数 

这里在程序中我们还要引入另一个头文件,由于自动生成的延时函数中有一个语句需要被调用,为了完善程序,我们需要调用该头文件。

需要被调用的语句:

	_nop_();

需要被调用的头文件:

#include <INTRINS.H>

打开可看到(打开方式同另一个头文件)

 

下面就是一个具体的程序(C语言编写的):

#include <REGX52.H>       //两个头文件的引入
#include <INTRINS.H>void Delay250ms(void)	//@11.0592MHz    //延时250ms
{unsigned char data i, j, k;_nop_();    i = 2;j = 193;k = 57;do{do{while (--k);} while (--j);} while (--i);
}void main()    //函数主体
{while(1)      //通过while循环让程序循环进行{P2=0xFF;   //通过十六进制编写Delay250ms();    //延时函数的调用P2=0xFE;Delay250ms();P2=0xFD;Delay250ms();P2=0xFB;Delay250ms();P2=0xF7;Delay250ms();P2=0xEF;Delay250ms();P2=0xDF;Delay250ms();P2=0xBF;Delay250ms();P2=0x7F;Delay250ms();P2=0xFD;Delay250ms();P2=0xF7;Delay250ms();P2=0xDF;Delay250ms();P2=0x7F;Delay250ms();P2=0xFC;Delay250ms();P2=0xE7;Delay250ms();P2=0x3F;Delay250ms();P2=0xF1;Delay250ms();P2=0x1F;Delay250ms();P2=0xF0;Delay250ms();P2=0x0F;Delay250ms();P2=0x00;Delay250ms();}}

这里主要可以多试试通过十六进制定义LED的亮灭。 

 

2.可赋值延时函数编写 

这里由于改写后没有上面的那个语句,所以也不需要添加那个头文件。

源码:

#include <REGX52.H>void Delay(unsigned int xms)	//@11.0592MHz   //定义变量
{unsigned char data i, j;while(xms)   //while循环{i = 2;j = 199;do{while (--j);} while (--i);xms--;   //循环条件改变
}}void main()   //主函数
{while(1)   //while循环非零即增{P2=0xFE;Delay(100);   //调用延时函数,对于延时可赋值改变P2=0xFD;Delay(200);P2=0xFB;Delay(300);P2=0xF7;Delay(400);P2=0xEF;Delay(500);P2=0xDF;Delay(600);P2=0xBF;Delay(700);P2=0x7F;Delay(800);}}

 

四.  LED流水灯视频

 

大家可以自己设计一个自己的流水灯,如果有问题的话欢迎私聊我哦。 

51单片机LED流水灯

感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 目录 一. 延时函数的生成 1.通过延时计算器得到延时函数 2.可赋值改变…...

回归预测模型:MATLAB多项式回归

1. 多项式回归模型的基本原理 多项式回归是线性回归的一种扩展&#xff0c;用于分析自变量 X X X与因变量 Y Y Y之间的非线性关系。与简单的线性回归模型不同&#xff0c;多项式回归模型通过引入自变量的高次项来增加模型的复杂度&#xff0c;从而能够拟合数据中的非线性模式。…...

「计算机网络」数据链路层

数据链路层的地位&#xff1a;网络中的主机、路由器等都必须实现数据链路层信道类型 点对点信道&#xff1a;使用一对一的点对点通信方式广播信道 使用一对多的广播通信方式必须使用专用的共享信道协议来协调这些主机的数据发送 使用点对点信道的数据链路层 数据链路和帧 链…...

【Linux】Ubuntu 22.04 升级 nodejs 到 v18

Ubuntu 22.04 已经安装的nodejs 版本 nodejs is already the newest version (12.22.9~dfsg-1ubuntu3.3). 删除以前的 nodejs 版本&#xff1a; 1. sudo apt remove nodejs rooterp:~# sudo apt remove nodejs Reading package lists... Done Building dependency tree..…...

当go get获取不到软件包时

当使用go get命令获取软件包时&#xff0c;如果无法成功获取&#xff0c;您可以尝试以下方法来解决问题&#xff1a; 检查网络连接&#xff1a;首先&#xff0c;确保您的计算机能够访问互联网&#xff0c;并且没有任何网络防火墙或代理设置阻止了go get命令的正常运行。 设置代…...

全网最详细解法|同济大学|高等数学|第八版|习题1-5

文章目录 全网最详细解法&#xff5c;同济大学&#xff5c;高等数学&#xff5c;第八版&#xff5c;习题1-5&#xff5c;5.1全网最详细解法&#xff5c;同济大学&#xff5c;高等数学&#xff5c;第八版&#xff5c;习题1-5&#xff5c;5.2 全网最详细解法&#xff5c;同济大学…...

可视化工具:将多种数据格式转化为交互式图形展示的利器

引言 在数据驱动的时代&#xff0c;数据的分析和理解对于决策过程至关重要。然而&#xff0c;不同的数据格式和结构使得数据的解读变得复杂和困难。为了解决这个问题&#xff0c;一种强大的可视化工具应运而生。这个工具具有将多种数据格式&#xff08;包括JSON、YAML、XML、C…...

[嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…...

机器学习、深度学习、强化学习、迁移学习的关联与区别

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要了解并初步探究机器学习、深度学习、强化学习、迁移学习的关系与区别&#xff0c;通过清晰直观的关系图展现出四种“学习”之间的关系。虽然这四种“学习”方法在理论和应用上存在着一定的区别&#xff0c;但它们之间也…...

苹果为什么需要台积电3nm工艺芯片?

据《经济日报》报道&#xff0c;苹果公司的产品线将迎来重大升级。下一代应用于iPad、MacBook和iPhone的M4和A18处理器预计将会增加内置AI计算核心的数量&#xff0c;从而大幅提高AI运算能力。这一变化将导致对台积电&#xff08;TSMC&#xff09;订单的显著增长。据悉&#xf…...

力扣:53. 最大子数组和

解题思路&#xff1a; 1.先把数组为空和数组的长度为1时的特殊情况分别开来。声明一个sum变量用于计算数组中的连续子数组的总和值 。在声明一个guo变量用于一种接收sum中的前i-1的总和。另一种接收sum中前i的总和&#xff0c;主要根据sum的值来判断是接收的哪一种。在声明一个…...

幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?

腾讯云幻兽帕鲁服务器配置怎么选&#xff1f;根据玩家数量选择CPU内存配置&#xff0c;4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置&#xff0c;腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法&#xff…...

学习总结11

KMP算法 全称Knuth-Morris-Pratt算法&#xff0c;是一种字符串匹配算法。该算法的目的是在一个文本串S内查找一个模式串P的出现位置。 KMP算法的核心思想是利用模式串自身的特性来避免不必要的字符比较。算法通过构建一个部分匹配表&#xff08;也称为next数组&#xff09;&a…...

Hadoop运行环境搭建

模板虚拟机环境准备 1&#xff09;准备一台模板虚拟机hadoop100&#xff0c;虚拟机配置要求如下&#xff1a; 模板虚拟机&#xff1a;内存4G&#xff0c;硬盘50G&#xff0c;安装必要环境&#xff0c;为安装hadoop做准备 [roothadoop100 ~]# yum install -y epel-release [r…...

CTFshow web(php命令执行59-67)

web59 <?php /* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com */ // 你们在炫技吗&#xff1f; if(isset($_POST…...

03、全文检索 -- Solr -- Solr 身份验证配置(给 Solr 启动身份验证、添加用户、删除用户)

目录 全文检索 -- Solr -- Solr 身份验证配置启用身份验证&#xff1a;添加用户&#xff1a;删除用户&#xff1a; 全文检索 – Solr – Solr 身份验证配置 学习之前需要先启动 Solr 执行如下命令即可启动Solr&#xff1a; solr start -p <端口>如果不指定端口&#xf…...

怎么使用ChatGPT提高工作效率?

怎么使用ChatGPT提高工作效率&#xff0c;这是一个有趣的话题。 相信不同的人有不同的观点&#xff0c;大家的知识背景和从事的工作都不完全相同&#xff0c;所以最终ChatGPT能起到的作用也不一样。 在编程过程中&#xff0c;如果我们要找一个库&#xff0c;我们最先做的肯定…...

【微服务】skywalking自定义告警规则使用详解

目录 一、前言 二、SkyWalking告警功能介绍 2.1 SkyWalking告警是什么 2.2 为什么需要SkyWalking告警功能 2.2.1 及时发现系统异常 2.2.2 保障和提升系统稳定性 2.2.3 避免数据丢失 2.2.4 提高故障处理效率 三、 SkyWalking告警规则 3.1 SkyWalking告警规则配置 3.2 …...

BUGKU-WEB 矛盾

题目描述 进入场景看看&#xff1a; 代码如下&#xff1a; $num$_GET[num]; if(!is_numeric($num)) { echo $num; if($num1) echo flag{**********}; }解题思路 需要读懂一下这段PHP代码的意思明显是一道get相关的题目&#xff0c;需要提供一个num的参数,然后需要传入一个不…...

2024-02-11 Unity 编辑器开发之编辑器拓展2 —— 自定义窗口

文章目录 1 创建窗口类2 显示窗口3 窗口事件回调函数4 窗口中常用的生命周期函数5 编辑器窗口类中的常用成员6 小结 1 创建窗口类 ​ 当想为 Unity 拓展一个自定义窗口时&#xff0c;只需实现继承 EditorWindow 的类即可&#xff0c;并在该类的 OnGUI 函数中编写面板控件相关的…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...