void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
#if FOSC == 11059200L
for(j=0;j<114;j++);
#elif FOSC == 12000000L
for(j=0;j<123;j++);
#elif FOSC == 24000000L
for(j=0;j<249;j++);
#else
for(j=0;j<114;j++);
#endif
}
//ms延时函数
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
//***************************************顺时针转动
void MotorCW(void)
{
uchar i;
for(i=0;i<4;i++)
{
MotorData=phasecw[i];
Delay_xms(3);//转速调节
}
}
//*******************************************逆时针转动
void MotorCCW(void)
{
uchar i;
for(i=0;i<4;i++)
{
MotorData=phaseccw[i];
Delay_xms(3);//转速调节
}
}
//********************************************停止转动
void MotorStop(void)
{
MotorData=0x00;
}
//********************************************加速运动
void Moterspeed(void)
{ uchar i;
speed=30;
for(i=0;i<800;i++)
{ for(i=0;i<4;i++)
{
MotorData=phasecw[i];
Delay_xms(speed);//转速调节
}
speed--;
if(speed<4)
{
speed=30; //重新开始减速运动
MotorStop();
Delay_xms(500);
}
}
}
/*******************************************************************************
* 函 数 名 :main
* 函数功能 :主函数
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void main()
{ EA = 1;//总中断
IT0=1;
EX0 = 1; //使能 INT0 外部中断
IT0 = 1; // 触发方式为脉冲负边沿触发
IT1=1;
EX1 = 1; //使能 INT1 外部中断
IT1 = 1; // 触发方式为脉冲负边沿触发
TMOD=0x66;
TH0=0xff;
TL0=0xff;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
TH1=0xff;
TL1=0xff;
MotorStop();
while(1)
{
switch(m)
{
case 1: MotorCW();break; //反转
case 2: MotorCCW();break;//正转
case 3: MotorStop();break;//停止
case 4: Moterspeed();break;//加速
}
}
}
/*******************************************************************************
* 函 数 名 :Exit0Int
* 函数功能 :外部中断0 ISR
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void Exit0_Int() interrupt 0
{
Delayms(30); //延时30ms,去掉这行会出现按一下中断几次的情况
if(key1 == 0) //对按键进行抗干扰处理
{
LED1= !LED1;
m=3;
}
}
/*******************************************************************************
* 函 数 名 :Exit1Int
* 函数功能 :定时器中断0 ISR
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void Exit_1Int() interrupt 1
{
Delayms(30); //延时30ms,去掉这行会出现按一下中断几次的情况
if(key3 == 0) //对按键进行抗干扰处理
{
LED3= !LED3;
m=2;
Delayms(30);
}
}
/*******************************************************************************
* 函 数 名 :Exit2Int
* 函数功能 :外部中断0 ISR
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void Exit_2Int() interrupt 2
{
Delayms(30); //延时30ms,去掉这行会出现按一下中断几次的情况
if(key2 == 0) //对按键进行抗干扰处理
{
LED2 = !LED2;
m=1;
}
}
/*******************************************************************************
* 函 数 名 :Exit3Int
* 函数功能 :定时器中断1 ISR
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void Exit3_nt() interrupt 3
{
Delayms(30); //延时30ms,去掉这行会出现按一下中断几次的情况
if(key4== 0) //对按键进行抗干扰处理
{
LED4 = !LED4;
m=4;
}
}