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

📄 111.lst

📁 motor_control.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   111                                                                   09/06/2007 03:49:33 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 111
OBJECT MODULE PLACED IN 111.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 111.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /////////////////////////////////////
   2          //  COPYRIGHT RERVERED BY BUANDXIAHU //
   3          /////////////////////////////////////
   4          
   5          #include "c8051F020.h"
   6          #include "intrins.h"
   7          #include "CH452CMD.H"   // 定义常用命令码及外部子程序
   8          #include "pin.h"
   9          #include "math.h"
  10          #include "key_display.h"                  
  11          
  12          
  13          //定义端口
  14          sbit LEDG       =       P3^4;
  15          sbit BACK       =       P0^4;
  16          sbit START      =       P0^5;
  17          sbit SPOKER =   P0^6;
  18          sbit IN0        =       P1^1;//左
  19          sbit IN1        =       P1^3;//中
  20          sbit IN2        =       P1^0;//右
  21          //sbit IN3      =       P1^5;//斜右
  22          //sbit IN4      =       P1^2;//斜左
  23          sbit IN5        =       P1^2;//正面左
  24          sbit IN6        =       P1^6;//正面右
  25          sbit LASTS      =       P1^4;
  26          sbit LASTB      =       P1^5;
  27          sbit LASTF  =   P3^0;
  28          
  29          //定义全局变量
  30          ulong xdata data0[15];                                                                  //存储AD进来的数再进行运算
  31          ulong avge=0,avge0=0;                                                                   //avge为每30次的AD平均值 avge0为一开始的标准值
  32          uchar time1=0,time2=0,counter1=0,counter2=0,counter3=2;                         //定时器0,1的标志位
  33          uchar a,bb,c,d,e,f,g,right,left;                                                //各红外传感器的输入值
  34          uchar forward=0,black=0,keykey=0,backward=0,xianshi=1;  //各段程序的标志位
  35          uchar T0_OF=0,min=0,sec=0;                                                              //T0_OF时T0溢出次数     ,t_n=0
  36          uchar stage_sec=0,stage_sec1=0,stage_clk_flag=0;                                                //stage_clk_flag为1是阶段计时标志位.不用stage_min
  37          uchar transform=1;                                                                              //1,2两程序互换
  38          uchar chazhi=5;
  39          
  40          uchar wending=1,look=1,lalala=3;
  41          ulong huang0,huang1;
  42          uint wucha;                                                                                     //键盘控制差值
  43          // Peripheral specific initialization functions,
  44          // Called from the Init_Device() function 
  45          
  46           
  47          void Port_IO_Init()
  48          {
  49   1          // P0.0  -  CEX0 (PCA),  Open-Drain, Digital
  50   1         // P0.1  -  CEX1 (PCA),  Open-Drain, Digital
  51   1             XBR0      = 0x10;        /*CEX0-->P0.0,CEX1-->P0.1*/
  52   1             XBR2      = 0x40;        
  53   1      }
  54          
  55          void Interrupts_Init()
