这个不难,用1个全局变量作为交替标识,我没在家上,这里没U4,没法给你写全,我随便写一段,你自己多琢磨就明白了
unsigned char i; //这个是全局变量
void main()
{
i=0;
while(1)
{
}
}
//你可以设定定时器累加时间到3秒执行一次,这里我就不细写了
//比方30毫秒加一,到3000毫秒就是3秒的意思
void init0() interropt 1 //这里是定时器0的中断,至于定时时间设置,你就自己设置吧
{ //假设P11是1个灯,P12也是个灯,0是开灯
ET0=0; //关掉
if(i==0)
{
P11=0; //假设P11是1个灯,0是开灯
Delay(10); //假设这里是延时10秒,这样,P11就这个灯就开了1秒
P11=1; //这里P11关灯
}
else
{
P12=0; 如果i不是等于0,那么开的就是第二个灯
Delay(8); 此处延时8秒,当然你也可以用定时器1来定时,无非就是多个标识变量
P12=1;
}
i=~i; //把标识取反
TH0=XXX; //此处请自己设置时间
TL0=XXX; //此处请自己设置时间
ET0=1; //打开定时器
}
ORG 0000H
LJMP START ;
ORG 001BH ;T1中断入口地址
PUSH PSW ;保护现场
MOV TL0,#18H;
MOV TH0,#0FCH;定时器0定时时间=1000X2uS
CPL MYBIT
MOV C,MYBIT
MOV P1.0,C
CPL C
MOV P1.1,C
POP PSW
RETI ;
;
ORG 0100H
MYBIT EQU 00H
START: MOV TMOD,#10H;定时器1工作于方式1,16位定时器
MOV TL1,#18H;
MOV TH1,#0FCH;定时器1定时时间=1000X2uS
SETB TR1;开启定时器1
;
SETB ET1;能定时器1中断
SETB TR1;开启定时器1
SETB EA;开放总中断
;
QQQQ: LJMP QQQQ
END
定时器作为时基,例如定时50ms,每50ms中断一次变量a加1,然后主程序中不停地判断变量的值,作出相应的开停动作,如果够1个完整的循环,则变量清0
主程序中一直执行类似这样的语句
if (a=10).....
if (a=30.)...
需要给你完成一份吗
输出什么?