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

📄 18.lst

📁 智能交通控制系统中SCATS系统倒计时控制程序
💻 LST
字号:
C51 COMPILER V7.09   18                                                                    04/15/2008 09:47:15 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 18
OBJECT MODULE PLACED IN 18.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          *********************************************************************************************************
   3          *
   4          *                                               倒计时牌源代码
   5          *
   6          * CPU          :AT89C2051
   7          *
   8          * FILE         : 18.C
   9          * By           : CC
  10          * DATE         : 2008-04-05
  11          * VERSION      : 1.0
  12          * 修改记录     :
  13          *********************************************************************************************************
  14          */
  15          
  16          
  17          #include<REG2051.H>
  18          #include<X5045.H>
  19          
  20          #define uchr      unsigned char
  21          #define uint      unsigned int
  22          
  23          #define T100MS    90//100ms
  24          #define T500MS    420//500ms
  25          #define T1S       1000//1000ms
  26          #define TMAX      20000//20s
  27          #define DISP_0    0xFC
  28          #define DISP_1    0x0C
  29          #define DISP_2    0xDA
  30          #define DISP_3    0xF2
  31          #define DISP_4    0x66
  32          #define DISP_5    0xB6
  33          #define DISP_6    0xBE
  34          #define DISP_7    0xE0
  35          #define DISP_8    0xFE
  36          #define DISP_9    0xF6
  37          #define DISP_10   0x01
  38          
  39          sbit LE = P3^7;
  40          sbit p17 = P1^7;
  41          
  42          bit  freset       = 0;//复位标志
  43          bit  frcntdstart  = 0;//红倒计时开始标志
  44          bit  fgcntdstart  = 0;//绿倒计时开始标志
  45          bit  frpulsechk   = 0;//红脉宽检查开始标志
  46          bit  fgpulsechk   = 0;//绿脉宽检查开始标志
  47          bit  frcntdend    = 0;//红倒计时结束标志
  48          bit  fgcntdend    = 0;//绿倒计时开始标志
  49          bit  frcomp       = 0;//红倒计时比较标志
  50          bit  fgcomp       = 0;//绿倒计时比较标志
  51          bit  frdisp       = 0;//红倒计时显示标志
  52          bit  fgdisp       = 0;//绿倒计时显示标志
  53          
  54          
  55          uchr rcountdn[20]     = 0;//红倒计时
