智能小车循迹、避障、红外遥控C语言代码

上传人:壹****1 文档编号:543434263 上传时间:2023-12-01 格式:DOC 页数:13 大小:21.19KB
返回 下载 相关 举报
智能小车循迹、避障、红外遥控C语言代码_第1页
第1页 / 共13页
智能小车循迹、避障、红外遥控C语言代码_第2页
第2页 / 共13页
智能小车循迹、避障、红外遥控C语言代码_第3页
第3页 / 共13页
智能小车循迹、避障、红外遥控C语言代码_第4页
第4页 / 共13页
智能小车循迹、避障、红外遥控C语言代码_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《智能小车循迹、避障、红外遥控C语言代码》由会员分享,可在线阅读,更多相关《智能小车循迹、避障、红外遥控C语言代码(13页珍藏版)》请在金锄头文库上搜索。

1、/智能小车避障、循迹、红外遥控C语言代码/实现功能有超声波避障,红外遥控智能小车,红外传感器实现小车自动循迹,1602显示小车的工作状态,另有三个独立按键分别控制三种状态的转换/注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起来比较容易一点#include #include #includelcd.h#include #define uchar unsigned char #define uint unsigned int uchar ENCHAR_PuZh18= run ;/1602显示数组uchar ENCHAR_PuZh28= back ;uchar ENC

2、HAR_PuZh38= stop ;uchar ENCHAR_PuZh48= left ;uchar ENCHAR_PuZh58= right ;uchar ENCHAR_PuZh68= xunji ;uchar ENCHAR_PuZh78= bizhang;uchar ENCHAR_PuZh88= yaokong;#define HW P2 /红外传感器引脚配置P2k口#define PWM P1 /* L298N管脚定义 */* 超声波引脚控制*/sbit ECHO=P32; /超声波接收引脚定义 兼红外遥控按键 state_total =2sbit TRIG=P33; /超声波发送引脚定

3、义 /红外控制引脚配置sbit KEY2=P37; /红外接收器数据线兼循迹按键state_total= 0sbit KEY1=P34; /独立按键p3.4控制 自动避障 state_total=1 uchar state_total=3,state_2=0;/总状态控制全局变量 0为自动循迹模块1为自动避障模块2为红外遥控 uchar state_1,DAT; /红外扫描标志位 uchar time_1=0,time_2=0;/定时器1中断全局变量time_ 2控制PWM脉冲计数 time_1控制转弯延时计数也做延时一次0.005s uchar time,timeH,timeL,state=

4、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 IRdelay(char x); /x*0.14MS 红外头专用delayvoid run();void back();void stop();void left_90();void left_180();void right_90();

5、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); void init_test()/定时器0 1 外部中断0 1 延时初始化 TMOD=0x11; /设置定时器0 1 工作方式1 16位初值定时器 TH1=0Xfe; /装入初值定时一次为0.0005s 2000hz TL1=0x0c;

6、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; /由高电平变低电平,触发外部中断0 if(state_total=2) /红外遥控初始化 IT1=1; /外部中断1为负跳变触发 EX1=1; /允许外部中断1 TRIG=1; / 3.3为高电平I/O口初始化 delay(60); /等待

7、硬件操作 void main() uint i; delay(50); init_test(); TR1=1; /开启定时器1 LCD1602_Init() ; delay(50); while(state_2=0) if(KEY1=0)/检测按键s1是否按下Delay10ms();/消除抖动if(KEY1=0) state_total=0; /总状态定义0为自动循迹模块 1为自动避障模块 2为红外遥控 while(i30)&(KEY1=0) /检测按键是否松开Delay10ms();i+;i=0; if(TRIG=0)/检测按键s2是否按下Delay10ms();/消除抖动if(TRIG=0

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

9、total=1) /SPEED=90; /自动循迹速度控制 高电平持续次数 占空比为10的低电平 bizhang_test(); if(state_total=0) / SPEED=98; /自动循迹速度控制 高电平持续次数 占空比为40的低电平 xunji_test(); if(state_total=2) /SPEED=98; /自动循迹速度控制 高电平持续次数 占空比为40的低电平 hongwai_test(); void init0_suspend(void) interrupt 0 /3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断0 4 串口中断 time

10、H=TH0; /记录高电平次数 timeL=TL0; / state=1; /标志状态为1,表示已接收到返回信号 EX0=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 = 0; IRdelay(5); if (TRIG=1) EX1 =1; return; /确认IR信号出现 while (!TRIG) /等IR变为高电平,跳过9ms的前导低电平信号。 IRdelay(1); for (j=0;j4;j+) /收集四组数据 for (k=0;k8;k+) /每组数据有8位 while (TRIG) /等 IR 变为低电平,跳过4.5ms的前导高电平信号。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号