电子仿真: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单片机控制单个LED灯闪烁 适合新手
说明:本文和上个教程一样也是单纯的扫盲教程,是上一篇点亮LED灯的升级版,也就是不光要把LED灯点亮,还要控制它熄灭,要控制它有规律的闪烁,本文同样只对单片机入门级的小伙伴,如果是老鸟请自觉飘过。
好了,我们继续说今天的实验,单片机控制LED流水灯,这个其实比上一个点亮LED的实验复杂一点点,硬件上就是多几个LED, 软件上加上控制LED灭和闪烁的代码,其实他的控制原理并不复杂只要弄明白其中的原理,下面同样我们从硬件和软件两个维度来深入剖析一下。希望你看完能有所收获。
硬件方面
发光二极管:发光二极管的发光原理在上一篇文章中已经说得很明白啦,此处不再赘述。不明白的可以移驾此处查看
单片机:单片机其点亮的控制原理和上一篇一样,没有什么可以说的,下面我着重说一下闪烁的控制原理,我们都知道想要LED闪烁,就要让它亮和灭,只需要在上个代码中加入灭的代码就可以了,但是闪烁就需要有个控制时间的概念,那么这个时间怎么来的呢?大家还记不记得我有过一篇专门介绍单片机最小系统的文章,里面提到了一个晶振电路,对了这个闪烁时间就是根据晶振频率的倒数来计算的,也就是根据机器周期来计算的,不明白的请自行充电计算机相关知识。我们根据机器周期算出时间,然后写入C语言代码中,再把代码烧进单片机,就可以实现控制。
好了,通过以上的讲解我想你应该明白这个系统的工作原理了吧。下面开始讲解一下软件代码部分
软件部分及其详细注释
#include"reg51.h" //定义头文件
sbit led=P2^0; //定义引脚
void delay(unsigned char i) / /延时函数 i=1时 延时10us
{
while(i--); //循环语句
}
void main() //main代表主函数,程序执行的部分
{
led=0; //LED赋值为0
while(1) //代表着循环
{
led=~led; //~表示之前的值取反,即0变1 1变0
delay(100); //延时,使得led灯闪烁,改变此变量可以调整闪烁间隔时间
}
下面是我输入代码后的实验结果,实验成果!
好了,看完了以上的文章,我想你应该明白这个实验的软硬件控制原理了吧,最后如果有什么问题或者建议请给我留言或者私信啊,看到一定第一时间回复,如果你喜欢我的文章,欢迎关注转发评论哦,我们下期再见!
相关问答
51 单片机 C程序 实验 LED灯:[1]单个 灯闪烁 ?单片机控制LED灯间隔时间闪烁,所用程序很简单,实际情况可作相应变化,也有多种方式实现。那么51单片机C程序实验LED灯:[1]单个灯闪烁?我们该怎么办呢?所需...单...
单片机 led 闪烁 的原因?32单片机LED灯闪烁的原因可能有以下几种:程序设计问题:如果程序中存在错误或者逻辑不严谨,可能会导致LED灯闪烁。例如,程序中可能存在死循环或者延时不准确...
单片机 刷屏幕怎么避免 闪烁 ?单片机刷屏幕出现闪烁的问题通常是由于刷新频率不高或者刷新方式不正确引起的。为了避免闪烁,可以通过提高刷新频率、尽可能减少刷新区域、使用交叉刷新或者使...
单片机 流水 灯闪烁 几次停止?单片机8个流水灯闪10次后停止。单片机流水灯是指一串LED灯,通过单片机控制,按照一定的顺序,不断循环地轮流点亮,闪烁10次后停止。单片机8个流水灯闪10次后停...
单片机 编写程序,让LED 灯闪烁 三次后熄灭?#includevoiddelay(unsignedinta){while(a--);}voidmain(void){unsignedchari;while(1){P2=~P2;delay(50000...
单片机 led灯延时2秒后 闪烁 ?单片机led闪烁有以下原因1、LED灯珠与LED驱动电源不匹配,正常单颗足1W灯珠承受电流:280-300mA,电压:3.0-3.4V,如果灯珠芯片不是足功率的就会造成灯光光源频...
下面肿么实现的 单片机闪烁 -ZOL问答首先,这个程序不会让LED闪烁;如果闪烁,需要加循环语句,如下:假如P2口接LED阴极,阳极通过上拉电阻接Vcc的话;voidmain()//程序开始{while(1)//作用:让下面....
51 单片机 怎样实现 灯闪烁 ?51单片机要实现灯闪烁通过51单片机——让一个LED灯闪烁程序#include51单片机要实现灯闪烁通过51单片机——让一个LED灯闪烁程序#include
单片机闪烁灯 编程原理?以下是我的回答,单片机闪烁灯编程原理主要是通过控制单片机的I/O口来控制LED灯的亮灭。首先,需要将单片机与LED灯连接,并将LED的正极连接到单片机的某个I/O口...
单片机 三个灯交替 闪烁 怎么编程呢?要使用单片机(如Arduino或类似平台)实现三个灯交替闪烁,可以采用以下C语言编程方法。这里以Arduino为例,假设您有三个连接到数字引脚的LED灯(如2、3、4号引...