單片機LED流水燈電路原理圖如下:
2.png (149.16 KB, 下載次數: 97)
下載附件
2018-12-19 10:17 上傳
程序流程圖:
C3G``(J}2OFW{E]6P@$V[08.png (17.59 KB, 下載次數: 81)
下載附件
2018-12-19 10:18 上傳
單片機源碼:
- #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;
- }
- }
復制代碼
|