1、 - 1 - 蓝牙控制/延时 void go_forward(); /前走 void go_back();/后退 - 17 - void turn_left();/左转 void turn_right();/右转 void stop(); /停 void main(void) uchar xdata rcvdata1; EA=1; /开启总中断 SCON = 0x50; /串口方式1,允许接收 TMOD=0X21; TH1 = 0xFD; /11.0592MHZ 9600 波特率 TL1 = 0xFD; TR1 = 1; /启动定时器1 EX0=1; /开启外部中断 0,即P32引脚 IT0=
2、0; /设置成 低电平触发方式,IT0=1为下降沿触发 - 18 - PWM1=0;/防止小车上电就开始跑 PWM2=0; while(1) rcvdata0=0; if(RI) rcvdata0=SBUF;/把接收到的数据保存 RI=0; SBUF=rcvdata0; if(SBUF=1) go_forward(); if(SBUF=2) go_back(); if(SBUF=3) turn_left(); if(SBUF=4) turn_right(); if(SBUF=5) - 19 - stop(); /把收到的数据通过串口发送出去 while(!TI); TI=0; /* * *外部
3、中断 0 C51中断号1 0的优先级最高,关键字“interrupt“ , 这是C语言 的中断函数表示法 *本中断的响应是P32引脚有低电平触发 * */ void int_0() interrupt 0 / 后退防止碰住障碍物 DIR1=1; PWM1=1; - 20 - DIR2=1; PWM2=1; delayMS(1000); /左转 DIR1=1; PWM1=1; DIR2=0; PWM2=1; delayMS(1000); /继续向前走 DIR1=0; PWM1=1; DIR2=0; PWM2=1; delayMS(1000); - 21 - void go_forward() /
4、前走 DIR1=0; PWM1=1; DIR2=0; PWM2=1; printf(“go_forward“); void go_back()/后退 DIR1=1; PWM1=1; DIR2=1; PWM2=1; printf(“go_back“); void turn_left()/左转 - 22 - DIR1=1; PWM1=1; DIR2=0; PWM2=1; printf(“turn_left“); void turn_right()/右转 DIR1=0; PWM1=1; DIR2=1; PWM2=1; printf(“turn_right“); void stop()/停 - 23
5、- DIR1=0; PWM1=0; DIR2=0; PWM2=0; printf(“stop“); void delayMS(uchar t)/延时 uchar i; while(t-) for(i=0;i120;i+); 五、安装和调试 采用螺丝将循迹板及电机等安装组合成车体。 通过改变光红外距离传感器的可调电位器的大小来改变感应距离,通过改变延时程 序来改变速度的大小。下表为小车运行测试情况如下表: - 24 - 运行次数 成功次数 成功率 10 8 90% - 25 - 结束语: 整个系统的设计以单片机为核心,利用了红外光距离传感器,蓝牙串口无线透传模 块将软件和硬件相结合。本系统能实现如下功能: 自动躲避障碍物,并继续前进。如果遇到死角的话可以通过电脑端软件手动无线控 制它的运动方向。 从运行情况来看避障效果比较好,但小车偶尔遇到死角,我认为是由于红外距离传 感器的数量太少了。我相信条件允许下我肯定能解决这一问题。 通过本次设计我掌握了很多以前不熟练的东西,认识了很多以前不熟悉得东西,使 我在人生上又进了一步。也认识到很多的不足。 致谢 本设计能够顺利完成, 感谢杨老师老师以及身边同学的指导和帮助。 在设计过程中, 杨老师给予了悉心的指导