首页 接线图文章正文

单片机LED灯花式闪烁电路图及程序

接线图 2023年09月21日 20:09 387 admin
简介:本文主要讲了单片机LED灯花式闪烁电路图程序,希望对你的学习有所帮助。

在点亮LED灯的程序中我们知道开发板上的LED灯是接到高电平的,如果单片机引脚输出电平,LED导通发亮。如果单片机引脚输出高电平,LED截止熄灭。知道这个原理后我们把单片机的P0端口的8个引脚都按照同样的方法接上8个LED灯,这样我们就能玩出更多的花样啦。

单片机LED灯花式闪烁电路图及程序  第1张

流水灯电路原理图

1、所有LED灯亮灭闪烁

先来一个简单的,先全部点亮和全部熄灭,间隔500ms,上次我们点亮LED灯的程序中我们只操作了P0端口的一位P0.0,现在只需要将原来操作一个端口的一位更改为操作操作整个端口即可。

将P0口定义为一个宏定义,方便后续理解。

#define LED P0

将原来的LED操作函数

void LedDisplay(unsigned char num)

{

Led0 = num;

}

更改为:

void LedDisplay(unsigned char num)

{

LED = num;

}

该函数传入的形参刚好是8bit的无符号整型数据,对应P0口的8个bit,P0.0为最低位。也就是说我们只需要改变LED操作函数传入的形参,P0口对应的8个LED灯状态就能对应改变。所以,我们需要实现全部LED灯的亮灭操作,全都LED点亮,形参传入16进制的0X00,P0口所有引脚置为低电平,延时后熄灭所有的LED灯,LED灯操作函数传入形参0XFF,P0端口所有引脚置为高电平。需要将主函数中对应做如下修改。

void main()

{

for(;;)

{

LedDisplay(0x00);

delay_ms(500);

LedDisplay(0xFF);

delay_ms(500);

}

}

2、间隔一个LED交替闪烁

根据上面我们实现所有LED亮灭的操作方法,如果要实现间隔一个LED交替闪烁,我们只需要更改传入的LED形参即可。对应为8bit的二进制数据为1010 1010为奇数的LED灯点亮,对应二进制为0101 0101为偶数的LED点亮。转化为16进制就是0xAA和0x55。我们对应修改主函数程序如下。编译下载到单片机,你会神奇地发现这时候已经有流水的效果了。

void main()

{

for(;;)

{

LedDisplay(0xAA);

delay_ms(500);

LedDisplay(0x55);

delay_ms(500);

}

}

3、从低位到高位依次点亮

从上面我们已经知道原理了,一次点亮的话我们需要给P0口依次赋值0xFE、0xFD、0xFB、0xF7、0xEF、0xDF、0xBF、0x7F。那我们有没有更简单一下的方法呢,有的,我们发现上面的数据取反后是0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80。然后0x02等于0x01向左移动一位,也就是说上面所有的数据可以用0x01通过移位和取反两个操作得到。

我们先定义一个全局变量并且初始值赋值0x01

unsigned char dat = 0x01;

在主函数中循环操作,循环一次移位一次。过更改延时函数的传入的形参大小可以调节流水的速度

void main()

{

unsigned char i;

for(;;)

{

dat = 0x01;

for(i=0;i<8;i++)

{

LedDisplay(~dat);

delay_ms(500);

dat = dat<<1;

}

}

}

给大家讲解了一下LED流水灯的原理和一些基本的操作方法,可以通过更改传入的数据和延时的时间,实现更多的流水灯样式。

版权与免责声明

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

标签: 单片机 led 电路图 程序 基础知识

发表评论

接线图网Copyright Your WebSite.Some Rights Reserved. 备案号:桂ICP备2022002688号-2 接线图网版权所有 联系作者QQ:360888349