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

📄 no1.lst

📁 步进电机多级控制 可以64级调节步进电机转速和正反转
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   NO1                                                                  03/12/2009 19:05:03 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #include <stdio.h>
   4                  
   5          #define uchar unsigned char
   6          #define uint  unsigned int 
   7          
   8          uchar code FFW[8]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
   9          uchar code REV[8]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10}; 
  10          
  11          #define LCD_data  P0;              //数据口
  12          sbit LCD_RS  =  P2^0;            //寄存器选择输入 
  13          sbit LCD_RW  =  P2^1;            //液晶读/写控制
  14          sbit LCD_EN  =  P2^2;            //液晶使能控制
  15          sbit LCD_PSB =  P2^3;            //串/并方式控制
  16          sbit LCD_RST =  P2^5;            //液晶复位端口
  17          
  18          sbit ON = P3^0;
  19          sbit OP = P3^1;
  20          sbit RUN = P2^7;
  21          sbit B0 = P3^7;
  22          sbit B1 = P3^6;
  23          sbit B2 = P3^5;
  24          sbit B3 = P3^4;
  25          sbit B4 = P3^3;
  26          
  27          uchar code dis1[] = {"32级步进速度控制 "};
  28          uchar code dis2[] = {"当前状态   OFF   "};
  29          uchar code dis3[] = {"当前状态   FFW   "};
  30          uchar code dis4[] = {"当前状态   REV   "}; 
  31          uchar code dis5[] = {"转速   0  X      "};
  32          uchar code dis6[] = {" ROUND  00000    "}; 
  33          uchar  S;  
  34          uchar  R;
  35          uchar  IRDIS[2];
  36          uchar  IRCOM[4];
  37          
  38          void ffwr();
  39          void revr();
  40          void showspd();
  41          void showr();
  42          
  43          /*******************************************************************/
  44          /*                                                                 */
  45          /*延迟类程序                                                       */
  46          /*                                                                 */
  47          /*                                                                 */
  48          /*******************************************************************/
  49          
  50          void delayNOP() 
  51                  {    
  52   1                   _nop_();
  53   1               _nop_();
  54   1                       _nop_();
  55   1                       _nop_();
C51 COMPILER V8.05a   NO1                                                                  03/12/2009 19:05:03 PAGE 2   

  56   1                       }
  57          
  58          void delay(int ms)
  59          {
  60   1          while(ms--)
  61   1              {
  62   2            uchar i;
  63   2                for(i=0;i<250;i++)  
  64   2                 {
  65   3                  _nop_();                       
  66   3                      _nop_();
  67   3                      _nop_();
  68   3                      _nop_();
  69   3                 }
  70   2              }
  71   1      }
  72          
  73          void delay1(int n)
  74          {
  75   1          while(n--)
  76   1              {
  77   2            int i;
  78   2                for(i=0;i<250;i++)  
  79   2                 {
  80   3                  _nop_();                       
  81   3                      _nop_();
  82   3                      _nop_();
  83   3                      _nop_();
  84   3                 }
  85   2              }
  86   1      }
  87          
  88          
  89          /*******************************************************************/
  90          /*                                                                 */
  91          /*检查LCD忙状态                                                    */
  92          /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
  93          /*                                                                 */
  94          /*******************************************************************/
  95          bit lcd_busy()
  96           {                          
  97   1          bit result;
  98   1          LCD_RS = 0;
  99   1          LCD_RW = 1;
 100   1          LCD_EN = 1;
 101   1          delayNOP();
 102   1          result = (bit)(P0&0x80);
 103   1          LCD_EN = 0;
 104   1          return(result); 
 105   1       }
 106          /*******************************************************************/
 107          /*                                                                 */
 108          /*写指令数据到LCD                                                  */
 109          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
 110          /*                                                                 */
 111          /*******************************************************************/
 112          void lcd_wcmd(uchar cmd)
 113          {                          
 114   1         while(lcd_busy());
 115   1          LCD_RS = 0;
 116   1          LCD_RW = 0;
 117   1          LCD_EN = 0;
C51 COMPILER V8.05a   NO1                                                                  03/12/2009 19:05:03 PAGE 3   

 118   1          _nop_();
 119   1          _nop_(); 
 120   1          P0 = cmd;
 121   1          delayNOP();
 122   1          LCD_EN = 1;
 123   1          delayNOP();
 124   1          LCD_EN = 0;  
 125   1      }
 126          /*******************************************************************/
 127          /*                                                                 */
 128          /*写显示数据到LCD                                                  */
 129          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
 130          /*                                                                 */
 131          /*******************************************************************/
 132          void lcd_wdat(uchar dat)
 133          {                          
 134   1         while(lcd_busy());
 135   1          LCD_RS = 1;
 136   1          LCD_RW = 0;
 137   1          LCD_EN = 0;
 138   1          P0 = dat;
 139   1          delayNOP();
 140   1          LCD_EN = 1;
 141   1          delayNOP();
 142   1          LCD_EN = 0; 
 143   1      }
 144          /*******************************************************************/
 145          /*                                                                 */
 146          /*  LCD初始化设定                                                  */
 147          /*                                                                 */
 148          /*******************************************************************/
 149          void lcd_init()
 150          { 
 151   1              LCD_RST = 0;             //液晶复位
 152   1          delay(30);                   
 153   1          LCD_RST = 1;      
 154   1          delay(5);
 155   1          LCD_PSB = 1;         //并口方式
 156   1          
 157   1          lcd_wcmd(0x34);      //扩充指令操作
 158   1          delay(5);
 159   1          lcd_wcmd(0x30);      //基本指令操作
 160   1          delay(5);
 161   1          lcd_wcmd(0x0C);      //显示开,关光标
 162   1          delay(5);
 163   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 164   1          delay(5);
 165   1      }
 166          /*********************************************************/
 167          /*                                                       */
 168          /* 设定显示位置                                          */
 169          /*                                                       */
 170          /*********************************************************/
 171          void lcd_pos(uchar X,uchar Y)
 172          {                          
 173   1         uchar  pos;
 174   1         if (X==0)
 175   1           {X=0x80;}
 176   1         else if (X==1)
 177   1           {X=0x90;}
 178   1         else if (X==2)
 179   1           {X=0x88;}
C51 COMPILER V8.05a   NO1                                                                  03/12/2009 19:05:03 PAGE 4   

 180   1         else if (X==3)
 181   1           {X=0x98;}
 182   1         pos = X+Y ;  
 183   1         lcd_wcmd(pos);    
 184   1      }
 185          /*********************************************************/
 186          /*                                                                                               */
 187          /* 转换为ASCII                                                           */
 188          /*                                                       */
 189          /*********************************************************/
 190          void  dataconv()         
 191            {
 192   1           uchar  t; 
 193   1               for (t=0;t<2;t++)   
 194   1           if(IRDIS[t]>9)
 195   1            IRDIS[t]=IRDIS[t]+0x37;
 196   1           else
 197   1                IRDIS[t]=IRDIS[t]+0x30;
 198   1        }
 199           
 200          /*********************************************************/
 201          /*                                                                                               */
 202          /* 主程序                                                                */
 203          /*                                                       */
 204          /*********************************************************/
 205          
 206          void main()
 207             {uchar i,s=1;
 208   1          int  r=0;
 209   1              IE = 0x81;                
 210   1          TCON = 0x01;  
 211   1              EX0 = 0;
 212   1              R=0;    
 213   1      
 214   1              delay(10);                

⌨️ 快捷键说明

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