- //每次的转向角度可以通过延时的时间来控制
- #include<reg51.h>
- sbit cgl=P1^2;//左传感器
- sbit cgr=P1^1;//右传感器
- sbit l1=P0^1;//左边轮子
- sbit l2=P0^2;
- sbit r3=P0^3;//右边轮子
- sbit r4=P0^4;
- unsigned int m;
- void delay(unsigned int t)//延时tms
- {
- unsigned i,j;
- for(i=0;i<t;i++)
- for(j=0;j<120;j++);
- }
- void left() //左边有障碍物,往右拐
- {
- l1=0;l2=0;r3=0;r4=0;delay(300);//保护电机,急停然而改变转向
- l1=0;l2=1; //后退
- r3=0;r4=1;
- delay(400);//拐弯的延时控制拐弯的幅度
- l1=0;l2=0;r3=0;r4=0;delay(300);
- l1=1;l2=0;//向右拐
- r3=0;r4=1;
- delay(600);
- l1=0;l2=0;r3=0;r4=0;delay(300);
- }
- void right() //右边有障碍物,往左拐
- {
- l1=0;l2=0;r3=0;r4=0;delay(300);
- l1=0;l2=1; //后退
- r3=0;r4=1;
- delay(400);
- l1=0;l2=0;r3=0;r4=0;delay(300);
- l1=0;l2=1;//向左拐
- r3=1;r4=0;
- delay(600);
- l1=0;l2=0;r3=0;r4=0;delay(300);
- }
- void cg()interrupt 0 //与门输出控制中断
- {
- if (cgl==0)m=1;
- if (cgr==0)m=2;
- }
- void main()
- {
- //P1=0xff;//初始化P1
- EA=1;
- EX0=1;
- IT0=1;
- while(1)
- {
- l1=1;l2=0; //前进
- r3=1;r4=0;
- switch(m)
- {
- case(1):left(); m=0;break;//右拐
- case(2):right();m=0;break;//左拐
- default:l1=1;l2=0; //前进
- r3=1;r4=0; break;
- }
- }
- }
复制代码
|