|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char zkb1=0 ;
//**左邊電機(jī)的占空比**//
unsigned char zkb2=0 ;
//**右邊電機(jī)的占空比**//
unsigned char t=0;
//**定時(shí)器中斷計(jì)數(shù)器**//
sbit LSEN1=P0^0;
sbit LSEN2=P0^1;
sbit MSEN1=P0^2;
sbit MSEN2=P0^3;
sbit RSEN1=P0^4;
sbit RSEN2=P0^5;
//**傳感器***/
sbit ENA=P1^5;
sbit IN1=P1^4;
sbit IN2=P1^3;
sbit IN3=P1^2;
sbit IN4=P1^1;
sbit ENB=P1^0;
//**********初始化定時(shí)器中斷***********//
void init()
{
TMOD=0x01;
TH0=(65536-10)/256;
TL0=(65536-10)%256;
EA=1;
ET0=1;
TR0=1;
}
//***********中斷函數(shù)+脈寬調(diào)制***********//
void timer0() interrupt 1
{
if(t>=50)
{
t=0;
}
if(t<zkb1)
ENA=1;
else
ENA=0;
if(t<zkb2)
ENB=1;
else
ENB=0;
t++;
}
//******************直行******************//
void qianjin()
{
zkb1=30;
zkb2=30;
}
//***************小左轉(zhuǎn)函數(shù)***************//
void turn_left1()
{ zkb1=10;
zkb2=25;
}
//***************中左轉(zhuǎn)函數(shù)***************//
void turn_left2()
{ zkb1=10;
zkb2=20;
}
//***************大左轉(zhuǎn)函數(shù)***************//
void turn_left3()
{ zkb1=5;
zkb2=25;
}
//***************小右轉(zhuǎn)函數(shù)***************//
void turn_right1()
{ zkb1=25;
zkb2=10;
}
//***************中右轉(zhuǎn)函數(shù)***************//
void turn_right2()
{
zkb1=20;
zkb2=10;
}
//***************大右轉(zhuǎn)函數(shù)***************//
void turn_right3()
{
zkb1=25;
zkb2=5;
}
//***************循跡函數(shù)*****************//
void xunji()
{
uchar flag;
if((LSEN1==1)&&(LSEN2==1)&&(MSEN1==0)&&(MSEN2==0)&&(RSEN1==1)&&(RSEN2==1))
{ flag=0; }
//*******直行*******//
else
if((LSEN1==1)&&(LSEN2==0)&&(MSEN1==0)&&((MSEN2==0)||(MSEN2==1))&&(RSEN1==1)&&(RSEN2==1))
{ flag=1; }
//******小左轉(zhuǎn)*******//
else
if((LSEN1==1)&&(LSEN2==1)&&((MSEN1==0)||(MSEN1==1))&&(MSEN2==0)&&(RSEN1==0)&&(RSEN2==1))
{ flag=2; }
//******小右轉(zhuǎn)*******//
else
if((LSEN1==0)&&(LSEN2==0)&&(MSEN1==0)&&((MSEN2==0)||(MSEN2==1))&&(RSEN1==1)&&(RSEN2==1))
{ flag=3; }
//*******中左轉(zhuǎn)*******//
else
if((LSEN1==1)&&(LSEN2==1)&&((MSEN1==0)||(MSEN1==1))&&(MSEN2==0)&&(RSEN1==0)&&(RSEN2==0))
{ flag=4; }
//*******中右轉(zhuǎn)*******//
else
if((LSEN1==0)&&((LSEN2==0)||(LSEN2==1))&&(MSEN1==1)&&(MSEN2==1)&&(RSEN1==1)&&(RSEN2==1))
{ flag=5; }
//*******大左轉(zhuǎn)*******//
else
if((LSEN1==1)&&(LSEN2==1)&&(MSEN1==1)&&(MSEN2==1)&&((RSEN1==0)||(RSEN1==1))&&(RSEN2==0))
{ flag=6; }
//*******大右轉(zhuǎn)*******//
switch (flag)
{
case 0:
qianjin();
break;
case 1:
turn_left1();
break;
case 2:
turn_right1();
break;
case 3:
turn_left2();
break;
case 4:
turn_right2();
break;
case 5:
turn_left3();
break;
case 6:
turn_right3();
break;
default: break;
}
}
//****************主程序****************//
void main()
{
init();
zkb1=30;
zkb2=30;
while(1)
{
qianjin();
}
}
|
|