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

📄 s_ motor-key.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   S__MOTOR_KEY                                                         11/23/2006 20:59:18 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE S__MOTOR_KEY
OBJECT MODULE PLACED IN S_ MOTOR-key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE S_ MOTOR-key.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1           
   2          /*****************************************************************/
   3          /*                                                                *
   4          /* ME500单片机开发系统演示程序 - 步进电机键控正反转实验           * 
   5          /*                                                                *
   6          /* LCD1602显示                                                    *
   7          /*                                                                *
   8          /* 版本: V1.0 (2006/11/20)                                       *
   9          /* 作者: gguoqing (Email: gguoqing@willar.com)                   *
  10          /* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界)*
  11          /* 时间: 2006/06/03                                              *
  12          /*                                                                *
  13          /*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED *
  14          /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      *
  15          /*                                                                *
  16          /*****************************************************************/
  17              
  18          #include <reg51.h>       //51芯片管脚定义头文件
  19          #include <intrins.h>     //内部包含延时函数 _nop_();
  20          
  21          #define uchar unsigned char
  22          #define uint  unsigned int
  23          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  24          
  25          
  26          uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
  27          uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
  28          
  29          sbit  K1   = P1^4;       //运行与停止
  30          sbit  K2   = P1^5;       //设定圈数
  31          sbit  K3   = P1^6;       //方向转换
  32          sbit  K4   = P1^7;       //速率调整
  33          sbit  BEEP = P3^7;       //蜂鸣器
  34          
  35          sbit  LCD_RS = P2^0;             
  36          sbit  LCD_RW = P2^1;
  37          sbit  LCD_EN = P2^2;
  38          
  39          bit  on_off=0;            //运行与停止标志
  40          bit  direction=1;         //方向标志
  41          bit  rate_dr=1;           //速率标志
  42          bit  snum_dr=1;           //圈数标志
  43          
  44          uchar code  cdis1[ ] = {" STEPPING MOTOR "};
  45          uchar code  cdis2[ ] = {"CONTROL  PROCESS"};
  46          uchar code  cdis3[ ] = {"    STOP        "};
  47          uchar code  cdis4[ ] = {"NUM:    RATE:   "};
  48          uchar code  cdis5[ ] = {"  RUNNING       "};
  49          
  50          uchar   m,v=0,q=0;
  51          
  52          uchar   number=0,number1=0; 
  53          uchar   snum=5,snum1=5;       //预设定圈数
  54          uchar   rate=8;               //预设定速率
  55          uchar   data_temp,data_temp1,data_temp2;   
