?? 往復轉動.txt
字號:
/******************************************************************/
/*****************************************************************/
/*
/* 步進電機加減速運行程序
/* 步進電機啟動時,轉速由慢到快逐步加速。
/* 步進電機勻速運行
/* 步進電機由快到慢逐步減速到停止
/*
/******************************************************************/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
uchar code FFW[8]={0x03,0x09,0x0c,0x06,0x03,0x09,0x0c,0x06};//正轉數組
uchar code REV[8]={0x06,0x0c,0x09,0x03,0x06,0x0c,0x09,0x03};//反轉數組
uchar rate=0x40;
bit StartFlag=0;
sbit photoelectric_switch=P0^0;
/********************************************************/
/*
/* 延時
/* 11.0592MHz時鐘,
/*
/********************************************************/
void delay()
{
uchar k;
uint s;
k = rate;
do
{
for(s = 0 ; s <100 ; s++) ;
}while(--k);
}
void delay2(uchar k)
{
uchar s;
for(s = 0 ; s <k ; s++) ;
}
/********************************************************/
/*
/*步進電機正轉
/*
/********************************************************/
void motor_ffw()
{
uchar i;
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = FFW[i];//取數據
delay(); //調節轉速
}
}
/********************************************************/
/*
/*步進電機反轉
/*
/********************************************************/
void motor_rev()
{
uchar i;
for (i=0; i<8; i++) //一個周期轉30度
{
P1 = REV[i]; //取數據
delay(); //調節轉速
}
}
/********************************************************
*
* 主程序
*
*********************************************************/
main()
{
EA=1;EX0=1; //外部0中斷開
PX0=1;IT0=1; //高優先級脈沖觸發
while(1)
{
P1 = 0x00;//ULN2003輸出高電平
delay2(255);
do{ motor_ffw();
} while(StartFlag==0) ;
StartFlag=0;
do{ motor_rev();
} while(StartFlag==0) ;
StartFlag=0;
}
}
int0_srv() interrupt 0 using 0 //電機起始定位ISP
{ uint m;
for(m=0;m<10;m++); //延時
if(photoelectric_switch==0)
{ EX0=0; //關中斷0
StartFlag=1;
EX0=1 ; //開中斷
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -