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

📄 chaosheng.lst

📁 本篇文章介绍了一种智能小车
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  CHAOSHENG                                                              12/07/2006 20:32:16 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE CHAOSHENG
OBJECT MODULE PLACED IN F:\STUDY\WAVEWO~1\CAR\超声波\CHAOSHENG.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE F:\STUDY\WAVEWO~1\CAR\超声波\CHAOSHENG.C DB SB OE

stmt level    source

   1          #include<reg52.h>
   2          #include<stdio.h>
   3          #include <absacc.h>
   4          #include <string.h>
   5          #include <intrins.h>//这个头文件中有_nop_();
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          //------------------------------变量定义--------------------------
   9          uint data tme = 0,PWM = 0;    //PWM
  10          uint data speed = 6;  //shift
  11          uint data fang_xiang = 70;//直行时AD值
  12          uint data max = 105; //130
  13          uint data min = 30;  //25
  14          //---------超声波测距变量
  15          uint  data shou_left = 0;
  16          uint  data shou_right = 0;
  17          uint  data far = 0;
  18          //超声波口线
  19          //----------------
  20          sbit fa = P2^5;
  21          sbit shou_1 = P2^7;
  22          sbit shou_2 = P2^6;
  23          int data ad = 0x00;
  24          unsigned char bdata DATAIN;
  25          unsigned char bdata CTRL;
  26          sbit BITIN = DATAIN^0;
  27          sbit CBIT = CTRL^0;
  28          //------------------------------口线----------------
  29          //---------------------方向电机
  30          sbit duo = P2^0;
  31          sbit left = P2^1;
  32          sbit right = P2^2;
  33          //----------------------驱动电机
  34          sbit run = P1^3;
  35          sbit b = P1^4;
  36          sbit a = P1^5;
  37          //---------------------0832
  38          sbit SCS = P1^0;
  39          sbit SCLK = P1^1;
  40          sbit SDOUT = P1^2;
  41          sbit SDIN = P1^2;
  42          //------------------------------子程序声明---------------------------------------
  43          void delay( uint dey );
  44          void start( void );
  45          unsigned char get_ad( void );
  46          //---------------------------------初始化----------------------------------------
  47          void start( void )
  48          {
  49   1         EA = 1;
  50   1         ET0 = 1;
  51   1         TMOD = 0x22;
  52   1         TH0 = 0X40;
  53   1         TL0 = 0X40;
  54   1         PT0 = 1;
  55   1         TR0 = 1;
C51 COMPILER V6.02  CHAOSHENG                                                              12/07/2006 20:32:16 PAGE 2   

  56   1         IT0 = 0;
  57   1         EX0 = 1;
  58   1      }
  59          
  60          //---------------------------------0832------------------------------------------
  61          uchar get_ad( )
  62          {
  63   1          uchar data  i;
  64   1          CTRL = 0x07;         //启动位,SGL 选CH0通道,011三位
  65   1          SCS = 1;             //选通允许
  66   1          SCS = 0;
  67   1          for( i = 0;i < 3;i ++ )
  68   1          {
  69   2             SDIN = CBIT;
  70   2             SCLK = 0;           //发三个时钟
  71   2             SCLK = 1;
  72   2             CTRL = CTRL >> 1;
  73   2          }
  74   1          SCLK = 0;
  75   1          SCLK = 1;         //第四个时钟
  76   1      /*------------------------------------------开始读A/D---------------------------*/
  77   1          SCLK = 0;
  78   1          for( i = 0;i < 8;i ++ )
  79   1          {
  80   2             DATAIN = DATAIN << 1;                  //移位8次取到采样的值
  81   2             BITIN = SDOUT;
  82   2             SCLK = 1;
  83   2             SCLK = 0;
  84   2           }
  85   1             SCS = 1;
  86   1             return( DATAIN );
  87   1      }
  88          //--------------------------------delay---------------------------------------
  89          void delay( uint dey )
  90          {
  91   1      while( dey -- );
  92   1      }
  93          //---------------------------------方向调整程序-------------------------------
  94          void regu( int dri )
  95          {
  96   1         int data k;
  97   1         ad = 0;
  98   1         for(k = 0;k < 25;k ++)
  99   1          {
 100   2          ad += get_ad();
 101   2          }
 102   1          ad /= 25;
 103   1          k = ad - dri;
 104   1         if( k > 2)
 105   1            {
 106   2            left = 0;
 107   2            right = 1;
 108   2            }
 109   1            else if( k < -1)
 110   1            {
 111   2            left = 1;
 112   2            right = 0;
 113   2            }
 114   1          else
 115   1           left = right = 0;
 116   1      }
 117          //--------------------------------探障程序---------------------------------------
C51 COMPILER V6.02  CHAOSHENG                                                              12/07/2006 20:32:16 PAGE 3   

 118          void test( void )
 119          {
 120   1         ET1 = 1;
 121   1         TH1 = 0xe9;
 122   1         TL1 = 0xe9;
 123   1         far = 0;
 124   1         TR1 = 1;
 125   1         EX0 = 1;
 126   1         delay ( 100 );
 127   1         EX0 = 0;
 128   1         TR1 = 0;
 129   1      }
 130          //--------------------------------行驶程序-----------------------------------------
 131          void on_the_way( void )
 132          {
 133   1        a = 0; b = 1;  // 小车的前进电平
 134   1        if( shou_right )
 135   1          {
 136   2            fang_xiang += 30;
 137   2              if( fang_xiang > max )
 138   2                 fang_xiang = max;
 139   2          }
 140   1          if( shou_left )
 141   1             {
 142   2               fang_xiang -= 30;
 143   2               if( fang_xiang < min )
 144   2                  fang_xiang = min;
 145   2             }
 146   1         shou_left = 0;
 147   1         shou_right = 0;
 148   1         TR1 = 0;
 149   1      }
 150          //-------------------------------直行------------------------------------------
 151          void zhi_xing ( void )
 152          {
 153   1               if( fang_xiang > 70 )
 154   1                     fang_xiang -= 1;
 155   1               if( fang_xiang < 70 )
 156   1                     fang_xiang += 1;
 157   1      }
 158          //--------------------------------主程序------------------------------------------
 159          void   main ( void )
 160          {
 161   1        uint data i;
 162   1        start( );
 163   1          while(1)
 164   1          {
 165   2             for( i = 0;i < 5;i ++ )
 166   2             {
 167   3              test( );
 168   3              on_the_way( );
 169   3              regu( fang_xiang );
 170   3              }
 171   2          zhi_xing( );
 172   2          }
 173   1      }

⌨️ 快捷键说明

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