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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

// 实现功能有超声波避障, 红外遥控智能小车, 红外传感器实现小车自动循迹, 1602 显示小 车

的工作状态,另有三个独立按键分别控制三种状态的转换 // 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起 来比较容易一点 #include <> #include <> #include"" #include <> #define uchar unsigned char #define uint unsigned int uchar ENCHAR_PuZh1[8]=" uchar ENCHAR_PuZh2[8]=" uchar ENCHAR_PuZh3[8]=" uchar

ENCHAR_PuZh4[8]=" uchar ENCHAR_PuZh5[8]=" run back stop left right "; ";//1602 显示数组 H. H. H. uchar ENCHAR_PuZh6[8]=" xunji "; uchar ENCHAR_PuZh7[8]=" bizhang"; uchar ENCHAR_PuZh8[8]=" yaokong"; #define HW P2 #define PWM /****************************** P1 //红外传感器引脚配置 P2k 口 /* L298N 管脚定义 */ 超声波引脚控制 ******************************/ sbit ECHO=P3A2; sbit TRIG=P3A3;

///// 红外控制引脚配置 sbit sbit

uchar KEY2=P3A7; KEY 仁 P3M;

state_total=3,state_2=0;// 2 为红外遥控 uchar

uchar time_1 uchar 局变量 // 超声波接收引脚定义 // 超声波发送引脚定

// 红外接收器数据线 // 独立按键控制 总

状态控制全局变量 state_1,DAT; // 红外扫描标志位

time_1=0,time_2=0;// 定时器 1 中断全局变量 控制转弯延时计数也做延时一次 time,timeH,timeL,state=0;// 超声波测量缓冲变量 count=0;

//1602 显示计数 兼红外遥控按键 state_total =2 兼循迹按键 state_total= 0 自动避障 state_total=1

0 为自动循迹模块 1 为自动避障模块 time_ 2 控制 PWM 脉冲计数 state 为超声波状态检测控制全 uint /**************************/ unsigned char IRC0M[7]; // 红外接收头接收数据缓存 unsigned char Number,distance[4],date_data[8]={0,0,0,0,0,0,0,0}; /********* void

void void

IRC0M[2 ]存放的为数据 // 红外接收缓存变量 **/ IRdelay(char x); //x* 红外头专用 delay run(); 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);

void init_test()// 定时器 0

{ 1 外部中断 // 超声波显示 驱动 0 1 延时初始化 TMOD=0x11; TH1=0Xfe; TL1=0x0c; TF0=0; TF1=0; ET0=1; ET1=1; EA=1;

// 设置定时器 0 1 // 装入初值定时一次

工作方式 1 16 位初值定时器

2000hz

// 定时器 // 定时器 // 允许定时器

// 允许定时器 0 方式 1 计数溢出标志 1 方式 1 计数溢出标志 0 中断溢出 1 中断溢出

//

开总中断 if(state_total==1)// 为超声波模块时初始

化 {

TRIG=0; ECHO=0; EX0=0; IT0=1;

}

if(state_total==2)

// 发射引脚低电平 // 接收引脚低电平 // 关闭外部中断

// 由高电平变低电平,触发外部中断 0

// 红外遥控初始

{ IT1=1; EX1=1;

TRIG=1;

}

del ay(60);

} void main()

{ uint i; delay(50); init_test(); TR1=1; LCD1602_Init() ; delay(50); while(state_2==0)

// 外部中断 1 为负跳变触发 // 允许外部中断 1 // 为高

电平 I/O 口初始化

// 等待硬件操

// 开启定时器 1

{

if(KEY1==0)

{

Delay10ms(); // 消除抖动 if(KEY1==0) {

state_total=0; // 总状态定义 0 为自动循迹模块 1 为自动避障模块

2 为红外遥控

while((i<30)&&(KEY1==0))

// 检测按键是否松开

{

Delay10ms(); i++;

}

i=0;

}

}

if(TRIG==0)

{

while((i<30)&&(TRIG==0))

// 检测按键是否松开

{

Delay10ms(); i++;

}

i=0;

}

if(KEY2==0)

{

while((i<30)&&(KEY2==0))

// 检测按键是否松开

{

Delay10ms(); i++; }

i=0;

// 检测按键 s1 是否按下

//检测按键s2是否按下

障模块

Delay10ms(); // 消除抖动 if(TRIG==0) {

state_total=1; 2 为红外遥控

//总状态定义 0 为自动循迹模块 1 为自动避

// 检测按键 s3 是否按下

障模块

Delay10ms(); // 消除抖动 if(KEY2==0) {

state_total=2; 2 为红外遥控

// 总状态定义 0 为自动循迹模块

1 为自动避

相关文档
最新文档