📄 start.c
字号:
#include<reg51.h>
#include<start.h>
#include<key.h>
void delay500us(float count) //100us*count
{
unsigned int i,j;
for(j=0;j<count;j++)
for(i=0;i<17;i++)
;
}
////////////////////////刹车、反转、正转都可以写成函数
void shache(void)
{
P2_2=1;
P2_0=1;
P2_5=1;
P2_4=1; //两个电机刹停
P2_2=1;
P2_0=1;
P2_5=1;
P2_4=1;
}
void zheng(float a)
{
float z=a;
P2_2=1;
P2_0=0;
P2_5=1;
P2_4=0;
delay500us(z); //正转
P2_2=0;
P2_0=0;
P2_5=0;
P2_4=0;
delay500us(z);
}
void fan(float b)
{
float z=b;
P2_2=0;
P2_0=1;
P2_5=0;
P2_4=1;
delay500us(z);
P2_2=0;
P2_0=0;
P2_5=0;
P2_4=0;
delay500us(z);
}
void maichong0(unsigned int x,unsigned int y,float z) //x和y分别是脉冲的周期个数,z是脉冲的周期
{
float a;
z=2000*z;//计算count
a=z; // 500us*count
P2_1=1; //两个使能端有效;
P2_3=1;
if(zhengbujin==1||fanbujin==1)
{
if(zhengbujin==1) //先正传后反转
{
unsigned int j;
for(j=0;j<x;j++) //正传
{
zheng(a);
}
shache();
for(j=0;j<y;j++) //反转
{
fan(a);
}
}
else if(fanbujin==1) //先反后正
{
unsigned int j;
for(j=0;j<y;j++) //反传
{
fan(a);
}
shache();
for(j=0;j<x;j++) //正转
{
zheng(a);
}
}
}
else if(zhengjuli==1||fanjuli==1)
{
if(zhengjuli==1) //先正传后反转
{
unsigned int j;
for(j=0;j<x;j++) //正传
{
zheng(a);
}
shache();
for(j=0;j<y;j++) //反转
{
fan(a);
}
}
else if(fanjuli==1)//先反后正
{
unsigned int j;
for(j=0;j<y;j++) //反传
{
fan(a);
}
shache();
for(j=0;j<x;j++) //正转
{
zheng(a);
}
}
}
}
void startset(void)
{
float sudu;
switch(csudu)
{
case 1: sudu=1.0;break;
case 2: sudu=2.0;break;
case 3: sudu=3.0;break;
case 4: sudu=4.0;break;
case 5: sudu=5.0;break;
case 6: sudu=6.0;break;
case 7: sudu=7.0;break;
case 8: sudu=8.0;break;
case 9: sudu=9.0;break;
default:break;
}
if(zhengbujin==1||fanbujin==1)
{
sudu=0.45/(sudu*20);//求得高电平低电平的时间
maichong0(czhengbujin,cfanbujin,sudu);
}
else if(zhengjuli==1 || fanjuli==1)
{
unsigned int czhengjuli0=czhengjuli*10/0.45; //把距离转化成步数
unsigned int cfanjuli0=cfanjuli*10/0.45; //把距离转化成步数,一步就是一个周期的脉冲
sudu=0.45/(sudu*20);//求得高电平低电平的时间
maichong0(czhengjuli0,cfanjuli0,sudu) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -