【C51基础实验 LED闪烁】

51单片机项目基础篇

  • LED闪烁
    • 1、硬件电路设计和原理分析
    • 2、软件设计
      • 2.1、功能实现:LED闪烁
      • 2.2、通过 KEIL 软件自带仿真查看延时时间
    • 4、编译结果
    • 5、结束语

LED闪烁

前言:
前一篇学会了点亮一颗LED以及驱动原理,那么这篇紧接着就来解锁LED的新功能,LED闪烁。当然这里指的闪烁,前提是基于肉眼余晖可见光达成的效果。

1、硬件电路设计和原理分析

开发板上 LED 模块电路原理图如下图所示:
在这里插入图片描述
看上图中 LED 采用共阳接法,D1-D8 连接到单片机的 P20-P27 口,即所有LED 阳极管脚接电源 VCC,阴极管脚通过一个 470 欧的限流电阻接到 P2 口上。
原理分析
根据前面篇章 点亮一颗LED 的介绍我们知道,要让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。
所以如果要想 51 单片机控制 LED实现亮灭闪烁的效果,就必须通过单片机管脚在 P2 口上反复的输出低电平或高电平,其次MCU执行程序语句都会有一定的时间,为了达到人肉眼的余晖效应,因此只需编写一个循环函数,让CPU 不干其它事,专门在那循环运行即可实现延时功能。

2、软件设计

2.1、功能实现:LED闪烁

//实验现象:下载程序后开发板的“LED 模块”D1 指示灯闪烁
/**/
#include "reg52.h"

typedef unsigned int u16;//对系统默认数据类型进行重命名

sbit LED1 = P2^0;//将 P2.0 管脚定义为 LED1

//实现延时功能
void delay_10us(u16 ten_us)//大约延时 10us,可通过访问进行初略计算得到编译所用的时间
{
	while(ten_us--);//作减减的运算占用编译时间达到延时的作用,但是这里的延时是实际编译估算的延时时间,不准确
}

void main()
{
	while(1)//循环亮灭,实现人肉眼可见的“一亮一灭”(20~50ms)
	{
		LED1 = 0;//LED1 端口设置为0低电平,从而点亮一颗led
		delay_10us(50000);//大约延时450ms,实现亮一会儿
		LED1 = 1;//LED1 端口设置为1高电平,从而熄灭一颗led
		delay_10us(50000);//大约延时450ms,实现灭一会儿
	}
}

解释说明
(1)、上述delay_10us函数的即为延时函数,主要通过 while 循环来实现延时效果。函数入口有一个形式参数ten_us,如果 ten_us 等于 1,则 while 循环执行一次,调用该函数执行一次延时时间大约 10us,目前没学定时器不够精确,不过能够满足人的肉眼余晖就行。
(2)、函数名的命名规则建议具备一定的含义,不可随意定义,比如delay_10us表示这个延时函数执行一次大约为10us,参数ten_us表示传参填写的是单位为us的数据,因为只需要执行延时不需要返回值,所以是void。
其次,参数的u16原型是unsigned int 因为相较之下比较繁琐,当程序量较多时,通常就采用此方式,使得程序简洁便捷,后续的程序中遇见此自定义的重命名类型,如:typedef unsigned char u8;等等,均同理。
值得注意的是:unsigned int具体占几个字节,由编译器决定,keil5是2个字节。根据参数类型就能够知道参数的传参范围,不能超过形参定义的范围。
如下表所示:

数据类型编译环境位数取值范围
unsigned int160 ~ 65535
unsigned int320 ~ 4294967295

(3)、最后主函数,main 函数内实现功能很简单,在 while 循环内,循环利用delay_10us( )函数间隔一定时间点亮 LED1和熄灭 LED1,这样即可实现 D1口 LED闪烁
当然我们发现。延时函数的参数写的50000,那么应该为500ms的延时时间才对,那么为什么实际大约在450ms呢?
解释说明
a、首先,50000这个参数呢是灵活的,因人而异,参数的大小是根据自己调试得出比较合适的闪烁效果,如果觉得闪烁太快参数就可以大一点(前提是符合u16的范围),觉得闪烁太慢参数就调小一点,最终得到的50000较为合适。
b、然后,为何实际延时大约为450ms呢?我们不妨直接使用调试功能一步步看。

