d.LST
上传用户:ypj0310
上传日期:2014-11-30
资源大小:71k
文件大小:10k
开发平台:

C/C++

  1. C51 COMPILER V7.50   D                                                                     08/18/2007 20:13:13 PAGE 1   
  2. C51 COMPILER V7.50, COMPILATION OF MODULE D
  3. OBJECT MODULE PLACED IN d.OBJ
  4. COMPILER INVOKED BY: D:keilC51BINC51.EXE d.c BROWSE DEBUG OBJECTEXTEND
  5. line level    source
  6.    1          #include"reg51.h"
  7.    2          #include"intrins.h"
  8.    3          #include"math.h"
  9.    4          #include"absacc.h"
  10.    5          #define  PORTA  XBYTE[0x8500]
  11.    6          #define  PORTB  XBYTE[0x8502]
  12.    7          #define  PORTC  XBYTE[0x8504]
  13.    8          #define  PORTC0 XBYTE[0x8506]
  14.    9          #define nop _nop_()
  15.   10          #define Right_RUN  1
  16.   11          #define Left_RUN  0
  17.   12          unsigned long RunSpeed=76;
  18.   13          unsigned  char  RUNState=1;
  19.   14          sbit  RS=P2^0;
  20.   15          sbit  RW=P2^1;
  21.   16          sbit  E=P2^2;
  22.   17          sbit P17=P1^7;
  23.   18          bit   flag=0;
  24.   19          unsigned char xx[]="speed(n/min):";
  25.   20          unsigned char SD[]="76";
  26.   21          char  state[2][14]={"direction:cw","direction:ccw"};
  27.   22          unsigned char  FLG,INMA=0;
  28.   23          unsigned  char  t,s=0x01;
  29.   24          unsigned  int   a;
  30.   25          main()
  31.   26          {
  32.   27   1        void  OPJIAN();
  33.   28   1        unsigned char JIAN();
  34.   29   1        unsigned char JIANZHI();
  35.   30   1         void  speed();
  36.   31   1       void  SHOW_LCD();
  37.   32   1       void  show_state();
  38.   33   1       void  write1();
  39.   34   1       void  writ2(unsigned char i);
  40.   35   1       void  delay();
  41.   36   1       void time();
  42.   37   1       void  busy();
  43.   38   1       unsigned  char  i;
  44.   39   1        i=0x90;
  45.   40   1        PORTC0=i;
  46.   41   1        i=0x01;
  47.   42   1        TMOD=i;
  48.   43   1        t=0x10;
  49.   44   1        a=0x0f;
  50.   45   1        TH0=0x10;
  51.   46   1        TL0=0x0f;
  52.   47   1        FLG=INMA;  
  53.   48   1        SHOW_LCD();
  54.   49   1        show_state();
  55.   50   1        EA=1;
  56.   51   1        ET0=1;
  57.   52   1        TR0=1;
  58.   53   1      while(1)
  59.   54   1      {
  60.   55   2       i=JIAN();
  61. C51 COMPILER V7.50   D                                                                     08/18/2007 20:13:13 PAGE 2   
  62.   56   2           if(i!=0)
  63.   57   2              {
  64.   58   3                time();
  65.   59   3                time();
  66.   60   3               }
  67.   61   2              i=JIAN();
  68.   62   2              if(i!=0)
  69.   63   2              {
  70.   64   3              INMA=JIANZHI();
  71.   65   3         OPJIAN();
  72.   66   3               time();
  73.   67   3              }
  74.   68   2        if(FLG!=INMA||flag==1)
  75.   69   2         {  FLG=INMA;
  76.   70   3                      SHOW_LCD();
  77.   71   3            show_state();
  78.   72   3                      flag=0;
  79.   73   3                      }
  80.   74   2        }
  81.   75   1        }
  82.   76           void SHOW_LCD()/*lcd设置程序*/
  83.   77           {
  84.   78   1        P1=0x38;
  85.   79   1        write1();
  86.   80   1        delay();
  87.   81   1        P1=0x38;
  88.   82   1        write1();
  89.   83   1        delay(); 
  90.   84   1        P1=0x38;
  91.   85   1        write1();
  92.   86   1        delay();
  93.   87   1        P1=0x01;
  94.   88   1        write1();
  95.   89   1       delay();
  96.   90   1        P1=0x0f;
  97.   91   1        write1();
  98.   92   1       delay();
  99.   93   1        P1=0x06;
  100.   94   1        write1();
  101.   95   1        delay();
  102.   96   1        P1=0x0c;
  103.   97   1        write1();
  104.   98   1        
  105.   99   1       }
  106.  100          void  show_state()/*状态显示程序*/
  107.  101            {
  108.  102   1         unsigned char i=0;
  109.  103   1         P1=0x80;
  110.  104   1              write1();
  111.  105   1       while(xx[i]!='')
  112.  106   1                {
  113.  107   2                  writ2(xx[i]);
  114.  108   2                       i++;
  115.  109   2                       delay();
  116.  110   2                       }
  117.  111   1         i=0;
  118.  112   1        while(SD[i]!='')
  119.  113   1          {
  120.  114   2                writ2(SD[i]);
  121.  115   2                delay();
  122.  116   2                i++;
  123.  117   2               
  124. C51 COMPILER V7.50   D                                                                     08/18/2007 20:13:13 PAGE 3   
  125.  118   2                }
  126.  119   1                P1=0xc0;
  127.  120   1        write1();
  128.  121   1        i=0;
  129.  122   1        if(RUNState==Right_RUN)
  130.  123   1               while(state[0][i]!='')
  131.  124   1                 {
  132.  125   2                        writ2(state[0][i]);
  133.  126   2                        i++;
  134.  127   2                       }
  135.  128   1              else
  136.  129   1                if(RUNState==Left_RUN)
  137.  130   1                        while(state[1][i]!='')
  138.  131   1                         {
  139.  132   2                                writ2(state[1][i]);
  140.  133   2                                 i++;
  141.  134   2                               }
  142.  135   1         }
  143.  136          void  write1()/*lcd写控制字*/
  144.  137           {
  145.  138   1         RS=0;
  146.  139   1              RW=0;
  147.  140   1              E=0;
  148.  141   1              busy();
  149.  142   1              E=1;
  150.  143   1        }
  151.  144          void  writ2( unsigned char i)/*lcd写数据*/
  152.  145           { P1=i;
  153.  146   1         RS=1;
  154.  147   1              RW=0;
  155.  148   1              E=0;
  156.  149   1         busy();
  157.  150   1              E=1;
  158.  151   1              }
  159.  152           
  160.  153           void delay()/*延时程序*/
  161.  154          {
  162.  155   1        unsigned char  i;
  163.  156   1        for(i=0;i<100;i++)
  164.  157   1          {
  165.  158   2          i=i;
  166.  159   2               }
  167.  160   1               
  168.  161   1      }
  169.  162          void time()
  170.  163          { unsigned char i,j;
  171.  164   1      for(i=0;i<100;i++)
  172.  165   1       { 
  173.  166   2      for(j=0;j<30;j++)
  174.  167   2       {
  175.  168   3         j=j;
  176.  169   3        }
  177.  170   2        }
  178.  171   1      }
  179.  172          
  180.  173          void busy()         //判断LCD是否忙
  181.  174          {    
  182.  175   1               do
  183.  176   1               {
  184.  177   2               P1=0xff;
  185.  178   2                RS=0;
  186.  179   2           RW=1;
  187. C51 COMPILER V7.50   D                                                                     08/18/2007 20:13:13 PAGE 4   
  188.  180   2           E=0;
  189.  181   2                nop;
  190.  182   2                E=1;
  191.  183   2                }while(P17==1);
  192.  184   1        
  193.  185   1       }
  194.  186           unsigned char JIAN()/*判断是否有键按下*/
  195.  187           {
  196.  188   1        unsigned char  i,j;
  197.  189   1           i=0xff;
  198.  190   1           PORTA=i;
  199.  191   1           time();
  200.  192   1           i=0x00;
  201.  193   1           PORTB=i;
  202.  194   1           j=PORTA;
  203.  195   1           j=~j;
  204.  196   1           j=j&(0x0f);
  205.  197   1           return  j;
  206.  198   1       }
  207.  199          unsigned char JIANZHI()/*读键值程序*/
  208.  200           {
  209.  201   1         unsigned i,j,d,k,m=1;
  210.  202   1               i=0xfe;
  211.  203   1               k=0x01;
  212.  204   1               do
  213.  205   1               {
  214.  206   2               PORTB=i;
  215.  207   2               j=PORTA;
  216.  208   2               m=j&(0x01);
  217.  209   2          if(m==0)
  218.  210   2                 d=k/2;
  219.  211   2               else
  220.  212   2                 {
  221.  213   3               m=j&(0x02);
  222.  214   3                   if(m==0)
  223.  215   3                         d=k/2+4;
  224.  216   3                        else
  225.  217   3                          {
  226.  218   4                                m=j&(0x04);
  227.  219   4                                 if(m==0)
  228.  220   4                                        d=k/2+8;
  229.  221   4                                         else
  230.  222   4                                               {
  231.  223   5                                                m=j&(0x08);
  232.  224   5                        if(m==0)
  233.  225   5                                                      d=k/2+12;
  234.  226   5                                               }
  235.  227   4                      }
  236.  228   3             }
  237.  229   2              k=k+2;
  238.  230   2              i=i<<1;
  239.  231   2              i=i|(0x01);
  240.  232   2              }while(m!=0);
  241.  233   1              return  d;
  242.  234   1      }
  243.  235          void OPJIAN() /* 键值处理程序*/
  244.  236          {
  245.  237   1         switch(INMA)
  246.  238   1       {
  247.  239   2         case 0x08:  {RUNState=Right_RUN;s=0xf7;}break;
  248.  240   2         case 0x09:  {RUNState=Left_RUN;s=0x01;}break;
  249.  241   2         case 0x0b:  {
  250. C51 COMPILER V7.50   D                                                                     08/18/2007 20:13:13 PAGE 5   
  251.  242   3                         flag=1;
  252.  243   3                                        t=t-2;
  253.  244   3                                        RunSpeed=5000000/(65536-t*256-a);
  254.  245   3                                        speed();}break;
  255.  246   2         case 0x0f:  {flag=1;
  256.  247   3                      t=t+2;
  257.  248   3                              RunSpeed=5000000/(65536-t*256-a);
  258.  249   3                              speed();} 
  259.  250   2       }
  260.  251   1      }
  261.  252          void speed()/*速度处理程序*/
  262.  253           {
  263.  254   1        unsigned  char  i=0;
  264.  255   1        SD[0]=RunSpeed/100+48;
  265.  256   1        SD[1]=RunSpeed%100/10+48;
  266.  257   1        SD[2]=RunSpeed%10+48;
  267.  258   1        }
  268.  259            void time1(void) interrupt 1 using 2
  269.  260            {
  270.  261   1      
  271.  262   1         TR0=0;
  272.  263   1         PORTC=s;
  273.  264   1              if(RUNState==0)
  274.  265   1              {
  275.  266   2              s=(s<<1);
  276.  267   2              if(s==0x10)
  277.  268   2                s=0x01;
  278.  269   2      
  279.  270   2              }
  280.  271   1              else
  281.  272   1              {
  282.  273   2                      s=s>>1;
  283.  274   2              if(s==0x0f)
  284.  275   2              s=0xf7;
  285.  276   2               }
  286.  277   1         TH0=t;
  287.  278   1        TL0=a;
  288.  279   1        TR0=1;
  289.  280   1        }
  290.  281          
  291.  282             
  292.  283           
  293. MODULE INFORMATION:   STATIC OVERLAYABLE
  294.    CODE SIZE        =    748    ----
  295.    CONSTANT SIZE    =   ----    ----
  296.    XDATA SIZE       =   ----    ----
  297.    PDATA SIZE       =   ----    ----
  298.    DATA SIZE        =     56       7
  299.    IDATA SIZE       =   ----    ----
  300.    BIT SIZE         =      1    ----
  301. END OF MODULE INFORMATION.
  302. C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)