流水灯
利用单片机的P1口控制LED的发光闪烁,再利用编程实现模拟广告灯和霓红灯的电路。
具体要求:
控制P1口的8个LED发光管可实现先左移,再右移,然后全亮,再全灭,连续闪烁三次,再从右开始,依次点亮1个LED灯、2个LED灯、3个LED灯……最后全部点亮,再全亮全灭闪烁一次。
有完整的电路图最好!
流水灯
利用单片机的P1口控制LED的发光闪烁,再利用编程实现模拟广告灯和霓红灯的电路。
具体要求:
控制P1口的8个LED发光管可实现先左移,再右移,然后全亮,再全灭,连续闪烁三次,再从右开始,依次点亮1个LED灯、2个LED灯、3个LED灯……最后全部点亮,再全亮全灭闪烁一次。
有完整的电路图最好!
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
for(j=0;j<1;j++)
{
a=0xfe; //赋初值
for(i=0;i<8;i++) //左移
{
P1=a; //点亮小灯
delay(200); //延时200毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(i=0;i<8;i++) //右移
{
P1=a; //点亮小灯
delay(200); //延时200毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
P1=0xff; //全部熄灭
for(j=0;j<6;j++)
{
delay(300); //延时
P1=~P1; //全部取反6次,既闪烁3次
}
for(i=0;i<8;i++) //右移
{
delay(200); //延时200毫秒
P1=0xfe<<i; //点亮小灯
}
for(j=0;j<3;j++)
{
delay(300); //延时
P1=~P1; //全部取反2次,既闪烁1次
}
delay(300);
}
}