51单片机一个按键控制2个灯产生四种状态

#include
#define unchar unsigned char
#define unint unsigned int
sbit key=P3^7;
sbit Light1=P1^1;
sbit Light2=P1^2;//定义独立键盘,定义小灯1、2
bit flag=1;//定义控制运行符
unchar Mod;//定义亮灯模式
unint tt;//定义中断次数
void Init_Mod() //初始化函数
{
Mod=0;
Light1=0;
Light2=0;
}
void Init_Timer()
{
TMOD=0x01;
TR0=1;
EA=1;
ET0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}

void delay(unint z)//延时函数,延时z(ms)
{
unint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Input_Mod()//状态模式标记函数
{
if(Mod==4)
Mod=0;
if(key==0)
{
delay(5);
if(key==0) //延时消抖
Mod++;//按键次数标记
}
while(!key)//松手检测(容易忘记= =)
{; ;}
}

void run()//4种模式下的执行
{
switch(Mod)
{
case 0:{ET0=0;Light1=0;Light2=0;}break; //全亮
case 1:{ET0=1;}break; //同步闪烁
case 2:{ET0=0;Light1=1;Light2=1;}break; //全灭
case 3:{ET0=0;Light1=1;Light2=0;ET0=1;}break; //异步闪烁
}
}
void main()
{
Init_Mod();
Init_Timer();
while(1)
{
Input_Mod();
if(flag==1) //flag 控制run的运行
{
run();
if(Mod==1||Mod==3)
flag=0;
}
if(Mod==0||Mod==2)
flag=1;
}
}
void Timer_interrupt(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)//1s的变换间隔
{
tt=0;
Light1=~Light1;
Light2=~Light2;
}
}

相关文档
最新文档