×
单片机 > 单片机程序设计 > 详情

单片机P1开关控制低四位流水灯

发布时间:2024-05-07 发布时间:
|

P1开关控制低四位流水灯,速度有点快自己调,有备注。

单片机源程序如下:

#include

#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) //延迟函数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++) // 循环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++) //可以改循环次数

{

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,执行左移,可以修改循环次数

case 0xdf :{right(2);}break; //按下P1^5,执行右移

case 0xbf :{flash1(2);}break;//按下P1^6,执行全闪

case 0x7f :{flash2(2);}break;//按下P1^7,执行全闪改

default:{led=0xff;}

}

}

}

复制代码

#include

#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) //延迟函数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++) // 循环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++) //可以改循环次数

{

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,执行左移,可以修改循环次数 ;

{left(2);}

else if(led==0xdf) //按下P1^5,执行右移

{right(2);}

else if(led==0xbf) //按下P1^6,执行全闪

{flash1(2);}

else if(led==0x7f) //按下P1^7,执行全闪改

{flash2(2);}

}

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法