【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低电平,从而点亮一颗leddelay_10us(50000);//大约延时450ms,实现亮一会儿LED1 = 1;//LED1 端口设置为1高电平,从而熄灭一颗leddelay_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.mzph.cn/news/60371.shtml

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

相关文章

【业务功能篇90】微服务-springcloud-检索服务-ElasticSearch实战运用-DSL语句

商城检索服务 1.检索页面的搭建 商品检索页面我们放在search服务中处理&#xff0c;首页我们需要在mall-search服务中支持Thymeleaf。添加对应的依赖 <!-- 添加Thymeleaf的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifa…

(笔记二)利用opencv调用鼠标事件在图像上绘制图形

目录 &#xff08;1&#xff09;查看cv2所支持的鼠标事件&#xff08;2&#xff09;通过鼠标事件在图像上做标记&#xff08;3&#xff09;高级操作&#xff1a;通过移动鼠标在图像绘制图形、曲线 该功能主要创建一个鼠标事件发生时执行的回调函数。鼠标事件可以是任何与鼠标有…

根据身高重建队列【贪心算法】

根据身高重建队列 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返…

SQL注入漏洞复现(CVE-2017-8917)

文章目录 搭建环境启动环境漏洞复现报错注入使用sqlmap 前提条件&#xff1a; 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub Docker Compose是 docker 提供的一个命令行工具&…

Mysql中九种索引失效场景分析

表数据&#xff1a; 索引情况&#xff1a; 其中a是主键&#xff0c;对应主键索引&#xff0c;bcd三个字段组成联合索引&#xff0c;e字段为一个索引 情况一&#xff1a;不符合最左匹配原则 去掉b1的条件后就不符合最左匹配原则了&#xff0c;导致索引失效 情况二&#xff…

go学习-指针 标识符

指针&#xff0c;以及标识符 1.指针 &#xff08;1&#xff09;.基本介绍 1&#xff09;基本数据类型&#xff0c;变量存的值&#xff0c;也叫值类型 2&#xff09;获取变量的地址用&&#xff0c;比如 var num int ,获取num的地址&#xff1a;&num 3)指针类型&…

小程序隐私保护授权处理方式之弹窗组件

欢迎点击关注-前端面试进阶指南&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的&#x1fa9c; 小程序隐私保护授权弹窗组件 调用wx.getUserProfile进行授权时&#xff0c;返回错误信息&#xff1a;{errMsg: “getUserProfile:fail api scope is…

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

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

科普宣传片制作思路

科普宣传片可以针对不同的科学领域和主题&#xff0c;包括自然科学、生命科学、物理学、化学、天文学、地球科学、环境保护等&#xff0c;提供具体的案例、实验和研究成果&#xff0c;帮助观众更好地理解和应用科学知识。科普宣传片的制作思路可以根据具体的科普主题和目标观众…

基于ssm vue智慧城市实验室主页系统源码和论文

基于ssm vue智慧城市实验室主页系统源码和论文059 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方…

基于协同滤波推荐算法的图书管理系统

目录 一、项目概述 二、技术框架 三、功能设计 四、数据库设计 五、项目截图 六、技术文档 一、项目概述 Hi&#xff0c;大家好&#xff0c;今天分享的项目是《基于协同滤波推荐算法的图书管理系统》&#xff0c;对用户登录注册、图书推荐、图书管理、用户信息进行管理&…

Vue3响应式原理 私

响应式的本质&#xff1a;当数据变化后会自动执行某个函数映射到组件&#xff0c;自动触发组件的重新渲染。 响应式的实现方式就是劫持数据&#xff0c;Vue3的reactive就是通过Proxy劫持数据&#xff0c;由于劫持的是整个对象&#xff0c;所以可以检测到任何对象的修改&#xf…

版本控制 Git工具的使用

版本控制的概念&#xff1a; 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发…

C语言每日一练------(Day3)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今天练习题的关键字&#xff1a; 尼科彻斯定理 等差数列 &#x1f493;博主csdn个人主页&#xff1a…

2023_Spark_实验一:Windows中基础环境安装

Ⅰ、WINDOWS中安装JDK1.8 一、下载安装包 链接&#xff1a;百度网盘 请输入提取码 所在文件夹&#xff1a;根目录或者大数据必备工具--》开发工具(前端后端)--》后端 下载文件名称&#xff1a;jdk-8u191-windows-x64.exe 二、安装JDK 1.现在转到下载的exe文件可用的文件夹&…

【Vue3+Ts】项目启动准备和配置项目代码规范和css样式的重置

项目启动准备 创建项目&#xff08; 使用Vite 构建工具创建项目模板&#xff09;目录介绍插件安装创建别名编译说明项目配置配置icon和标题配置项目别名配置ts.config.json检测vscode的插件是否配置 配置项目代码规范集成editorconfig配置prettier工具库ESLint检测配置 CSS样式…

transformer实现词性标注

1、self-attention 1.1、self-attention结构图 上图是 Self-Attention 的结构&#xff0c;在计算的时候需要用到矩阵 Q(查询), K(键值), V(值)。在实际中&#xff0c;Self-Attention 接收的是输入(单词的表示向量 x组成的矩阵 X) 或者上一个 Encoder block 的输出。而 Q, K, V…

Hive-启动与操作(2)

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

测试左移——代码审计SonarQube 平台搭建

一、sonarqube代码分析技术体系 1、代码分析工具 IDE 辅助功能 xcode、android studio阿里巴巴 java 开发手册 ide 插件支持 独立的静态分析工具 spotbugs、findbugs、androidlint、scan-build、Checkstyle、FindSecBugspmd 阿里巴巴 java 开发手册 pmd 插件 综合性的代码…

堆,堆排序和TOP—K问题(C语言版)

前言 堆是一种重要的数据结构&#xff0c;堆分为大根堆和小根堆&#xff0c;大根堆堆顶的数据是最大的&#xff0c;小根堆堆顶的数据是最小的&#xff0c;堆在逻辑结构上是一颗完全二叉树&#xff0c;这棵树中如果满足根节点大于左右子树&#xff0c;每个节点都满足这个条件就是…