适用于51单片机的生命探测小车程序代码

利用HC-SR501超声波模块实现小车超声避障
头文件 BoeBot.h
#ifndef __BOEBOT_H__ #define __BOEBOT_H__ #include <at89x52.h> void delay_nms(int ms); void delay_nus(int us); void Forward(void); void Left(void); void Right(void); void Back(void); void REst(void); #endif #include "BoeBot.h" const unsigned char CONST_MILLISECONDCOUNT = 115; const unsigned char CONST_MICROSECONDDIVISER = 12; void delay_nms(int ms) { unsigned char i; while((--ms) >= 0) { for(i = 0;i < CONST_MILLISECONDCOUNT;i++); } } void delay_nus(int us) { us /= CONST_MICROSECONDDIVISER; while((--us) >= 0) {} } void Back(void) { P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1400); P1_0=0; delay_nms(20); } void Left(void) { P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1400); P1_0=0; delay_nms(20); } void Right(void) { P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1600); P1_0=0; delay_nms(20); } void Forward(void) { P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1600); P1_0=0; delay_nms(20); } void REst(void) { int n=0; for(n=1;n<=65;n++) { P1_4=0; delay_nus(1500); P1_4=1; delay_nus(1500); } }
主程序 Main.c()
// 设置成可重复触发模块(下2个短接) // 调节距离电位器逆时针旋转至最小感应距离 // 调节延时电位器逆时针旋转至最小感应延时 // 小车将根据巡逻路线行进,遇到红外信号会停止 #include "BoeBot.h" sbit Led = P2^0; // 指示灯 sbit IR_out = P1^3; // 红外模块 // 方向 typedef enum { Dirtion_Forward, Dirtion_Back, Dirtion_Left, Dirtion_Right }Direction; // 路线定义 typedef struct { Direction dir; int stepCount; }RoadMap; // 巡逻路线 #define MapSize 8 const RoadMap map[MapSize] = { {Dirtion_Forward,400} ,{Dirtion_Right,50} ,{Dirtion_Forward,400} ,{Dirtion_Right,50} ,{Dirtion_Forward,400} ,{Dirtion_Right,50} ,{Dirtion_Forward,400} ,{Dirtion_Right,50} }; void main() { int i,j; IR_out = 1; delay_nms(500); while(1) { for(i = 0;i < MapSize;i++) { for(j = 0;j < map[i].stepCount;j++) { // 是否检测到红外物体,若检测到,则停止 while(IR_out) { Led = 0; delay_nms(10); } Led = 1; // 运动 switch(map[i].dir) { case Dirtion_Forward: Forward(); break; case Dirtion_Back: Back(); break; case Dirtion_Left: Left(); break; case Dirtion_Right: Right(); break; } } } } }