/******************************************/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define Speed 22
uint Iron_flag=0;
uint shizi=0,i,count=0;
uint shijian=0;
/***************************************
端口定义
****************************************/
sbit IN1=P1^0; //P1^0与电机IN1相连
sbit IN2=P1^1; //P1^1与电机IN2相连
sbit IN3=P1^2; //P1^2与电机IN3相连
sbit IN4=P1^3; //P1^3与电机IN4相连
sbit IN5=P1^4; //P1^4与电机IN5相连
sbit IN6=P1^5; //P1^5与电机IN6相连
sbit IN7=P1^6; //P1^6与电机IN7相连
sbit IN8=P1^7; //P1^7与电机IN8相连
sbit LC_1=P2^0; //P2^0与红外模块左边第一个灯相连
sbit LC_2=P2^1; //P2^1与红外模块左边第 二个灯相连
sbit MC=P2^2; //P2^2与红外模块中间的灯相连
sbit RC_2=P2^3; //P2^3与红外模块右边第二个灯相连
sbit RC_1=P2^4; //P2^4与红外模块右边第一个灯相连
sbit p32=P3^2; //P3^2与电磁铁反馈端连接
sbit p31=P3^1; //p3^1与电磁铁控制端连接
/***************************************
电机 各种运动时的数组
****************************************/
uchar code LG[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}; //左轮前转 右轮停止
uchar code RG[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //右轮前转 左轮停止
uchar code qianjin[]={0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99}; //全速前进
uchar code zuozhuan[]={0x91,0x83,0xc2,0x46,0x64,0x2c,0x38,0x19}; //向左高速转动
uchar code youzhuan[]={0x19,0x38,0x2c,0x64,0x46,0xc2,0x83,0x91}; //向右高速转动
uchar code tingzhi[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //停止
uchar code houtui[]={0x99,0x88,0xcc,0x44,0x66,0x22,0x33,0x11}; //后退
/***************************************
延时函数
****************************************/
void delay(uint z)
{
uint i ;
uchar j;
for(i=0; i<z; i++)
for(j=0; j<110; j++);
}
/***************************************
小车运动时的函数
****************************************/
void GO_h() //全速前进
{
uint i;
for(i=1;i<8;i++)
{
P1=qianjin[i];
delay(25);
}
}
void houtui_h() // 左轮前转 右轮停止
{
uint i;
for(i=1;i<8;i++)
{
P1=houtui[i];
delay(67);
}
}
void tingzhi_h() // 左轮前转 右轮停止
{
uint i;
for(i=1;i<8;i++)
{
P1=tingzhi[i];
delay(Speed);
}
}
void LG_h() // 左轮前转 右轮停止
{
uint i;
for(i=1;i<8;i++)
{
P1=LG[i];
delay(Speed);
}
}
void RG_h() // 右轮前转 左轮停止
{
uint i;
for(i=1;i<8;i++)
{
P1=RG[i];
delay(Speed);
}
}
void ZuoZhuan_h() //向左高速转动
{
uint i;
for(i=1;i<8;i++)
{
P1=zuozhuan[i];
delay(Speed);
}
}
void YouZhuan_h() // 向右高速转动
{
uint i;
for(i=1;i<8;i++)
{
P1=youzhuan[i];
delay(Speed);
}
}
void YouZhuan_h1() // 向右高速转动
{
uint i;
for(i=1;i<8;i++)
{
P1=youzhuan[i];
delay(50);
}
}
void daodui_h()
{
for(i=0;i<25;i++)
houtui_h();
}
/***************************************
小车循迹函数函数
****************************************/
void xunji_h()
{
if((LC_1==1&&LC_2==1&&MC==0&&RC_2==1&&RC_1==1)||(LC_1==1&&LC_2==0&&MC==0&&RC_2==0&&RC_1==1)||(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1))//直线
GO_h();
else if((LC_1==1&&LC_2==1&&MC==1&&RC_2==0&&RC_1==1)||(LC_1==1&&LC_2==1&&MC==0&&RC_2==0&&RC_1==1))//右转
LG_h(); // 右边小修正
else if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==0) //右边大修正
{
while(1)
{
YouZhuan_h();
if(MC==0)
break;
}
}
else if((LC_1==1&&LC_2==1&&MC==0&&RC_2==0&&RC_1==0)||(LC_1==1&&LC_2==1&&MC==1&&RC_2==0&&RC_1==0)) //右直角修正
{
while(1)
{
GO_h();
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
break;
}
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
{
while(1)
{
YouZhuan_h();
if(MC==0)
break;
}
}
}
else if((LC_1==1&&LC_2==0&&MC==1&&RC_2==1&&RC_1==1)||(LC_1==1&&LC_2==0&&MC==0&&RC_2==1&&RC_1==1)) // 左转
RG_h(); //左边小修正
else if (LC_1==0&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1) // 左边大修正
{
while(1)
{
ZuoZhuan_h();
if(MC==0)
break;
}
}
else if((LC_1==0&&LC_2==0&&MC==0&&RC_2==1&&RC_1==1)||(LC_1==0&&LC_2==0&&MC==1&&RC_2==1&&RC_1==1))// 左直角修正
{
while(1)
{
GO_h();
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
break;
}
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
{
while(1)
{
ZuoZhuan_h();
if(MC==0)
break;
}
}
}
if(LC_1==0&&MC==0)
{
if((LC_1==0&&LC_2==1&&MC==0&&RC_2==1&&RC_1==1)||(LC_1==0&&LC_2==1&&RC_2==0&&RC_1==1))
{
while(1)
{
GO_h();
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
break;
}
}
if(LC_1==0&&LC_2==0&&MC==0&&RC_2==0&&RC_1==0)
{
{
while(1)
{
GO_h();
if((LC_1==1&&LC_2==0&&MC==1&&RC_2==1&&RC_1==1)||(LC_1==1&&LC_2==0&&MC==0&&RC_2==1&&RC_1==1)) // 左转
RG_h();
if((LC_1==1&&LC_2==1&&MC==1&&RC_2==0&&RC_1==1)||(LC_1==1&&LC_2==1&&MC==0&&RC_2==0&&RC_1==1))//右转
LG_h();
if((LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)||(LC_1==1&&LC_2==1&&MC==0&&RC_2==1&&RC_1==1))
break;
}
}
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
{
while(1)
{
tingzhi_h();
}
}
}
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
{
while(1)
{
ZuoZhuan_h();
if(MC==0)
break;
}
}
}
if(RC_1==0&&MC==0)
{
if((LC_1==1&&LC_2==1&&MC==0&&RC_2==1&&RC_1==0)||(LC_1==1&&LC_2==0&&RC_2==1&&RC_1==0))
{
while(1)
{
GO_h();
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1 )
break;
}
}
if(LC_1==0&&LC_2==0&&MC==0&&RC_2==0&&RC_1==0)
{
{
while(1)
{
GO_h();
if((LC_1==1&&LC_2==0&&MC==1&&RC_2==1&&RC_1==1)||(LC_1==1&&LC_2==0&&MC==0&&RC_2==1&&RC_1==1)) // 左转
RG_h();
if((LC_1==1&&LC_2==1&&MC==1&&RC_2==0&&RC_1==1)||(LC_1==1&&LC_2==1&&MC==0&&RC_2==0&&RC_1==1))//右转
LG_h();
if((LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)||(LC_1==1&&LC_2==1&&MC==0&&RC_2==1&&RC_1==1) )
break;
}
}
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
{
while(1)
{
tingzhi_h();
}
}
}
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
{
while(1)
{
YouZhuan_h();
if(MC==0)
break;
}
}
}
}
void start_h()
{
if(LC_1==1&&LC_2==1&&MC==1&&RC_2==1&&RC_1==1)
{ while(1)
{
GO_h();
if(LC_1==0&&LC_2==0&&MC==0&&RC_2==0&&RC_1==0)
break;
}
if(LC_1==0&&LC_2==0&&MC==0&&RC_2==0&&RC_1==0)
{
delay(6000);
delay(6000);//延时大约3秒
delay(6000);
while(1)
{
GO_h();
if((LC_1==1&&LC_2==0&&MC==1&&RC_2==1&&RC_1==1)||(LC_1==1&&LC_2==0&&MC==0&&RC_2==1&&RC_1==1)) // 左转
RG_h();
if((LC_1==1&&LC_2==1&&MC==1&&RC_2==0&&RC_1==1)||(LC_1==1&&LC_2==1&&MC==0&&RC_2==0&&RC_1==1))//右转
LG_h();
if(LC_1==1&&LC_2==1&&MC==0&&RC_2==1&&RC_1==1)
break;
}
}
}
}
void timer_0_init(void)
{
Arduino步进电机库函数
1星 需积分: 45 28 浏览量
2013-11-09
13:19:57
上传
评论 2
收藏 57KB RAR 举报
张涵123
- 粉丝: 0
- 资源: 3