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

📄 step.lst

📁 基于51的步进电机控制器,含有人机结口程序,软硬件测试都已通过.是不错的参考代码.
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   STEP                                                                  11/10/2007 15:35:10 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE STEP
OBJECT MODULE PLACED IN Step.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Step.c DEFINE(monitor51) DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg51.h>
   2          #include<stdio.h>
   3          //--------------------------------变量定义-------------------------------------------
   4          //sbit INT_0=P3^2;                        //将p3.2外部中断0
   5          unsigned int FLAG=0;                    //数码管闪烁标志位
   6          unsigned int FLAG1=0;                   //显示切换标志位 1---速度,0---坐标
   7          unsigned int FLAG2=0;                   //电机正反转切换标志位 1---正转,0---反转
   8          unsigned int KEY=0;                     //键值
   9          unsigned int circle=1;                  //坐标单位1的步进圈数
  10          int Fm=0;                               //加工点偏差
  11          unsigned int Xe=0;                      //终点横坐标
  12          unsigned int Ye=0;                      //终点纵坐标
  13          unsigned int Nxy=0;                     //总步数
  14          unsigned int Xi=0;                      //实时横坐标
  15          unsigned int Yi=0;                      //实时纵坐标
  16          unsigned int SpeedX=0;                  //X电机速度(步/秒)
  17          unsigned int SpeedY=0;                  //Y电机速度(步/秒)
  18          unsigned int time0_tmp=0xe880;          //2ms定时显示初值
  19          unsigned int time1_tmp=0;               //速度控制定时初值
  20          //unsigned int fosc=12;                   //单片机晶振(MHz)
  21          unsigned int Led1[8]={1,1,1,1,1,1,1,1}; //两个4位数码管数值(速度)
  22          unsigned int Led2[8]={1,1,1,1,1,1,1,1}; //两个4位数码管数值(坐标)
  23          unsigned char StepX1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//X步进电机正转节拍
  24          unsigned char StepY1[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//Y步进电机反转节拍
  25          unsigned char StepX2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//X步进电机正转节拍
  26          unsigned char StepY2[]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};//Y步进电机反转节拍
  27          unsigned char Led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0x86};//数码管0—9,H,E
  28          //unsigned char Led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x79};//数码管0—9,A,E
  29          
  30          //--------------------------------函数声明-------------------------------------------
  31          void System_init(void);                 //设定INT0的工作方式,供主程序调用
  32          void delay(unsigned int);               //延时程序
  33          void delay10ms(unsigned int);
  34          //void INT0_int(void);                    //外部中断0处理程序
  35          void time0_int(void);                   //定时器0中断
  36          //void time1_int(void);                   //定时器1定时
  37          void Key_Scaning(void);                 //扫描键盘
  38          void dispxy(unsigned int,unsigned int,unsigned int);//数码管显示子程序
  39          void display(void);                     //数码管显示
  40          void Key_Control(void);                 //键盘控制
  41          void Go_line(void);                     //直线差补算法---前进
  42          void Back_line(void);                   //直线差补算法---回零
  43          //-----------------------------------------------------------------------------------
  44          main()
  45          {
  46   1         System_init();                       //中断初始化
  47   1         while(1)
  48   1         {
  49   2            Key_Control();                    //键盘控制
  50   2      
  51   2         }
  52   1      }
  53          //-----------------------------------------------------------------------------------
  54          // 函数名称:System_init()
  55          // 函数功能:初始化设置
