智能小汽车在PROTEUS下的仿真设计(避障)_智能避障小车设计
智能小汽车在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,=0;void delay(uint z)//延时函数 {
} 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中断函数 { uint x,y;for(x=z;x>0;x--)for(y=50;y>0;y--);TH0=(65536-20000)/256;//TH0装初值 TL0=(65536-20000)%256;//TL0装初值
tt++,=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(==1)
{
=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();//调用键盘扫描函数 } }
仿真电路图