#include<AT89x52.H> #include <intrins.h> #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 Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度#define left 'C' #define right 'D'#define up 'A' #define down 'B'#define stop 'F'#define Car '1' //手机软件1号键unsigned char disbuff[4] ={ 0,0,0,0,}; unsigned char posit=0; unsigned int time=0; //时间变量unsigned int timer1=0; //时间变量 unsigned int timer=0;//延时基准变量 bit flag_REC=0; //串行接收标去位bit flag =0; bit flag_bz =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 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 send_str( ) // 传送字串 { unsigned char i = 0; while(str[i] != ' ') {SBUF = str[i];while(!TI);// 等特数据传送TI = 0;// 清除数据传送标志i++;// 下一个字符 } } void send_str1( ) // 传送字串 { unsigned char i = 0; while(str1[i] != ' ') {SBUF = str1[i];while(!TI);// 等特数据传送TI = 0;// 清除数据传送标志i++;// 下一个字符 } } void send_str2( ) // 传送字串 { unsigned char i = 0; while(str2[i] != ' ') {SBUF = str2[i];while(!TI);// 等特数据传送TI = 0;// 清除数据传送标志i++;// 下一个字符 } } void send_str3() // 传送字串 { unsigned char i = 0; while(str3[i] != ' ') {SBUF = str3[i];while(!TI);// 等特数据传送TI = 0;// 清除数据传送标志i++;// 下一个字符 } } void send_str4() // 传送字串 { unsigned char i = 0; while(str4[i] != ' ') {SBUF = str4[i];while(!TI);// 等特数据传送TI = 0;// 清除数据传送标志i++;// 下一个字符 }/************************************************************************/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=0x11; TH1=(65536-100)/256; //100US定时TL1=(65536-100)%256;TH0=0;TL0=0; T2CON=0x34;T2MOD=0x00;RCAP2H=0xFF;RCAP2L=0xDC; SCON=0x50; PCON=0x00; PS=1; TR1=1;ET1=1;ES=1; EA=1; while(1)/*无限循环*/{ while(flag_bz) /*无限循环*/ { if(timer>=1000) //100MS检测启动检测一次 { timer=0; StartModule(); //启动检测 Conut(); //计算距离 if(S<20) //距离小于20CM { stoprun(); //小车停止 COMM(); //方向函数 } else if(S>30) //距离大于,30CM往前走 run(); } if(flag_REC==1){ push_val_left=13; //舵机归中 stoprun(); break;} } if(flag_REC==1) // {flag_REC=0;if(buff[0]=='O'&&buff[1]=='N')//第一个字节为O,第二个字节为N,第三个字节为控制码switch(buff[2]) { case up : // 前进 send_str( ); flag_bz=0; run(); break; case down:// 后退 send_str1( ); flag_bz=0; backrun(); break; case left:// 左转 send_str2( ); flag_bz=0; leftrun(); break; case right:// 右转 send_str3( ); flag_bz=0; rightrun(); break; case stop:// 停止 send_str4( ); flag_bz=0; stoprun(); break; case Car :// flag_bz=1; break; } }}}
导读:目前正在解读《智能小车上的蓝牙和避障程序》的相关信息,《智能小车上的蓝牙和避障程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《智能小车上的蓝牙和避障程序》的详细说明。
简介:这里给大家介绍了一个智能小车上的蓝牙和避障程序。
提醒:《智能小车上的蓝牙和避障程序》最后刷新时间 2024-03-14 01:02:26,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《智能小车上的蓝牙和避障程序》该内容的真实性请自行鉴别。