欢迎来到51自学网!

51自学网

当前位置: 主页 > 软件教程 > 单片机教程 >

基于51单片机的智能小车(遥控模块寻迹避障)

时间:2018-08-16 11:25来源:网络整理 作者:51自学网
在淘宝购买的寻迹模块+自己做的小车底盘 测试成功 #includereg52.hsbit P1_0 = P1^0;sbit P1_1 = P1^1;sbit P1_2 = P1^2;sbit P1_3 = P1^3;sbit P1_4 = P1^4;sbit P1_5 = P1^5;sbit P1_6 = P1^6;sbit P1_7 = P1^7;sbit P2_0 = P2^0;sbi

在淘宝购买的寻迹模块+自己做的小车底盘 测试成功

#include<reg52.h> sbit P1_0 = P1^0; sbit P1_1 = P1^1; sbit P1_2 = P1^2; sbit P1_3 = P1^3; sbit P1_4 = P1^4; sbit P1_5 = P1^5; sbit P1_6 = P1^6; sbit P1_7 = P1^7; sbit P2_0 = P2^0; sbit P2_1 = P2^1; sbit P2_2 = P2^2; sbit P2_3 = P2^3; sbit P2_4 = P2^4; sbit P2_5 = P2^5; sbit P2_6 = P2^6; sbit P2_7 = P2^7; sbit P3_2 = P3^2; sbit P3_3 = P3^3; sbit P3_4 = P3^4; sbit P3_5 = P3^5; sbit P3_6 = P3^6; sbit P3_7 = P3^7; #define uchar unsigned char #define uint unsigned int #define Left_1_led P3_2 //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 #define Right_1_led P3_3 //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 #define Left_2_led P3_4 //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 #define Right_2_led P3_5 //P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4 #define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向后转 #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向前走 #define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转 #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边两个电机向前走 #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边两个电机向前走 #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边两个电机停转 /*********************************延时函数 ***************************************/ void delay(uint k) { uint x,y; for(x=0;x<k;x++) for(y=0;y<2000;y++); } /**********************************前进**************************************/ void run(void) { Left_moto_go ; Right_moto_go ; } /**********************************后退**************************************/ void back(void) { Left_moto_back; //左边两个电机反式开始转 Right_moto_back; //右边两个电机反转 } /**********************************左转**************************************/ void leftrun(void) { Right_moto_go; //右边两个电机正转 Left_moto_back; //左边两个电机反式开始转 } /**********************************右转**************************************/ void rightrun(void) { Left_moto_go; //左边两个电机正转 Right_moto_back; //右边两个电机反转 } /**********************************停止**************************************/ void stop(void) { Left_moto_Stop; //右边两个电机正转 Right_moto_Stop; //左边两个电机反式开始? } /**********************************遥控模块**************************************/ void remotecontrol() { if(P2_0 == 1) { delay(10);//延时去抖动 if(P2_0==1) { run(); } } if(P2_1 == 1) { delay(10);//延时去抖动 if(P2_1==1) { back(); } } if(P2_2 == 1) { delay(10);//延时去抖动 if(P2_2==1) { leftrun(); } } if(P2_3 == 1) { delay(10);//延时去抖动 if(P2_3==1) { rightrun(); } } } /***********************************循迹模块***********************************/ void track() { if(Left_1_led==0&&Right_1_led==0) //有信号为0 没有信号为1 run(); else { if(Left_1_led==0&&Right_1_led==1) //右边检测到黑线 { rightrun(); } if(Right_1_led==0&&Left_1_led==1) //左边检测到黑线 { leftrun(); } if(Right_1_led==1&&Left_1_led==1) //左边检测到黑线 { stop(); } } } /***********************************避障***************************************/ void bar() { if(Left_2_led==1&&Right_2_led==1) //有信号为0 没有信号为1 run(); else { if(Left_2_led==1&&Right_2_led==0) //右边检测到障碍 { leftrun(); } if(Right_2_led==1&&Left_2_led==0) //左边检测到障碍 { rightrun(); } if(Right_2_led==0&&Left_2_led==0) //左右边都检测到障碍 { rightrun(); } } } /**********************************主函数**************************************/ void main(void) { while(1) /*无限循环*/ { if(P2_4 == 0) { delay(10);//延时去抖动 if(P2_4==0) { stop(); while(P2_5&P2_6) { remotecontrol(); } } } if(P2_5 == 0) { delay(10);//延时去抖动 if(P2_5==0) { while(P2_4&P2_6) { track(); } } } if(P2_6 == 0) { delay(10);//延时去抖动 if(P2_6==0) { while(P2_4&P2_5) { bar(); } } } } }

【发表评论】【告诉好友】【收藏此文】【】

(责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容