//智能小车避障、循迹、红外遥控C语言代码
// 实现功能有超声波避障, 红外遥控智能小车, 红外传感器实现小车自动循迹, 1602 显示小 车的工作状态,另有三个独立按键分别控制三种状态的转换
// 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起 来比较容易一点
#include <>
#include <>
#include""
#include <>
#defineucharunsigned char
#defineuintunsigned 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 HWP2
#define PWM
/******************************
P1
//红外传感器引脚配置P2k 口
/* L298N管脚定义 */
超声波引脚控制 ******************************/ sbitECHO=P3A2;
sbitTRIG=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=10 为自动循迹模块 1 为自动避障模块
time_ 2 控制 PWM 脉冲计数
state 为超声波状态检测控制全
uint
/**************************/
unsigned charIRC0M[7];// 红外接收头接收数据缓存
unsigned charNumber,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
// 红