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

📄 1.lst

📁 智能交通控制系统中SCATS系统倒计时控制程序
💻 LST
字号:
C51 COMPILER V7.50   1                                                                     04/17/2008 14:38:42 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 1.C ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          *********************************************************************************************************
   3          *                                               倒计时牌源代码
   4          *
   5          * CPU          :AT89C2051
   6          *
   7          * FILE         : 18.C
   8          * By           : CC
   9          * DATE         : 2008-04-05
  10          * VERSION      : 1.0
  11          * 修改记录     :
  12          *********************************************************************************************************
  13          */
  14          #include<REG2051.H>
  15          
  16          #define uchr      unsigned char
  17          #define uint      unsigned int
  18          
  19          #define T100MS    180//100ms
  20          #define T500MS    500//500ms
  21          #define T1S       1000//1000ms
  22          #define TMAX      20000//20s
  23          #define DISP_0    0xFC
  24          #define DISP_1    0x0C
  25          #define DISP_2    0xDA
  26          #define DISP_3    0xF2
  27          #define DISP_4    0x66
  28          #define DISP_5    0xB6
  29          #define DISP_6    0xBE
  30          #define DISP_7    0xE0
  31          #define DISP_8    0xFE
  32          #define DISP_9    0xF6
  33          #define DISP_10   0x01
  34          
  35          #define WIP  0x01 //X5045 写操作忙标志位掩码
  36          #define WEL  0x02 //X5045 写保护标志位掩码
  37          #define WDT  0x00 //X5045 看门狗时间:1.4s
  38          //#define WDT  0x10 //X5045 看门狗时间:600ms
  39          //#define WDT  0x20 //X5045 看门狗时间:200ms
  40          //#define WDT  0x30 //X5045 关闭看门狗
  41          #define BLA  0x00 //X5045 ROM块锁定范围:无
  42          //#define BLA  0x04 //X5045 ROM块锁定范围:180H-1FFH
  43          //#define BLA  0x08 //X5045 ROM块锁定范围:100H-1FFH
  44          //#define BLA  0x0C //X5045 ROM块锁定范围:000H-1FFH
  45          
  46          
  47          #define WREN 0x06 //允许X5045写操作
  48          //#define WRDS 0x04 //禁止X5045写操作
  49          #define RDSR 0x05 //读X5045状态寄存器
  50          #define WRSR 0x01 //写X5045状态寄存器
  51          
  52          sbit LE = P3^7;
  53          sbit p17 = P1^7;
  54          //X5045 PINS
  55          sbit cs      = P3^4;
