使用51单片机控制流水灯分别以500ms,1s,3s流动按键时切换速度
代码如下,可根据自己需要调整
/*按键K1为500ms,按键K3为1s,按键K4位3s*/
#include<reg51.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
#define led P2
sbit k1=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
u16 count=500,flag=0;
void delay(u16 i)
{
while(i--);
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main(void)
{
u8 i;
Timer0Init();
led=0xfe;
while(1)
{
if(flag)
{
flag=0;
for(i=0;i<7;i++)
{
led=_crol_(led,1);
}
}
delay(10000);
if(k1==0)
{
delay(1000);
if(k1==0)
{
count=500;
}
}
if(k3==0)
{
delay(1000);
if(k3==0)
{
count=1000;
}
}
if(k4==0)
{
delay(1000);
if(k4==0)
{
count=3000;
}
}
}
}
void time0(void) interrupt 1 using 0
{
static u16 i=0;
TH0=0xfc; //重新装入初值
TL0=0x18;
i++;
if(count==i)
{
i=0;
flag=1;
}
}