#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code zheng[]={0xfc,0xf6,0xf3,0xf9 }; //2相勵磁正轉表
uchar code fan[]={0xf9,0xf3,0xf6,0xfc }; //2相勵磁反轉表
uchar code ting[]={0x00};
sbit k1=P3^0; //定義K1開關
sbit zheng_LED=P2^1 ;
sbit fan_LED=P2^2;
uint m=1;
void delay(uint x) //延時函數
{
uchar i;
while(x--) //i=x即延時約x毫秒
for(i=0;i<60;i++);
}
/********以下是步進電機正轉函數********/
void setp_motor_zheng(uchar n)
{ uchar i,j;
for(i=0;i<5*n;i++) //轉n圈
{
for(j=0;j<4;j++)
{
P1=zheng[j]; //取正轉數據
delay(250); //轉一個角度停留的時間,可調節轉速
}
}
}
/********以下是步進電機反轉函數********/
void setp_motor_fan(uchar n)
{ uchar i,j;
for(i=0;i<5*n;i++) //轉n圈
{
for(j=0;j<4;j++)
{
P1=fan[j]; //取反轉數據
delay(250); //轉一個角度停留的時間,可調節轉速
}
}
}
/********以下是行程開關中斷子程序********/
sbit k2=P3^1;
/********以下是主程序********/
void main(void)
{
while(m--) //電機轉m圈
{ if(k1==1) //K1送入高電平
{ delay(10);
if(k1==1)
{ zheng_LED=1;
fan_LED=0;
setp_motor_zheng(3); //調用電機正轉函數
}
}
else //K1送入低電平
{
delay(10);
zheng_LED=0;
fan_LED=1;
setp_motor_fan(3); //調用電機反轉函數
}
}
}
|