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

📄 main.lst

📁 51单片机的内存优化和中断的有用知识
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   MAIN                                                                 03/01/2009 15:15:54 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //切板机控制程序//
   2          ///////////////////
   3          //////////////////////////////////////////////////////////////////////////
   4          //                                                                      //                                                      //                                                                      //
   5          //作者:郑玉杰                                                          //
   6          //Author:Jacky Zheng                                                    //
   7          //国籍:中华人民共和国                                                  //
   8          //Nationality:People's Republic of China                                //                                                      //                                                                      //
   9          //身份识别码:320924198602016132                                        //
  10          //ID NO.:320924198602016132                                             //                                                                      //
  11          //声明联系方式:电子邮箱:come_on_yujie@163.com                         //
  12          //Contact Information: E-mail:come_on_yujie@163.com                     //
  13          //日期:2009年3月1日测试完成                                            //
  14          //Date:Have been finished on Mar.1,2009.                                //                                                                      //
  15          //声明版权:                                                            //
  16          //Copyrights:                                                           //                                                      //                                                                      //
  17          //本程序为有版权的程序,未经本人书面同意任何组织和个人不得传播或使用。  //
  18          //Please do not transmit or use it if you have not the copyrights.      //
  19          //版权归作者所有。                                                      //
  20          //The copyrights belongs to the author.                                 //                                                                      //
  21          //                                                                      //                                                      //                                                                      //
  22          //////////////////////////////////////////////////////////////////////////
  23          
  24          /*****************************************************************************/
  25          
  26          //头文件加入
  27          #include "REG52.h"
  28          #include <intrins.h>
  29          #include <absacc.h>
  30          #include "VI2C_C51.h"
  31          #include "stdio.h"
  32          #include "STRING.H"
  33          /*****************************************************************************/
  34          //寻址定义
  35          #define UCHAR unsigned char
  36          #define uint unsigned int
  37          
  38          /****************************************************************************/
  39          //LCD读写使能位
  40          sbit LCDRSPIN = P3^7;
  41          sbit LCDRWPIN = P3^6;//读写使能,lcd&da0832
  42          sbit LCDEPIN = P2^6;
  43          
  44          /*****************************************************************************/
  45          //输出
  46          sbit RING_OUT = P2^1;                   //RING输出位
  47          
  48          sbit CS = P2^4;                         //步进电机使能
  49          sbit CW = P2^5;                         //步进电机正反转标志位
  50          sbit CLK = P2^7;                        //脉冲位
  51          
  52           
  53          /*****************************************************************************/
  54          //输入
  55          sbit LEFT_BIT = P1^0;                   //左限位
