#include "reg52.h"
#define speed 2
/*******************定义脉冲及方向管脚****************************/
***it PH1 = P1^0;//主轴输出脉冲
***it zhuzhoucw = P1^1;
***it PH2 =P1^2;//排线输出脉冲
***it paixiancw = P1^3;
***it once =P1^4;
/*******************定义主轴电机控制键管脚****************************/
***it keystart = P3^0;
***it keystop = P3^1;
***it key_addspeed =P3^2;
***it key_decspeed =P3^3;
/*******************定义排线电机控制键管脚****************************/
***it keyleft =P3^4;
***it keyright =P3^5;
***it key_adddepth =P3^6;
***it key_decdepth =P3^7;
/*******************定义全局变量及函数****************************/
int num=0; //num为主轴电机挡位计数中的变量
int depth=1; //depth为排线电机宽度函数中的变量
void delay(int time);
void Delay10ms(unsigned int c);
void run(int y);
/******************************************************************/
/*******************主轴电机调用函数说明***************************/
/******************************************************************/
/*******************主轴电机转速调节函数说明***************************/
void Go(int x)
{
while(1)
{
PH1 = 0;
delay(x);
PH1 = 1;
delay(x);
if(keystop==0)
{
break;
}
if(once==0)
{
if(depth==0)
{run(100);} //排线电机转90°
if(depth==1)
{run(200);} //排线电机转180°
if(depth==2)
{run(300);} //排线电机转270°
if(depth==3)
{run(400);} //排线电机转360°
}
}
}
/*******************主轴电机脉冲延时函数说明***************************/
void delay(int time)
{
int i,j;
for(j=0; j <= time; j++)
for(i =0 ; i <= 5; i++);
}
/*******************主轴电机转速挡位计数函数****************************/
void zhuzhounum()
{
while(1)
{
if(key_addspeed==0)
{
Delay10ms(1);
if(key_addspeed==0)
{
num++;
if(num>=3)
{
num=3;
}
while(key_addspeed==0);
}
}
if(key_decspeed==0)
{
Delay10ms(1);
if(key_decspeed==0)
{
num--;
if(num<=0)
{
num=0;
}
while(key_decspeed==0);
}
}
if(keystart==0)
{
Delay10ms(1);
if(keystart==0)
{break;}
}
}
}
/*******************消抖延时函数****************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
/******************************************************************/
/*******************排线电机调用函数说明***************************/
/******************************************************************/
/***************************************排线电机宽度调节说明**************************************/
void run(int y)
{
for(y=y;y>0;y--)
{
PH2 = 0;
delay(5);
PH2 = 1;
delay(5);
}
}
/*******************排线电机宽度计数函数****************************/
void paixiandepth()
{
while(1)
{
if(key_adddepth==0)
{
Delay10ms(1);
if(key_adddepth==0)
{
depth++;
if(depth>=3)
{
depth=3;
}
while(key_adddepth==0);
}
}
if(key_decdepth==0)
{
Delay10ms(1);
if(key_decdepth==0)
{
depth--;
if(depth<=0)
{
depth=0;
}
while(key_decdepth==0);
}
}
if(keystart==0)
{
Delay10ms(1);
if(keystart==0)
{break;}
}
}
}
/*******************排线电机方向数函数****************************/
void paixianfangxiang()
{
while(1)
{
if(keyleft==0)
{
break;
}
if(keyright==0)
{paixiancw=0;
break;
}
}
}
/*******************主函数****************************/
void main()
{
zhuzhounum();
paixianfangxiang();
paixiandepth();
while(1)
{
if(num==0)
{
{Go(5);} //主轴电机以速度1运行
break;
}
if(num==1)
{
{Go(10);} //主轴电机以速度2运行
break;
}
if(num==2)
{
{Go(15);} //主轴电机以速度3运行
break;
}
if(num==3)
{
{Go(20);} //主轴电机以速度4运行
break;
}
}
}
#include "reg52.h"
#define speed 2
/*******************定义脉冲及方向管脚****************************/
***it PH1 = P1^0;//主轴输出脉冲
***it zhuzhoucw = P1^1;
***it PH2 =P1^2;//排线输出脉冲
***it paixiancw = P1^3;
***it once =P1^4;
/*******************定义主轴电机控制键管脚****************************/
***it keystart = P3^0;
***it keystop = P3^1;
***it key_addspeed =P3^2;
***it key_decspeed =P3^3;
/*******************定义排线电机控制键管脚****************************/
***it keyleft =P3^4;
***it keyright =P3^5;
***it key_adddepth =P3^6;
***it key_decdepth =P3^7;
/*******************定义全局变量及函数****************************/
int num=0; //num为主轴电机挡位计数中的变量
int depth=1; //depth为排线电机宽度函数中的变量
void delay(int time);
void Delay10ms(unsigned int c);
void run(int y);
/******************************************************************/
/*******************主轴电机调用函数说明***************************/
/******************************************************************/
/*******************主轴电机转速调节函数说明***************************/
void Go(int x)
{
while(1)
{
PH1 = 0;
delay(x);
PH1 = 1;
delay(x);
if(keystop==0)
{
break;
}
if(once==0)
{
if(depth==0)
{run(100);} //排线电机转90°
if(depth==1)
{run(200);} //排线电机转180°
if(depth==2)
{run(300);} //排线电机转270°
if(depth==3)
{run(400);} //排线电机转360°
}
}
}
/*******************主轴电机脉冲延时函数说明***************************/
void delay(int time)
{
int i,j;
for(j=0; j <= time; j++)
for(i =0 ; i <= 5; i++);
}
/*******************主轴电机转速挡位计数函数****************************/
void zhuzhounum()
{
while(1)
{
if(key_addspeed==0)
{
Delay10ms(1);
if(key_addspeed==0)
{
num++;
if(num>=3)
{
num=3;
}
while(key_addspeed==0);
}
}
if(key_decspeed==0)
{
Delay10ms(1);
if(key_decspeed==0)
{
num--;
if(num<=0)
{
num=0;
}
while(key_decspeed==0);
}
}
if(keystart==0)
{
Delay10ms(1);
if(keystart==0)
{break;}
}
}
}
/*******************消抖延时函数****************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
/******************************************************************/
/*******************排线电机调用函数说明***************************/
/******************************************************************/
/***************************************排线电机宽度调节说明**************************************/
void run(int y)
{
for(y=y;y>0;y--)
{
PH2 = 0;
delay(5);
PH2 = 1;
delay(5);
}
}
/*******************排线电机宽度计数函数****************************/
void paixiandepth()
{
while(1)
{
if(key_adddepth==0)
{
Delay10ms(1);
if(key_adddepth==0)
{
depth++;
if(depth>=3)
{
depth=3;
}
while(key_adddepth==0);
}
}
if(key_decdepth==0)
{
Delay10ms(1);
if(key_decdepth==0)
{
depth--;
if(depth<=0)
{
depth=0;
}
while(key_decdepth==0);
}
}
if(keystart==0)
{
Delay10ms(1);
if(keystart==0)
{break;}
}
}
}
/*******************排线电机方向数函数****************************/
void paixianfangxiang()
{
while(1)
{
if(keyleft==0)
{
break;
}
if(keyright==0)
{paixiancw=0;
break;
}
}
}
/*******************主函数****************************/
void main()
{
zhuzhounum();
paixianfangxiang();
paixiandepth();
while(1)
{
if(num==0)
{
{Go(5);} //主轴电机以速度1运行
break;
}
if(num==1)
{
{Go(10);} //主轴电机以速度2运行
break;
}
if(num==2)
{
{Go(15);} //主轴电机以速度3运行
break;
}
if(num==3)
{
{Go(20);} //主轴电机以速度4运行
break;
}
}
}
举报