C51 COMPILER V8.02   111                                                                   09/06/2007 03:49:33 PAGE 2   

  56          {   
  57   1      
  58   1              IE        = 0x0A; //使能定时器1中断//使能定时器0中断
  59   1          IP        = 0x02;  //使定时器1,0优先级高
  60   1          EIE1      = 0x08; //使能PCA0中断
  61   1          EIE2      = 0x20;  //使能外部键盘中断
  62   1          EIP2      = 0x20;  //使外部键盘优先级高
  63   1      
  64   1      }
  65          
  66          // Initialization function for device,
  67          // Call Init_Device() from your main program
  68          void Init_Device(void)
  69          {
  70   1          Reset_Sources_Init();
  71   1          ADC_Init();
  72   1              PCA_Init();
  73   1              Timer_Init();
  74   1              Oscillator_Init();
  75   1          Voltage_Reference_Init();
  76   1          Port_IO_Init();
  77   1          Interrupts_Init();
  78   1      }
  79          void speedchange(uchar duty,uchar i)
  80          {
  81   1           if(i==0) PCA0CPH0 =(uchar)((100-duty)*2.56);               //把duty值转换,赋值给控制占空比的寄存器
  82   1               if(i==1) PCA0CPH1=(uchar)((100-duty)*2.56); 
  83   1      }
  84          ulong pingjun (void)
  85          {         uchar i;
  86   1            ulong avgad1=0,avgad=0,state=0;
  87   1                state=AD_IN();
  88   1            for(i=0;i<15;i++)
  89   1                {             
  90   2                         data0[i]=state;
  91   2                         avgad+=data0[i];             
  92   2                }
  93   1                 avgad=avgad/15;
  94   1                 for(i=0;i<15;i++)
  95   1                 {       
  96   2                              data0[i]=state;
  97   2                          avgad1+=data0[i];                
  98   2                  }
  99   1                 avgad1=avgad1/15;
 100   1                 avge=(avgad+avgad1)/4;
 101   1                 
 102   1                 if(look==1)                    /*确定是否晃动太厉害*/
 103   1                 {
 104   2                     look=0;
 105   2                         
 106   2                         huang1=huang0;
 107   2                         huang0=avge;
 108   2                         wucha=abs(huang1-huang0);
 109   2                         if(lalala--==0)
 110   2                         {
 111   3                              CH452_Write(CH452_DIG0 | wucha%10);
 112   3                              CH452_Write(CH452_DIG7 | wucha/10);
 113   3                              lalala=3;
 114   3                              }
 115   2                         if(wucha>=6)
 116   2                         {
 117   3                             wending=0;
C51 COMPILER V8.02   111                                                                   09/06/2007 03:49:33 PAGE 3   

 118   3                                 START=0;
 119   3                                 LASTS=1;
 120   3                                 delayms(700);
 121   3                         }
 122   2                         else wending=1;
 123   2                 }            
 124   1                 return(avge);
 125   1      }
 126          void stage_clk_start()
 127          {               
 128   1              CH452_Write(CH452_TWINKLE);
 129   1              DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;
 130   1              stage_clk_flag=1;
 131   1              stage_sec=0;
 132   1              CH452_Write(CH452_DIG4);
 133   1              CH452_Write(CH452_DIG5 | 16);   
 134   1      }
 135          /****精确0.5 * n秒延时****/     
 136          void delay_s(uchar n)
 137          {       unsigned char i,j;
 138   1              for(i=0;i<200;i++)
 139   1                      for(j=0;j<25*n;j++)
 140   1                      {
 141   2                              DELAY_10US;
 142   2                              DELAY_10US;
 143   2                              DELAY_10US;
 144   2                              DELAY_10US;
 145   2                              DELAY_10US;
 146   2                              DELAY_10US;
 147   2                              DELAY_10US;
 148   2                              DELAY_10US;
 149   2                              DELAY_10US;
 150   2                              DELAY_10US;     //100us
 151   2                      } 
 152   1              
 153   1      
 154   1      }
 155          void judgement (uchar modi,uchar modi1,uchar dem)
 156          {       
 157   1              uchar i;
 158   1              if((a&&bb==0&&c==0)||(a&&bb&&c==0))
 159   1              {       left=1;
 160   2                      right=0;
 161   2                      speedchange(modi1,1);
 162   2                      speedchange(modi,0);
 163   2                      delayms(dem);
 164   2              }
 165   1              else if((a==0&&bb==0&&c)||(a==0&&bb&&c))
 166   1              {
 167   2                      left=0;
 168   2                      right=1;         
 169   2                  speedchange(modi1,0);
 170   2                      speedchange(modi,1);
 171   2                      delayms(dem);
 172   2              }
 173   1              else if(a==0&&bb&&c==0)
 174   1              {   
 175   2                      left=0;
 176   2                      right=0;
 177   2                  speedchange(modi,0);
 178   2                      speedchange(modi,1);
 179   2                      delayms(dem);
C51 COMPILER V8.02   111                                                                   09/06/2007 03:49:33 PAGE 4   

 180   2              }
 181   1              else if(a&&bb&&c)        //停止&&(d||e)
 182   1              {
 183   2                                              
 184   2                      START=0;
 185   2                      LASTS=1;
 186   2                      forward=0;
 187   2                      stage_clk_flag=0;//stage_clk_stop();显示平衡后前进的时间
 188   2                      CH452_Write(CH452_DIG0|11);
 189   2                       CH452_Write(CH452_TWINKLE | 0x31);     
 190   2                      for(i=5;i>0;i--)
 191   2                  {   
 192   3                              CH452_Write(CH452_DIG7 | i);
 193   3                              SPOKER=1;
 194   3                              delay_s(1);
 195   3                              SPOKER=0;
 196   3                              delay_s(1);
 197   3                      }
 198   2                      CH452_Write(CH452_DIG7);
 199   2                      stage_clk_start();
 200   2                      CH452_Write((CH452_DIG0)|16);           
 201   2                      if(transform==1)        
 202   2                      {
 203   3                              forward=0;
 204   3                              black=0;
 205   3                              keykey=0;
 206   3                              xianshi=0;
 207   3                              backward=1;             
 208   3                      }
 209   2              }         
 210   1              else //if (a==0&&bb==0&&c==0)
 211   1              {
 212   2                   if(left==1)
 213   2                       {
 214   3                              speedchange(modi1,0);
 215   3                              speedchange(modi,1); }
 216   2                       else if(right==1)
 217   2                       {
 218   3                              speedchange(modi,0);
 219   3                              speedchange(modi1,1);}
 220   2                       else
 221   2                       {
 222   3                      speedchange(modi,0);
 223   3                              speedchange(modi,1);}
 224   2                              delayms(dem);
 225   2              }
 226   1      }
 227          void judgementback (uchar modi,uchar modi1,uchar dem,uchar i)
 228          {       if(i==1)
 229   1              {if(stage_sec>29)
 230   2              {
 231   3               START=0;
 232   3               LASTS=1;
 233   3               stage_clk_flag=0;//stage_clk_stop();   
 234   3               CH452_Write(CH452_DIG0|10);
 235   3               CH452_Write(CH452_TWINKLE | 0x31);     
 236   3               TR0=0;
 237   3               forward=0;
 238   3               black=0;
 239   3               keykey=0;
 240   3               backward=0;
 241   3               xianshi=0;      
C51 COMPILER V8.02   111                                                                   09/06/2007 03:49:33 PAGE 5   

 242   3              }}                               
 243   1              if(f==1&&g==0)
 244   1              {
 245   2               speedchange(modi1,1);
 246   2               speedchange(modi,0);
 247   2               
 248   2              }
 249   1              else if(f==0&&g==1)
 250   1              {
 251   2               speedchange(modi,1);
 252   2               speedchange(modi1,0);
 253   2               
 254   2              }                                               
 255   1              else //if(f==0&&g==0)
 256   1              {
 257   2                      speedchange(modi,1);
 258   2                      speedchange(modi,0);
 259   2              }
 260   1              
 261   1              delayms(dem);
 262   1      }
 263          
 264          
 265          void main(void)
 266          {       
 267   1              uchar chazhi1;
 268   1              Init_Device();
 269   1              CH452_Init();     /* CH452初始化 */
 270   1              LEDG=0; 
 271   1              SPOKER=0;
 272   1              forward=0,
 273   1              black=0,
 274   1              keykey=0,
 275   1              backward=0,
 276   1              xianshi=1;
 277   1              IN0=1;
 278   1              IN1=1;
 279   1              IN2=1;
 280   1              //IN3=1;
 281   1              //IN4=1;
 282   1              IN5=1;
 283   1              IN6=1;
 284   1              START=0;
 285   1              LASTS=1;
 286   1              LASTB=0;
 287   1              LASTF=0;
 288   1              time1=1;
 289   1              time2=1;

⌨️ 快捷键说明

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