您的位置 首页 > 数码极客

如何将单片机接入小车

一,焊接51最小系统

一辆小车的基本功能就是让它能动起来,能通过手机蓝牙进行遥控,所以就需要用到L298N电机驱动模块,和HC-06蓝牙模块。下面就简单介绍一下这两个模块。

三,制作电机驱动模块

电机驱动模块弄好后,离它能动就只有一步之遥了,我们需要用到HC-06蓝牙模块对小车进行控制

四,源代码 /**************************************************************************** 简单寻迹程序:接法 EN1 EN2 PWM输入端,本程序不输入PWM,直接使插上跳线帽,使能输出,这样就能全速运行 无线摇控模块与单片机连接 无线模块GND +5取自于单片机板的5V输出 P0_7 与无线模块D0相连 P0_6 与无线模块D1相连 P0_5 与无线模块D2相连 P0_4 与无线模块D3相连 P1_0 P1_1 接IN1 IN2 当 P1_0=1,P1_1=0; 时左上电机正转 左上电机接驱动板子输出端(蓝色端子OUT1 OUT2) P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=1; 时左上电机反转 P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=0; 时左上电机停转 P1_2 P1_3 接IN3 IN4 当 P1_2=1,P1_3=0; 时左下电机正转 左下电机接驱动板子输出端(蓝色端子OUT3 OUT4) P1_2 P1_3 接IN3 IN4 当 P1_2=0,P1_3=1; 时左下电机反转 P1_2 P1_3 接IN3 IN4 当 P1_2=0,P1_3=0; 时左下电机停转 P1_4 P1_5 接IN5 IN6 当 P1_4=1,P1_5=0; 时右上电机正转 右上电机接驱动板子输出端(蓝色端子OUT5 OUT6) P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=1; 时右上电机反转 P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=0; 时右上电机停转 P1_6 P1_7 接IN7 IN8 当 P1_6=1,P1_7=0; 时右下电机正转 右下电机接驱动板子输出端(蓝色端子OUT7 OUT8) P1_6 P1_7 接IN7 IN8 当 P1_6=0,P1_7=1; 时右下电机反转 P1_6 P1_7 接IN7 IN8 当 P1_6=0,P1_7=0; 时右下电机停转 P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4 四路寻迹传感器有信号(白线)为0 没有信号(黑线)为1 四路寻迹传感器电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口 关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入6V时时候可以输出稳定的5V 分别在针脚标+5 与GND 。这个输出电源可以作为单片机系统的供电电源。 ****************************************************************************/ #include<AT89x51.H> #define Left_1_led P3_4 //P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 #define Left_2_led P3_5 //P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 #define Right_1_led P3_6 //P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 #define Right_2_led P3_7 //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;} //右边两个电机停转 #define left 'C' #define right 'D' #define up 'A' #define down 'B' #define stop 'F' char code str[] = "收到指令,向前!\n"; char code str1[] = "收到指令,向后!\n"; char code str2[] = "收到指令,向左!\n"; char code str3[] = "收到指令,向右!\n"; char code str4[] = "收到指令,停止!\n"; bit flag_REC=0; bit flag =0; unsigned char i=0; unsigned char dat=0; unsigned char buff[5]=0; //接收缓冲字节 /************************************************************************/ //延时函数 void delay(unsigned int k) { unsigned int x,y; for(x=0;x<k;x++) for(y=0;y<2000;y++); } /************************************************************************/ //字符串发送函数 void send_str( ) // 传送字串 { unsigned char i = 0; while(str[i] != '\0') { SBUF = str[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } } void send_str1( ) // 传送字串 { unsigned char i = 0; while(str1[i] != '\0') { SBUF = str1[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } } void send_str2( ) // 传送字串 { unsigned char i = 0; while(str2[i] != '\0') { SBUF = str2[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } } void send_str3() // 传送字串 { unsigned char i = 0; while(str3[i] != '\0') { SBUF = str3[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } } void send_str4() // 传送字串 { unsigned char i = 0; while(str4[i] != '\0') { SBUF = str4[i]; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 i++; // 下一个字符 } } /************************************************************************/ //前速前进 void run(void) { Left_moto_go ; //左电机往前走 Right_moto_go ; //右电机往前走 } //前速后退 void backrun(void) { Left_moto_back ; //左电机往前走 Right_moto_back ; //右电机往前走 } //左转 void leftrun(void) { Left_moto_back ; //左电机往前走 Right_moto_go ; //右电机往前走 } //右转 void rightrun(void) { Left_moto_go ; //左电机往前走 Right_moto_back ; //右电机往前走 } //STOP void stoprun(void) { Left_moto_Stop ; //左电机往前走 Right_moto_Stop ; //右电机往前走 } /************************************************************************/ void sint() interrupt 4 //中断接收3个字节 { if(RI) //是否接收中断 { RI=0; dat=SBUF; if(dat=='O'&&(i==0)) //接收数据第一帧 { buff[i]=dat; flag=1; //开始接收数据 } else if(flag==1) { i++; buff[i]=dat; if(i>=2) {i=0;flag=0;flag_REC=1 ;} // 停止接收 } } } /*********************************************************************/ /*--主函数--*/ void main(void) { TMOD=0x20; TH1=0xFd; 晶振,9600波特率 TL1=0xFd; SCON=0x50; PCON=0x00; TR1=1; ES=1; EA=1; while(1) /*无限循环*/ { if(flag_REC==1) // { flag_REC=0; if(buff[0]=='O'&&buff[1]=='N') //第一个字节为O,第二个字节为N,第三个字节为控制码 switch(buff[2]) { case up : // 前进 send_str( ); run(); break; case down: // 后退 send_str1( ); backrun(); break; case left: // 左转 send_str2( ); leftrun(); break; case right: // 右转 send_str3( ); rightrun(); break; case stop: // 停止 send_str4( ); stoprun(); break; } } } }




手机操作

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何将单片机接入小车,单片机如何控制小车”边界阅读