永发信息网

单片机流水灯

答案:2  悬赏:40  手机版
解决时间 2021-07-26 01:00
  • 提问者网友:寂寞梧桐
  • 2021-07-25 15:02

流水灯

利用单片机的P1口控制LED的发光闪烁,再利用编程实现模拟广告灯和霓红灯的电路。

具体要求:

控制P1口的8个LED发光管可实现先左移,再右移,然后全亮,再全灭,连续闪烁三次,再从右开始,依次点亮1个LED灯、2个LED灯、3个LED灯……最后全部点亮,再全亮全灭闪烁一次。

有完整的电路图最好!

最佳答案
  • 五星知识达人网友:天凉才是好个秋
  • 2021-07-25 16:23





#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);
}
}

全部回答
  • 1楼网友:廢物販賣機
  • 2021-07-25 17:24
#include <reg52.h> //////////////////////////////////////////////////////// void delay(unsigned int cnt) //简单的延时 { while(--cnt); } /////////////////////////////////////////////////////// main() { P1=0xfe;//给初始化值 while(1) { delay(30000);//delay at crystal frequency in 12MHz P1<<=1;//左移一位 P1|=0x01;//最后一位补1 if(P1==0x7f)//检测是否移到最左端? { delay(30000);//delay P1=0xfe; } } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