📄 motormain.c
字号:
#include <at89x51.h>
#define uchar unsigned char
#define uint unsigned int
bit flag=0;
int last1=0;
int zhang=0;
sbit P10=P1^0;//后轮一,脉冲输入端
sbit P11=P1^1;
sbit P12=P1^2;//后轮二,脉冲输入端
sbit P13=P1^3;
sbit P14=P1^4;//前电机正转脉冲输入
sbit P15=P1^5;//前电机反转脉冲输入
sbit P30=P3^0; //控制外部中断二极管开关,主函数中打开,中断中关闭
sbit P35=P3^5;
sbit P36=P3^6; //左边寻迹传感器
sbit P37=P3^7; //右边寻迹传感器
/*******函数定义*************/
void delay();
void stop();
void last();
void main()
{uchar a=1000;
while(a--); //开机延时
TMOD=0X10;//开一个定时器1
ET1=1;
EX0=1;EX1=1;
IT0=0;IT1=0;
TR1=1;
P10=1;P11=1;P12=1;P13=1;//初值为0(硬件板相反,所以程序置1,硬件为0)
P14=0;P15=0;
TH1=0XB1;TL1=0XE0;//20ms
EA=1;
//if(last1==1){EX0=0;EX1=0;EA=0;
//last();
//P10=1;P11=1;P12=1;P13=1;P14=0;P15=0;}//停车
P30=1;//开二极管
while(last1!=1);
EX0=0;EX1=0;EA=0; //????????
last();
//stop();
P10=1;P11=1;P12=1;P13=1;P14=0;P15=0;//停车
while(1);
//EA=0; //出线后
//last();
//stop();
//while(1);
}
void timer2() interrupt 3 //定时器中断0 (后轮1 PWM输出),外部中断后前轮输出正转
{ if(flag==0) { P10=0; P12=0;TH1=0X15;TL1=0Xa0;} //60ms后轮92%占空比
if(flag==1) { P10=1; P12=1;TH1=0Xec;TL1=0X78;} //5ms
flag=~flag;
}
void inter0() interrupt 0 //外部中断0,遇到障碍用
{uchar i,j,h;
P30=0;//关二极管
P10=1;P11=1;P12=1;P13=1;//停车
for(i=0;i<44;i++)
for(j=0;j<25;j++)
for(h=0;h<250;h++)
{P14=1;P15=0;
}//正转,1.4s
for(i=0;i<16;i++)
for(j=0;j<25;j++)
for(h=0;h<250;h++)
{P14=0;P15=0;
} // 暂停,0.5s
if(zhang!=5) //已经是第五个障碍时,不放机械臂。
{for(i=0;i<44;i++)
for(j=0;j<25;j++)
for(h=0;h<250;h++)
{P14=0;P15=1;
}//反转 1.4s
zhang++;
}
if(zhang==5) //测试,可能不要!??????已经是第五个,直接拐出迹线,去车库
{ TR1=0;ET1=0; //关定时器
last1=1;
for(i=0;i<3;i++)
for(j=0;j<25;j++)
for(h=0;h<250;h++)
{P10=1;P11=0;P12=1;P13=0;}//退车,0.2s
}
for(i=0;i<8;i++)
for(j=0;j<25;j++)
for(h=0;h<250;h++){P30=1;}//开二极管,0.25s
}
void inter1() interrupt 2 //外部中断1 ,寻迹用
{ uchar q,n,p;
P36=1;P37=1;//读口准备
if(P36==0&&P37==1){P10=0;P11=1;P12=1;P13=1;}//左边一个传感器走出了迹线,右转,左电机运转
if(P36==1&&P37==0){P10=1;P11=1;P12=0;P13=1;}//右边传感器出线,左转,右电机运转
if(P36==0&&P37==0){ TR1=0;ET1=0; //关定时器
last1=1;
for(n=0;n<8;n++)
for(p=0;p<25;p++)
for(q=0;q<250;q++)
{P10=1;P11=0;P12=1;P13=0;}//退车,0.3s
//for(n=0;n<40;n++)//收起机械臂?????????
//for(p=0;p<25;p++)
//for(q=0;q<250;q++)
// {P14=1;P15=0;}
P10=1;P11=1;P12=1;P13=1;P14=0;P15=0; //停车,回主函数????????
}
}
/****
void delay()
{uchar k=10000,m=5;
while(k--);
while(m--);
}
void stop()
{ uchar u,v;
for(u=800;u--;u>0)
for(v=1000;v--;v>0)
{delay();P14=0;P15=1;} //前电机反转,收起机械臂
P10=1;P11=1;P12=1;P13=1;
P14=0;P15=0;
TR0=0;
EX0=0;
EX1=0;
EA=0;
}
****/
void last() //迹线走完后手动完成路程程序
{uchar x,z,y;
for(z=0;z<40;z++)//收起机械臂,1.2s
for(y=0;y<25;y++)
for(x=0;x<250;x++)
{P14=1;P15=0;}
for(z=0;z<55;z++)
for(y=0;y<25;y++)
for(x=0;x<250;x++)
{P10=1;P11=1;P12=0;P13=1;} //左转,1.8s
for(z=0;z<49;z++)
for(y=0;y<25;y++)
for(x=0;x<250;x++)
{P10=0;P11=1;P12=1;P13=1;} //右转,1.65s
for(z=0;z<128;z++)
for(y=0;y<25;y++)
for(x=0;x<250;x++)
{P10=0;P11=1;P12=0;P13=1;} //直行,4s
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -