【C51基础实验 LED闪烁】

这篇具有很好参考价值的文章主要介绍了【C51基础实验 LED闪烁】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LED闪烁

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

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

开发板上 LED 模块电路原理图如下图所示:
【C51基础实验 LED闪烁】,C51专栏,c语言,51单片机,keil5调试,LED闪烁,51单片机 LED闪烁,笔记,点亮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 int 16 0 ~ 65535
unsigned int 32 0 ~ 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。
【C51基础实验 LED闪烁】,C51专栏,c语言,51单片机,keil5调试,LED闪烁,51单片机 LED闪烁,笔记,点亮LED
②点击仿真按钮或组合快捷键Ctrl + F5,进入仿真界面,如下所示
【C51基础实验 LED闪烁】,C51专栏,c语言,51单片机,keil5调试,LED闪烁,51单片机 LED闪烁,笔记,点亮LED
③点击 RST 按钮,重新复位系统参数,此时参数列表中 sec(second 单位秒的意思) 则为 0,然后在所要查看调试的代码数字前面用鼠标左键双击即可出现“红色块”,我们称之为断点。如果再次双击,即可取消该断点。当点击红色标记 8 处运行的时候就能直接运行到我们设置的断点处。
【C51基础实验 LED闪烁】,C51专栏,c语言,51单片机,keil5调试,LED闪烁,51单片机 LED闪烁,笔记,点亮LED
④当点击红色标记 8 运行时,可以看到黄色箭头直接定位到 36 行代码,也就是我们刚才设置的第一个断点位置,此时参数列表中 sec 时间是 0.00039s。
【C51基础实验 LED闪烁】,C51专栏,c语言,51单片机,keil5调试,LED闪烁,51单片机 LED闪烁,笔记,点亮LED
⑤再次点击红色标记 8 运行时,此时黄色箭头指向第 37 行代码,此时 sec为 0.450601s。
【C51基础实验 LED闪烁】,C51专栏,c语言,51单片机,keil5调试,LED闪烁,51单片机 LED闪烁,笔记,点亮LED
最后,将现在这个时间减去上一步的 sec 时间就可以得到 delay_10us(50000)运行的实际时间大约为450ms了。再次点击仿真按钮则可退出仿真界面,回到程序编辑界面。

4、编译结果

至此,整个程序就编写完成,我们编译一下,如下图所示
【C51基础实验 LED闪烁】,C51专栏,c语言,51单片机,keil5调试,LED闪烁,51单片机 LED闪烁,笔记,点亮LED
从上图编译信息可以看出,我们的代码占用FLASH 大小为:code = 46 字节,所用的 SRAM 大小为:data = 9 个字节(9.0),xdata指是扩展的外部存储XSRAM所占的大小,并没有使用XSRAM所以为0。
硬件实验效果如图所示

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

5、结束语

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

到了这里,关于【C51基础实验 LED闪烁】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C51单片机——通过使用定时器控制LED闪灭

    目录 0 引言 1 定时的原理 1.1 生活中的定时 1.2单片机中的定时器 2 C语言程序设计 2.1 定时器的内部功能 2.2 设置寄存器 2.3 实验程序 3 有两个小问题(算是延伸吧) 3.1 只能0.05s闪一次吗? 3.2 每次都要在草稿纸手算初始值好麻烦

    2024年02月06日
    浏览(59)
  • C51单片机实验——中断实验

    实验环境:普中实验系统;Keil μVision 4软件; 实验目的: (1)掌握单片机中断原理和中断响应过程。 (2)设计自己的中断程序具体实验内容,并通过程序设计控制实验箱上的2个按键,实现对应的中断内容。 硬件连线: 按键k3连接P3.2口 按键k4连接P3.3口 LED灯连接P2口 实验主

    2024年02月05日
    浏览(42)
  • 一周学完C51单片机(1)点亮LED灯以及按键控制

    首先找到单片机的原理图,找到LED模块。我这里是P2口是连接了LED灯,通过此原理图我们可以看到 我们只需将单片机的IO口置为低电平,就可以点亮LED灯。 因为代码比较简单,我就分别展示一下代码,一颗LED灯的亮灭,流水灯 延时函数可以通过小工具来实现,选择好系统的频

    2024年02月08日
    浏览(32)
  • 基于AT89C51单片机的LED点阵显示屏设计

    点击链接获取Keil源码与Project Backups仿真图: [[https://download.csdn.net/download/qq_64505944/88637464?spm=1001.2014.3001.5503]] **[源码获取] B 源码+仿真图+课程设计+50 工程实训(三)课题设计 LED点阵显示屏设计 LED点阵显示屏通过编程控制可以显示中英文字符、图形及视频动态图形,广泛用于指

    2024年02月02日
    浏览(44)
  • 单片机-c语言LED灯循环闪烁

    1.1一灯循环 1.2for循环实现八个依次亮 1.3使用intrins.h库函数实现 (连接完电路后,双击单片机,在programfiles中导入keil代码生成的 .HEX文件即可)

    2024年02月06日
    浏览(31)
  • 【C51基础实验 LED流水灯】

    前言: 前几篇学会了LED驱动原理,并且成功点亮了一颗LED和实现了LED的闪烁,那么这篇紧接着就来解锁LED的新功能,LED流水灯。当然这里前提是基于肉眼余晖可见光达成的效果。 开发板上 LED 模块电路原理图如下图所示: 看上图中 LED 采用共阳接法 ,D1-D8 连接到单片机的

    2024年02月10日
    浏览(29)
  • 【小实验】C51单片机 DS18B20温度显示实验

         利用单总线技术和数码管动态显示的原理,要求实现DS18B20温度采集并显示,能够设定温度值上限值27.5度,当超出上限值LED灯闪烁。    实验前可先用protues绘制出原理图:   代码仅供参考,希望大家能够在此基础上优化代码,而不是ctrl+c,ctrl+v。 谢谢!!!        

    2024年02月12日
    浏览(34)
  • 单片机C51(STC89C52RC)独立按键控制LED亮灭、状态、显示二进制、位移

    目录 1.独立按键控制LED灯亮灭 2.独立按键控制LED灯状态 3.独立按键控制LED灯显示二进制 4.独立按键控制LED灯位移 5.附录 独立按键控制LED灯状态,在独立按键按下时,LED灯点亮,松手后LED灯熄灭。独立按键按下为0,松开为1,在STC89C52RC芯片上,P2为LED灯IO口,P2_0表示第一个LED灯

    2024年02月01日
    浏览(85)
  • 51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。  

    2024年02月11日
    浏览(30)
  • 【C51】10-基础51单片机的小车项目(51完结)

    10.1小车的安装 10.2电机模块的开发(L9110S) 接通 VCC , GND 模块电源指示灯亮, 以下资料来源官方,但是不对,根据下节课实际调试 IA1 输入高电平, IA1 输入低电平,【 OA1 OB1 】电机正转; IA1 输入低电平, IA1 输入高电平,【 OA1 OB1 】电机反转; IA2 输入高电平, IA2 输入低

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包