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

📄 gai0809.lst

📁 本篇文章介绍了一种智能小车
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  GAI0809                                                                08/21/2006 18:51:43 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE GAI0809
OBJECT MODULE PLACED IN E:\STUDY\WAVEWO~1\CAR\CAR_AD\GAI0809.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\STUDY\WAVEWO~1\CAR\CAR_AD\GAI0809.C DB SB OE

stmt level    source

   1          #include <intrins.h>//这个头文件中有_nop_();
   2          #include <reg52.h>
   3          #include<stdio.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          //----------------------------------------------------------------------------------------------------
   7          char bdata gate=0x00;  //三—八译码器
   8          char bdata sensors=0xff;//存放采集来的数的逻辑电平
   9          sbit l1=sensors^0;
  10          sbit l2=sensors^1;
  11          sbit l3=sensors^2;
  12          sbit l4=sensors^3;
  13          //-----------
  14          sbit lun=P1^6;
  15          //----------------------------------------------------------------------------------------------------
  16          sbit left=P1^0; //左电机使能
  17          sbit right=P1^1;//右电机使能
  18          //---------------------------------
  19          sbit you=P3^7;
  20          sbit hou=P3^6;
  21          sbit qian=P3^5;
  22          sbit zuo=P3^4;
  23          //---------------AD模拟通道选择
  24          sbit gat_3=gate^2;///存放 A
  25          sbit c=P2^6; //////////////    A
  26          sbit gat_2=gate^1;// 存放 B
  27          sbit b=P2^5; /////////////     B
  28          sbit gat_1=gate^0;// 存放 C
  29          sbit a=P2^4; /////////////     C
  30          
  31          sbit eoc=P2^2;//---转换结束标志
  32          sbit oe=P2^3; //---取值允许
  33          sbit ale=P2^7;//--允许转换
  34          uint data dat[8],i;
  35          uint sum=0;
  36          uint  max=200;
  37          uint  min=134;
  38          int tim=0; //--进中断次数100为一个周期
  39          uint speedleft,speedright;//--左右轮转速控制
  40          //---------------------------------------------------------------------------------------------------
  41          void get_0809(void);//--读0809数据         0809用到的程序
  42          void start(void);//--初始化
  43          void test(void); //--检测
  44          void cotor_car(void);//--控制小车
  45          void hold(void);
  46          void stop(void);
  47          //---------------------------------------------------------------------------------------------------
  48          void Forward(char speed);//前进            293用到的程序
  49          void Reverse(char speed,int dely,bit r);//speed--速度,dely--时间,r--左(右)
  50          void TurnRight(uint dey);//右拐
  51          void TurnLeft(uint dey);//左拐
  52          void delay(unsigned int time);//--延时
  53          void stop(void);//---停止
  54          void delay(uint e);//--延时
  55          //---------------------------延时程序-------------------------------------------------------------