C51 COMPILER V8.05a   MAIN                                                                 03/01/2009 15:15:54 PAGE 2   

  56          sbit RIGHT_BIT = P1^1;                  //右限位
  57          sbit SAFE = P2^0;                               //光电保护位
  58          /*****************************************************************************/
  59          //按键
  60          sbit P3_0 = P3^4;//MANU
  61          sbit P3_1 = P3^3;//ENTER&SAVE
  62          sbit P3_2 = P3^2;//RUN&<-
  63          sbit P3_3 = P3^1;//INC
  64          sbit P3_4 = P3^0;//DEC
  65          
  66          /*****************************************************************************/
  67          UCHAR MANU=0;//0:运行使能状态;1:speed设置状态;2:length设置状态。
  68          UCHAR RUN=0;// 运行
  69          UCHAR INC=0;// 增加&向上
  70          UCHAR DEC=0;// 减小&向下
  71          UCHAR LEFT=0;//左移
  72          /*****************************************************************************/
  73          UCHAR SPEED;//速度
  74          uint LENGTH;//行程设置
  75          uint PLUSE;//脉冲量转换
  76          
  77          int COUNT;
  78          
  79          bit FLAG = 0;//按键一次标志位
  80          bit SAVE = 0;   //保存标志位
  81          //bit Rong = 0;
  82          /*****************************************************************************/
  83          void LcdWDA(unsigned char x,unsigned char y,unsigned char *s);
  84          void Lcd_THREENO(int x,int y,int i);
  85          /*****************************************************************************/
  86          //显示字符定义
  87          char * MM="MM";
  88          char * R="R";
  89          
  90          char * SPD="SPEED:";
  91          char * L="L:";
  92          
  93          char * COMPANY =  "PS-3000";
  94          char * CLEAR = "                ";
  95          char * PLACE=" ";
  96          char * GO="<--";
  97          char * BACK="-->";
  98          char * CPS="PCS";
  99          
 100          /*****************************************************************************/
 101          //延时
 102          void delaysst(unsigned int i)
 103          {
 104   1          UCHAR j;
 105   1          for(i; i > 0; i--)
 106   1              for(j = 180; j > 0; j--);
 107   1      }
 108          
 109          /*****************************************************************************/
 110          //RING
 111          void RING(void)
 112          {UCHAR S;
 113   1      for(S=200;S>0;S--)
 114   1      {
 115   2      delaysst(1);
 116   2      RING_OUT=~RING_OUT;
 117   2      }
C51 COMPILER V8.05a   MAIN                                                                 03/01/2009 15:15:54 PAGE 3   

 118   1      }
 119          
 120          /*****************************************************************************/
 121          //输入键扫描
 122          KEY()
 123          {FLAG=0;
 124   1      //设置模
 125   1      if(MANU!=0)
 126   1      {
 127   2      while(P3_0==0)
 128   2              {delaysst(5);
 129   3              if(P3_0 ==0&&FLAG ==0)
 130   3                      {
 131   4                      if(MANU<3)
 132   4                      MANU++;
 133   4                      else
 134   4                      MANU=0;         
 135   4                      LEFT=0;
 136   4                      FLAG=1;
 137   4                      RING();
 138   4                      }
 139   3              }
 140   2      
 141   2      while(P3_1==0)
 142   2              {delaysst(5);
 143   3              if(P3_1==0&&FLAG==0)
 144   3                      {
 145   4                      SAVE=1;
 146   4                      MANU=0;
 147   4                      FLAG=1;         
 148   4                      }
 149   3              }
 150   2      while(P3_2==0)
 151   2              {delaysst(5);
 152   3              if(P3_2==0&&FLAG==0)
 153   3                      {if(LEFT<=3)
 154   4                      LEFT++;
 155   4                      else
 156   4                      LEFT=0;         
 157   4                      FLAG=1;
 158   4                      RING();
 159   4                      }
 160   3              }
 161   2      while(P3_3==0)
 162   2              {delaysst(5);
 163   3              if(P3_3==0&&FLAG==0)
 164   3                      {
 165   4                      INC=1;          
 166   4                      FLAG=1;
 167   4                      RING();
 168   4                      }
 169   3              }
 170   2      while(P3_4==0)
 171   2              {delaysst(5);
 172   3              if(P3_4==0&&FLAG==0)
 173   3                      {
 174   4                      DEC=1;  
 175   4                      FLAG=1;
 176   4                      RING();
 177   4                      }
 178   3              }
 179   2              FLAG=0;
C51 COMPILER V8.05a   MAIN                                                                 03/01/2009 15:15:54 PAGE 4   

 180   2      }
 181   1      
 182   1      
 183   1      /*****************************************************************************/
 184   1      //使用模式
 185   1      if(MANU==0)
 186   1      {
 187   2              while(P3_0==0)
 188   2                      {delaysst(5);
 189   3                      if(P3_0==0&&FLAG==0)
 190   3                              {MANU=1;
 191   4                              RUN=0;  
 192   4                              FLAG=1;
 193   4                              RING();
 194   4                              }
 195   3                      }
 196   2      
 197   2              while (P3_1==0)
 198   2                      {
 199   3                      delaysst(5);
 200   3                      if (P3_1==0&&FLAG==0)
 201   3                              {
 202   4                              SAVE=1;
 203   4                              MANU=0; 
 204   4                              FLAG=1;
 205   4                              
 206   4                              }
 207   3                      }
 208   2      
 209   2              while (P3_2==0)
 210   2                      {delaysst(5);
 211   3                      if(P3_2==0&&FLAG==0)
 212   3                              {
 213   4                              RUN=~RUN;
 214   4                              FLAG=1;
 215   4                              RING();
 216   4                              }
 217   3                      }
 218   2      
 219   2              while (P3_3==0)
 220   2                      {delaysst(5);
 221   3                      if(FLAG==0)
 222   3                      {RING();FLAG=1;}
 223   3                      if(LEFT_BIT==1&&SAFE==1)
 224   3                      LcdWDA(11,1,GO);
 225   3                      while(P3_3==0&&(LEFT_BIT==1||SAFE==1))
 226   3                              
 227   3                      {       CW=1;//步进电机正反转设置-》正转
 228   4                              CLK=~CLK;
 229   4                              delaysst(10000);
 230   4                              }
 231   3                      
 232   3                      //      Lcd_THREENO(11,1,LENGTH);
 233   3                      }
 234   2      
 235   2              while (P3_4==0)
 236   2                      {delaysst(5);
 237   3                      if(FLAG==0)
 238   3                      {RING();FLAG=1;}
 239   3                      if(RIGHT_BIT==1&&SAFE==1)
 240   3                      LcdWDA(11,1,BACK);
 241   3                      while(P3_4==0&&(RIGHT_BIT==1||SAFE==1))
C51 COMPILER V8.05a   MAIN                                                                 03/01/2009 15:15:54 PAGE 5   

 242   3                              
 243   3                      {       CW=0;//步进电机正反转设置-》正转
 244   4                              CLK=~CLK;
 245   4                              delaysst(10000);
 246   4                              }
 247   3                      //      Lcd_THREENO(11,1,LENGTH);
 248   3                      
 249   3                if(FLAG)
 250   3                Lcd_THREENO(11,1,LENGTH);
 251   3                      FLAG=0;
 252   3      }
 253   2      }
 254   1      }
 255           /*****************************************************************************/
 256          //延时
 257          void delay(unsigned int i)
 258          {
 259   1          UCHAR j;
 260   1          for(i; i > 0; i--)
 261   1              for(j = 8000; j > 0; j--);
 262   1      KEY();
 263   1      }
 264          
 265           /*****************************************************************************/
 266          //初始化(单片机)
 267          void sercon(void)
 268          {
 269   1              SCON  = 0x50;           
 270   1              TMOD  |= 0x20;          
 271   1              TH1   = 0xFD;      
 272   1              TR1   = 1;              
 273   1              TI        = 1;          
 274   1      }
 275          
 276          /*****************************************************************************/
 277          //控制LCD
 278          unsigned char XPOS,YPOS;
 279          
 280          /*****************************************************************************/
 281          //测忙
 282          void LcdWaitIdle(void)
 283          {  P0=0xff; 
 284   1         LCDRSPIN=0; 
 285   1         LCDRWPIN=1; 
 286   1         LCDEPIN=1;
 287   1      while((P0&0x80)==0x80);
 288   1         LCDEPIN=0;
 289   1      }
 290          
 291          /*****************************************************************************/
 292          //写指令代码
 293          void LcdWCN(unsigned char c)
 294          {  LCDRSPIN=0; 
 295   1         LCDRWPIN=0; 
 296   1         P0=c;
 297   1         LCDEPIN=1;
 298   1         _nop_(); 
 299   1         LCDEPIN=0; 
 300   1      }
 301          
 302          /*****************************************************************************/
 303          //写指令代码(测忙)
C51 COMPILER V8.05a   MAIN                                                                 03/01/2009 15:15:54 PAGE 6   

 304          void LcdWC(unsigned char c)
 305          {  LcdWaitIdle();
 306   1         LcdWCN(c); 
 307   1      }
 308          
 309          /*****************************************************************************/
 310          //写数据
 311          void LcdWD(unsigned char d)
 312          {  LcdWaitIdle(); 
 313   1         LCDRSPIN=1; 
 314   1         LCDRWPIN=0; 
 315   1         P0=d; 
 316   1         LCDEPIN=1;
 317   1         _nop_(); 
 318   1         LCDEPIN=0; 
 319   1      }
 320          
 321          /*****************************************************************************/
 322          //内部数据地址指针定位
 323          void LcdPos(void)
 324          {  XPOS&=0x0f; 
 325   1         YPOS&=0x03;
 326   1         if(YPOS==0x00)
 327   1            LcdWC(XPOS|0x80);
 328   1         else if(YPOS==0x01)

⌨️ 快捷键说明

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