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

📄 0809.lst

📁 本篇文章介绍了一种智能小车
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  0809                                                                   09/11/2006 19:43:49 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE 0809
OBJECT MODULE PLACED IN E:\STUDY\WAVEWO~1\CAR\CAR_AD\0809.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\STUDY\WAVEWO~1\CAR\CAR_AD\0809.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  0809                                                                   09/11/2006 19:43:49 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 0x07:TurnLeft(20);break;
 111   2        case 0x0e:TurnLeft(20);break;
 112   2        case 0x06:Forward(80);break;
 113   2        case 0x05:TurnLeft(10);break;
 114   2        case 0x0c:TurnRight(20);break;
 115   2        case 0x03:TurnLeft(20);break;
 116   2        case 0x0a:TurnRight(20);break;
 117   2           default:Forward(30);
C51 COMPILER V6.02  0809                                                                   09/11/2006 19:43:49 PAGE 3   

 118   2           }
 119   1      
 120   1      }
 121          //---------------------检测程序-----------------------------------------------------------------------
 122          void test(void)
 123          {
 124   1         float ave=0;
 125   1         uint how;
 126   1         sensors=0x00;
 127   1         dat[0]-=40;dat[1]-=2;dat[2]+=10;dat[3]-=9;
 128   1         for(how=0;how<i;how++)
 129   1         {
 130   2           if((max<dat[how])&&((dat[how]-max<=80)))//-------取最大值
 131   2                max=dat[how];
 132   2             if((min>dat[how])&&((min-dat[how])<=80))//-----取最小值
 133   2                   min=dat[how];
 134   2              ave=(max+min)/2;
 135   2              sensors<<=1;
 136   2           if(dat[how]>=(ave-2))
 137   2              l1=1;
 138   2         }
 139   1         zuo=l4;qian=l3;hou=l2;you=l1;
 140   1      }
 141          /*-----------------------------------------------------------------------
 142          void hold(void)
 143          {
 144          } */
 145          //------------------------------------------初始化程序--------------------------------------------------
 146          void start(void)
 147          {
 148   1      uint j;
 149   1         EA=1; ET0=1;//-----开中断-----------
 150   1        TMOD=0x02;   //方式二
 151   1          TH0=0xe0;  //
 152   1          TL0=0xe0;
 153   1           i=4; //四个对管只取四路模拟量
 154   1        a=b=c=0;
 155   1        for(j=0;j<8;j++) //清空逻辑量存贮区
 156   1        {dat[j]=0x00;}
 157   1            max=200;
 158   1            min=134;
 159   1      
 160   1      }
 161          //-----------------------------------------------------------------------------------------------------
 162          void get_0809(void)                             /*读AD0809数据程序*/
 163          {
 164   1         int s;
 165   1         for(gate=0;gate<i;gate++)
 166   1         {
 167   2          c=gat_3;     b=gat_2;     a=gat_1;
 168   2          _nop_();_nop_();_nop_();_nop_();
 169   2           ale=1;
 170   2           ale=0;
 171   2           delay(5);
 172   2        while(eoc);
 173   2           oe=1;sum=0x00;

⌨️ 快捷键说明

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