1、在主函数中,加while(1){ }和不加while(1){ }的问题,经实践试过,结果是一
样的,都是无限循环。那么可以不加while(1){ }吗?
2、如果不要循环,只要运行一次后停机,主函数该怎么写?
3、如果只要运行一次后停机,并且某个线圈继续通电,但电机不转(即把电机轴用电锁住不动)
,主函数又该怎么写?
*****
#include <reg51.h> //步进电机正反转运行程序
#define uchar unsigned char
#define uint unsigned int
uchar code up_data[8]={0xE,0xC,0xD,0x9,0xB,0x3,0x7,0x6}; //1相励磁正转表
uchar code down_data[8]={0X6,0X7,0X3,0XB,0X9,0XD,0XC,0XE};//1相励磁反转表
/********以下是延时函数********/
void Delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);表
}
/********以下是步进电机1相励磁**转函数********/
void motor_up(uint n)
{
uchar i;
uint j;
for (j=0; j<509*n; j++) //正转1圈
{
for (i=0; i<8; i++)
{
P1 = up_data;
Delay_ms(4);
}
}
}
/********步进电机1相励磁法反转函数********/
void motor_down(uint n)
{
uchar i;
uint j;
for (j=0; j<509*n; j++) //反转1圈
{
for (i=0; i<8; i++)
{
P1 = down_data;
Delay_ms(4);
}
}
}
/********以下是主函数********/
void main()
{
while(1) //此语句有或无效果都一样!
{
motor_up(1); //电机正转1圈
P1=0xff; //电机停转
Delay_ms(4000); //换向延时为4s
motor_down(1); //电机反转1圈
P1=0x00; //电机停转
Delay_ms(4000); //换向延时为4s
P1=0xff; //电机停转
Delay_ms(10000); //换向延时为10s
}
}
|