C51 COMPILER V7.07   STEP                                                                  11/10/2007 15:35:10 PAGE 2   

  56          // 设定INT0的工作方式
  57          //-----------------------------------------------------------------------------------
  58          void System_init(void)
  59          {
  60   1         P3=0xfc;                             //键盘端口初值           P3.0  P3.1 置零
  61   1         TMOD=0x11;                           //T0、T1都为工作方式1
  62   1         TH0=(time0_tmp/256);                 //2ms定时显示设置
  63   1         TL0=(time0_tmp%256);
  64   1         TH1=(time1_tmp/256);
  65   1         TL1=(time1_tmp%256);
  66   1         TR0=1;
  67   1         //TR1=1;                                      //开启定时器0(定时显示)
  68   1         //IT0=0;                               //选择INT0为电平触发方式
  69   1         
  70   1         IP=0x02;                             //将T0中断设置为高优先级
  71   1         IE=0x82;                             //ET1=1(定时中断1允许),ET0=1(定时中断0允许),EA=1(系统中断允许)
  72   1      }
  73          //-----------------------------------------------------------------------------------
  74          void delay(unsigned int i)
  75          {
  76   1         for(;i>0;i--);
  77   1      }
  78          
  79          void delay10ms(unsigned int i)                  //延时程序????10ms有问题?????
  80          {
  81   1         unsigned int j;
  82   1         for(;i>0;i--)
  83   1            for(j=0;j<1200;j++);
  84   1      }
  85          //------------------------------------------------------------------------------------
  86          // 函数名称:INT0_int()
  87          // 函数功能:外部中断0处理程序
  88          //------------------------------------------------------------------------------------
  89          /*void INT0_int(void) interrupt 0
  90          {
  91          //   EA=0;
  92             Key_Scaning();
  93          //   display();
  94             P3=0xfc;
  95          //   EA=1;
  96          } */
  97          //------------------------------------------------------------------------------------
  98          // 函数名称:time0_int()
  99          // 函数功能:定时器0中断服务子程序,定时动态扫描显示
 100          //------------------------------------------------------------------------------------
 101          void time0_int(void) interrupt 0
 102          {
 103   1         EA=0;                 //关中断
 104   1         TH0=(time0_tmp/256);
 105   1         TL0=(time0_tmp%256);
 106   1         display();
 107   1         EA=1;                 //开中断
 108   1      }
 109          //------------------------------------------------------------------------------------
 110          // 函数名称:time0_int()
 111          // 函数功能:定时器1中断服务子程序,定时扫描键盘
 112          //------------------------------------------------------------------------------------
 113          //void time1_int(void) interrupt 1
 114          //{
 115             //unsigned int j;
 116            //     EA=0;
 117             //j=10000;
C51 COMPILER V7.07   STEP                                                                  11/10/2007 15:35:10 PAGE 3   

 118             //time1_tmp=65536-20000;
 119             //TH1=(time1_tmp/256);
 120            // TL1=(time1_tmp%256);
 121              //TR1=1;
 122          //      Key_Scaning();
 123                  
 124          //      display();
 125          //      EA=1;
 126          
 127          //} 
 128          //-------------------------------------------------------------------------------------
 129          // 函数名称:Key_Scaning()
 130          // 函数功能:扫描键盘
 131          //-------------------------------------------------------------------------------------
 132          void Key_Scaning(void)
 133          {
 134   1         unsigned int keytmp,temp;
 135   1      
 136   1         P3=0x1c;                             //扫描第一列
 137   1         temp=P3;                             //读出数据,看是否在此行上的某列键盘被按下
 138   1         keytmp=temp&0x03;                    //P3.0~P3.1
 139   1         
 140   1         if(keytmp!=0x00)
 141   1         {
 142   2            delay(1);                                             //消抖      ==========================1改为100
 143   2            P3=0x1c;                        
 144   2            temp=P3;
 145   2            keytmp=temp&0x03;
 146   2            if(keytmp!=0x00)                  //再次判断是否有键按下
 147   2            {
 148   3               switch(keytmp)
 149   3               {
 150   4                   case 1:
 151   4                        KEY=1;  break;        //1列1行()
 152   4                   case 2:
 153   4                        KEY=2;  break;        //1列2行()
 154   4                   default :
 155   4                                break;
 156   4               }
 157   3            }
 158   2         }
 159   1         P3=0x2c;                             //扫描第二列
 160   1         temp=P3;                             //读出数据,看是否在此行上的某列键盘被按下
 161   1         keytmp=temp&0x03;                    //P3.0~P3.1
 162   1         if(keytmp!=0x00)
 163   1         {
 164   2            delay(1);
 165   2            P3=0x2c;                          //消抖
 166   2            temp=P3;
 167   2            keytmp=temp&0x03;
 168   2            if(keytmp!=0x00)                  //再次判断是否有键按下
 169   2            { 
 170   3               switch(keytmp)
 171   3               {
 172   4                  case 1:
 173   4                       KEY=3;  break;         //2列1行()
 174   4                  case 2:
 175   4                       KEY=4;  break;         //2列2行()
 176   4                  default :
 177   4                               break;
 178   4               }
 179   3            }
C51 COMPILER V7.07   STEP                                                                  11/10/2007 15:35:10 PAGE 4   

 180   2         }
 181   1         P3=0x4c;                             //扫描第三列
 182   1         temp=P3;                             //读出数据,看是否在此行上的某列键盘被按下
 183   1         keytmp=temp&0x03;                    //P3.0~P3.1
 184   1         if(keytmp!=0x00)
 185   1         {
 186   2            delay(1);
 187   2            P3=0x4c;                          //消抖
 188   2            temp=P3;
 189   2            keytmp=temp&0x03;
 190   2            if(keytmp!=0x00)                  //再次判断是否有键按下
 191   2            { 

⌨️ 快捷键说明

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