跪求基于STC89C51单片机制作循迹小车的资料,本人初学,邮箱564760072@qq.com感激不尽

 我来答
311800c
2011-09-25 · 超过26用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:23.5万
展开全部

买至少3个TCRT5000   LM339 或者其他比较器  

程序

#include<reg52.h>

unsigned char zkb1=0 ;    /*左边电机的占空比*/

unsigned char zkb2=0 ;    /*右边电机的占空比*/

unsigned char t=0;        /* 定时器中断计数器 */

bit flag=0;                /*标志位检测一个pwm波是否结束*/

sbit SEN1=P1^4;   //左二级

sbit SEN2=P1^5;   //左一级

sbit SEN3=P1^6;   //中

sbit SEN4=P1^7;   //右一级

sbit SEN5=P3^0;   //右二级

sbit LED5=P2^0;

sbit ENA=P3^2;

sbit ENB=P3^3;

/*延时函数*/

void delay(unsigned int a){ // 1ms延时程序(12MHz 10倍于51单片机速度时)

unsigned int i;

while( --a != 0){

for(i = 0; i < 600; i++); 

}   

}

/*循迹函数*/

void xunji()

{

 if(SEN3==1&&SEN1==0&&SEN2==0&&SEN4==0&&SEN5==0)//中   直走

 {

  //t=0;

  flag=0;

  P0=0xaf;

  zkb1=99;

  zkb2=99;

  //delay(50);  

}

if(SEN1==1)//左二级  急转  

 {

 //t=0;

  flag=0;

  P0=0x9f;

  //P0=0x5f;

  zkb1=20;

  zkb2=99;

  //delay(200);

  }

 if(SEN3==0&&SEN1==0&&SEN2==1&&SEN5==0&&SEN4==0)//左一级   缓转

{

  flag=0;

 // t=0;

  P0=0xaf;

 zkb1=30;

  zkb2=99;

 

   //delay(200);

  }

 

 if(SEN3==0&&SEN1==0&&SEN2==0&&SEN4==1&&SEN5==0)//右一级  缓转

 {  //t=0;

  flag=0;

  

  P0=0xaf;

  zkb1=99;

  zkb2=30;

   // delay(200);

 }

  if(SEN5==1)//右二级 急转

 {

  flag=0;

 // t=0;

  P0=0x6f;

//P0=0x5f;

  zkb1=99;

  zkb2=20;

    //delay(200);

 }

 //if(SEN1==0&&SEN2==0&&SEN3==0&&SEN4==0&SEN5==0) //终点

 //{

 //P0=0;

// }   

 }    

 

/*初始化函数*/

void Init(void)

{

  TMOD=0X11;                  /* 设定T0的工作模式为2,设定T0的工作模式为1 */

 TH0=(65536-100)/256;

 TL0=(65536-100)%256;

 IT0=1; 

 EA=1;                        /* 开总中断 */

 ET0=1;                       /* 定时器0允许中断 */

 TR0=1;                       /* 启动定时器0 */

 EX0=1;   /*开中断0*/

 P1=0xff;  

 P3=0xff;

 P2=0xff;

 P1=0xff;  

 ENA=0;ENB=0;            

 }

void main()

 Init();

  ENA=1;

  ENB=1;

  

    LED5=0;//红外指示灯亮

    delay(5000);//延时,防止红外脉冲信号被再次利用作为停止指令

    LED5=1;//红外指示灯灭

    

    while(1)

    {  

    xunji();//寻迹  zkb1=99;

 /*  zkb2=99;

P0=0xaf;//后推

   delay(2000);

P0=0x5f;//前进

delay(2000);

P0=0x9f;//右转

delay(2000);

P0=0x6f;//左转

delay(2000);  */

    

   }

}

  

/*中断函数+脉宽调制*/

void timer0() interrupt 1

{  

 TH0=(65536-100)/256;

 TL0=(65536-100)%256;

 

  if(t<zkb1)

   {ENA=1;}

  else 

   {ENA=0;}

   if(t<zkb2)

   {ENB=1;}

  else 

   {ENB=0;}

  

  t++;

  if(t>=100)

  {t=0;}

 

  

}

我做的是5个传感器的。 小车两驱  

298N 图                   比较器电路一查一大把

德晟智能
2024-09-04 广告
舵机在机器人上的应用非常广泛,它通常作为机器人的关键驱动执行部件,用于实现精确的角度控制和位置定位。以下是舵机在机器人上的一些具体应用:1、关节驱动:在仿人型机器人、机械臂或多足机器人中,舵机被用于驱动各个关节的运动。通过控制舵机的旋转角度... 点击进入详情页
本回答由德晟智能提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式