P1開關(guān)控制低四位流水燈,速度有點快自己調(diào),有備注。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (20.72 KB, 下載次數(shù): 40)
下載附件
2020-11-26 23:36 上傳
單片機源程序如下:
- #include<reg51.h>
- #define led P1 //可以改為其他口
- void delay(int x);
- void left(int x);
- void right(int x);
- void flash1(int x);
- void flash2(int x);
- void delay(int x) //延遲函數(shù)1ms(大概)
- {int i;
- while(x)
- {
- for(i=0;i<125;i++);
- x--;
- }
- }
- void left(int x) //從P1^3到P1^0(我叫它左移)
- {int i,j;
- while(x)
- {for(i=0;i<3;i++) // 循環(huán)3遍
- {led=0xfe;
- delay(50); //每個燈亮50ms
- for(j=0;j<3;j++) //一共四位
- {
- led=led<<1|0xf1;
- delay(50);
- }
- }
- x--;
- }
- }
- void right(int x) //從最低位的最高位(我叫它右移)
- {int i,j;
- while(x) //其他同左移
- {for(i=0;i<3;i++)
- { led=0xf7;
- delay(50);
- for(j=0;j<3;j++)
- {
- led=led>>1|0xf8;
- delay(50);
- }
- }
- x--;
- }
- }
- void flash1(int x) //四位全閃 (可以改很多種)
- {int i;
- while(x)
- {led=0xf0;
- delay(100); //一次亮100ms
- for(i=0;i<1;i++) //可以改循環(huán)次數(shù)
- {
- led=~led|0xf0; //屏蔽高四位
- delay(100);
- }
- x--;
- }
- }
- void flash2(int x) //隔一位閃爍(全閃改)
- {int i;
- while(x) //基本和全閃一樣
- {led=0xf5;
- delay(100);
- for(i=0;i<1;i++)
- {
- led=~led|0xf0;
- delay(100);
- }
- x--;
- }
- }
- main()
- {while(1)
- {led=0xff;
- switch(led) //在燈全滅的情況下,多個按鍵同時按下時不會動作;
- {case 0xef :{left(2);}break; //按下P1^4,執(zhí)行左移,可以修改循環(huán)次數(shù)
- case 0xdf :{right(2);}break; //按下P1^5,執(zhí)行右移
- case 0xbf :{flash1(2);}break;//按下P1^6,執(zhí)行全閃
- case 0x7f :{flash2(2);}break;//按下P1^7,執(zhí)行全閃改
- default:{led=0xff;}
- }
- }
- }
復制代碼- #include<reg51.h>
- #define led P1 //可以改為其他口
- void delay(int x);
- void left(int x);
- void right(int x);
- void flash1(int x);
- void flash2(int x);
- void delay(int x) //延遲函數(shù)1ms(大概)
- {int i;
- while(x)
- {
- for(i=0;i<125;i++);
- x--;
- }
- }
- void left(int x) //從P1^3到P1^0(我叫它左移)
- {int i,j;
- while(x)
- {for(i=0;i<3;i++) // 循環(huán)3遍
- {led=0xfe;
- delay(50); //每個燈亮50ms
- for(j=0;j<3;j++) //一共四位
- {
- led=led<<1|0xf1;
- delay(50);
- }
- }
- x--;
- }
- }
- void right(int x) //從最低位的最高位(我叫它右移)
- {int i,j;
- while(x) //其他同左移
- {for(i=0;i<3;i++)
- { led=0xf7;
- delay(50);
- for(j=0;j<3;j++)
- {
- led=led>>1|0xf8;
- delay(50);
- }
- }
- x--;
- }
- }
- void flash1(int x) //四位全閃 (可以改很多種)
- {int i;
- while(x)
- {led=0xf0;
- delay(100); //一次亮100ms
- for(i=0;i<1;i++) //可以改循環(huán)次數(shù)
- {
- led=~led|0xf0; //屏蔽高四位
- delay(100);
- }
- x--;
- }
- }
- void flash2(int x) //隔一位閃爍(全閃改)
- {int i;
- while(x) //基本和全閃一樣
- {led=0xf5;
- delay(100);
- for(i=0;i<1;i++)
- {
- led=~led|0xf0;
- delay(100);
- }
- x--;
- }
- }
- main()
- {while(1)
- {led=0xff; //在燈全滅的情況下,多個按鍵同時按下時不會動作;
- if(led==0xef) //按下P1^4,執(zhí)行左移,可以修改循環(huán)次數(shù) ;
- {left(2);}
- else if(led==0xdf) //按下P1^5,執(zhí)行右移
- {right(2);}
- else if(led==0xbf) //按下P1^6,執(zhí)行全閃
- {flash1(2);}
- else if(led==0x7f) //按下P1^7,執(zhí)行全閃改
- {flash2(2);}
- }
- }
復制代碼
所有資料51hei提供下載:
開關(guān)控制低四位流水燈.zip
(74.82 KB, 下載次數(shù): 10)
2020-11-26 18:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|