02 基于51单片机的LED闪烁实验

news2025/1/22 19:46:21

 目录

        前言

        一、整体目录结构

        二、代码展示

        三、main.c代码解析

        四、下载到单片机中

        总结


前言

前面我们已经学会了点亮一个led的实验,今天我们来实现LED闪烁。前面我们讲到想要让LED亮的话,只要给单片机引脚高电平就好了,如果给LED低电平的话就可以实现LED熄灭。那么LED亮灭功能都能实现了,怎么实现LED闪烁呢?没错,只要在LED亮灭的中间增加延时就可以了,延时的时间只要人肉眼可见,就能实现LED闪烁的效果。

先来看一下饰演的效果:

LED闪烁

一、整体目录结构

        其中:
        Template.uvproj:工程文件

        main.c:项目的主程序

        Objects:存放编译的文件夹


二、代码展示
#include "reg52.h"

// 位定义
sbit led = P0^0;
typedef unsigned int uint16;  // 

// 延时函数  i=1时大约10us
void delay(uint16 i)
{
	while(i--);
}

void main()
{
	while(1)
	{
		led = 1;
		delay(50000);
		led = 0;
		delay(50000);
	}
}
三、main.c代码解析

        1,sbit led = P0^0;

                通过sbit对led进行位定义,我们把led定位到单片机的P00口,后面我们就可以通过变量名led去进行控制,这样定义的好处:后续我们需要改变单片机引脚的话,只需要在位定义出修改就OK了!

        2,delay()函数

                delay函数,他是一个延时函数,当delay函数中的变量为1时,大约延时10us的时间。

        3,在while循环中,我们将LED灯亮500ms灭500ms,这样我们就能肉眼看到,LED灯在闪烁。我们真正去做仿真的时候,发现其实delay(50000)大概是延时了450ms的时间。

                3.1 仿真

                step 01:点击keil中的仿真按钮

                  

                step 02:打2个断点

              

                step 03:复位一下时间

                 

                step 04:记录初始时间+结束时间

                

                

                

                计算出来delay(50000)实际的时间大概是450.22ms。

                虽然不准确,但是我们做实验是可以的,后面学到定时器的时候,就能精确的去做定时了。

四、下载到单片机中

       

         我们把LED的正极连接到单片机P00端口,开发板上电,通过烧录软件将Objects文件夹中的Template.hex文件烧录到单片机中即可!

总结


本篇文章给出了基于51单片机去实现LED闪烁的效果。
下面给出源码地址,欢迎star:
02 LED闪烁文件
如果阅读本文对你有用,欢迎一键三连呀!!!您的支持是我最大的动力!


 

一键三连 - 快懂百科


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

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

相关文章

Flink之Task解析

Flink之Task解析 对Flink的Task进行解析前,我们首先要清楚几个角色TaskManager、Slot、Task、Subtask、TaskChain分别是什么 角色注释TaskManager在Flink中TaskManager就是一个管理task的进程,每个节点只有一个TaskManagerSlotSlot就是TaskManager中的槽位,一个TaskManager中可…

Vue2-配置脚手架、分析脚手架、render函数、ref属性、props配置项、mixin配置项、scoped样式、插件

🥔:总有一段付出了没有回报的日子 是在扎根 更多Vue知识请点击——Vue.js VUE2-Day6 配置脚手架脚手架结构render函数vue.js与vue.runtime.xxx.js的区别引入render函数为什么要引入残缺的vue呢? 脚手架默认配置ref属性props配置项传递数据接收数据注意点…

elementui form组件出现英文提示

今天让解决一个bug,是表单组件提示词会出现英文。 问题情景如下: 有时会出现中文,有时会出现英文。 解决方法: 经查看,代码采用的是elementui的form组件,在el-form-item中使用了required属性,同…

企业权限管理(十)-用户详情

