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;
}
}