C51 COMPILER V6.02  GAI0809                                                                08/21/2006 18:51:43 PAGE 2   

  56          void delay(uint e)
  57          {
  58   1         while(e--)
  59   1         {
  60   2         _nop_();_nop_();_nop_();
  61   2         _nop_();_nop_();}
  62   1      }
  63          //-----------------------前进程序----------------------------------------------------------------
  64          void Forward(char speed)
  65          {
  66   1        P1=0x1b;lun=1;
  67   1       speedleft=speed;
  68   1       speedright=speed+4;
  69   1       TR0=1;
  70   1       delay(15);
  71   1       TR0=0;
  72   1       }
  73          //----------------------左转程序-------------------------------------------------------------------
  74          void TurnLeft(uint dey)
  75          {
  76   1      P1=0x2b;lun=1;
  77   1       speedleft=35;
  78   1       speedright=25;
  79   1       TR0=1;
  80   1       delay(dey);
  81   1       TR0=0;
  82   1      }
  83          //----------------------右转程序-------------------------------------------------------------------
  84          void TurnRight(uint dey)
  85          {
  86   1      P1=0x17; lun=0;
  87   1       speedleft=25;
  88   1       speedright=35;
  89   1       TR0=1;
  90   1       delay(dey);
  91   1       TR0=0;
  92   1      
  93   1      }
  94          /*----------------------------------后退程序----------------------------------------------------
  95          void Reverse(char speed,int dely,bit r)
  96          {
  97          
  98          }
  99          //-----------------------------------停止程序---------------------------------------
 100          void stop(void)
 101          {
 102            TR0=0;right=0;left=0;
 103          }   */
 104          //-------------------------控制小车程序------------------------------------------------------------
 105          void cotor_car(void)                           /*  中间的两个对管为 a b */
 106          {                            /*  左边为 c右边为 d */
 107   1          switch(sensors)
 108   1          {            //--设收到返回光为高电平
 109   2        //------------------------------------------------------------------------------------
 110   2           /*   //case 0x00:hold();break;
 111   2              case 0x01:if(temp==1)
 112   2                        {TurnLeft(50);temp=2;}
 113   2                          // else hold();
 114   2                           break;
 115   2              case 0x02:hold();break;
 116   2              case 0x03:if(temp==2)
 117   2                         {TurnRight(10);temp=1;}
C51 COMPILER V6.02  GAI0809                                                                08/21/2006 18:51:43 PAGE 3   

 118   2                        // else hold();
 119   2                         break;
 120   2              case 0x04:hold();break;
 121   2              case 0x05:if(temp==1)
 122   2                         {TurnLeft(10);temp=2;}
 123   2                         //hold();
 124   2                         break;
 125   2              case 0x06:Forward(80);temp=0;break;
 126   2              case 0x07:TurnRight(5);temp=1;break;
 127   2              case 0x08:if(temp==2)
 128   2                           {TurnRight(50);temp=1;}
 129   2                           //else hold();
 130   2                           break;
 131   2              case 0x09:hold();break;
 132   2              case 0x0a:if(temp==1)
 133   2                         {TurnLeft(10);temp=2;}
 134   2                         //else hold();
 135   2                         break;
 136   2              case 0x0b:hold();break;
 137   2              case 0x0c:if(temp==2)
 138   2                         {TurnRight(10);temp=1;}
 139   2                         //hold();
 140   2                         break;
 141   2              case 0x0d:hold();break;
 142   2              case 0x0e:TurnLeft(5);temp=2;break;
 143   2              case 0x0f:hold();break;   */
 144   2      
 145   2        case 0x07:TurnLeft(20);break;
 146   2        case 0x0e:TurnLeft(20);break;
 147   2        case 0x06:Forward(80);break;
 148   2        case 0x05:TurnLeft(10);break;
 149   2        case 0x0c:TurnRight(20);break;
 150   2        case 0x03:TurnLeft(20);break;
 151   2        case 0x0a:TurnRight(20);break;
 152   2           default:Forward(30);
 153   2           }
 154   1      
 155   1      }
 156          //---------------------检测程序-----------------------------------------------------------------------
 157          void test(void)
 158          {
 159   1         float ave=0;
 160   1         uint how;
 161   1         sensors=0x00;
 162   1         dat[0]-=40;dat[1]-=2;dat[2]+=10;dat[3]-=9;
 163   1         for(how=0;how<i;how++)
 164   1         {
 165   2           if((max<dat[how])&&((dat[how]-max<=80)))//-------取最大值
 166   2                max=dat[how];
 167   2             if((min>dat[how])&&((min-dat[how])<=80))//-----取最小值
 168   2                   min=dat[how];
 169   2              ave=(max+min)/2;
 170   2              sensors<<=1;
 171   2           if(dat[how]>=(ave-2))
 172   2              l1=1;
 173   2         }
 174   1         /*
 175   1         if(l1|l4)
 176   1         {
 177   1           if((dat[0]-dat[3])>4)
 178   1           {l1=0;l4=1; }
 179   1             else if((dat[3]-dat[0])>4)
C51 COMPILER V6.02  GAI0809                                                                08/21/2006 18:51:43 PAGE 4   

 180   1            {l1=1;l4=0;}
 181   1          }
 182   1           /*
 183   1            ave/=2;
 184   1            //ave+=2;
 185   1         sensors=0x00;
 186   1         for(how=0;how<i;how++)
 187   1         {
 188   1              sensors<<=1;
 189   1           if((dat[how]>=ave))
 190   1              sensors|=0x01;
 191   1              else sensors&=0xfe;
 192   1         } */
 193   1         zuo=l4;qian=l3;hou=l2;you=l1;
 194   1      }
 195          /*-----------------------------------------------------------------------
 196          void hold(void)
 197          {
 198          } */
 199          //------------------------------------------初始化程序--------------------------------------------------
 200          void start(void)
 201          {
 202   1      uint j;
 203   1         EA=1; ET0=1;//-----开中断-----------
 204   1        TMOD=0x02;   //方式二
 205   1          TH0=0xe0;  //
 206   1          TL0=0xe0;
 207   1           i=4; //四个对管只取四路模拟量

⌨️ 快捷键说明

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