ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:19.57KB ,
资源ID:1526257      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1526257.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能双小车C程序主机文档格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

智能双小车C程序主机文档格式.docx

1、uchar flag_tran=1,flag_Metal=1; /超声波跳出标志/寻线跳出标志/金属检测引脚sbit Metal_DTC= P33;uchar MetalNum=0;/寻光引脚 定义I2C 总线的数据端口和命令端口/*/sbit SDA=P07;/数据总线sbit SCL=P06;/控制总线uint light_numL=0,light_numM=0,light_numR=0,light_up=0;/定义san个变量bit ack;/应答位/红外蔽障/uchar flag_red;unsigned char PWM1=0 ; /*左前电机的占空比*/unsigned char

2、PWM2=0 ; /*左后电机的占空比*/unsigned char PWM3=0 ; /*右前电机的占空比*/unsigned char PWM4=0 ; /*右后电机的占空比*/unsigned char t=0; /*定时器中断计数器*/*初始化定时器,中断*/void motor_init() TMOD=0x01; /定时器T0工作方式一 TH0=0xFF; /定时0.25Ms TL0=0x06; PT0=0; /T0为低优先级中断 EA=1; /总中断 ET0=1; /允许定时器中断 TR0=1; /定时器T0开始定时 ENA_L=1; ENB_L=1; ENA_R=1; ENB_R

3、=1; PWM1=15; PWM2=15; PWM3=15; PWM4=15; PW0=1; /*给左前电机加电启动*/ 向前转 PW1=0; PW4=1; /*给右前电机加电启动*/ PW5=0; PW2=1; /*给左后电机加电启动*/ PW3=0; PW6=1; /*给右后电机加电启动*/ PW7=0; /*中断函数+脉宽调制*/void timer0() interrupt 1 ET0=0; if(t0;b-) for(a=2;aa-);void delay1ms() /误差 0us unsigned char a,b,c; for(c=1;cc-) for(b=142;void de

4、lay100us() /误差 0us for(b=1; for(a=47; */void delay10ms() /误差 0us for(b=38; for(a=130;void delay5ms() /误差 0us for(b=19;/寻线函数:Follow()void delay_nms(uint n) /超声波 uchar i; while(n-) for(i=123;ii-);void Follow() uchar temp=0; /Metal_init(); /金属传感器初始化 while(1) temp = (temp1)|Follow_R2; temp = (temp1)|Fol

5、low_R1;1)|Follow_L1;1)|Follow_L2; /*while(temp&0x0F)=0x00|(temp&0x0F)=0x0F) / 00 000 000 temp = (temp temp = (temp straight1(); while(temp&0x0F)=0x02) /一级左转 0000 00 10 left_turn1(); 0x0F)=0x01|(temp&0x0F)=0x03) / 二级左转 0000 00 01 left_turn2();0x0F)=0x04) /一级右转 0000 01 00 right_turn1();0x0F)=0x08|(tem

6、p&0x0F)=0x0C) / 二级右转 0000 10 00 right_turn2(); */ switch(temp&0x0F) case 0x00: case 0x0F: straight1();break; / 00 000 000 case 0x02: left_turn1();delay5ms(); /一级左转 0000 00 10 case 0x01: case 0x03: left_turn2();delay10ms(); / 二级左转 0000 00 01 case 0x04: right_turn1(); /一级右转 0000 01 00 case 0x08: case

7、0x0C: right_turn2(); delay10ms(); / 二级右转 0000 10 00 if(!flag_Metal) PX1=0; /低优先级中断 EX1=0; /关闭外部中断 break; /红外蔽障/*/ /*/void Infra_red() while(1) while(!Infra_redL)&Infra_redR) right_turn2(); while(Infra_redL&(!Infra_redR) left_turn2(); /flag_red=1; if(flag_red) break;/*函数名称:超声波测量函数入口参数:无返回值: 无*/void u

8、ltrasonic_init() /超声波初始化 TMOD=0x11;/定时器方式用于计时 与电机初始化加在一起 TH1=0; TL1=0; /* 设定T0的工作模式为*/ PT1=1; /T1为高优先级中断 /EA=1; /电机初始化已开 IT0=0; /下降沿有效,左传感器 PX0=1; /外部中断零为高优先级中断void ultrasonic() /超声波函数 float temp;/清定时 TR1=1;/开定时 for(i=8;i-) Trig=!Trig; _nop_(); _nop_(); Trig=1; delay_nms(1); EX0=1; /开中断 if(flag=1) /

9、中断标志位置,说明有回波 /以下为路程计算 temp=high_time*256+low_time; temp=(temp/1000)/2; temp*=340; temp=temp/10; dis=temp; flag=0; if(dis50) /20为小车到障碍物的距离 dis0)&(tmp60000)/判断是否超出范围,此设置的范围为到米,实际不能达到米 high_time=TH1;/把计时值放入缓冲 low_time=TL1; else /超出范围则重新测量 high_time=0; low_time=0; /*/void Metal_init() IT1=0; /外部中断*触发外部中

10、断*下降沿触发 EX1=1; /打开外部中断 / EA=1; /打开总中断 已开 bell=0; / 蜂鸣器初始化void delay1s() /误差 0us for(c=167; for(b=171; for(a=16; /if Keil,require use intrins.hINT1_() interrupt 2 / 外部中断1 bell=1; MetalNum+; delay1s(); if(MetalNum=4) swift_stop(); flag_Metal=0;void delay5s() /5秒暂停/ for(c=165; for(b=100; for(a=150;/*I2

11、C 总线通信协议*寻光开始*void start_i2c()/启动i2c 总线 SDA=1; /发送起始条件的数据信号 SCL=1; /起始条件建立时间大于4.7us,延时 SDA=0; /发送起始信号 /起始条件锁定时间大于4 SCL=0; /钳住I2C 总线,准备发送或接收数据void stop_i2c()/结束总线 /发送结束条件的数据信号 /发送结束条件的时钟信号 /结束条件建立时间大于4 /发送I2C 总线结束信号void sendbyte(uchar c)/发送数据传递函数,注意这里发送的是一个字节的数据8bit unsigned char BitCnt; for(BitCnt=0

12、;BitCnt8;BitCnt+) /要传送的数据长度为8 位 if(cBitCnt)&0x80) SDA=1; /判断发送位 else SDA=0; SCL=1; /置时钟线为高,通知被控器开始接收数据位 /保证时钟高电平周期大于4 SCL=0; /8 位发送完后释放数据线,准备接收应答位 if(SDA=1) ack=0; else ack=1; /判断是否接收到应答信号uchar rcvbyte()/接受数据传递函数,注意这里发送的是一个字节的数据8bit uchar retc; uchar BitCnt; retc=0; /置数据线为输入方式BitCnt+) /置时钟线为低,准备接收数据位 /时钟低电平周期大于4.7us /置时钟线为高使数据线上数据有效 retc=retc1; if(SDA=1)retc=retc+1; /读数据位,接收的数据位放入retc 中 return(retc);void noack_i2c(void)/非应答子函数 /

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2