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

📄 motor_main.lst

📁 单片机控制的步进电机 不是很完善 但是能实现基本功能
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MOTOR_MAIN                                                            03/24/2007 20:31:56 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MOTOR_MAIN
OBJECT MODULE PLACED IN Motor_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Motor_Main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #define uchar   unsigned char
   2          #define uint    unsigned int
   3          #define low_speed       10
   4          #define high_speed      100
   5          #include<reg52.h>
   6          #include<Key_Define.h>
   7          #include<Get_Key_Declare.h>
   8          #include<Lcd_Init_Declare.h>
   9          //#include<Main_Define.h>       
  10          bit             SData_flag=0;
  11          bit             step_permit=0;
  12          bit             direction,sisdf;//set direction flag
  13          bit             stepflag=0;     //步进标志      
  14          bit             run=0;          //全带运行标志
  15          bit             stopflag=0;
  16          uchar   int_cnt;
  17          uchar    speed=50,step_length=7,thdata,tldata;
  18          sbit    AA=     P3^4;
  19          sbit    AB=     P3^5;
  20          sbit    BA=     P3^6;
  21          sbit    BB=     P3^7;
  22          uchar   cnt;
  23          uchar   sicnt=0;                        
  24          //产生脉冲波形
  25          void Timer0(void)interrupt 1 using 1
  26                  {
  27   1                      TL0=(tldata+10);
  28   1                      TH0=thdata;                                             
  29   1                      if(step_permit)         int_cnt++;                                                      
  30   1                      if(direction)           //反转
  31   1                              {
  32   2                                      switch(cnt)
  33   2                                              {
  34   3                                                      case 0:AA=1;AB=1;BA=0;BB=0;     break;
  35   3                                                      case 1:AA=0;AB=1;BA=1;BB=0;     break;
  36   3                                                      case 2:AA=0;AB=0;BA=1;BB=1;     break;
  37   3                                                      case 3:AA=1;AB=0;BA=0;BB=1;     break;
  38   3                                                      default:                break;
  39   3                                              }                       
  40   2                              }
  41   1                      else    {
  42   2                                      switch(cnt)
  43   2                                              {
  44   3                                                      case 0:AA=1;AB=1;BA=0;BB=0;     break;
  45   3                                                      case 1:AA=1;AB=0;BA=0;BB=1;     break;
  46   3                                                      case 2:AA=0;AB=0;BA=1;BB=1;     break;
  47   3                                                      case 3:AA=0;AB=1;BA=1;BB=0;     break;
  48   3                                                      default:                break;
  49   3                                              }                       
  50   2                              }
  51   1                      ++cnt;
  52   1                      if(cnt==4)cnt=0;        
  53   1              }
  54          void SeriCab(void)interrupt 4 using 2
  55                  {
C51 COMPILER V7.06   MOTOR_MAIN                                                            03/24/2007 20:31:56 PAGE 2   

  56   1                      uchar   sda;            
  57   1                      
  58   1                      /*if(RI)*/RI=0;                         
  59   1                      sda=SBUF;
  60   1                      if(sda>=64)
  61   1                              {
  62   2                                      if((sda<95)&&(run==0)){step_length=sda*3;stepflag=1;}
  63   2                                      else    if((sda==0x61)&&(SData_flag==1)){run=1;stopflag=0;}
  64   2                                      else    if(sda==0x63){direction=0;sisdf=1;}
  65   2                                      else    if(sda==0x64){direction=1;sisdf=1;}
  66   2                                      else    if((sda==0x62)&&(SData_flag==1)){run=0;stopflag=1;}
  67   2                                      else    if((sda==0x65)&&(SData_flag==1)){step_permit=1;}
  68   2                                                      
  69   2                              }
  70   1                      else            speed=sda*2;                                            
  71   1                      ++sicnt;
  72   1                      //if((sicnt==1)&&(stepflag==0))SData_flag=1;            
  73   1                      if(sicnt==2){sicnt=0;SData_flag=1;}                     
  74   1              }
  75          
  76          void    ST_Convert(void)//将转速转换为T0常数
  77                  {
  78   1                      //unsigned long tdata;
  79   1                      uint    tdbuf;
  80   1                      tdbuf=(1000000/speed)/192;              
  81   1                      tdbuf=0xffff-tdbuf;
  82   1                      tldata=(uchar)(tdbuf&0xff);
  83   1                      thdata=(uchar)((tdbuf>>8)&0xff);                
  84   1              }
  85          
  86          void    Get_Speed(void)//转速设置子程序
  87                  {
  88   1                      uchar   spl,sph,spk,key,spd;
  89   1                      spd=speed;              
  90   1                      do      {       
  91   2                                      //key=0;
  92   2                                      key=GetKey();                           
  93   2                                      spk=spd/100;
  94   2                                      sph=(spd%100)/10;
  95   2                                      spl=spd%10;
  96   2                                      if(spk==0)
  97   2                                              {
  98   3                                                      spk=10;
  99   3                                                      if(sph==0)sph=10;
 100   3                                              }
 101   2                                      Right_Show_Figure(5,16,spk);
 102   2                                      Right_Show_Figure(5,24,sph);
 103   2                                      Right_Show_Figure(5,32,spl);                            
 104   2                                      if((key==UP)&&(spd<high_speed))spd+=1;
 105   2                                      else if((key==DOWN)&&(spd>low_speed))spd-=1;                            
 106   2                              }while(key!=ENTER);     
 107   1                      speed=spd;                      
 108   1              }
 109          
 110          void    Get_Step_Length(void)//预置步长
 111                  {
 112   1                      uchar   length=10,key,lthh,lthl;        
 113   1                      do      {       
 114   2                                      key=GetKey();
 115   2                                      lthh=length/10;
 116   2                                      lthl=length%10;
 117   2                                      if(lthh==0)
C51 COMPILER V7.06   MOTOR_MAIN                                                            03/24/2007 20:31:56 PAGE 3   

 118   2                                              lthh=10;                                                                        
 119   2                                      Right_Show_Figure(5,24,lthh);
 120   2                                      Right_Show_Figure(5,32,lthl);                           
 121   2                                      if((key==UP)&&(length<45))length+=1;
 122   2                                      else if((key==DOWN)&&(length>7))length-=1;                              
 123   2                              }while(key!=ENTER);
 124   1                      length&=0x3f;
 125   1                      step_length=length;
 126   1              }
 127          
 128          bit     Operating(void) //开机初始化程序
 129                  {               uchar   key;
 130   1                              bit             step_flag=0;                    
 131   1                              Show_Null();
 132   1                              key=0;
 133   1                              Show_Sign();            //显示===========
 134   1                              Show_Speed_Set();       //显示"请预置转速 "
 135   1                              Get_Speed();            //转速设置子程序
 136   1                              //ST_Convert();         //将转速转换为T0常数
 137   1                              Show_Null();
 138   1                              Show_Operation_Model();
 139   1                      while(key!=LEFT&&key!=RIGHT)
 140   1                                      key=GetKey();
 141   1                              Show_Null();            
 142   1                       if(key==RIGHT)                 //步进

⌨️ 快捷键说明

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