C51 COMPILER V8.05a   S__MOTOR_KEY                                                         11/23/2006 20:59:18 PAGE 2   

  56          
  57          /********************************************************/
  58          /*                                                  
  59          /* 延时t毫秒 
  60          /* 11.0592MHz时钟,延时约1ms                                     
  61          /*                                                      
  62          /********************************************************/
  63          void delay(uint t)
  64          {                           
  65   1         uchar k;
  66   1         while(t--)
  67   1         {
  68   2           for(k=0; k<125; k++)
  69   2           { }
  70   2         }
  71   1      }
  72          
  73          /********************************************************/
  74          void delayB(uchar x)    //x*0.14MS
  75           {
  76   1         uchar i;
  77   1         while(x--)
  78   1         {
  79   2           for (i=0; i<13; i++)
  80   2           { }
  81   2         }
  82   1       }
  83          
  84          /********************************************************/
  85          void beep()
  86           {
  87   1         uchar j;
  88   1         for (j=0;j<180;j++)
  89   1          { 
  90   2           delayB(5);
  91   2           BEEP=!BEEP;                 //BEEP取反
  92   2          } 
  93   1           BEEP=1;                    //关闭蜂鸣器
  94   1               delay(170);
  95   1       }
  96          
  97          /********************************************************/
  98          /*                                                                
  99          /*检查LCD忙状态                                                   
 100          /*lcd_busy为1时,忙,等待。为0时,闲,可写指令与数据。     
 101          /*                                                               
 102          /********************************************************/ 
 103          
 104          bit lcd_busy()
 105           {                          
 106   1          bit result;
 107   1          LCD_RS = 0;
 108   1          LCD_RW = 1;
 109   1          LCD_EN = 1;
 110   1          delayNOP();
 111   1          result = (bit)(P0&0x80);
 112   1          LCD_EN = 0;
 113   1          return(result); 
 114   1       }
 115          
 116          /********************************************************/
 117          /*                                                                 
C51 COMPILER V8.05a   S__MOTOR_KEY                                                         11/23/2006 20:59:18 PAGE 3   

 118          /*写指令数据到LCD                                                 
 119          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             
 120          /*                                                               
 121          /********************************************************/
 122          
 123          void lcd_wcmd(uchar cmd)
 124          
 125          {                          
 126   1         while(lcd_busy());
 127   1          LCD_RS = 0;
 128   1          LCD_RW = 0;
 129   1          LCD_EN = 0;
 130   1          _nop_();
 131   1          _nop_(); 
 132   1          P0 = cmd;
 133   1          delayNOP();
 134   1          LCD_EN = 1;
 135   1          delayNOP();
 136   1          LCD_EN = 0;  
 137   1      }
 138          
 139          /********************************************************/
 140          /*                                                                
 141          /*写显示数据到LCD                                                  
 142          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                              
 143          /*                                                               
 144          /********************************************************/
 145          
 146          void lcd_wdat(uchar dat)
 147          {                          
 148   1         while(lcd_busy());
 149   1          LCD_RS = 1;
 150   1          LCD_RW = 0;
 151   1          LCD_EN = 0;
 152   1          P0 = dat;
 153   1          delayNOP();
 154   1          LCD_EN = 1;
 155   1          delayNOP();
 156   1          LCD_EN = 0; 
 157   1      }
 158          
 159          /********************************************************/
 160          /*                                                                
 161          /*  LCD初始化设定                                                
 162          /*                                                                
 163          /********************************************************/
 164          
 165          void lcd_init()
 166          { 
 167   1          delay(30);                   
 168   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
 169   1          delay(5);
 170   1          lcd_wcmd(0x38);         
 171   1          delay(5);
 172   1          lcd_wcmd(0x38);         
 173   1          delay(5);
 174   1      
 175   1          lcd_wcmd(0x0c);      //显示开,关光标
 176   1          delay(5);
 177   1          lcd_wcmd(0x06);      //移动光标
 178   1          delay(5);
 179   1          lcd_wcmd(0x01);      //清除LCD的显示内容
C51 COMPILER V8.05a   S__MOTOR_KEY                                                         11/23/2006 20:59:18 PAGE 4   

 180   1          delay(5);
 181   1      }
 182          
 183          /********************************************************/
 184          /*                                                                 
 185          /*  设定显示位置                                                  
 186          /*                                                                
 187          /********************************************************/
 188          
 189          void lcd_pos(uchar pos)
 190          {                          
 191   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 192   1      }
 193          
 194          /********************************************************/
 195          /*                                                       
 196          /* LCD1602初始显示子程序                                             
 197          /*                                                      
 198          /********************************************************/
 199          void  LCD_init_DIS()
 200          {            
 201   1           delay(10);                 //延时
 202   1           lcd_init();                //初始化LCD             
 203   1              
 204   1           lcd_pos(0);                //设置显示位置为第一行的第1个字符
 205   1           m = 0;
 206   1           while(cdis1[m] != '\0')
 207   1            {                         //显示字符
 208   2              lcd_wdat(cdis1[m]);
 209   2              m++;
 210   2            }
 211   1      
 212   1           lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 213   1           m = 0;
 214   1           while(cdis2[m] != '\0')
 215   1            {
 216   2              lcd_wdat(cdis2[m]);      //显示字符
 217   2              m++;
 218   2            }
 219   1      
 220   1            delay(3000);               //延时        
 221   1              
 222   1            lcd_pos(0);                //设置显示位置为第一行的第1个字符
 223   1            m = 0;
 224   1            while(cdis3[m] != '\0')
 225   1              {                        //显示字符
 226   2                lcd_wdat(cdis3[m]);
 227   2                m++;
 228   2              }
 229   1      
 230   1            lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 231   1            m = 0;
 232   1           while(cdis4[m] != '\0')

⌨️ 快捷键说明

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