第3个回答 2012-03-02
例子:
/*上电LED处于灭状态,按1次开关,快闪1秒4次;按2次慢闪1秒2次;按3次常亮;按4次灭;功能循环*/
#include<reg51.h>
sbit LED1=P1^2;
sbit LED2=P1^6;
sbit KEY=P3^7;
unsigned int time;
unsigned char program;
void Delayms(unsigned int ms)
{
unsigned int i=1000;
for(;ms>0;ms--)
for(i=500;i>0;i--);
}
void t0()interrupt 1 using 1
{
if(program==0)//mie
{
LED1=LED2=1;
}
else if(program==1)//KUAI
{
time++; //10ms加1
if(time>25) //250ms
{
time=0;
LED1=LED2=!LED1;
}
}
else if(program==2)//man
{
time++;//10ms加1
if(time>50)//500ms
{
time=0;
LED1=LED2=!LED1;
}
}
else if(program==3)//liang
{
LED1=LED2=0;
}
TH0=216;//TH0=(65536-10240)/256 10ms中断1次
}
void main()
{
bit keyflag=0; //标志位 1按下 0放开
TMOD=0X11;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if((KEY==0)&&(keyflag)==0)
{
Delayms(10);
if(program<3)program++;//按下次数
else program=0;
keyflag=1;
}
else if(KEY)
{
keyflag=0;
Delayms(10);
}
}
}
/**************************************************************/
void time1()interrupt 3 using 2
{
TH1=(65536-10000)/256; //10ms
TL1=(65536-10000)%256;
num1++;
num2++;
num3++;
if(num1>=30) //30ms
{
num1=0;
flag2=1;
}
else if(num2>=50) //50ms
{
num2=0;
flag1=1;
}
else if(num3>=60) //60ms
{
num3=0;
flag3=1;
}
}
//执行第1个命令...
if(flag1==1) ...清零num1,num2,num3
//执行第2个命令...
else if(flag2==1) ... 清零num1,num2,num3
//执行第3个命令...
elseif(flag3==1) ...清零num1,num2,num3