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

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

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

//实现功能有超声波避障,红外遥控智能小车,红外传感器实现小车自动循迹,1602显示小车的工作状态,另有三个独立按键分别控制三种状态的转换

//注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起来比较容易一点

#include

#include

#include"lcd.h"

#include

#define uchar unsigned char

#define uint unsigned int

uchar ENCHAR_PuZh1[8]=" run ";//1602显示数组

uchar ENCHAR_PuZh2[8]=" back ";

uchar ENCHAR_PuZh3[8]=" stop ";

uchar ENCHAR_PuZh4[8]=" left ";

uchar ENCHAR_PuZh5[8]=" right ";

uchar ENCHAR_PuZh6[8]=" xunji ";

uchar ENCHAR_PuZh7[8]=" bizhang";

uchar ENCHAR_PuZh8[8]=" yaokong";

#define HW P2//红外传感器引脚配置P2k口

#define PWM P1 /* L298N管脚定义*/

/******************************

超声波引脚控制

******************************/

sbit ECHO=P3^2;//超声波接收引脚定义兼红外遥控按键state_total =2 sbit TRIG=P3^3; //超声波发送引脚定义

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

sbit KEY2=P3^7; //红外接收器数据线兼循迹按键state_total= 0

sbit KEY1=P3^4; //独立按键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=0;//超声波测量缓冲变量state为超声波状态检测控制全局变量

uint count=0;//1602显示计数

/**************************/

unsigned char IRCOM[7]; //红外接收头接收数据缓存IRCOM[2]存放的为数据unsigned char Number,distance[4],date_data[8]={0,0,0,0,0,0,0,0};//红外接收缓存变量

/***********/

void IRdelay(char x); //x*0.14MS 红外头专用delay

void 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);

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; //由高电平变低电平,触发外部中断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() ;

delay(50);

while(state_2==0)

相关文档
最新文档