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);}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』