文档库 最新最全的文档下载
当前位置:文档库 › 智能循迹避障小车C语言代码

智能循迹避障小车C语言代码

#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar tab[11]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
uchar array[4]={0X00};
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 P16=P1^6;
sbit P17=P1^7;
sbit P33=P3^3;
sbit P37=P3^7;
sfr WDT_CONTR=0Xe1;
uint line,flag_stop=1,flag_signal; //小车停止标志位 ,障碍物检测标志位
uint flag_zuo=0,flag_you=0; //偏离黑线标志位
uint number=0;
uint sec=0,min=0,count=0;//时间初始化
void leave(); //偏离黑线子程序
void display(); //显示程序
void modify(); //时间调整
void motor(); //电机控制子程序
void delay(); //延时子程序
void check(); //障碍物检测子程序
main()
{
WDT_CONTR=0X35; //看门狗
P0=0XC0;
P2=0X00;
P14=0,P15=1,P16=0,P17=1;
TMOD=0X11;
TH1=-5000/256;
TL1=-5000%256;
TH0=-25/256;
TL0=-25%256;
EA=1;
ET1=1;
ET0=1;
TR1=1;
while(1)
{

display();
P3=0Xff;
_nop_();
_nop_();
line=P3;
line=(line&0Xf8);
line=line/8;
if(line!=0X00)
{
if(line!=0X1f)
{
TR0=0;//停止定时器0
flag_stop=1;
if(P33==0||P37==0)
{
leave();
}
else
{
motor();
}
}
if(line==0X1f)
{
TR0=1;//启动定时器0
P14=0,P15=1,P16=0,P17=1;
check();
}
}
else
{
P14=1,P15=1,P16=1,P17=1;
flag_stop=0;
}
WDT_CONTR=0X35;//喂狗
}
}
void leave()
{
if(P33==0)
{
flag_you=1;
P14=1,P15=0,P16=0,P17=1;
}
else if(P37==0)
{
flag_zuo=1;
P14=0,P15=1,P16=1,P17=0;
}
}

void timer1(void) interrupt 3 //定时器1处于定时 1ms

{
TH1=-5000/256;
TL1=-5000%256;
if(flag_stop!=0)
{
count++;
}
if(count==200)
{
count=0X00;
sec++;
if(sec==60)
{
min++;
sec=0;
}
if(min==60)
{
min=0;
}
modify();
}
}
void timer0(void) interrupt 1 //发射超声波频率40KHz
{
TH0=-25/256;
TL0=-25%256;
number++;
if(number==2) //发射超声波
{
P11=0;
number=0;
}
else
P11=1;
}
void motor()
{
line=(line&0X0E);
line=line/2; //中间三路黑线
if(line==0X05)
{
flag_zuo=0;
flag_you=0;
P14=0,P15=1,P16=0,P17=1;
}
if(flag_zuo!=1&&flag_you!=1)
{
if(line==0X01||line==0X03)
{
P14=0,P15=1,P16=1,P17=1;
}
if(line==0X04||line==0X06)
{
P14=1,P15=1,P16=0,P17=1;
}
}
}
void modify()
{
array[0]=(sec%10);
array[1]=(sec/10);
array

[2]=(min%10);
array[3]=(min/10);
}
void display()
{
P0=tab[array[0]];
P2=0X01;
delay();
P2=0X00;
P0=tab[array[1]];
P2=0X02;
delay();
P2=0X00;
P0=tab[array[2]];
P2=0X04;
delay();
P2=0X00;
P0=tab[array[3]];
P2=0X08;
delay();
P2=0X00;
}
void delay()
{
uint i;
for(i=500;i>0;i--);
}
void check()
{
P10=1;
_nop_();
_nop_();
flag_signal=P10;
if(flag_signal==0) //检测到障碍物
{
P14=0,P15=1,P16=1,P17=1;
}
else
{
P14=0,P15=1,P16=0,P17=1;
}
}

相关文档
相关文档 最新文档