智能小汽车在PROTEUS下的仿真设计(避障)

智能小车在PROTEUS下的仿真设计

#include //头文件

#define uchar unsigned char //宏定义

#define uint unsigned int //宏定义

sbit IN1=P2^0;

sbit IN2=P2^1 ;

sbit IN3=P2^6; //定义驱动

sbit IN4=P2^7;

sbit EN1=P2^2 ;

sbit EN2=P2^5;

sbit C0=P0^0; //右1传感器

sbit C1=P0^1; //右2传感器

sbit C2=P0^2;//左2传感器

sbit C3=P0^3; //左2传感器

sbit STOP=P2^3;//障碍物传感器

sbit QQ=P2^4;//扬声器

uchar code table[]={0xbf,0x86,0x5b,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//定义表格

uchar si,fen,miao,shi,ge; //定义时:分:秒;和十位个位。uchar i,aa,bb, tt=0,ss=0;

void delay( uint z)//延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=50;y>0;y--);

}

void init( )//对函数初始化

{

TMOD=0x11;

TH0=(65536-20000)/256; //TH0装初值TL0=(65536-20000)%256; //TL0装初值TH1=(65536-2000)/256; //TH1装初值TL1=(65536-2000)%256; //TL1装初值EA=1;

ET0=1;

ET1=1; //开中断

TR0=1;

TR1=1;

P3=0x00;

P1=0x00;

}

void timer0() interrupt 1 //T0中断函数{

TH0=(65536-20000)/256; //TH0装初值TL0=(65536-20000)%256; //TL0装初值

tt++,ss=1;

if(tt==50)

{

tt=0;

miao++;

if(miao==60)

{

fen++;miao=0;

}

if(fen==24)

{

fen=0,si++;

}

}

}

void timer1() interrupt 3 //T1中断函数{

TH1=(65536-2000)/256; //TH1装初值

TL1=(65536-2000)%256; //TL1装初值

if(aa==i)

EN1=1;

}

if(bb==9) //产生PWM波

{

EN1=0,aa=0,bb=0;

}

aa++,bb++;

}

void keyscan()//键盘扫描

{

if(C0&&C1&&C2&&C3==1)

{

delay(6);

if(C0&&C1&&C2&&C3==1)

{

P3=0x00;

P1=0xbf;

EN2=1,EN1=1,IN1=1,IN2=1;ET1=0;

miao=0, fen=0, si=0;

while(C0&&C1&&C2&&C3==1);

}

}

void main ( )//主函数

{

IN1=1,IN2=0;EN2=1;

init( );//调用初始化函数

while(1)

{

P0=0XFF;

if(STOP==0) //有障碍物

{

EN2=1,EN1=1,IN1=1,IN2=1; ET1=0;QQ=0;

}

if(STOP==1)//无障碍物

{ QQ=1;

ET1=1;IN1=1,IN2=0;EN2=1;

if(C0|C1|C2|C3==0) //没有脱轨

{

i=2;

}

P0=0XFF;

if(C0|C1|C2|C3==1)//有脱轨

i=5;

if(C0==1) //右1传感器检测到黑线{

IN3=1, IN4=0;

delay(5);

IN3=0, IN4=0;

}

if(C1==1)//右2传感器检测到黑线

{

IN3=1, IN4=0;

delay(15);

IN3=0, IN4=0;

}

if(C3==1)//左1传感器检测到黑线{

IN3=0, IN4=1;

delay(5);

IN3=0, IN4=0;

}

if(C2==1)//左2传感器检测到黑线{

IN3=0, IN4=1;

delay(15);

IN3=0, IN4=0;

}

}

}

if(ss==1)

{

ss=0;

shi=miao/10;//分离秒的十位

ge=miao%10;//分离秒的个位

P3=0xdf;

P1=table[ge];//显示秒的个位

delay(5);

P3=0xef;

P1=table[shi];//显示秒的十位

delay(5);

shi=fen/10;//分离分的十位

ge=fen%10;//分离分的个位

P3=0xf7;

P1=table[ge];//显示分的个位

delay(5);

P3=0xfb;

P1=table[shi];//显示分的十位

delay(5);

shi=si/10;//分离时的十位

ge=si%10;//分离时的个位

P3=0xfd;

P1=table[ge];//显示时的个位

delay(5);

P3=0xfe;

P1=table[shi];//显示时的十位

delay(5);

}

keyscan ( );//调用键盘扫描函数}

}

智能小汽车在PROTEUS下的仿真设计(避障)

仿真电路图

相关推荐
相关主题
热门推荐