|
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN1=P1^1; //電機1
sbit IN2=P1^2;
sbit IN3=P0^1; //電機2
sbit IN4=P0^2;
sbit IN5=P1^3; //電機3
sbit IN6=P1^4;
sbit IN7=P0^3; //電機4
sbit IN8=P0^4;
sbit found1=P1^6; //紅外對管
sbit found2=P1^7;
sbit found3=P3^4;
/****************電機控制函數(shù)****************/
void forward1() //電機1前進
{
IN1=1;
IN2=0;
}
void forward2() //電機2前進
{
IN3=0;
IN4=1;
}
void forward3() //電機3前進
{
IN5=0;
IN6=1;
}
void forward4() //電機4前進
{
IN7=0;
IN8=1;
}
void back1() //電機1后退
{
IN1=0;
IN2=1;
}
void back2() //電機2后退
{
IN3=1;
IN4=0;
}
void back3() //電機3后退
{
IN5=1;
IN6=0;
}
void back4() //電機4后退
{
IN7=1;
IN8=0;
}
/****************電機開關(guān)函數(shù)****************/
void stop1() //電機1關(guān)閉
{
IN1=0;
IN2=0;
}
void stop2() //電機2關(guān)閉
{
IN3=0;
IN4=0;
}
void stop3() //電機3關(guān)閉
{
IN5=0;
IN6=0;
}
void stop4() //電機4關(guān)閉
{
IN7=0;
IN8=0;
}
/**********************主函數(shù)**********************/
void main()
{
while(1)
{
if(found1==0&&found2==0&&found3==0) //000 三個LED均未檢測到黑線 小車后退
{back3();back4();stop1();stop2();}
if(found1==0&&found2==1&&found3==0) //010 第二個LED檢測到黑線 小車前進
{forward1();forward2();stop3();stop4();}
/******************小車左轉(zhuǎn)******************/
if(found1==1&&found2==1&&found3==0) //110 一、二LED檢測到黑線 小車左大轉(zhuǎn)
{back1();forward2();stop3();stop4();}
if(found1==1&&found2==0&&found3==0) //100 第一個LED檢測到黑線 小車左轉(zhuǎn)
{back1();forward2();stop3();stop4();}
/******************小車右轉(zhuǎn)******************/
if(found1==0&&found2==1&&found3==1) //011 二、三LED檢測到黑線 小車右大轉(zhuǎn)
{back2();forward1();;stop3();stop4();}
if(found1==0&&found2==0&&found3==1) //001 第三個LED檢測到黑線 小車右轉(zhuǎn)
{back2();forward1();stop3();stop4();}
/**************LED檢測到全黑情況的處理**************/
if(found1==1&&found2==1&&found3==1) //111 三個LED均檢測到黑線 小車前進
{forward1();forward2();stop3();stop4();}
}
}
|
|