2.2、通过 KEIL 软件自带仿真查看延时时间

首先,可以通过打开 KEIL 自带的软件仿真功能,操作如下:
**①打开实验工程,点击魔术棒,选择“Target”选项卡,在 Xtal(MHz)文本框中输入 12M,该值表示开发板上实际使用外部晶振大小,如果开发板上使用外部晶振是 11.0592M,则修改为对应值。**然后点击 OK。
在这里插入图片描述
②点击仿真按钮或组合快捷键Ctrl + F5,进入仿真界面,如下所示
在这里插入图片描述
③点击 RST 按钮,重新复位系统参数,此时参数列表中 sec(second 单位秒的意思) 则为 0,然后在所要查看调试的代码数字前面用鼠标左键双击即可出现“红色块”,我们称之为断点。如果再次双击,即可取消该断点。当点击红色标记 8 处运行的时候就能直接运行到我们设置的断点处。
在这里插入图片描述
④当点击红色标记 8 运行时,可以看到黄色箭头直接定位到 36 行代码,也就是我们刚才设置的第一个断点位置,此时参数列表中 sec 时间是 0.00039s。
在这里插入图片描述
⑤再次点击红色标记 8 运行时,此时黄色箭头指向第 37 行代码,此时 sec为 0.450601s。
在这里插入图片描述
最后,将现在这个时间减去上一步的 sec 时间就可以得到 delay_10us(50000)运行的实际时间大约为450ms了。再次点击仿真按钮则可退出仿真界面,回到程序编辑界面。

4、编译结果

至此,整个程序就编写完成,我们编译一下,如下图所示
在这里插入图片描述
从上图编译信息可以看出,我们的代码占用FLASH 大小为:code = 46 字节,所用的 SRAM 大小为:data = 9 个字节(9.0),xdata指是扩展的外部存储XSRAM所占的大小,并没有使用XSRAM所以为0。
硬件实验效果如图所示

C51基础实验 LED闪烁文章附件

5、结束语

写这篇文章记录作为自己学习的笔记,笔者水平有限,希望有错误的地方还请多多指教,各抒己见交流学习,同时希望笔者的内容有帮助到你。如果有所帮助还请点点赞,表示支持哦。最后感谢各位的阅读(不喜勿喷)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KUKA机器人零点标定的具体方法

KUKA机器人零点标定的具体方法 在进行机器人校正时,先将各轴置于一个定义好的机械位置,即所谓的机械零点。这个机械零点位置表明了同轴的驱动角度之间的对应关系,它用一个测量刻槽表示。 为了精确地确定机器人某根轴的机械零点位置,一般应先找到其预校正位置,然后去掉测量…

软考:中级软件设计师:邮件加密系统,网络安全保障,网络威胁与攻击,防火墙技术

软考:中级软件设计师:邮件加密系统 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &…

37、springboot 为 spring mvc 提供的自动配置及对自动配置的一些自定义定制(大体思路)

