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

内容发布更新时间 : 2024/5/2 20:15:12星期一 下面是文章的全部内容请认真阅读。

.

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

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

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

#define uchar unsigned char #define uint unsigned int

uchar ENCHAR_PuZh1[8]=\ run \显示数组 uchar ENCHAR_PuZh2[8]=\ back %uchar ENCHAR_PuZh3[8]=\ stop %uchar ENCHAR_PuZh4[8]=\ left %uchar ENCHAR_PuZh5[8]=\ right %uchar ENCHAR_PuZh6[8]=\ %uchar ENCHAR_PuZh7[8]=%uchar ENCHAR_PuZh8[8]=\#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)

'.

.

{

if(KEY1==0) //检测按键s1是否按下 { Delay10ms(); //消除抖动 if(KEY1==0) { state_total=0; //总状态定义 0为自动循迹模块 1为自动避障模块 2为红外遥控 while((i<30)&&(KEY1==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0; } } if(TRIG==0) //检测按键s2是否按下 { Delay10ms(); //消除抖动 if(TRIG==0) { state_total=1; //总状态定义 0为自动循迹模块障模块 2为红外遥控 while((i<30)&&(TRIG==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0; } } if(KEY2==0) //检测按键s3是否按下 { Delay10ms(); //消除抖动 if(KEY2==0) { state_total=2; //总状态定义 0为自动循迹模块障模块 2为红外遥控 while((i<30)&&(KEY2==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0;

'.

为自动避为自动避 1 1