⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robot1.c

📁 本篇文章介绍了一种智能小车
💻 C
字号:
#include <intrins.h>//这个头文件中有_nop_();
#include <reg52.h>
#include<stdio.h>
unsigned char speedleft,speedright;//右左转速度
unsigned char h,l,flag,time; //高速 低速 小车运行标志 延时时间
int tim=0;//------调脉宽
int j;
//void Start(void);//键盘
void Run(void);//探测
void Forward(char speed);//前进
void Reverse(char speed,int dely,bit r);//speed--速度,dely--时间,r--左(右)
void TurnRight(void);//右拐
void TurnLeft(void);//左拐
void delay(unsigned int time);//--延时
void stop(void);//---停止
sbit zz=P3^4;
void main(void)
{
  P1=0x40;//------------
  P3=0xff;
  h=20;
  l=40;
  flag=0;
  time=50;
   EA=1; ET0=1;//-----开中断-----------
  TMOD=0x02;
    TH0=0x30;
    TL0=0x30;
    TR0=0;
  //  Start();
    while(1) {
                TR0=1;
              P3= 0x0f; //向四个发射管送高电平
             Run();     //探测&&处理
             //Forward(60);
              }
}
//-----------------------------判断键盘程序----------------------------------------
/*void Start(void)
{
  char exit,key;
       exit =1;
     while(exit)
      {
        key = P1;
        if((key & 0x40)==0)  //-------------P1.2接键盘
        exit=0; //按下了键盘 向下进行
      }
}   */
//---------------------------探测&&处理程序--------------------------------------
void Run(void)
{    int dey=5000;
   char sensors;
        sensors = (P3&=0x3f);  //P3^3~P3^0接四个对管
       if((sensors&0x01)==0) { //P3^0为右边对管(当收不到返回光时,P3.0收到L)
        TurnLeft();
        flag = 1;              }
 else  if((sensors & 0x08)==0) { //P3^3为左边对管(当收不到返回光时,P3.3收到L)
         TurnRight();
         flag = 2;             }
 else  if(sensors&0x09)    {  //  P3^1 P3^2为黑线上方对管(当两个管都收到 L 并
        Forward(h);           //    且左右两边对管收到 H 时高速行驶)
        flag = 0;              }

 else  if(((sensors==0x0b==0)||(sensors==0x0d))&&(flag==0))
          Forward(l);//  如果前面的对管下没有黑线 ( P3^2 )
                       //  或后面的对管下没有黑线   ( P3^1 )
                      //  并且在高速时-------减速!!

  else  if((sensors==0x0f|sensors==0x00)&j)
         Forward(l);
  if(sensors&0x10)
  { Reverse(90,50,0); j=0xffffffff;   }
}
//--------------------------------前进程序---------------------------------
void Forward(char speed)
{
  P1=0x64;
  speedright = speed+5;
  speedleft  = speed;
  delay(50);
}
//--------------------------------右转程序---------------------------------
void TurnRight(void)
{
  P1=0x68;
  speedright = l+5;
  speedleft  = l+10;
  delay(50);
}
//--------------------------------左转程序----------------------------------
void TurnLeft(void)
{
  P1=0x54;
  speedright = l+10;
  speedleft  = l-30;
  delay(50);
}
//--------------------------------后退程序---------------(未用)------------
void Reverse(char speed,int dely,bit r)
{
  int x,y;
  P1=0x1b;
  if(r)
  {
    speedright = speed;
    speedleft  = speed+5;
   }
      else
      {
      speedright= speed-5;//5;
       speedleft= speed;
      }
    delay(dely);
    x=y=j;
    while(j--);
    while(x--);
    while(y--);
}
//---------------------------------停止---------------------------------------
void stop(void)
{
          P1&=0xfe;
          P1&=0xfd;
}
//--------------------------------延时程序----------------------------------
void delay(unsigned int time)
{
 while(time--)
 {_nop_();_nop_();}
}
//--------------------------------中断处理----------------------------------
void time0(void) interrupt 1 using 2
{
   if(tim<speedright)
       {      P1&=0xfd;          }
     else
       {      P1|=0x01;          }
   if(tim<speedleft)
       {      P1&=0xfe;          }
         else
       {      P1|=0x02;          }
tim++;
if(tim>=100)
{   tim=0;   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -