单片机LED流水灯电路原理图如下:
程序流程图:
单片机源码:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit key1=P1^0; // key1的信号传递给P1.0
- sbit key2=P1^1;// key2的信号传递给P1.1
- sbit key3=P1^2; // key3的信号传递给P1.2
- uint time=1,dit=0;
- uint led=0xfe;
- void delay(uint z) //设置延时
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void main()
- {
- uint t=3,n;
- while(1)//一直为真
- {
- while((key1&&key2&&key3 )!= 0)//按下任意一个按钮
- {
- if(dit== 0)
- {
- led=_crol_(led,1);//向左移动一位
- P0=led;//将P0的信号传递给LED
- }
- if(dit== 1)
- {
- led=_cror_(led,1);//向右移动一位
- P0=led;
- }
- n=625*time;//延时的时间
- delay(n);
- }}
- if(key1 == 0 ) {t=0;}//按下按钮一,设t的值为0
- if(key2 == 0) {t=1;} //按下按钮二,设t的值为1
- if(key3 == 0) {t=2;} //按下按钮三,设t的值为2
- switch(t)//根据t的取值分为以下的几种情况
- {
- case 0:
- dit=1-dit;//判断dit是1还是0
- break;
-
-
- case 1:
- if(time== 4)
- {;}
- else{time++;}break;//当时间为4s时,跳出循环,否则继续延加
-
- case 2:
- if(time==0.5 ){;}
- else{time--;}break;//当时间为0.5s时,跳出循环,否则继续延减
- default:break;
- }
- }
复制代码
|