本帖最后由 robinsonlin 于 2020-7-24 16:51 编辑
理解你的需求,比写代码的时间还要长!!!
#define K1 P37
#define RELAY P36
unsigned long SysTick,T1,T2;
unsigned char Enable1,Enabel2,LowFlag;
void Timer0Init(void) //1毫秒@22.1184MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x9A; //设置定时初值
TH0 = 0xA9; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void main()
{
T1 = 0;
T2 = 0;
K1 = 0;
RELAY = 0;
Enable1 = 0;
Enable2 = 0;
LowFlag = 0;
Timer0Init() ;
EA = 1;
while(1)
{
if(K1==1 && Enalbe1==0)
{
T1 = SysTick;
Enable1 = 1;
}
else if(K1==0 && Enalbe1==1)
{
T1 = SysTick;
Enable1 = 1;
LowFlag = 1;
}
else if(K1==1 && LowFlag==1)
{
T1 = SysTick;
Enable1 = 1;
LowFlag = 0;
}
if((SysTick-T1)>=60000 && Enable1==1)
{
T2 = SysTick;
Enable1 = 0;
Enable2 = 1;
}
if((SysTick-T2)>=10000 && Enable2==1)
{
Enable2 = 0;
}
}
}
void tm0_isr() interrupt 1 //中断入口
{
SysTick++;
if(Enable1==1 && Enalbe2==0)RELAY = 1;
else RELAY = 0;
}
|