使单片机所有 LED 小灯频闪3次,3次后使 LED 小灯从左向右按照顺序亮起,最后一个 LED 小灯亮起后所有 LED 小灯长亮3秒,3秒后往返流水灯三次,三次后所有 LED 小灯熄灭3秒,
3秒后中间两个 LED 小灯长亮一秒,一秒后从两个长亮的 LED 小灯向左右两边依次亮起,每亮起一个后面亮起的 LED 小灯熄灭。完成之前动作后 LED 小灯从左向右开始亮起,到达最右边后依次返回,所有小灯频闪三次结束。
实现两个基本功能
1,点亮和熄灭LED
2,延时指定时间
然后按你说的时序,把上面两个功能做个组合即可。
实现这个功能需要根据具体的单片机型号和编程语言进行编程,以下是一个示例程序,使用C语言编写,假设有8个LED小灯,通过P0口控制。
#include <reg51.h> //包含单片机头文件
void delay(unsigned int i) //延时函数
{
unsigned int j, k;
for (j = i; j > 0; j--)
for (k = 110; k > 0; k--);
}
void main()
{
unsigned char i;
while (1)
{
for (i = 0; i < 3; i++) //频闪3次
{
P0 = 0xff;
delay(1000); //延时1秒
P0 = 0x00;
delay(1000); //延时1秒
}
for (i = 0; i < 8; i++) //从左到右按顺序亮起
{
P0 |= (1 << i);
delay(1000); //延时1秒
}
delay(3000); //所有LED长亮3秒
for (i = 0; i < 3; i++) //往返流水灯3次
{
P0 = 0x01;
for (j = 0; j < 7; j++) //从右往左移动
{
P0 <<= 1;
delay(100);
}
for (j = 0; j < 7; j++) //从左往右移动
{
P0 >>= 1;
delay(100);
}
}
P0 = 0x00;
delay(3000); //所有LED熄灭3秒
P0 = 0x18;
delay(1000); //中间两个LED长亮1秒
for (i = 2; i < 6; i++) //从中间往两边亮起
{
P0 |= (1 << i);
delay(1000); //延时1秒
P0 &= ~(1 << i); //后面的LED熄灭
}
for (i = 4; i > 1; i--) //从两边往中间熄灭
{
P0 |= (1 << i);
delay(1000); //延时1秒
P0 &= ~(1 << i); //后面的LED熄灭
}
for (i = 0; i < 3; i++) //从左到右按顺序亮起
{
P0 |= (1 << i);
delay(1000); //延时1秒
}
for (i = 6; i > 0; i--) //从右到左按顺序亮起
{
P0 |= (1 << i);
delay(1000); //延时1秒
}
for (i = 0; i < 3; i++) //频闪3次
{
P0 = 0xff;
delay(1000); //延时1秒
P0 = 0x00;
不知道你这个问题是否已经解决, 如果还没有解决的话:LED原理图分析 |
通过电路原理图可以得出:要点亮开发板上LED灯,只需要控制P1口输出低电平即可(编程时,给P1口赋值“0”)