【C51基础实验 LED闪烁】

news2024/9/19 11:26:08

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.coloradmin.cn/o/948646.html

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

相关文章

智慧排水监测系统:创新监测技术保障排水系统安全运行

城市排水系统作为城市基础设施的重要组成部分,其安全运行直接关系到环境卫生、居民生活和城市发展。为了确保排水系统的顺畅运行,传统的监测手段已经不能满足日益复杂的城市排水需求,物联网技术的快速发展为排水系统的监测带来了巨大的便利&a…

正中优配:IPO刹车,再融资转向,A股投融资动态平衡

继8月18日推出“一揽子”方针措施后,证监会近来表态,将充分考虑当时商场局势,对IPO、再融资节奏作出安排:包含阶段性收紧IPO节奏、促进投融资两头的动态平衡;优化再融资监管。 “目前商场资金面偏弱,阶段性…

java八股文面试[多线程]——CAS同步机制

AtomicInteger 源码解析: public class AtomicInteger extends Number implements java.io.Serializable {// 设置使用Unsafe.compareAndSwapInt进行更新private static final Unsafe unsafe Unsafe.getUnsafe();private static final long valueOffset;static {t…

electron win系统通知修改通知标题栏

标题栏的 electron.app.Electron 如何修改: var package require("../package.json"); app.setAppUserModelId(package.description); app.setAppUserModelId 在主进程的app这里修改

git rebase和merge区别

一、概述 merge和rebase 标题上的两个命令:merge和rebase都是用来合并分支的。 这里不解释rebase命令,以及两个命令的原理,详细解释参考这里。 下面的内容主要说的是两者在实际操作中的区别。 1.1 什么是分支 分支就是便于多人在同一项目…

Python中object类的特殊方法

目录标题 前言一、object类的源码二、常用特殊方法解释1.__getattribute__方法2.__setattr__方法3.__delattr__方法4.__dir__方法5.__eq__和__hash__6.__ gt__、__ lt__、__ ge__、__ le__7.__str__和__repr__8.__new__方法9.__sizeof__方法10.__ class__、__ dict__、__ modul…

基于java swing和mysql实现的电影票购票管理系统(源码+数据库+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的电影票购票管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都…

Zabbix配置SNMP trap告警的例子

官方文档:3 SNMP 陷阱 1、安装Trap组件包 yum install -y net-snmp-utils net-snmp-perl net-snmp 2、下载并复制接收Trap脚本 wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.15/zabbix-3.4.15.tar.gzyum -y install tartar z…

计算机毕设 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要…

买断制终身版的思维导图软件,大家有什么推荐?

思维导图是一种强大的工具,可以帮助我们组织思维、整理信息、提高效率。选择一款好用的思维导图软件对于个人和团队来说至关重要。本文将为大家推荐两款可以 闭眼入的终身版思维导图软件: boardmix 博思白板和MindMaster亿图脑图。 01 boardmix博思白板 …

生成动态柱状图【Python思路】

# 1.导包 import json from pyecharts.charts import Bar,Timeline from pyechasts.options import * from pyecharts.globals import ThemeType# 2.打开文件(此次数据格式.csv文件) f open("D:/data.csv","r",encoding"GB231…

项目开发尺寸像素问题

一般来说 项目开发开始会固定页面尺寸 一般都是1920x1080像素 那这样开发是最简单的我们直接用设计图的像素来开发就行 不用管有什么滚动条 一般浏览器都会有边框什么的 所以会出现滚动条 当我们全屏状态下其实才是我们想要页面结果 如果我们想没有滚动条开发 首先我们要知道…

上传图片不超过2M要怎么缩小?教你几招压缩图片

图片大小是我们在上传图片时经常遇到的问题,很多时候图片过大,导致无法正常上传到社交网络、邮箱或网站等其他地方,而解决这个问题的最直接方式就是将图片缩小。下面就给大家分享几个简单易行的方法,可以轻松将图片大小缩小到2M以…

C++设计模式_02_面向对象设计原则

文章目录 1. 面向对象设计,为什么?2. 重新认识面向对象3. 面向对象设计原则3.1 依赖倒置原则(DIP)3.2 开放封闭原则(OCP )3.3 单一职责原则( SRP )3.4 Liskov 替换原则 ( LSP )3.5 接口隔离原则 ( ISP )3.6 优先使用对象组合,而不是类继承3.7…

C++面向对象编程(2)

目录 一. 问题引入 二. 右值引用 1. lvalue/rvalue/prvalue/xvalue 1.1 表达式与对象的概念 1.2 左值与右值 2. moving semantics 2.1 显示绑定 2.2 Move constructors 2.3 Move assignment operator 2.4 实例分析 // TODO Quiz REF 本章简单介绍下move语义的“来…

数据通信——传输层TCP(可靠传输原理的停止等待协议)

引言 基于上次的基本特性中的可靠传输特性,我们对其进行详细的分析。 对了,在讲解TCP前,先对缓存进行一个简单的描述。我们都听说过缓存这个东西,我们发来的数据,会暂时写入到缓存中进行预处理,随后从缓存中…

OpenAI发布ChatGPT企业级版本

本周一(2023年8月28日)OpenAI 推出了 ChatGPT Enterprise,这是它在 4 月份推出的以业务为中心的订阅服务。该公司表示,根据新计划,不会使用任何业务数据或对话来训练其人工智能模型。 “我们的模型不会从你的使用情况中…

最适合家用的洗地机哪个牌子好?好用洗地机推荐

在如今的快节奏下,许多人没有太多的时间去完成家务清洁这一大问题,但是随着洗地机的出现,很多小伙伴们都发现了这个智能清洁家电在我们的生活中频繁出现,比如最近比较火爆的智能洗地机,结合了吸拖洗为一体的高效清洁与…

Bigemap 在水土生态环境行业中的应用

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 使用场景: 1. 土地利用占地管理: 核对数据,查看企业的实际占地是否超出宗地,污染面积。不方便现场勘测的地方&#xf…

Python实操GetOpenFilename打开文件选择框获取工作表信息

import xlwings as xw xlapp xw.App(visibleTrue, add_bookFalse) a xlapp.api.GetOpenFilename(Excel Files (*.xl*),*.xl*, 0, 0, 0, True) print(a[0]) slist [] for i in a:wk xw.Book(i)for s in wk.sheets:s_dict {}s_dict[工作簿名字] wk.names_dict[工作表名字] …