springboot 为 spring mvc 提供的自动配置及对自动配置的一些自定义定制(大体思路) ★ Spring Boot主流支持两个MVC框架: Spring MVC(基于Servlet) Spring WebFlux(基于Reactive,属于响应式AP…

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。 一个流,必有源端和目的端,它们可以是计算机内存的…

优思学院|六西格玛中的概率分布有哪些?

为什么概率分布重要? 概率分布是统计学中一个重要的概念,它帮助我们理解随机变量的分布情况以及与之相关的概率。在面对具体问题时,了解概率分布可以帮助我们选择适当的检验或分析策略,以解决问题并做出合理的决策。 常见的概率…

“亚马逊云科技创业加速器”首期聚焦AI,促进入营企业业务发展

生成式AI技术飞速发展,颠覆着人们的生活,正在掀起新一轮的科技革命。在生成式AI的浪潮中,亚马逊云科技旨在为中国的优秀初创企业提供全方位支持,助其抢占先机。 在6月底举办的亚马逊云科技中国峰会上,亚马逊云科技联合…

科创板50etf和科创50etf的区别不同点?一定要看!

很多在交易期权的时候会对科创50ETF期权和科创板50ETF期权标的物选择有疑问,两者与有何区别呢,选择哪个比较合适,别着急,下文为大家介绍科创板50etf和科创50etf的区别不同点?一定要看!本文来自:…

win11+vmware17+centos7.9环境搭建

温故知新 📚第一章 前言📗背景📗目标📗总体方向 📚第二章 安装部署环境📗安装VMware Workstation 17 Pro软件📗安装CentOS-7虚拟机📕镜像下载地址📕创建虚拟机&#x1f4…

电子电路原理题目整理(1)

电子电路原理题目整理(1) 最近在学习《电子电路原理》,记录一下书后面试题目,答案为个人总结,欢迎讨论。 1.电压源和电流源的区别? 电压源在不同的负载电阻下可提供恒定的负载电压,而电流源对于…

iOS脱壳技术(二):深入探讨dumpdecrypted工具的高级使用方法

前言 应用程序脱壳是指从iOS应用程序中提取其未加密的二进制可执行文件,通常是Mach-O格式。这可以帮助我们深入研究应用程序的底层代码、算法、逻辑以及数据结构。这在逆向工程、性能优化、安全性分析等方面都有着重要的应用。 在上一篇内容中我们已经介绍了Clutc…

antd upload组件beforeUpload返回promise之后,获取的文件不是file类型导致上传失败

之前的beforeUpload直接返回一个false值 ,文件是可以正常与服务端进行传输的 beforeUpload: (file) > {return false},但是这样并不能阻止文件上传,看了官方文档后,改用返回promise对象上传 beforeUpload: (file) > {console.log(-befo…

数字孪生:先进技术与未来发展的洞察

数字孪生:先进技术与未来发展的洞察 随着数字技术的迅猛发展,数字孪生作为新兴的概念和技术应运而生。数字孪生能够将现实世界与虚拟世界紧密连接,通过实时监测、数据分析和模拟仿真,为企业提供优化运营、提高效率和质量的解决方案…

算法:模拟思想算法

文章目录 实现原理算法思路典型例题替换所有问号提莫攻击N字型变换外观序列 总结 本篇总结的是模拟算法 实现原理 模拟算法的实现原理很简单,就是依据题意实现题意的目的即可,考察的是你能不能实现题目题意的代码能力 算法思路 没有很明显的算法思路…

高阶数据结构并查集

目录: 并查集的概念代码实现 LeetCode例题 并查集的概念 将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中反复遇到查询某一个元素属于那个集合的运算…

一文讲透 JavaScript 应用的演进历程

在不断发展的软件开发领域中,很少有编程语言像JavaScript一样产生深远的影响。它起初只是一种简单的脚本语言,但如今已成为现代Web的驱动力量,改变了应用构建和体验的方式。本文将带你沿着时间线,穿越JavaScript的演进历程&#x…

新亮点!安防视频监控/视频集中存储/云存储平台EasyCVR平台六分屏功能展示

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

简单shell脚本的编写

文章目录 简单使用shell脚本参数判断整数的比较运算符字符串的比较运算shell脚本流程控制shell脚本循环for循环批量添加用户批量ping IP地址检测同一局域网,多台主机存活情况检测同一局域网,多台主机存活情况多线程检测主机存活情况 while循环case选择语…

TCP--半连接队列和全连接队列

原文地址:https://plantegg.github.io/2020/04/07/%E5%B0%B1%E6%98%AF%E8%A6%81%E4%BD%A0%E6%87%82TCP–%E5%8D%8A%E8%BF%9E%E6%8E%A5%E9%98%9F%E5%88%97%E5%92%8C%E5%85%A8%E8%BF%9E%E6%8E%A5%E9%98%9F%E5%88%97–%E9%98%BF%E9%87%8C%E6%8A%80%E6%9C%AF%E5%85%AC%E…

企业网络安全:威胁情报解决方案

什么是威胁情报 威胁情报是网络安全的关键组成部分,可为潜在的恶意来源提供有价值的见解,这些知识可帮助组织主动识别和防止网络攻击,通过利用 STIX/TAXII 等威胁源,组织可以检测其网络中的潜在攻击,从而促进快速检测…

最简单vue获取当前地区天气--高德开放平台实现

目录 前言 一、注册成为高德平台开发者 二、注册天气key 1.点击首页右上角打开控制台 2.创建新应用 三、vue项目使用 1.打开vue项目找到public下的index.html,如果是vue3的话直接在主目录打开index.html文件就行,主要就是打开出口文件 ​编辑 2.根据高德…
最新文章