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

📄 traffic.lst

📁 用keil51编写的控制交通灯程序,使用可编程通用并行接口8255,内有详细流程图和注释
💻 LST
字号:
C51 COMPILER V7.50   TRAFFIC                                                               09/08/2007 20:11:12 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TRAFFIC
OBJECT MODULE PLACED IN traffic.OBJ
COMPILER INVOKED BY: F:\LC\software\Keil\UV2\C51\BIN\C51.EXE traffic.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include <at89x51.h>
   3          #include <absacc.h>
   4          
   5          #define RED     XBYTE[0XE000] // 8255 port A red light
   6          #define YELLOW  XBYTE[0XE001] // 8255 port B yellow light
   7          #define GREEN   XBYTE[0XE002] // 8255 port C green light
   8          #define Command XBYTE[0XE003] // 8255 configuration word
   9          
  10          #define byte unsigned char
  11          #define word unsigned int
  12          
  13          #define DELAY_SHORT   10
  14          #define FLASH_TIMES   10
  15          #define DELAY_LONG    600
  16          
  17          /*
  18                  [4]     [3]     [2]     [1]
  19          RED     PA3     PA2     PA1     PA0
  20          YELLOW  PB3     PB2     PB1     PB0
  21          GREEN   PC3     PC2     PC1     PC0
  22          
  23          */
  24          
  25          #define ON_1_3      0x05
  26          #define ON_2_4      0xA0
  27          #define ALL_ON      0x0F
  28          #define ALL_OFF     0x00
  29          
  30          word d_short;
  31          word d_long;
  32          byte stop;
  33          byte wait_flag;
  34          byte flash;
  35          
  36          void iniVal(void);
  37          void ini8255(void);
  38          void Traffic_Running(void);
  39          
  40          void iniVal(void)
  41          {
  42   1          d_short = 0;
  43   1          d_long = 0;
  44   1          stop = 0;
  45   1          wait_flag = 0;
  46   1          flash = 0;
  47   1      
  48   1          TMOD = 0x01;// 16 bit timer
  49   1          TH0 = (65536-50000) / 256;
  50   1          TL0 = (65536-50000) % 256;
  51   1          TR0 = 1;
  52   1          ET0 = 1;    // enable timer0 interrupt      
  53   1          EX0 = 1;    // enable INT0 interrupt
  54   1              IT0 = 1;    // INT0 interrupt at falling edge
  55   1          EA = 1;     // enable cpu interrupt
C51 COMPILER V7.50   TRAFFIC                                                               09/08/2007 20:11:12 PAGE 2   

  56   1          
  57   1      }
  58          
  59          void ini8255(void)
  60          {
  61   1          Command = 0x80;   // 0B10000000
  62   1          RED = ALL_ON;
  63   1          YELLOW = ALL_OFF;
  64   1          GREEN = ALL_OFF;
  65   1      }
  66          
  67          void int_0(void) interrupt 0 using 1
  68          {
  69   1          stop = 1;       // 外部按钮停止工作
  70   1      }
  71          
  72          void Timer_0(void) interrupt 1 using 0
  73          {
  74   1          TH0 = 0xC3;     // 50ms
  75   1          TL0 = 0x50;
  76   1      
  77   1          if (1 == wait_flag){
  78   2              // 半秒短延时
  79   2              if (d_short >= DELAY_SHORT){
  80   3                  d_short = 0;        
  81   3                  wait_flag = 0;
  82   3              }else {
  83   3                  d_short++;
  84   3              }
  85   2          }else if (2 == wait_flag){
  86   2              // 30秒长延时
  87   2              if (d_long >= DELAY_LONG){
  88   3                  d_long = 0;        
  89   3                  wait_flag = 0;
  90   3              }else {
  91   3                  d_long++;
  92   3              }
  93   2          }
  94   1      
  95   1          if (1 == stop){
  96   2              wait_flag = 0;
  97   2              d_short = 0;
  98   2              d_long = 0;
  99   2          }
 100   1      }
 101          
 102          void Traffic_Running(void)
 103          {
 104   1          while (0 == stop){
 105   2              GREEN = ON_1_3;                 // 1,3绿灯亮
 106   2              RED = ON_2_4;                   // 2,4红灯亮
 107   2              YELLOW = ALL_OFF;               // 黄灯灭
 108   2              wait_flag = 2;
 109   2              while (2 == wait_flag);         // 延时30秒
 110   2              GREEN = ALL_OFF;                // 绿灯灭
 111   2              while (flash <= FLASH_TIMES){   // 1,3黄灯闪烁
 112   3                  flash++;                    // 闪烁次数
 113   3                  if (0 == flash & 0x01){     
 114   4                      YELLOW = ALL_OFF;       // 偶次灭
 115   4                  }else{
 116   4                      YELLOW = ON_1_3;        // 奇次亮
 117   4                  }
C51 COMPILER V7.50   TRAFFIC                                                               09/08/2007 20:11:12 PAGE 3   

 118   3                  wait_flag = 1;
 119   3                  while (1 == wait_flag);     // 延时半秒
 120   3              }
 121   2              flash = 0;
 122   2      
 123   2              GREEN = ON_2_4;                 // 2,4绿灯亮
 124   2              RED = ON_1_3;                   // 1,3红灯亮
 125   2              YELLOW = ALL_OFF;               // 黄灯灭
 126   2              wait_flag = 2;
 127   2              while (2 == wait_flag);
 128   2              GREEN = ALL_OFF;
 129   2              while (flash <= FLASH_TIMES){   // 2,4黄灯闪烁
 130   3                  flash++;
 131   3                  if (0 == flash & 0x01){
 132   4                      YELLOW = ALL_OFF;
 133   4                  }else{
 134   4                      YELLOW = ON_2_4;
 135   4                  }
 136   3                  wait_flag = 1;
 137   3                  while (1 == wait_flag);
 138   3              }
 139   2              flash = 0;
 140   2          }
 141   1      }
 142          
 143          void main(void)
 144          {
 145   1          iniVal();
 146   1          ini8255();
 147   1          Traffic_Running();
 148   1      
 149   1          for(;;);
 150   1      }
 151          


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


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

⌨️ 快捷键说明

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