技术文档

51单片机led闪烁 电子仿真:51单片机实现LED灯闪烁

小编 2024-10-06 技术文档 23 0

电子仿真:51单片机实现LED灯闪烁

昨天看到一篇关于今日头条CEO张一鸣的访谈,其中谈到他的大学专业,张总最开始也是学电子的,但由于不能广泛的接触电子产品,更不能进行开创性实验,因而最终转学软件。喜欢电子小伙伴的确实面临着一个这样的困境,不能很好的把自己想法以实物的方式展现出来。除了购买电子元器件之外,不知道你们都是怎么解决这个问题的?

电子仿真软件:Proteus

笔者认为对于没有条件的小伙伴,最好的办法是用电子仿真软件来模拟实验。需要软件的小伙伴可以私信笔者“Proteus”来获取 ,里面不仅有官方正版的软件、安装教程、汉化补丁、还有关于此软件的详细使用教程,如下图所示。至于Proteus到底是一个可以干什么的软件,现在不做解释,请往下看实验现象。

物料清单

笔者所选的是一个最基础、简单的单片机例子,需要的电子元器件自然不多,总共6种,清单如下

单片机89C51一个

电容3个

电阻两个

12M晶振一个

黄色LED灯一个

原理图

电路原理图如下,除了LED灯之外,其余的组成了单片机的最小系统,分别为晶振电路和复位电路,这个不需要我们去深究,因为它是单片机官方提前设计好的。LED灯的阳极接电源,当我们单片机P1.0输出高电平的时候,因为LED之间没有压差,所以此时LED灯是熄灭的;只有当P1.0输出低电平的时候,LED灯才可以被点亮。

程序

#include <reg52.h> //头文件

//Author:爱上半导体

//Date:2018年4月2日

#define uchar unsigned char //宏定义

#define uint unsigned int //宏定义

sbit LED = P1^0; //把P1.0赋值给LED

void main()

{

while(1)

{

LED = ~LED; //LED取反

DelayMS(150); //延时

}

}

程序烧录

程序是用Keil编写的,完成之后需要生成hex格式的文件,然后打开Proteus,双击单片机,之后出现如下界面,然后点击Program File后面的文件夹,选择我们刚才生成的hex文件,至此大功告成。

实验现象

实验现象如下视频所示,LED灯以3.3Hz的频率闪烁。

视频加载中...

源文件

为了让小伙伴们更好的学到电子知识,关于此次实验的电路图仿真源文件和程序源文件,笔者已经给大家打包,需要的私信“LED”便可获取。

如果不想用软件仿真,也可以购买51单片机开发板,这时候可能又要说我加广告了,笔者通过比较全网的单片机,最后选出了一款“普众科技”的51单片机开发板,在同等价位上,这款开发板的外设最多,之所以如此廉价,并不是它的质量不行,而是因为他家的单片机出货量最大,只有这样才能压缩成本,把价格压下去!有兴趣需要的小伙伴可以考虑一下。

#pgc-card .pgc-card-href { text-decoration: none; outline: none; display: block; width: 100%; height: 100%; } #pgc-card .pgc-card-href:hover { text-decoration: none; } /*pc 样式*/ .pgc-card { box-sizing: border-box; height: 164px; border: 1px solid #e8e8e8; position: relative; padding: 20px 94px 12px 180px; overflow: hidden; } .pgc-card::after { content: " "; display: block; border-left: 1px solid #e8e8e8; height: 120px; position: absolute; right: 76px; top: 20px; } .pgc-cover { position: absolute; width: 162px; height: 162px; top: 0; left: 0; background-size: cover; } .pgc-content { overflow: hidden; position: relative; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .pgc-content-title { font-size: 18px; color: #222; line-height: 1; font-weight: bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .pgc-content-desc { font-size: 14px; color: #444; overflow: hidden; text-overflow: ellipsis; padding-top: 9px; overflow: hidden; line-height: 1.2em; display: -webkit-inline-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .pgc-content-price { font-size: 22px; color: #f85959; padding-top: 18px; line-height: 1em; } .pgc-card-buy { width: 75px; position: absolute; right: 0; top: 50px; color: #406599; font-size: 14px; text-align: center; } .pgc-buy-text { padding-top: 10px; } .pgc-icon-buy { height: 23px; width: 20px; display: inline-block; background: url(https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/pgc/v2/pgc_tpl/static/image/commodity_buy_f2b4d1a.png); } 普中科技 51单片机开发板 51单片机学习板 AVR ARM STM32 实验板 ¥121 购买

