C语言直流电机控制主程序.docx
main.c
#includeat89x52.h
#includeintrins.h
#includemain.h
bitMoto_Dir=0;
ucharirq_count;
ucharirq_count_t;
ucharPWM_TIME_H,PWM_TIME_L;
biti=0;
/***********************短延时***************************/
voidShortDelay(void)
{ucharx,y;
for(x=0;x5;x++)
for(y=0;y125;y++)
_Nop();
return;
}
/************************主函数***************************/
voidmain(void)
{
PWM1=0;PWM2=0;PWM3=1;PWM4=1;
irq_count=0;
i=0;
PWM_TIME_H=80;
PWM_TIME_L=20;
ET1=1;//T1使能
TMOD=0x11;//T1都为方式1计时*/
TH1=0xFC;TL1=0x18;//T1初值
TR1=1;//定时器启动
EA=1;//开全局中断
while(1)
{//**************按键处理**************************/
if(LEFT_KEY)
{ShortDelay();
if(LEFT_KEY)//延时去抖
{
Moto_Dir=1;
PWM3=0;PWM4=1;
}//endif(LEFT_KEY)
while(LEFT_KEY);
}//endif(LEFT_KEY)
if(RIGHT_KEY)
{ShortDelay();
if(RIGHT_KEY)//延时去抖
{
Moto_Dir=0;
PWM3=1;PWM4=0;
}//endif(RIGHT_KEY)
while(RIGHT_KEY);
}//endif(RIGHT_KEY)
if(UP_KEY)
{ShortDelay();
if(UP_KEY)//延时去抖
{
if(PWM_TIME_H70)
{
PWM_TIME_H--;
PWM_TIME_L=100-PWM_TIME_H;
}
}//endif(UP_KEY)
while(UP_KEY);
}//endif(UP_KEY)
if(DOWN_KEY)
{ShortDelay();
if(DOWN_KEY)//延时去抖
{
if(PWM_TIME_H96)
{
PWM_TIME_H++;
PWM_TIME_L=100-PWM_TIME_H;
}
}//endif(DOWN_KEY)
while(DOWN_KEY);
}//endif(DOWN_KEY)
}//endwhile(1)
}
//T1定时器中断发PWM脉冲
voidtimer1(void)interr