用户详情 UserController findById方法 Controller RequestMapping("/user") public class UserController {Autowiredprivate IUserService userService;//查询指定id的用户RequestMapping("/findById.do")public ModelAndView findById(String id) thro…

Python面向对象进阶教程,Python面向对象进阶知识笔记

类方法、静态方法 1. 类方法 第一个形参是类对象的方法需要用装饰器classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。 class Dog(object): __type "狗" # 类方法,用class…

数据结构中公式前中后缀表达式-二叉树应用

目录 数据结构中公式前中后缀表达式-二叉树应用 数据结构中公式前中后缀表达式-二叉树应用 什么是前缀表达式、中缀表达式、后缀表达式 前缀表达式、中缀表达式、后缀表达式,是通过树来存储和计算表达式的三种不同方式 以如下公式为例 通过树来存储该公式&#x…

Avalonia 11 WebAssembly中文乱码

文章目录 0x00 原因0x01 解决方法FontForge 0x02 使用自定义字体App.axaml控件使用效果 0x00 原因 新建的Avalonia 11 WebAssembly项目,直接运行的话,会发现中文都是乱码,并且直接在控件上修改FontFamily属性是无法生效的。 0x01 解决方法…

MySQL学习笔记 - 进阶部分

MySQL进阶部分 字符集的相关操作:字符集和比较规则:utf8与utf8mb4:比较规则:常见的字符集和对应的Maxlen: Centos7中linux下配置字符集:各个级别的字符集:执行show variables like %character%语…

matlab画图中多个图例分开绘制

在matlab绘图中,线条较多时导致图例较长回遮挡原图/将图例分类,解决方案将图例分为多个。 一、多个图例一起显示 r 10; a 0; b 0; t0:0.1:2.1*pi; xar*cos(t); ybr*sin(t); plot(x,y,r,linewidth,4);hold on axis equal plot([0 0],[1 10],b,linewi…

双碳目标下基于“遥感+”多技术融合在碳储量、碳排放、碳循环、温室气体等领域应用教程

详情点击链接:双碳目标下基于“遥感”多技术融合在碳储量、碳排放、碳循环、温室气体等领域应用教程 一:双碳视角下遥感技术的研究方向 1.双碳背景及遥感的现实需求 2.全球碳库、碳收支及碳循环现状 3.碳储量、碳收支与碳循环中的遥感技术 4.ENVI及ArcG…

海龟绘图——n个正方形组成的图案

运行结果: 代码: import turtle# 创建海龟对象 nint(input()) t turtle.Turtle()# 设置海龟的颜色和线条粗细 t.color(blue) t.pensize(3)# 画四条直线lengths10 for j in range(n):for i in range(4):lengths20t.forward(lengths)# 旋转90度t.left(90)…

数据治理:打造可信赖的BI环境

章节一:引言 随着信息时代的不断发展,数据已经成为企业决策的重要支撑。而在大数据时代,海量的数据需要被整理、分析,以便为企业提供正确的指导。商业智能(BI)系统的兴起为企业提供了强大的数据分析能力&am…

利用Lifecycle,管理一个计时器生命周期

Lifecycle是Android Jetpack中的一个组件,用于管理Android应用程序组件(如Activity或Fragment)的生命周期。它可以帮助开发者在不同的生命周期阶段执行特定的操作,以便更好地管理资源、处理数据和提供用户体验。 Lifecycle作用 …

Python程序设计——对象和类

学习目标 描述对象和类,以及使用类来建模对象定义带数据域和方法的类使用构造方法调用初始化程序来创建和初始化数据域以构建一个对象使用圆点运算符(.)访问对象成员使用self参数引用对象本身使用UML图符号来描述类和对象区分不可变对象和可变对象隐藏数据域以避免数…

应届生运维简历攻略

导语: 当下,计算机科学与技术已经成为一个炙手可热的行业,而作为这个行业中的一份子,运维人员的角色无疑至关重要。如果你是一位即将毕业的应届生,并希望在运维领域打拼,那么一份出色的运维简历将是你踏入…

PS常用快捷按键

1、Ctrl J 键复制(快速复制图层,作为备份); 2、快速选择对象,进行移动ctrl 右键 3、放大ctrl 缩小ctrl 4、对同一个图片的多个不同颜色的图片进行截取的时候,注意每次都用同一个切图框,截图保…

【C++】stack容器

1.stack基本概念 英stk 美stk n.&#xff08;整齐的&#xff09;一堆&#xff1b;<英> 垛&#xff0c;堆&#xff1b;大量&#xff0c;许多&#xff1b;&#xff08;尤指工厂的&#xff09;大烟囱&#xff1b;&#xff08;图书馆的&#xff09;藏书架&#xff0c;双面书架…

Redis实现共享Session

Redis实现共享Session 分布式系统中&#xff0c;sessiong共享有很多的解决方案&#xff0c;其中托管到缓存中应该是最常用的方案之一。 1、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM…

Linux:shell脚本 正则表达式与AWK

一、正则表达式 由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意义&#xff0c;而表示控制或通配的功能&#xff0c;类似于增强版的通配符功能&#xff0c;但与通配符不同&#xff0c;通配符功能是用来处理文件…

C语言入门 Day_3 整数和变量

目录 1.整型 2.变量 3.易错点 4.思维导图 前言&#xff1a; 昨天的课程里面&#xff0c;我们学会了使用printf()打印一行字母&#xff0c;比如 printf("Hello World!\n"); 那么编程中用来表示&#xfeff;数字的是什么类型呢&#xff1f; 接下来我们学习一下…