超声波避障小车程序设计

上传人:tiangk****ingyu 文档编号:70750785 上传时间:2022-04-06 格式:DOCX 页数:5 大小:16.91KB
返回 下载 相关 举报
超声波避障小车程序设计_第1页
第1页 / 共5页
超声波避障小车程序设计_第2页
第2页 / 共5页
超声波避障小车程序设计_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
/*/ 5 路超声波避障实验: 51 单片机 + HC-SR04超声波 /*/#include /器件配置文件#include #define RX1 P3_6/ 小车左侧超声波 HC-SR04接收端#define TX1 P1_7 /发送端#define RX2 P3_3 /左前方超声波#define TX2 P0_2#define RX3 P2_4 /正前方超声波#define TX3 P2_5#define RX4 P3_5 /右前方超声波#define TX4 P3_4#define RX5 P3_7 /右侧超声波#define TX5 P1_6#define Left_moto_pwm P1_5 /PWM 信号端#define Right_moto_pwm P1_4 /PWM 信号端/ 定义小车驱动模块输入 IO 口sbit IN1=P10;sbit IN2=P11;sbit IN3=P12;sbit IN4=P13;sbit EN1=P14;sbit EN2=P15;bit Right_moto_stop=1;bit Left_moto_stop =1;#define Left_moto_go IN1=0,IN2=1,EN1=1; / 左电机向前走#define Left_moto_back IN1=1,IN2=0,EN1=1; / 左边电机向后走#define Left_moto_Stop EN1=0; / 左边电机停转#define Right_moto_go IN3=1,IN4=0,EN2=1; / 右边电机向前走#define Right_moto_back IN3=0,IN4=1,EN2=1; / 右边电机向后走#define Right_moto_Stop EN2=0; / 右边电机停转unsigned char pwm_val_left =0;/ 变量定义unsigned char push_val_left =0;/ 左电机占空比 N/20unsigned char pwm_val_right =0;unsigned char push_val_right=0;/ 右电机占空比 N/20unsigned int time=0;unsigned int timer=0;unsigned long S1=0;unsigned long S2=0;unsigned long S3=0;unsigned long S4=0;unsigned long S5=0;void delay_1ms(unsigned char x) /1ms 延 时 函 数 ,100ms 以 内 可用 unsigned char i; while(x-) for(i=124;i0;i-); /*/void Count1() / 计算左侧超声波距离的函数 while(!RX1); / 当 RX1为零时等待TR0=1; /开启计数while(RX1); / 当 RX1为 1 计数并等待TR0=0; /关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S1=(time*1.7)/100; / 算出来是 CM void Count2() / 计算函数 while(!RX2); / 当 RX2为零时等待TR0=1; /开启计数while(RX2); / 当 RX2为 1 计数并等待TR0=0; /关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S2=(time*1.7)/100; / 算出来是 CM void Count3() / 计算函数 while(!RX3); / 当 RX3 为零时等待TR0=1; /开启计数while(RX3); / 当 RX3为 1 计数并等待TR0=0; /关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S3=(time*1.7)/100; / 算出来是 CM void Count4() / 计算函数 while(!RX4); / 当 RX4为零时等待TR0=1; /开启计数while(RX4); / 当 RX4为 1 计数并等待TR0=0; /关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S4=(time*1.7)/100; / 算出来是 CM void Count5() / 计算函数while(!RX5); / 当 RX5为零时等待TR0=1; /开启计数while(RX5); / 当 RX5为 1 计数并等待TR0=0; /关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S5=(time*1.7)/100; / 算出来是 CMvoid leftrun(void) push_val_left=20;push_val_right=20;Left_moto_back / 左电机往后走 Right_moto_go / 右电机往前走 /*/ /右转void rightrun(void)push_val_left=20;push_val_right=20;Left_moto_go / 左电机往前走 Right_moto_back / 右电机往后走 /*/ /停止void stoprun(void)Left_moto_Stop / 左电机停 Right_moto_Stop / 右电机停 /*/ /*PWM 调 制 电 机 转速 */ /*/* 左电机调速 */ /*调节 push_val_left 的值改变电机转速 ,占空比 */void pwm_out_left_moto(void)if(Left_moto_stop) if(pwm_val_left=20)pwm_val_left=0;else Left_moto_pwm=0; /*/ /*右电机调速 */void pwm_out_right_moto(void) if(Right_moto_stop) if(pwm_val_right=20) pwm_val_right=0; else Right_moto_pwm=0; /*/void timer0() interrupt 1 /T0 中断 /*/ /*TIMER1 中断服务子函数产生 PWM 信号*/void timer1()interrupt 3 TH1=(65536-1000)/256; /1ms 定时 TL1=(65536-1000)%256;timer+;pwm_val_left+;pwm_val_right+;pwm_out_left_moto();pwm_out_right_moto(); /* */void main(void)TMOD=0x11; / 设 T0 为方式 1,GATE=1;TH0=0;TL0=0;TH1=(65536-1000)/256; /1ms 定时TL1=(65536-1000)%256;ET0=1; /允许 T0 中断ET1=1; /允许 T1 中断TR1=1; /开启定时器EA=1; /开启总中断while(1) TX1=1; /开启超声波 1 探测delay_1ms(1);TX1=0;Count1(); / 测距TX2=1;delay_1ms(1);TX2=0;Count2();TX3=1;delay_1ms(1);TX3=0;Count3();TX4=1;delay_1ms(1);TX4=0;Count4();TX5=1;delay_1ms(1);TX5=0;Count5();if(S320 & S120 & S520) / 进入狭窄通道 backrun(); / 倒车delay_1ms(100);else if(S320 & S1S5 ) /车子与障碍物 90 度垂直,左边距离小右转 rightrun(); else if(S320 & S5S1 ) /车子与障碍物 90 度垂直,右边距离小左转 leftrun(); else if(S220) rightrun(); / 车与障碍物呈 45 度角时,车的左边比车的右边距离小 ,右转 else if(S420) leftrun(); / 车与障碍物呈 45 度角时,车的右边比车的左边距离小 ,左转 else run();
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!