|
uchar min=0; //定義分鐘和秒變量
uchar jizhun=0;
/* 定義編碼開關(guān)控制引腳 */ //中間腳(第2腳)接地
sbit CodingsWitch_B=P3^3; //A腳定義(即1腳) 這兩腳必須接10K上拉電阻
sbit CodingsWitch_A=P3^4; //B腳定義(即3腳)
/********以下是步進(jìn)電機(jī)1相勵(lì)磁法正轉(zhuǎn)函數(shù)********/
void motor_up(uint n)
{
uchar i;
uint j;
for (j=0; j<1*n; j++) //轉(zhuǎn)n圈
{
for (i=0; i<4; i++) //4次共轉(zhuǎn)7.5°×4=30度,這樣,轉(zhuǎn)12次可轉(zhuǎn)360°(即1圈)
{
P1 = up_data[i]; //取正轉(zhuǎn)數(shù)據(jù)
Delay_ms(3); //轉(zhuǎn)一個(gè)角度停留的時(shí)間,可調(diào)節(jié)轉(zhuǎn)速
}
}
}
/********步進(jìn)電機(jī)1相勵(lì)磁法反轉(zhuǎn)函數(shù)********/
void motor_down(uint n)
{
uchar i;
uint j;
for (j=0; j<1*n; j++) //轉(zhuǎn)n圈
{
for (i=0; i<4; i++) //4次共轉(zhuǎn)7.5°×4=30度,這樣,轉(zhuǎn)12次可轉(zhuǎn)360°(即1圈)
{
P1 = down_data[i]; //取反轉(zhuǎn)數(shù)據(jù)
Delay_ms(3); //轉(zhuǎn)一個(gè)角度停留的時(shí)間,可調(diào)節(jié)轉(zhuǎn)速
}
}
}
/********************旋轉(zhuǎn)編碼開關(guān)判斷函數(shù)***********************************************/
void CodingsWitch(void)
{
static uchar Aoid,Boid;
static uchar st=0;
if(CodingsWitch_A&&CodingsWitch_B)
st=1;
if(st)
{
if(CodingsWitch_A==0&&CodingsWitch_B==0)
{
if(Boid)
{
st=0;
if(min>=90)
min=90;
else
min++;
}
if(Aoid)
{
st=0;
if(min<1)
min=0;
else
min--;
}
}
}
Aoid=CodingsWitch_A;
Boid=CodingsWitch_B;
}
//以下是編碼器控制步進(jìn)電機(jī)方法
CodingsWitch(); //調(diào)旋轉(zhuǎn)編碼開關(guān)函數(shù)
if(min>jizhun)
{
motor_up(min-jizhun);
jizhun=min;
}
if(min<jizhun)
{
motor_down(jizhun-min);
jizhun=min;
} |
評(píng)分
-
查看全部評(píng)分
|