C51 COMPILER V7.09   18                                                                    04/15/2008 09:47:15 PAGE 2   

  56          uchr gcountdn     = 0;//绿倒计时
  57          uchr rcntdtim     = 0;//红倒计时计数器
  58          uchr gcntdtim     = 0;//绿倒计时计数器
  59          uint rchktim      = 0;//红脉宽计数器
  60          uint gchktim      = 0;//红脉宽计数器
  61          uint r1stim       = 0;//红1秒计数器
  62          uint g1stim       = 0;//红1秒计数器
  63          /*uint tt2=0;
  64          uint tt1=0;
  65          uint tt0=0;
  66          uint tt[10]={0};*/
  67          
  68          
  69          //T0:16位,1ms
  70          void t0int() interrupt 1
  71          {
  72   1           TL0=0x66;
  73   1           TH0=0xFC;
  74   1      //tt0++;
  75   1               if(frpulsechk)
  76   1               {
  77   2                   rchktim++;
  78   2               if(rchktim>=T1S)
  79   2                   {
  80   3                       frpulsechk=0;
  81   3                           rchktim=0;
  82   3                           if(frcntdstart)
  83   3                       {
  84   4                           frcntdend=1;
  85   4                           }
  86   3                   }
  87   2           }
  88   1      
  89   1               if(fgpulsechk)
  90   1               {
  91   2                   gchktim++;
  92   2               if(gchktim>=T1S)
  93   2                   {
  94   3                       fgpulsechk=0;
  95   3                           gchktim=0;
  96   3                           if(fgcntdstart)
  97   3                       {
  98   4                           fgcntdend=1;
  99   4                           }
 100   3                   }
 101   2           }
 102   1      
 103   1               if(frcntdstart)
 104   1               {
 105   2                       if(frcntdend==0)
 106   2               {
 107   3                   r1stim++;
 108   3                               rcntdtim++;
 109   3                           if(r1stim>=T1S)
 110   3                   {
 111   4                       r1stim=0;
 112   4                       frdisp=1;
 113   4                   }
 114   3                   if(rcntdtim>=TMAX)
 115   3                   {
 116   4                       frcomp=1;
 117   4                                   frcntdstart=0;
C51 COMPILER V7.09   18                                                                    04/15/2008 09:47:15 PAGE 3   

 118   4                                   frcntdend=0;
 119   4                                       frdisp=0;
 120   4                               }
 121   3                       }
 122   2                       else
 123   2                       {
 124   3                           frcomp=1;
 125   3                               frcntdstart=0;
 126   3                               frcntdend=0;
 127   3                               frdisp=0;
 128   3               }
 129   2               }
 130   1      
 131   1           if(fgcntdstart)
 132   1               {
 133   2                        if(fgcntdend==0)
 134   2               {
 135   3                   g1stim++;
 136   3                               gcntdtim++;
 137   3                           if(g1stim>=T1S)
 138   3                   {
 139   4                       g1stim=0;
 140   4                       fgdisp=1;
 141   4                   }
 142   3                           if(gcntdtim>=TMAX)
 143   3                   {
 144   4                       fgcomp=1;
 145   4                                   fgcntdstart=0;
 146   4                                   fgcntdend=0;
 147   4                                       fgdisp=0;
 148   4                               }
 149   3                       }
 150   2                       else
 151   2                       {
 152   3                           fgcomp=1;
 153   3                               fgcntdstart=0;
 154   3                               fgcntdend=0;
 155   3                               fgdisp=0;
 156   3               }
 157   2               }
 158   1      }
 159          
 160          void rint() interrupt 0
 161          {
 162   1           frpulsechk=1;
 163   1      p17=!p17;
 164   1      /*       tt1++;
 165   1      
 166   1               if(tt1>=100)
 167   1               {
 168   1               tt2++;
 169   1               tt[tt2]=tt0;
 170   1               tt0=0;
 171   1               tt1=0;
 172   1               }
 173   1           if(tt2=10) tt2=0;
 174   1         */  
 175   1           
 176   1           if (frcntdstart==0)
 177   1           {
 178   2               if(rchktim>T100MS && rchktim<T500MS)//如果时间大于100ms并且小于500ms,准备开始计数
 179   2               {
C51 COMPILER V7.09   18                                                                    04/15/2008 09:47:15 PAGE 4   

 180   3                   rcntdtim=rchktim;//延时计数器
 181   3                   r1stim=rchktim;//
 182   3                   frcntdstart=1;//延时开始标志
 183   3               }
 184   2           }
 185   1      
 186   1           rchktim=0;//清0脉宽计数器
 187   1      }
 188          
 189          void gint() interrupt 2
 190          {
 191   1           fgpulsechk=1;
 192   1      
 193   1           if (fgcntdstart==0)
 194   1           {
 195   2               if(gchktim>T100MS && gchktim<T500MS)//如果时间大于100ms并且小于500ms,准备开始计数
 196   2               {
 197   3                   gcntdtim=gchktim;//延时计数器
 198   3                   g1stim=gchktim;//
 199   3                   fgcntdstart=1;//延时开始标志
 200   3               }
 201   2           }
 202   1      
 203   1           gchktim=0;//清0脉宽计数器
 204   1      }
 205          
 206          void disp(uchr num)
 207          {
 208   1      
 209   1           P1=0xFF;
 210   1               LE=0;
 211   1      
 212   1               switch(num%10)
 213   1               {
 214   2                   case 0:P1 = P1 & DISP_0; break;
 215   2      
 216   2                       case 1:P1 = P1 & DISP_1; break;
 217   2      
 218   2                       case 2:P1 = P1 & DISP_2; break;
 219   2      
 220   2                       case 3:P1 = P1 & DISP_3; break;
 221   2      
 222   2                       case 4:P1 = P1 & DISP_4; break;
 223   2      
 224   2                       case 5:P1 = P1 & DISP_5; break;
 225   2      
 226   2                       case 6:P1 = P1 & DISP_6; break;
 227   2      
 228   2                       case 7:P1 = P1 & DISP_7; break;
 229   2      
 230   2                       case 8:P1 = P1 & DISP_8; break;
 231   2      
 232   2                   case 9:P1 = P1 & DISP_9; break;
 233   2      
 234   2                   default: break;
 235   2               }
 236   1      
 237   1           if(num>=10) P1&=DISP_10;
 238   1      
 239   1           LE=1;
 240   1           delay();
 241   1           LE=0;
C51 COMPILER V7.09   18                                                                    04/15/2008 09:47:15 PAGE 5   

 242   1      }
 243          
 244          
 245          void main(void)
 246          {
 247   1           uchr rdisptim=0;
 248   1           uchr gdisptim=0;
 249   1           uchr tmp=0,i=0;
 250   1      
 251   1           P1=0xFF;
 252   1               LE=0;
 253   1           EA=1;
 254   1           //外部中断允许,下降沿触发
 255   1           EX0=1;
 256   1           PX0=1;
 257   1           IT0=1;
 258   1      
 259   1           EX1=1;
 260   1           PX1=1;
 261   1           IT1=1;
 262   1      
 263   1           //T0:16位,10ms
 264   1           TMOD=0X11;
 265   1           ET0=1;
 266   1           TL0=0x66;
 267   1           TH0=0xFC;
 268   1           TR0=1;
 269   1      
 270   1               //x5045ini();
 271   1           while(1)
 272   1           {
 273   2                    if(frdisp==1)
 274   2                    {
 275   3                            frdisp=0;
 276   3      
 277   3                                if(rdisptim>1)
 278   3                    {
 279   4                        rdisptim--;
 280   4                        disp(rdisptim);
 281   4      
 282   4                                }
 283   3                     else
 284   3                              {
 285   4                              P1=0;
 286   4                              LE=1;
 287   4                              delay();
 288   4                              LE=0;
 289   4                              }
 290   3      
 291   3                        }
 292   2      
 293   2                if(fgdisp)
 294   2                    {
 295   3                            fgdisp=0;
 296   3                                if(gdisptim)
 297   3                    {
 298   4                        disp(gdisptim);
 299   4                                    gdisptim--;
 300   4                                }
 301   3                        }
 302   2      
 303   2                    if(frcomp)
C51 COMPILER V7.09   18                                                                    04/15/2008 09:47:15 PAGE 6   

 304   2                {
 305   3                    frcomp=0;
 306   3                                tmp=(rcntdtim-T1S)/1000;
 307   3                                if(((rcntdtim-T1S)%1000)/100 >= 5) tmp++;
 308   3                                if(rcountdn!=tmp)
 309   3                                {
 310   4                                    rcountdn[i]=tmp;
 311   4                        i++;
 312   4      
 313   4                                }
 314   3                            rdisptim=rcountdn;
 315   3                }
 316   2                if(fgcomp)
 317   2                {
 318   3                    fgcomp=0;
 319   3                                tmp=(gcntdtim-T1S) / 1000;
 320   3                                if(((gcntdtim-T1S) % 1000)/100 >= 5) tmp++;
 321   3                                if(gcountdn!=tmp)
 322   3                                {
 323   4                                    gcountdn=tmp;
 324   4                                }
 325   3                                gdisptim=gcountdn;
 326   3                }
 327   2      
 328   2           }
 329   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    725    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     31       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =     11    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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