智能小车程序51.doc_第1页
智能小车程序51.doc_第2页
智能小车程序51.doc_第3页
智能小车程序51.doc_第4页
智能小车程序51.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#includepwmtime1.h /pwm头文件#include #includedelay.h#define uint unsigned int#define uchar unsigned char/-变量定义-/uint ruku_dengdai_jishiqi; / 入库等待计时器uint cesu_jishuqi; /测速 计数器uint fache_yanshi_jishiqi; /发车延时 计数器/光电传感器 参数定义sbit c_0 = p10; /0号 传感器管锁住赛道0 检测到黑线是 高电平 sbit c_1 = p11; /1号 传感器管锁住赛道1sbit c_2 = p12; /2号 传感器管锁住赛道2sbit c_4 = p16; /新加1 传感器管检测 出库 与停车标志线sbit c_5 = p17; /新加2 传感器管检测 入库 标志线sbit d_0 = p13; /3号 传感器管sbit d_1 = p14; /4号 传感器管sbit d_2 = p15; /5号 传感器管sbit d_3 = p20; /6号 传感器sbit stop =p21; / 停车 标志传感器sbit h_0 = p22; /会车检测传感器 1sbit h_1 = p23; /会车检测传感器 2sbit s_0 = p30; / 按键 0sbit s_1 = p31; / 按键 1sbit s_2 = p34; / 按键 2sbit s_3 = p35; / 按键 3sbit s_4 = p36; / 按键 4sbit s_5 = p37; / 按键 5sbit led0= p00; /工作指示灯 0sbit led1= p01; /工作指示灯 0sbit led2= p02; /工作指示灯 0sbit led3= p03; /工作指示灯 0sbit led4= p04; /工作指示灯 0sbit led5= p05; /工作指示灯 0sbit led6= p06; /工作指示灯 0sbit led7= p07; /工作指示灯 0/-小车现场标志位-/uchar flag_zhidao; /小车在直到 uchar flag_wandao; /小车在弯道 uchar flag_wandao_0; /左拐 标志位uchar flag_wandao_0_hz ; /左拐 回正 标志位uchar flag_wandao_hou_0; /后传感器 检测到 左拐 标志位 uchar flag_wandao_1; /右拐 标志位uchar flag_wandao_1_hz ; /右拐 回正 标志位uchar flag_wandao_hou_1; /后传感器 检测到 右拐 标志位uchar flag_jiance_qian; /前面传感器 检测uchar flag_jiance_hou; /后面传感器 检测uchar flag_ruku; /入库标志线 检测uchar flag_ruku_jin; /小车 入库 控制 标志位uchar flag_chuku; /出库标志线 检测uchar flag_chuku_chu; /小车 出库 控制 标志位uchar flag_yici;uchar flag_dengdai; /等待 地方车 通过uchar flag_fache; /发车标志位uchar flag_tingche; /停车标志位void daoche_chuanganqichuli(); /倒车传感器处理 /-倒车标志位-/uchar flag_huiche;/会车标志位uchar flag_huiche_hou;/会车 后 标志位uchar flag_daoche_jiance_qian; /会车后 检测 传感器 钱 相对于 小车的行驶方向uchar flag_daoche_jiance_hou;uchar flag_huiche_dengdai; /等待 会车 标志位uchar flag_daoche ; /倒车 标志位uchar flag_daoche_dengdai;/倒车 等待uchar flag_daoche_ruku; /倒车 入库uchar flag_daoche_zhunbei_ruku; /倒车 准备 入库uchar flag_daoche_ruku_jin; /倒车 进库控制标志位uchar flag_daoche_ruku_dengdai; /倒车 入库 等待uchar flag_daoche_chuku ;/倒车 出库 uchar flag_daoche_zhidao; /倒车 直走 标志位uchar flag_daoche_wandao; /倒车 拐弯 标志位uchar flag_daoche_wandao_0; /倒车 左拐 标志位uchar flag_daoche_wandao_1; /倒车 右拐 标志位 /uchar flag_moshi1; /选择模式1 工作标志位uchar flag_moshi2; /选择模式2 工作标志位uchar flag_moshi3; /选择模式3 工作标志位uchar flag_moshi4; /-函数定义-/void chuanganqi_chuli(); /传感器扫描void led_xianshi(); /led显示void fangan_1(); /方案 1,小车独立行走void fangan_2_shujucaiji(); /方案2 红外管采集void fangan_2_biaozhichuli(); /方案2 小车采集信息 控制处理void fangan_2(); /方案 2,小车入库行走void daoche_chuanganqichuli(); /倒车传感器处理void daoche_biaozhiwei_chuli_b();/ 传感器 标志 void fangan_3_b(); / 方案 3 ,小车 会车 控制void key_moshi(); /按键 模式选择/*/* 定时器0 初始化 */*/void time0_init()tmod |= 0x01;th0=(65535-50000)/256;tl0=(65535-50000)%256;ea=1;et0=1;/tr0=1;/*/* 主程序 main */*/void main()p3=0xff;p2=0xff;p1=0xff;key_moshi(); /模式 选择time0_init(); /启动 定时器 0time1_init(); /定时器1初始化 pwm模块dianji_zuo(1,40); / 直走dianji_you(1,40);flag_jiance_qian = 1; /启动 前面传感器 检测黑线flag_jiance_hou = 0; /关闭 后面传感器 检测黑线while(1)if(flag_moshi1=1)fangan_1(); /方案1 小车独立行走 不入库if(flag_moshi2=1)fangan_2(); /a b 同时行走 带入库程序 采用延时12sif(flag_moshi3=1)fangan_3_b();/*/* 外部 中断 0 */*/void time0() interrupt 1/th0=(65535-50000)/256;/tl0=(65535-50000)%256;/*/* 定时器中断0 */*/void time0() interrupt 1th0=(65535-50000)/256;tl0=(65535-50000)%256;if(flag_fache=1)fache_yanshi_jishiqi+;if(fache_yanshi_jishiqi=40) /延时2s 发车tr0=0;/*/* 定时器中断1 */*/void time1() interrupt 3th1=(65535-500)/256;tl1=(65535-500)%256;pwm_init();/*/* 传感器取值 判断 */*/void chuanganqi_chuli()if(flag_jiance_qian=1) /启动 前 传感器 检测if(c_4=0& c_0=0 & c_1=1 & c_2=0 &c_5=0)/ 0 010 0flag_zhidao=1;/直道上 标志位flag_wandao=0;/弯道 标志位都为0flag_wandao_0=0;flag_wandao_1=0;flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 0;flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子入库标志位if(c_4=0 & c_0=0 & c_1=0 & c_2=1 & c_5=0)/0 001 0flag_zhidao = 0;/弯道上flag_wandao=1;/弯道 标志位都为1flag_wandao_0=0; flag_wandao_1=1; /需要 右拐flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 0;flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子出库标志位if(c_4=0 &c_0=1 & c_1=0 & c_2=0& c_5=0) / 1 0 0flag_zhidao = 0;/直道上flag_wandao=1;/弯道 标志位都为1flag_wandao_0=1; /需要 左拐flag_wandao_1=0;flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 0;flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子入库标志位if(c_4=0 & c_2=1 & c_5=1)&flag_ruku=0 ) /|(c_0=1 & c_1=1 & c_2=1)flag_ruku=1; /入库标志线/flag_zhidao = 0;/弯道上/flag_wandao=0;/弯道 标志位都为1flag_wandao_0=0; /需要 左拐flag_wandao_1=0;flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子入库标志位flag_jiance_qian = 0;flag_jiance_hou = 1;if(c_2=1|c_5=1)&flag_chuku=1)flag_zhidao = 0;/弯道上flag_wandao=1;/弯道 标志位flag_wandao_0=1; /需要 左拐flag_wandao_1=0;flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 0;flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子入库标志位if(flag_jiance_hou = 1)if(d_0=0 & d_1=1 & d_2=0 & d_3=0) / 后 010 0 直走flag_zhidao = 1;/直到上 flag_wandao = 0;/弯道 标志位都为0flag_wandao_0=0; /0flag_wandao_1=0;flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 0;flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子入库标志位if(d_0=1 & d_1=0 & d_2=0 & d_3=0) / 后 1 0 0 0 右拐flag_zhidao = 0;/直到上 准备入库flag_wandao = 1;/弯道 标志位都为1flag_wandao_0= 0; /0flag_wandao_1= 0;flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 1; /车 右拐flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子入库标志位if(d_0=0 & d_1=0 & d_2=1 & d_3=0) / 后 1 0 0 0 左拐flag_zhidao = 0;/flag_wandao = 1;/弯道 标志位都为1flag_wandao_0=0; /0flag_wandao_1=0;flag_wandao_hou_0= 1; /车 左拐flag_wandao_hou_1= 0;/后传感器检测到拐弯标志 flag_ruku_jin = 0; /车子入库标志位flag_chuku_chu = 0; /车子入库标志位 if( d_2=1 & d_3=1) / 后 x x 1 1 控制入库 标志flag_zhidao = 1;/直到上 准备入库flag_wandao = 0;/弯道 标志位都为1flag_wandao_0= 0; /车 左拐flag_wandao_1= 0;flag_wandao_hou_0=0;/后检测 flag_wandao_hou_1=0;flag_ruku_jin = 0; /待延时后入库flag_chuku_chu= 0;flag_jiance_qian = 1; /启动 前面传感器flag_jiance_hou = 0; /关闭 后检测传感器/delay_ms(500); /延时 0.5s 等待出线 /*/* led灯显示 现况 */*/void led_xianshi()/if(flag_zhidao=1)/if(h_0=1)p00 = 0;else p00 = 1;/if(flag_wandao_0=1) /若 后传感器 检测到 左拐 灯亮if(h_1=1)p01 = 0;else p01 = 1;if(flag_huiche=1) /若 后传感器 检测到 右拐 灯亮p02 = 0;else p02 = 1;if(flag_wandao_hou_0=1) /若 入库标志位为 灯亮p03 = 0;else p03 = 1;if(flag_wandao_hou_1=1) /若 入库 控制标志位为 灯亮p04 = 0;else p04 = 1;if(flag_ruku_jin=1) /若 入库 控制标志位为 灯亮p05 = 0;else p05 = 1;if(flag_chuku_chu=1) /若 入库 控制标志位为 灯亮p06 = 0;else p06 = 1;/if(flag_chuku=1) /若 入库 控制标志位为 灯亮/p07 = 0;/else /p07 = 1;/p01 = c_0;/p02 = c_1;/p03 = c_2;/p04 = c_5;/p05 = c_5;/if(flag_ruku_jin = 1) /若在直道上 第四个等亮/p03=0;/else/p03=1;/if(flag_chuku_chu = 1)/p04=0;/else/p04=1;/if(flag_ruku = 1)/p05=0;/else/p05=1;/*/* 方案1 小车单独行走 */*a车b车 通用 */*/void fangan_1()chuanganqi_chuli();fangan_2_biaozhichuli();/采用方案2 的标志处理led_xianshi();/*/* 方案2 红外管采集 */*/void fangan_2_shujucaiji()if(flag_jiance_qian=1)if( c_4=0 & c_0=0 & c_1=1 & c_2=0 & c_5=0 )/前0 010 0 直走flag_zhidao=1;/直道 标志位flag_wandao=0;/弯道 标志位都为0flag_wandao_0=0;/左拐 标志位flag_wandao_1=0;/右拐 标志位flag_wandao_hou_0=0; /后传感器 左拐 标志flag_wandao_hou_1=0; /后传感器 右拐 标志flag_ruku_jin = 0; /入库 出库 控制标志位flag_chuku_chu=0;if( c_4=0 & c_0=0 & c_1=0 & c_2=1 & c_5=0)/前0 001 0 右拐flag_zhidao = 0;/弯道上flag_wandao=1;/弯道 标志位都为1flag_wandao_0=0; flag_wandao_1=1; /右拐 标志位flag_wandao_hou_0=0; /后传感器 左拐 标志flag_wandao_hou_1=0; /后传感器 右拐 标志flag_ruku_jin = 0; /入库 出库 控制标志位flag_chuku_chu= 0;if(c_4=0 & c_0=1 & c_1=0 & c_2=0 & c_5=0) / 前0 100 0 左拐flag_zhidao = 0;/弯道上flag_wandao=1;/弯道 标志位都为1flag_wandao_0=1; /需要 左拐flag_wandao_1=0;flag_wandao_hou_0=0; /后传感器 左拐 标志flag_wandao_hou_1=0; /后传感器 右拐 标志flag_ruku_jin = 0; /入库 出库 控制标志位flag_chuku_chu=0;if(c_4=1 & c_0=1 & c_5=0& flag_ruku=1)/前1 1xx 0小车出库 处理/入库 标志 1flag_zhidao = 0;/flag_wandao=0;/弯道 标志位都为0flag_wandao_0=0; /0flag_wandao_1=0;flag_wandao_hou_0=0; /后传感器 左拐 标志flag_wandao_hou_1=0; /后传感器 右拐 标志flag_ruku = 0;/入库标志为 flag_chuku= 1;/出库标志位 1flag_ruku_jin=0;flag_chuku_chu=1; /出库控制字flag_dengdai=1;/delay_ms(500); /延时0.5s 待传感器出赛道/由于 车库太小 车有可能没法抓住赛道 去掉这段/若等待 精度 不够 ,需调整/if(c_4=0 & ( c_0=1|c_1=1 ) & c_2=0&c_5=0)&/ (d_0=1 | d_1=1 | d_2=1) & flag_ruku=1 & flag_dengdai=0) / 入库一次/ / 0 1 0 1 | 1 | 1/flag_dengdai=1; /等待 对方车 通过,发车/准备入库if(c_4=0 & c_2=1 & c_5=1 & flag_chuku = 0)/ 前0 xx1 1出库标志 / 准备入库标志位处理 flag_zhidao = 1;/直到上 准备入库flag_wandao=0;/弯道 标志位都为0flag_wandao_0=0; /0flag_wandao_1=0;flag_wandao_hou_0=0; /后传感器 左拐 标志flag_wandao_hou_1=0; /后传感器 右拐 标志flag_ruku = 1;/入库标志为 1flag_chuku= 0;/出库标志位flag_jiance_qian = 0; /关闭 前面传感器flag_jiance_hou = 1; /启动 后检测传感器if(flag_jiance_hou = 1)/后 传感器 标号 3 4 5if(d_0=0 & d_1=1 & d_2=0 & d_3=0) / 后 010 0 直走flag_zhidao = 1;/直到上 flag_wandao = 0;/弯道 标志位都为0flag_wandao=0;/弯道 标志位都为0flag_wandao_0=0; /0flag_wandao_1=0;flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 0;if(d_0=1 & d_1=0 & d_2=0 & d_3=0) / 后 1 0 0 0 右拐flag_zhidao = 0;/直到上 准备入库flag_wandao = 1;/弯道 标志位都为1flag_wandao=0;/弯道 标志位都为0flag_wandao_0=0; /0flag_wandao_1=0;flag_wandao_hou_0= 0; /后传感器检测到拐弯标志 flag_wandao_hou_1= 1; /车 右拐if(d_0=0 & d_1=0 & d_2=1 & d_3=0) / 后 1 0 0 0 左拐flag_zhidao = 0;/flag_wandao = 1;/弯道 标志位都为1flag_wandao_0=0; /0flag_wandao_1=0;flag_wandao_hou_0= 1; /车 左拐flag_wandao_hou_1= 0;/后传感器检测到拐弯标志 if( d_2=1 & d_3=1) / 后 x x 1 1 控制入库 标志flag_zhidao = 0;/直到上 准备入库flag_wandao = 0;/弯道 标志位都为1flag_wandao_0= 0; /车 左拐flag_wandao_1= 0;flag_wandao_hou_0=0;/后检测 flag_wandao_hou_1=0;flag_ruku_jin = 1; /待延时后入库flag_chuku_chu= 0;flag_jiance_qian = 1; /启动 前面传感器flag_jiance_hou = 0; /关闭 后检测传感器/delay_ms(500); /延时 0.5s 等待出线 /*/* 方案2 采集标志位处理 */*/void fangan_2_biaozhichuli()if(flag_zhidao=1) /直到上 小车直走dianji_zuo(1,50); / 直走dianji_you(1,52);if(flag_wandao = 1) /弯道上 小车拐弯if(flag_wandao_0=1) /左拐dianji_zuo(2,80); /左拐 双差速拐弯 大拐弯dianji_you(1,80);if(flag_wandao_1=1) /右拐dianji_zuo(1,65); / 降低右电机pwmdianji_you(2,2);if(flag_wandao_hou_0=1) / 后传感器 检测到 左拐dianji_zuo(2,2); dianji_you(1,65); /右电机正转if(flag_wandao_hou_1=1) / 后传感器 检测到 右拐dianji_zuo(1,60); / 做电机正转dianji_you(2,2);/带点小制动if(flag_ruku_jin=1) /小车 进库 dianji_zuo(1,60); / 降低右电机pwmdianji_you(1,0);if(flag_dengdai=1)dianji_zuo(0,0); /左拐 降低做电机pwmdianji_you(0,0);if(flag_moshi2=1) / 选择模式2, b车等待a车通过后在行走delay_ms(9000); /小车等待 通行后行驶/if()flag_dengdai=2;if(flag_chuku_chu=1) /小车出库处理,不太合理/dianji_zuo(2,55);/dianji_you(2,45);/delay_ms(800);dianji_zuo(2,85); /左拐 降低做电机pwmdianji_you(1,85);while(c_5=0&d_0=0); /c_1=1| /dianji_zuo(0,0); /观察现象/dianji_you(0,0);/delay_ms(1000);/dianji_zuo(1,35);/dianji_you(1,55);/dianji_zuo(1,10);/dianji_you(1,80);/delay_ms(800); /延时去掉 重复检测flag_zhidao=1; /小车 出库 直走flag_chuku_chu=0; /清除 出库标志位flag_chuku=0;flag_ruku = 0; /关闭出库flag_ruku_jin=0;flag_dengdai=0;if(stop=1&flag_fache=0&flag_tingche=0)/while(stop=1);flag_fache=1;tr0=1; /用定时器 延时2sif(stop=1&flag_fache=1&fache_yanshi_jishiqi=40)flag_tingche=1;dianji_zuo(0,0);dianji_you(0,0);while(1);/*/* 方案2 小车入库行走 */*a车b车 通用 */*/void fangan_2()fangan_2_shujucaiji();led_xianshi();fangan_2_biaozhichuli();/ /-倒车标志位-/uchar flag_huiche;/会车标志位/uchar flag_huiche_dengdai; /等待 会车 标志位a车/uchar flag_daoche ; /倒车 标志位/uchar flag_daoche_dengdai;/倒车 等待/uchar flag_daoche_ruku; /倒车 入库/uchar flag_daoche_ruku_jin; /倒车 进库控制标志位/uchar flag_daoche_ruku_dengdai; /倒车 入库 等待/uchar flag_daoche_chuku ;/倒车 出库 /uchar flag_daoche_zhidao; /倒车 直走 标志位/uchar flag_daoche_wandao; /倒车 拐弯 标志位/uchar flag_daoche_wandao_0; /倒车 左拐 标志位/uchar flag_daoche_wandao_1; /倒车 右拐 标志位/ /*/* 方案3 a车b车检测到会车 */*实行倒车标志位检测 */*/void daoche_chuanganqichuli()if(flag_huiche=1)if(flag_daoche_jiance_qian=1)if(d_3=0 & d_2=0 & d_1=1 & d_0=0)/ 0 010 小车 倒车 直走flag_daoche_zhidao = 1; /小车 倒车 直走标志位flag_daoche_wandao = 0; /倒车 拐弯 标志位flag_daoche_wandao_0 = 0; /倒车 左拐 标志位flag_daoche_wandao_1 = 0; /倒车 右拐 标志flag_daoche_ruku_jin = 0; /倒车 进库控制标志位/flag_daoche_ruku_dengdai=0; /倒车 入库 等待if(d_3=0 & d_2=1 & d_1=0 & d_0=0)/ 0 100 小车 倒车 左拐flag_daoche_zhidao = 0; /小车 倒车 直走标志位flag_daoche_wandao = 1; /倒车 拐弯 标志位flag_daoche_wandao_0 = 1; /倒车 左拐 标志位flag_daoche_wandao_1 = 0; /倒车 右拐 标志flag_daoche_ruku_jin = 0; /倒车 进库控制标志位/flag_daoche_ruku_dengdai=0; /倒车 入库 等待if(d_3=0 & d_2=0 & d_1=0 & d_0=1)/ 0 001 小车 倒车 右拐flag_daoche_zhidao = 0; /小车 倒车 直走标志位flag_daoche_wandao = 1; /倒车 拐弯 标志位flag_daoche_wandao_0 = 0; /倒车 左拐 标志位flag_daoche_wandao_1 = 1; /倒车 右拐 标志flag_daoche_ruku_jin = 0; /倒车 进库控制标志位/fl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论