智能小车在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 ( );//调用键盘扫描函数} } 仿真电路图