51单片机学习10-LED灯闪烁

前面把学习单片机要用的软件,简单的提及了下,从这篇开始学习51单片机简单例子,并通过proteus软件来仿真验证结果。最简单的例子51单片机驱动一个LED,虽然例子简单,但是包括了很多知识点,比如头文件,宏定义,位定义,带参数函数,LED灯驱动电路的限流电阻的选择等等。

仿真图如下:

程序代码如下

源程序

#include<reg52.h> //头文件

#define uint unsigned int

#define uchar unsigned char

sbit LED1=P1^7; //位定义

void delay_ms(uint);//mS级带参数延时函数

void main()

{

while(1)

{

LED1=0;

delay_ms(1000);

LED1=1;

delay_ms(1000);

}

}

void delay_ms(uint z) //延时子程序

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

仿真结果如下:

单片机加载keil4编译生产的Hex文件后,点击开始运行,LED灯按照间隔1秒的时间开始闪烁

本篇小结:

1.软件部分-头文件,宏定义,位定义,带参数函数。

2.硬件部分-LED灯限流电阻的选取方法

LED灯根据不同的颜色,压降不同。假定LED的压降电压为1.7V,正常工作的电流为5mA--20mA,那就可以很简单的算出R=(5V-1.7V)/(5mA--20mA) 是一个范围值,然后在范围能选取一个常用的电阻值即可。

相关问答

51 单片 LED闪烁 实验,为什么一定要写成P2=0xff(16制)。写成...

[最佳回答]这要看你这用的是什么单片机编译软件了,可能还要在后边加一个B表示是二进制就行了。如不行就在前加试试。要指明你这是用的二进制。这要看你这用的...

80C 51单片机 控制流水灯来回 闪烁 ,用C语言?

#include#include#defineucharunsignedcharucharled=0xfe;voiddelay(uchara){uchari;while(a...

51单片机 控制8个 led 交替 闪烁 原理?

控制8个LED交替闪烁的原理主要涉及硬件和软件的配合。在硬件方面,我们需要将8只LED灯通过"拉电流"方式连接到P2.0-P2.7口1。这种连接方式使得每一个LED灯的阴...

单片机 8个 LED 灯随机 闪烁 怎么做?

方法:1:设定一个变量i,可以从0到3循环的变化2:检测一个经过消抖处理的按键,按一下,i+13:当i值为各个值时,执行相应的花样。流水灯参考程序#include...方...

帮忙做一个 51单片机 89C52的程序,要求是 LED 灯1以0.5秒为周期 闪烁 ,并且通过按键设置周期?

51单片机的IO口接按键,实现外部触发(外部中断,高低电平,上下降沿),触发后再通过IO控制LED的开关即可。51单片机的IO口接按键,实现外部触发(外部中断,高低电平...

51单片机 汇编语言,要求P1口 LED 闪烁 ,并且P2口接1个数码管自动计数并且P3.2按键计数,求答案啊?

ORG0000HLJMPMAINORG0003HLJMPEX0INTORG0030HMAIN:MOVSP,#5FHSETBIT0SETBEX0SETBEAMOV...

32 单片机led 闪烁 原因?

32单片机LED灯闪烁的原因可能有以下几种:程序设计问题:如果程序中存在错误或者逻辑不严谨,可能会导致LED灯闪烁。例如,程序中可能存在死循环或者延时不准确...

51单片机 闪烁 3次后熄灭?

对于问题中所说的这个这个功能现象可以通过编程来实现,首先在硬件上,要通过51单片机的一个引脚来控制灯的亮和灭,然后编写程序,通过编程使这个引脚的电平进行...

怎样利用 单片机 ,使用 LED 灯作通信指示灯,接收数据时以固定周期 闪烁 ,无数据常亮?

一般收发信号是有一个位来控制的,判断这个位,让led执行命令就行一般收发信号是有一个位来控制的,判断这个位,让led执行命令就行

单片机 如何让 led 闪烁 间隔一秒?

可以通过使用定时器和中断来实现LED灯闪烁间隔为一秒。首先,需要配置定时器的计数器,使其每秒钟自动增加一次。然后设置LED的状态,当计数器到达一定值时,LED...

猜你喜欢