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

📄 reda.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=0x08;//避障延时
sbit kk=P1^6;//键盘口
sbit tr1=P3^4;//避障一号管发射
sbit tr2=P3^6;//避障二号管发射
sbit aa=P3^4;
sbit bb=P3^5;
sbit cc=P3^6;
sbit dd=P3^7;
int key;//存放键值
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);//---停止
void bi_zhang(void);
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;
    while(1)
    {
       Start();
       key=1;
          while(key)
            {
                TR0=1;
              Run();     //探测&&处理
                  //   Start();
              }
     }
}
//-----------------------------判断键盘程序----------------------------------------
void Start(void)
{
   if(kk==0)
   {
      delay(200);
     if(kk==0)
       {
       while(kk==0);
       key++;
       }
    if(key==3)
    {key=0;}
    }
}
//---------------------------探测&&处理程序--------------------------------------
void Run(void)
{
   char sensors;
 while(key==1)
 {
        sensors = (P3&=0x3f);  //P3^3~P3^0接四个对管
       if((sensors&0x01)==0) { //P3^0为右边对管(当收不到返回光时,P3.0收到L)
        Turnright();
        flag = 1;              }
 else  if((sensors & 0x08)==0) { //P3^3为左边对管(当收不到返回光时,P3.3收到L)
         Turnleft();
         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))
         Forward(l);
   //Start();
  }
         while(key==2)    //进入避障模式
         {
          bi_zhang();
           Start();
         }
}
//--------------------------------前进程序---------------------------------
void Forward(char speed)
{
  P1=0x64;
  speedright = speed+5;
  speedleft  = speed;
  delay(50);
}
//--------------------------------右转程序---------------------------------
void Turnleft(void)
{
  P1=0x68;
  speedright = l+5;
  speedleft  = l+10;
  delay(50);
}
//--------------------------------左转程序----------------------------------
void Turnright(void)
{
  P1=0x54;
  speedright = l+10;
  speedleft  = l-30;
  delay(50);
}
//--------------------------------后退程序---------------(未用)------------
void Reverse(char speed,int dely,bit r)
{
  int x,y;
  if(r)
  {
     P1=0x17;
    speedright = speed+5;
    speedleft  = speed;//-15;
   }
      else
      {
      P1=0x2b;
      speedright= speed-25;
      speedleft= speed+5;
      }
    delay(dely);
    x=y=j;
    while(j--);
    while(y--);P3|=0x30;
}
//---------------------------------停止---------------------------------------
void stop(void)
{
          P1&=0xfc;
          P1&=0xfc;
}
void bi_zhang(void)
{
int o=10;
    aa=0;
    bb=1;
    P1=0x00;
while(o--)
{
bb=1;dd=1;
aa=!aa;cc=!cc;
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();_nop_();
if(bb==0)
{Reverse(80,10,0); }
if(dd==0)
{Reverse(80,10,1);}
}
Forward(5);
}

//--------------------------------延时程序----------------------------------
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;   }
tr1=!tr1;
tr2=!tr2;
}


⌨️ 快捷键说明

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