


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#define uchar unsignedchar#define uint unsignedintuchar ENCHAR_PuZh18=runuchar ENCHAR_PuZh28=backuchar ENCHAR_PuZh38=stopuchar ENCHAR_PuZh48=leftuchar ENCHAR_PuZh58=right uchar ENCHAR_PuZh68= xunjiuchar ENCHAR_PuZh78= bizhang;uchar ENCHAR_PuZh88= yaokong;#define HW P2#define PWM P1/ 智能小车避障、循迹、红外遥控 C
2、 语言代码/ 实现功能有超声波避障,红外遥控智能小车,红外传感器实现小车自动循迹, 1602 显示 小车的工作状态,另有三个独立按键分别控制三种状态的转换/ 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起来比较容易一点#include #include #includelcd.h #include ;/1602 显示数组JJJJ/ 红外传感器引脚配置 P2k 口/* L298N 管脚定义 */*超声波引脚控制*/sbitECHO=P3A2;/ 超声波接收引脚定义兼红外遥控按键 state_total =2sbitTRIG=P3A3;/ 超声波发送引脚定义/红外控
3、制引脚配置sbitKEY2=P3A7;/ 红外接收器数据线 兼 循迹按键 state_total= 0sbitKEY1=P3A4;/ 独立按键 p3.4 控制 自动避障 state_total=1ucharstate_total=3,state_2=0;/总状态控制全局变量 0 为自动循迹模块 1 为自动避障模块为红外遥控ucharstate_1,DAT;/ 红外扫描标志位uchartime_1=0,time_2=0;/ 定时器 1 中断全局变量 time_ 2 控制 PWM 脉冲计数time_1控制转弯延时计数也做延时一次0.005suchartime,timeH,timeL,state=0
4、;/超声波测量缓冲变量state 为超声波状态检测控制全局变量uint count=0;/1602显示计数/*/unsigned charIRCOM7; / 红外接收头接收数据缓存IRCOM2 存放的为数据unsigned charNumber,distance4,date_data8=0,0,0,0,0,0,0,0;/ 红外接收缓存变量/*/voidIRdelay(char x); /x*0.14MS 红外头专用 delayvoidrun();void void void void void void void void void void void void voidvoidback();
5、stop();left_90();left_180();right_90();delay(uint dat);/init_test();delay_100ms(uint ms) ;display(uchar temp); / 超声波显示 驱动 bizhang_test();xunji_test();hongwai_test();Delay10ms(void);init_test()/ 定时器 0 1 外部中断 0 1 延时初始化TMOD=0x11;/ 设置定时器 0 1 工作方式 116 位初值定时器TH1=0Xfe;/ 装入初值定时一次为 0.0005s2000hzTL1=0x0c;TF0=
6、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;/ 由高电平变低电平,触发外部中断 0if(state_total=2)/ 红外遥控初始化 IT1=1; / 外部中断 1 为负跳变触发EX1=1;/ 允许外部中断 1TRIG=1;/ 3.3 为高电平 I/O 口初始化delay(60); /
7、等待硬件操作void main() uint i;delay(50);init_test();TR1=1; / 开启定时器 1LCD1602_Init() ;delay(50);while(state_2=0)if(KEY1=0) / 检测按键 s1 是否按下Delay10ms(); / 消除抖动if(KEY1=0)1 为自动避障模state_total=0; / 总状态定义 0 为自动循迹模块 块 2 为红外遥控while(i30)&(KEY1=0) / 检测按键是否松开Delay10ms();i+;i=0;if(TRIG=0) / 检测按键 s2 是否按下Delay10ms(); / 消除
8、抖动if(TRIG=0)1 为自state_total=1; / 总状态定义 0 为自动循迹模块 动避障模块2 为红外遥控while(i30)&(TRIG=0) / 检测按键是否松开Delay10ms();i+;i=0;if(KEY2=0) / 检测按键 s3 是否按下Delay10ms(); / 消除抖动if(KEY2=0)1 为自state_total=2; / 总状态定义 0 为自动循迹模块 动避障模块2 为红外遥控while(i30)&(KEY2=0) / 检测按键是否松开Delay10ms();i=0;init_test();delay(50);/ 等待硬件操作 50usTR1=0;
9、/ 关闭定时器 1if(state_total=1)/SPEED=90;电平/ 自动循迹速度控制高电平持续次数 占空比为 10 的低bizhang_test();if(state_total=0)/ SPEED=98;的低电平xunji_test();if(state_total=2)/ 自动循迹速度控制高电平持续次数 占空比为 40的低电平hongwai_test();void init0_suspend(void)interrupt 0 /3 为定时器 1 的中断号 1 定时器0 的中断号 0 外部中断 12 外部中断 0 4 串口中断timeH=TH0;/ 记录高电平次数timeL=TL
10、0;/state=1;/ 标志状态为 1 ,表示已接收到返回信号EX0=0;/ 关闭外部中断 0void time0_suspend0(void) interrupt 1 /3 为定时器 1 的中断号 1 定时器 0的中断号 0 外部中断 12 外部中断 0 4 串口中断if(state_total=1)/ 自动避障初值装入 TH0=0X00;/ 装入初值TL0=0x00;if(state_total=0)/ 自动循迹初值装入TL0=0x78;time_1+;/ 控制转弯延时计数void IR_IN(void)interruptunsigned char j,k,N=0;EX1 = 0;IRd
11、elay(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 计数过长自动离开。/ 高电平计数完毕IRCOM j=IRCOMj 1;/ 数据最高位补“ 0 ”if (N=8) IRCOMj = IRCOMj | 0x80; / 数据最高位补“ 1 ” N=0;/end for k/end for jif(IRCOM2!=IRCOM3)/ 判断数据码
12、与数据反码是否正确 真确返回 EX1=1;return;EX1 = 1;1 定时void time1_suspend1(void) interrupt 3 /3 为定时器 1 的中断号器 0 的中断号 0 外部中断 1 2 外部中断 0 4 串口中断TH1=0Xec;2000hzTL1=0x78;time_2+;if(state_total!=3)state_2=1;/* if(time_2100)time_2=0;else if(time_2=SPEED)/ 控制 PWM 脉冲计数/ 判断进入按键是否按下/ 退出按键判断/ 装入初值定时一次为进入状态 1 避障 或者0.0005s0 循迹PW
13、M_g;/ 频率为 2000hz 的占空比为高电平的方波else PWM_l; / 为低电平 */用于红外遥控void IRdelay(unsigned char x) /x*0.14MSunsigned char i;while(x-)for (i = 0; i0;c-)for(b=38;b0;b-)for(a=130;a0;a-);void delay(uint dat) / 延时函数用于初始化uint i;for(i=dat;i0;i-)_nop_();void delay_100ms(uint ms) / 延时函数用于超声波 uint i,j;for(i=ms;i0;i-)for( j
14、=200;j0;j-)_nop_();_nop_();_nop_();_nop_();_nop_();/ 小车前进void run(void)PWM=0X56;/ 小车后退void back(void)PWM=0XA9;TR1=1;time_2=0;while(time_2=100); / 延时 0.2sTR1=0;/ 小车停止void stop(void)PWM=0X00;/ 小车左转 180void left_180()/PWM=0X59; / 左两轮反转,右两轮正转PWM=0X50; / 右两轮正转while(time_2=150);/ 延时 0.2stime_2=0;while(tim
15、e_2=150);/ 延时 0.2s/ 小车左转 90 void left_90(void)PWM=0X59;/ 左两轮反转,右两轮正转/PWM=0X50;/ 右两轮正转TR0=1;time_1=0;while(time_1=20);/ 延时 0.2sTR0=0;/ 小车左转 120void left_120(void)PWM=0X59;/ 左两轮反转,右两轮正转/ PWM=0X50;/ 右两轮正转while(time_1=60);TR0=0;/ 小车右转 90void right_90(void)PWM=0XA6;/PWM=0X06;TR0=1;time_1=0;while(time_1=2
16、0);TR0=0;/ 小车右转 120void right_120(void)PWM=0XA6;/ PWM=0X06;TR0=1;/ 延时 0.4s/ 左两轮正转/ 左两轮正转/ 延时 0.2s/ 左两轮正转/ 左两轮正转while(time_1=60);/ 延时 0.4s右两轮反转右两轮反转*自动避障模块* void display(uchar temp) 器报警 1602 显示/ 判断障碍距离小车的距离,左转180 ,前进,峰呤 uint ge,shi,bai,i;if(temp2) back();/ 小于 15 厘米 小车后退再左转left_180();if(count=20)bai=t
17、emp/100; /1602 显示数据date_data5=bai;shi=(temp%100)/10;date_data 6=shi;ge=temp%100%10;date_data7=ge;for(i=0;i8;i+)LCD1602_WriteCom(0x80+i);LCD1602_WriteData(date_datai+48);count=0;void bizhang_test() int i,j=0;uchar distance_dat;delay(50);for(i=0;idistance1)elsedistance0=distance1;if(distance0distance2
18、)elsedistance0=distance2;if(distance0distance3) elsedistance0=distance3;distance_dat=distance0;j=0;display(distance_dat);count+;void xunji_test() int i;delay(50);for(i=0;i8;i+)LCD1602_WriteCom(0x80+i);LCD1602_WriteData(ENCHAR_PuZh6i);/ delay(10);state_1=HW;DAT=state_1&(0x0f); / 判断低 4 位的状态 每隔 5ms 检测一次 switch(DAT)case 0x00:run();break;case 0x01:right_120();break;case 0x02:right_90();break;case 0x04:left_90();break;case 0x06:run();break;right_120();case 0x08:left_120();break;case 0x0c:left_120();break;default:run();break;void hongwa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年公司厂级安全培训考试试题附参考答案(巩固)
- 2024-2025工厂员工安全培训考试试题含答案(能力提升)
- 25年公司、项目部、各个班组安全培训考试试题附答案(满分必刷)
- 2025店铺雇佣合同模板
- 框架协议委托代理
- 民宿拍摄合同范本
- 2025综合承包建设合同
- 2025租房转让合同范本协议书
- 2025年钢材:一级钢项目建议书
- 2025店铺买卖合同样本
- 2024-2029年中国电泳电子纸显示器行业市场现状供需分析及市场深度研究发展前景及规划战略投资分析研究报告
- 中考一模质量分析数学
- (正式版)JBT 6434-2024 输油齿轮泵
- 化工和危险化学品生产经营单位二十条重大隐患判定标准释义(中化协)
- 2023《住院患者身体约束的护理》团体标准解读PPT
- 建筑工地节前停工安全检查表
- 苏科版八年级数学下册题型突破提高类型五、反比例函数与一次函数结合求不等式解集与面积(原卷版+解析)
- 问题解决过程PSP-完整版
- 山西医药投资价值分析报告
- 《影视艺术鉴赏》课件
- 动态血糖管理-动态血糖监测CGM
评论
0/150
提交评论