C51 COMPILER V7.50   1                                                                     04/17/2008 14:38:42 PAGE 2   

  56          sbit sck     = P3^0;
  57          sbit si      = P3^1;
  58          sbit so      = P3^5;
  59          
  60          extern bit  freset       = 0;
  61          extern bit  frcntdstart  = 0;
  62          //extern bit  fgcntdstart  = 0;
  63          extern bit  frpulsechk   = 0;
  64          //extern bit  fgpulsechk   = 0;
  65          extern bit  frcntdend    = 0;
  66          //extern bit  fgcntdend    = 0;
  67          extern bit  frcomp       = 0;
  68          //extern bit  fgcomp       = 0;
  69          extern bit  frdisp       = 0;
  70          //extern bit  fgdisp       = 0;
  71          extern bit  frdispstr    = 0; //////////////
  72          
  73          //extern uchr gcountdn     = 0;
  74          extern uint rcntdtim     = 0;    /////////////////
  75          //extern uchr gcntdtim     = 0;
  76          extern uint rchktim      = 0;
  77          //extern uint gchktim      = 0;
  78          extern uint r1stim       = 0;
  79          //extern uint g1stim       = 0;
  80          extern uchr rcountdn     = 0;
  81          
  82          
  83          void rint(void);
  84          void t0int(void);
  85          void disp(uchr num);
  86          void closedisp(void);
  87          void delay(void);
  88          void delay1(void);
  89          void send(uchr tx);
  90          void x5045ini(void);
  91          //void 2051initi(void);
  92          void main(void)
  93          {
  94   1        uchr rdisptim=0;
  95   1       //uchr gdisptim=0;
  96   1        uchr tmp=0,i=0;
  97   1        P1=0xFF;
  98   1        LE=0;
  99   1        EA=1;
 100   1       //外部中断允许,下降沿触发    
 101   1        PX0=1;
 102   1        IT0=1;     
 103   1        PT0=0;
 104   1        TMOD=0x11;
 105   1        TL0=0x66;
 106   1        TH0=0xFC;
 107   1        TR0=1;
 108   1        x5045ini();
 109   1        delay1();
 110   1        EX0=1;
 111   1        ET0=1;
 112   1      
 113   1        while(1)
 114   1         {
 115   2          cs=0;
 116   2          cs=1;
 117   2          if(frdispstr==1)//显示标志置1///
C51 COMPILER V7.50   1                                                                     04/17/2008 14:38:42 PAGE 3   

 118   2           {
 119   3            if(frdisp==1)//显示更新标志置1//
 120   3              {
 121   4                frdisp=0;//清显示更新标志//
 122   4                if(rdisptim>2)  { rdisptim--;  disp(rdisptim); }                                    
 123   4                else  closedisp();         
 124   4              }
 125   3            }
 126   2          else  closedisp();  
 127   2         if(frcomp)
 128   2           {
 129   3            frcomp=0;
 130   3            tmp=(rcntdtim-T1S)/1000;
 131   3            if(((rcntdtim-T1S)%1000)/100 >= 5)  tmp++;                        
 132   3            if(rcountdn!=tmp)   rcountdn=tmp;
 133   3            rdisptim=rcountdn-1;
 134   3            }
 135   2        }
 136   1      }
 137               
 138          //////外部中断0服务程序///////////////////////////////////////////////////////////////////////////////
 139          void rint(void) interrupt 0
 140          {
 141   1        if (frcntdstart==0)////触发脉冲还没有来到时//
 142   1         {
 143   2           if((rchktim>T100MS)&&(rchktim<T500MS))//如果时间大于100ms并且小于500ms,/////检测到触发脉冲////////准
             -备开始计数
 144   2           {   
 145   3                 //p17=!p17;
 146   3             rcntdtim=rchktim; //延时计数器
 147   3             r1stim=rchktim; //用于处理1秒钟后要更新显示的问题//
 148   3             frcntdstart=1;    //触发脉冲来到标志
 149   3             frdispstr=1;      //显示开始标志
 150   3           }                                                  
 151   2         }
 152   1        frpulsechk=1;//保证在红灯亮的前提下让定时器0开始计数//否则定时器0进入中断只是重置初值而不计数//
 153   1        rchktim=0;//清0脉宽计数器
 154   1      }
 155          ////////////定时器0中断服务程序///////////////////////////////////////////////////////////////////////
 156          //T0:16位,1ms//11.0592MHZ晶振////////////////////
 157          void t0int(void) interrupt 1
 158          {
 159   1         TL0=0x66;
 160   1         TH0=0xFC;
 161   1           // tt0++;
 162   1         if(frpulsechk==1)
 163   1              {
 164   2                rchktim++;
 165   2                if(rchktim>=T1S)////判断学习结束//学习时间结束后的1S//
 166   2                 {
 167   3                   frpulsechk=0;//红灯已经熄灭没有脉冲了//
 168   3                   rchktim=0;
 169   3                   if(frcntdstart==1)  frcntdend=1;//置学习时间结束标志///
 170   3                 }
 171   2          }
 172   1         if(frcntdstart==1)////触发脉冲来到之后///
 173   1              {
 174   2                 if(frcntdend==0)////如果学习时间还没有结束//
 175   2                  {
 176   3                r1stim++;///从触发脉冲来到的时刻起一直在计算时间///
 177   3                rcntdtim++;///从触发脉冲来到的时刻起延时计数器也一直在计算时间///
 178   3                if(r1stim>=T1S)/////从触发脉冲来到的时刻起每隔1秒的时间//置显示更新标志
C51 COMPILER V7.50   1                                                                     04/17/2008 14:38:42 PAGE 4   

 179   3                 {
 180   4                   r1stim=0;///清0//
 181   4                   frdisp=1;///每隔1秒的时间置显示更新标志//
 182   4                 }
 183   3                 if(rcntdtim>=TMAX)  frcntdend=1; ///包含触发脉冲共20S后认为结束//
 184   3                   }
 185   2                  else////学习结束///
 186   2                   {
 187   3                    frcomp=1;//比较标志置1///
 188   3                        frcntdstart=0;
 189   3                        frcntdend=0;
 190   3                        frdisp=0;
 191   3                    frdispstr=0;
 192   3                   }
 193   2          }
 194   1      }                            
 195          ////////////////////////////////////////////////////////////////////////////////////////////
 196          void disp(uchr num)
 197          {
 198   1       P1=0xFF;
 199   1       LE=0;
 200   1       switch(num%10)
 201   1        {
 202   2           case 0:P1 = P1 & DISP_0; break;
 203   2               case 1:P1 = P1 & DISP_1; break;
 204   2               case 2:P1 = P1 & DISP_2; break;
 205   2               case 3:P1 = P1 & DISP_3; break;
 206   2               case 4:P1 = P1 & DISP_4; break;
 207   2               case 5:P1 = P1 & DISP_5; break;
 208   2               case 6:P1 = P1 & DISP_6; break;
 209   2               case 7:P1 = P1 & DISP_7; break;
 210   2               case 8:P1 = P1 & DISP_8; break;
 211   2           case 9:P1 = P1 & DISP_9; break;
 212   2           default: break;
 213   2        }
 214   1       if(num>=10) P1|=DISP_10;
 215   1       LE=1;
 216   1       delay();
 217   1       LE=0;
 218   1      }
 219          //////////////////////////////
 220          void closedisp(void)
 221          {
 222   1        P1=0;
 223   1        LE=1;
 224   1        delay();
 225   1        LE=0;
 226   1      }
 227          //////////////////////////    
 228          void delay()
 229          {
 230   1       uchr i;
 231   1       for(i=0;i<10;i++)
 232   1       {;}
 233   1      }
 234          ///////////////////////////////////////////////////////
 235          void delay1()
 236          {
 237   1       uint i;
 238   1       for(i=0;i<1000;i++)
 239   1       {;}
 240   1      }
C51 COMPILER V7.50   1                                                                     04/17/2008 14:38:42 PAGE 5   

 241          //////////////////////////////////////////////////////
 242          void send(uchr tx)
 243          {
 244   1       uchr i;
 245   1       uchr tmp=0x80;
 246   1       for(i=0;i<8;i++)
 247   1       {
 248   2         sck = 0 ;
 249   2         if(tx & tmp)si = 1;
 250   2         else   si = 0;
 251   2         tmp = tmp >> 1;
 252   2         delay();
 253   2         sck = 1;
 254   2         delay();
 255   2        }
 256   1      }
 257          ///////////////////////////////////////////////////////////
 258          void x5045ini(void)
 259          {
 260   1       cs = 1;
 261   1       delay();
 262   1       cs = 0;
 263   1       delay();
 264   1       send(WREN);
 265   1       cs = 1;
 266   1       delay();
 267   1       cs = 0;
 268   1       delay();
 269   1       send(WRSR);
 270   1       send(WDT);//设置X5045
 271   1       cs = 1;
 272   1       delay1();
 273   1      }
 274          ////////////////////////////////////////////////////////////
 275          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    530    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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