基于51单片机的四路红外传感器的循迹小车

基于51单片机的四路红外传感器的循迹小车

(班门弄斧,请各位大神批评指正,烦请提出宝贵意见。)

循迹小车

  1. 材料:①:51单片机小车具体结构及相关部件清单见该文章
    ②:红外四路循迹模块(图片来源与网络,侵删)基于51单片机的四路红外传感器的循迹小车_第1张图片
    (功能简述:四对红外发射和接收管,工作时成对用,当发射管发出红外光,照射在白纸上,接收管收到红外信号,输出端输出低电平,照射到黑纸上,光被吸收,接收管收不到红外信号,输出端输出高电平,所以可以用来找追寻黑线)
  2. 步骤:①把红外四路循迹模块的输出端接到P1.0~P1.3;
    ②把带有上拉电阻的单片机的四路IO口分别接到电机驱动上(我是选P0)
    ③给单片机、电机驱动、红外循迹模块接电源线;
    ④下载程序到单片机。
    ⑤开机运行,测试。
  3. 代码:
    应该注意的一点是:
    **给电机驱动的四路IO口最好要带上拉电阻,不然可能驱动不了。**我就在这卡了好久。
#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器
#define time_0 800
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


sbit output_date1=P0^7;
sbit output_date2=P0^6;
sbit output_date3=P0^5;
sbit output_date4=P0^4;

#define GO_STAIGHT  {output_date1=1,output_date2=0,output_date3=1,output_date4=0;}	        //前进
#define GO_BACK     {output_date1=0,output_date2=1,output_date3=0,output_date4=1;}			//后退
#define TURN_RIGHT	{output_date1=1,output_date2=0,output_date3=0,output_date4=1;}		    //右转
#define TURN_LEFT   {output_date1=0,output_date2=1,output_date3=1,output_date4=0;}		    //左转
#define STOP_CAR    {output_date1=0,output_date2=0,output_date3=0,output_date4=0;}			//停车

#define Left_1_led        P1^0	   //四路寻迹模块接口第一路
#define Left_2_led        P1^1	   //四路寻迹模块接口第二路
#define Right_1_led       P1^2	   //四路寻迹模块接口第三路
#define Right_2_led       P1^3	   //四路寻迹模块接口第四路


void delay(u16 n);



void delay(u16 n)   //1ms   (误差 -0.651041666667us)
{
   u16 i ;
    unsigned char a,b;
	for(i=1;i<=n;i++)
	{
    for(b=102;b>0;b--)
        for(a=3;a>0;a--);
	}
}

void main()
{

	while(1)
	{		 
			  switch(P1&0x0f)
				{
					case 0x00:						// 全部没有压线,前进
						GO_STAIGHT;
						break;
					case 0x01:						// 右压线,左转
						TURN_LEFT;
						delay(10);
						break;
					case 0x02:						// 右压线,左转
					   TURN_LEFT;
					   delay(5);
						break;
					case 0x04:						// 左压线,右转
					TURN_RIGHT;
						delay(5);					//转向延时
						break;
					case 0x08:						// 左压线,右转
					TURN_RIGHT;					
						delay(10);					//转向延时
						break;
					case 0x0f:
						 STOP_CAR;
						 break;
					default:
					break;
	
	             }
    
		
		}	
		
		
}



你可能感兴趣的:(蓝牙小车)