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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(智能小车循迹避障红外遥控C语言知识学习代码Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

智能小车循迹避障红外遥控C语言知识学习代码Word下载.docx

1、 /红外扫描标志位 uchar time_1=0,time_2=0;/定时器1中断全局变量time_ 2控制PWM脉冲计数 time_1控制转弯延时计数也做延时一次0.005s uchar time,timeH,timeL,state=0;/超声波测量缓冲变量 state为超声波状态检测控制全局变量 uint count=0; /1602显示计数/*/unsigned char IRCOM7; /红外接收头接收数据缓存 IRCOM2存放的为数据unsigned char Number,distance4,date_data8=0,0,0,0,0,0,0,0; /红外接收缓存变量/*/void

2、IRdelay(char x); /x*0.14MS 红外头专用delayvoid run();void back();void stop();void left_90();void left_180();void right_90();void delay(uint dat); /void init_test();void delay_100ms(uint ms) ;void display(uchar temp); /超声波显示 驱动void bizhang_test();void xunji_test();void hongwai_test();void Delay10ms(void);

3、 void init_test()/定时器0 1 外部中断0 1 延时初始化 TMOD=0x11; /设置定时器0 1 工作方式1 16位初值定时器 TH1=0Xfe; /装入初值定时一次为0.0005s 2000hz TL1=0x0c; TF0=0; /定时器0方式1计数溢出标志 TF1=0; /定时器1方式1计数溢出标志 ET0=1; /允许定时器0中断溢出 ET1=1; /允许定时器1中断溢出 EA=1; /开总中断 if(state_total=1)/为超声波模块时初始化 TRIG=0; /发射引脚低电平 ECHO=0; / 接收引脚低电平 EX0=0; /关闭外部中断 IT0=1;

4、/由高电平变低电平,触发外部中断0 if(state_total=2) /红外遥控初始化 IT1=1; /外部中断1为负跳变触发 EX1=1; /允许外部中断1 TRIG=1; / 3.3为高电平I/O口初始化 delay(60); /等待硬件操作 void main() uint i; delay(50); init_test(); TR1=1; /开启定时器1 LCD1602_Init() ; while(state_2=0) if(KEY1=0) /检测按键s1是否按下 Delay10ms(); /消除抖动 if(KEY1=0) state_total=0; /总状态定义 0为自动循迹模

5、块 1为自动避障模块 2为红外遥控 while(i30)&(KEY1=0) /检测按键是否松开 Delay10ms(); i+; i=0; if(TRIG=0) /检测按键s2是否按下 if(TRIG=0) state_total=1; /总状态定义 0为自动循迹模块 1为自动避障模块 2为红外遥控(TRIG=0) /检测按键是否松开 if(KEY2=0) /检测按键s3是否按下 if(KEY2=0) state_total=2;(KEY2=0) /检测按键是否松开 /等待硬件操作 50us TR1=0; /关闭定时器1 if(state_total=1) /SPEED=90; /自动循迹速度

6、控制 高电平持续次数 占空比为10的低电平 bizhang_test(); if(state_total=0) / SPEED=98; /自动循迹速度控制 高电平持续次数 占空比为40的低电平 xunji_test(); if(state_total=2) /SPEED=98; hongwai_test(); void init0_suspend(void) interrupt 0 /3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断0 4 串口中断 timeH=TH0; /记录高电平次数 timeL=TL0; state=1; /标志状态为1,表示已接收到返回信号 E

7、X0=0; /关闭外部中断0 void time0_suspend0(void) interrupt 1 /3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断0 4 串口中断 if(state_total=1) / 自动避障初值装入 TH0=0X00; /装入初值 TL0=0x00; if(state_total=0) /自动循迹初值装入 TH0=0Xec; /装入初值 定时一次0.005s 200hz TL0=0x78; time_1+; /控制转弯延时计数 void IR_IN(void) interrupt 2 unsigned char j,k,N=0; EX1

8、 = 0; IRdelay(5); if (TRIG=1) EX1 =1; return; /确认IR信号出现 while (!TRIG) /等IR变为高电平,跳过9ms的前导低电平信号。 IRdelay(1); for (j=0;j4;j+) /收集四组数据 for (k=0;k=30) EX1=1; return; /0.14ms计数过长自动离开。 /高电平计数完毕 IRCOMj=IRCOMj 1; /数据最高位补“0” if (N=8) IRCOMj = IRCOMj | 0x80; /数据最高位补“1” N=0; /end for k /end for j if(IRCOM2!=IRC

9、OM3) /判断数据码与数据反码是否正确 真确返回 EX1=1; EX1 = 1; void time1_suspend1(void) interrupt 3 /3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断0 4 串口中断 TH1=0Xec; /装入初值定时一次为0.0005s 2000hz TL1=0x78; time_2+; /控制PWM 脉冲计数 if(state_total!=3) /判断进入按键是否按下 进入状态1 避障 或者 0 循迹 state_2=1; /退出按键判断/* if(time_2100) time_2=0; else if(time_2

10、=SPEED) PWM_g; /频率为2000hz的占空比为高电平的方波 else PWM_l; /为低电平 */ void IRdelay(unsigned char x) /x*0.14MS用于红外遥控 unsigned char i; while(x-) for (i = 0; i0;c-) for(b=38;bb-) for(a=130;aa-);void delay(uint dat) /延时函数用于初始化 uint i; for(i=dat;ii-) _nop_();void delay_100ms(uint ms) /延时函数用于超声波 uint i,j; for(i=ms; f

11、or(j=200;jj-)/小车前进void run(void) PWM=0X56;/小车后退void back(void) PWM=0XA9; TR1=1; while(time_2=100); /延时0.2s/小车停止void stop(void) PWM=0X00; /小车左转180 void left_180() /PWM=0X59; /左两轮反转,右两轮正转 PWM=0X50; /右两轮正转=150);/小车左转 90void left_90(void) PWM=0X59; /PWM=0X50; TR0=1; time_1=0;while(time_1=20); TR0=0;/小车左

12、转 120void left_120(void) / PWM=0X50; while(time_1=60); /延时0.4s/小车右转 90void right_90(void) PWM=0XA6; /左两轮正转 右两轮反转 /PWM=0X06; /左两轮正转 TR0=1;/小车右转 120void right_120(void) / PWM=0X06;/* 自动避障模块*/ void display(uchar temp) /判断障碍距离小车的距离,左转180,前进,峰呤器报警1602显示 uint ge,shi,bai,i; if(temp2) /小于15厘米 小车后退 再左转 back(

13、); left_180(); if(count=20) bai=temp/100; /1602显示数据 date_data5=bai; shi=(temp%100)/10; date_data 6=shi; ge=temp%100%10; date_data7=ge; for(i=0;idistance1) else distance0=distance1; if(distance0distance2) else distance0=distance2; if(distance0distance3) distance0=distance3; distance_dat=distance0; j=

14、0; display(distance_dat); count+;void xunji_test() int i; LCD1602_WriteCom(0x80+i); LCD1602_WriteData(ENCHAR_PuZh6i);while(1) / delay(10); state_1=HW; DAT=state_1&(0x0f); /判断低4位的状态 每隔5ms检测一次 switch(DAT) case 0x00: run(); break; case 0x01: right_120(); case 0x02: right_90(); case 0x04: left_90(); bre

15、ak; case 0x06: case 0x03: case 0x08: left_120(); case 0x0c: left_120(); default:void hongwai_test() int i; for(i=0; LCD1602_WriteData(ENCHAR_PuZh8i);/ TR1=1; Number=IRCOM2; switch(Number) case 0x18: PWM=0X56; /前进 for(i=0; LCD1602_WriteData(ENCHAR_PuZh1i); case 0x08: PWM=0X50; /右两轮正转 左转 for(i=0; LCD1602_WriteData(ENCHAR_PuZh4i); case 0x1c: PWM=0X00; LCD1602_WriteData(ENCHAR_PuZh3i); break; case 0x5a: PWM=0X06; /左两轮正转 右转 LCD1602_WriteData(ENCHAR_PuZh5i); case 0x52: PWM=0XA9; /后退 LCD1602_WriteData(ENCHAR_PuZh2i); default:break; /display(IRCOM2);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1