|
設(shè)計(jì)任意流水燈電路,實(shí)現(xiàn)兩種以上方式的流水燈效果,通過按鍵切換或者自動(dòng)切換。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (26.96 KB, 下載次數(shù): 80)
下載附件
2022-4-8 16:08 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define led P2
- typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
- typedef unsigned char u8;
- //延遲函數(shù)
- void delay(){
- u16 a, b;
- for(a = 0; a < 400; a++)
- for(b = 0; b < 400; b++);
- }
- // LED點(diǎn)亮方式:依次點(diǎn)亮(一次一個(gè),循環(huán)三次)
- void yici(){
- char i, j;
- for(j = 0; j < 1; j++){
- led = 0xfe;
- for(i = 0; i < 7; i++){
- led = _cror_(led, 1);
- delay();
- }
- led = 0x7f;
- for(i = 0; i < 7; i++){
- led = _crol_(led, 1);
- delay();
- }
- }
- }
- // 從兩邊到中間
- char toMiddle[] = {0x7e, 0xbd, 0xdb, 0xe7, 0xdb, 0xbd, 0x7e};//LED燈點(diǎn)亮方式
- void bianToMiddle(){
- char i, j;
- for(j = 0; j < 1; j++){//循環(huán)三遍
- for(i = 0; i < 7; i++){//LED點(diǎn)亮方式:從兩邊到中間
- led = toMiddle[i];
- delay();
- }
- }
- }
- //由上向下依次點(diǎn)亮LED燈
- char toBottom[] = {0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00};
- void topToBottom(){
- char i, j;
- for(j = 0; j < 1; j++){
- led = 0xff;
- for(i = 0; i < 8; i++){
- led = led << 1;
- delay();
- }
- for(i = 6; i >= 0; i--){
- led = toBottom[i];
- delay();
- }
- }
- }
- void main(){
- while(1){
- yici(); //LED燈依次亮
- bianToMiddle();//LED燈從兩邊向中間逐次點(diǎn)亮
- led = 0xff; //關(guān)閉LED燈
- topToBottom();//由上向下依次點(diǎn)亮LED燈
- }
- }
復(fù)制代碼 Keil代碼與Proteus仿真下載:
實(shí)驗(yàn)10.7z
(71.94 KB, 下載次數(shù): 55)
2022-4-8 16:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|