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

📄 main.lst

📁 51单片机十字路口交通灯控制程序
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  01/05/2008 10:09:14 PAGE 1   


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

stmt level    source

   1          /***************************************/
   2          /*       十字路口交通灯控制系统        */
   3          /*       开发语言:C51                 */
   4          /*       编译器:keil C51 V7.06        */
   5          /***************************************/
   6          /*采用线选法寻址8255A                  */
   7          /*PA      Address 7FFCH                */
   8          /*PB      Address 7FFDH                */
   9          /*PC      Address 7FFEH                */
  10          /*Control Address 7FFFH                */
  11          /*晶振:  12M                          */
  12          /*单片机:AT89s51                      */
  13          /***************************************/
  14          #include "at89x51.h"
  15          #include "absacc.h"
  16          #define  KEY     XBYTE [0x7FFC]
  17          #define  LED     XBYTE [0x7FFD]
  18          #define  Control XBYTE [0x7FFF]
  19          
  20          #define  R_ON_G_ON  0x2e//东西方向红灯亮 南北方向绿灯亮
  21          #define  R_ON_G_OFF 0x3e//东西方向红灯亮 南北方向绿灯灭
  22          #define  R_ON_Y_ON  0x1e//东西方向红灯亮 南北方向黄灯亮
  23          
  24          #define  G_ON_R_ON  0x35//东西方向绿灯亮 南北方向红灯亮
  25          #define  G_OFF_R_ON 0x37//东西方向绿灯灭 南北方向红灯亮
  26          #define  Y_ON_R_ON  0x33//东西方向黄灯亮 南北方向红灯亮
  27          unsigned char data second;
  28          unsigned char data msecond;
  29          unsigned char data caution;
  30          bit      complete;
  31          /****************************************************************/
  32          /*******************************/
  33          /*     定时器初始化            */
  34          /*     输入:无                */
  35          /*     输出:无                */
  36          /*******************************/
  37          void init_t(void)
  38          {
  39   1       TMOD=0X21;                     //定时器0工作在方式1  10ms产生一次中断 
  40   1      
  41   1       TH0=0xd8; 
  42   1       TL0=0xf0;
  43   1       EA=1;
  44   1       ET0=1;
  45   1      }
  46          /****************************************************************/
  47          /***************************************/
  48          void init_8255A(void)
  49          {Control=0x98;        //PA口工作于方式0 输入
  50   1                            //PB口工作于方式0 输出
  51   1                            //PC7-4输入 PC3-0 输出
  52   1      }
  53          /****************************************************************/
  54          /*******************************/
  55          /*     键盘检测延迟函数        */
C51 COMPILER V7.06   MAIN                                                                  01/05/2008 10:09:14 PAGE 2   

  56          /*     输入:无                */
  57          /*     输出:无                */
  58          /*******************************/
  59          void key_delay(void)
  60          {unsigned int i;
  61   1       i=1000;
  62   1       while(--i); 
  63   1      }
  64          /****************************************************************/
  65          /*******************************/
  66          /*     键盘检测函数            */
  67          /*     输入:无                */
  68          /*     输出:键盘检测值        */
  69          /*******************************/
  70          unsigned char key_detect(void)
  71          {unsigned char key;
  72   1       key=KEY;
  73   1       key_delay();                  //延迟约20MS 消除按键抖动
  74   1       if((key==KEY)&&(key==0xFE))
  75   1         return 0x01;                //若两次按键值相同 且 PA0为0 为有效按键 返回 0x01 
  76   1       else return 0x00;             //否则还回 0x00
  77   1      
  78   1      }
  79          /***************************************************************************************/
  80          /*******************************/
  81          /*        主函数               */
  82          /*        输入:无             */
  83          /*        输出:无             */
  84          /*******************************/
  85          /***************************************/
  86          main()
  87          { init_8255A();                  //8255初始化
  88   1        init_t();                      //定时器初始化  定时器未开启
  89   1        while(1) 
  90   1       {switch( key_detect())          //键盘检测 
  91   2          {
  92   3           case 0x00:LED=0xFF;TR0=0;break;   //检测函数为 0x00  开关断开 关闭定时器 交通灯停止工作
  93   3           case 0x01:TR0=1   ;      break;   //检测函数为 0x01  开关闭合 启动定时器 交通灯开始工作
  94   3           default:LED=0xFF  ;TR0=0;break;   //检测函数为其他值          关闭定时器 交通灯停止工作
  95   3          }
  96   2      
  97   2       }
  98   1      }
  99          /***************************************/
 100          /***************************************************************************************/
 101          /*******************************/
 102          /*     定时中断服务函数        */
 103          /*     输入:无                */
 104          /*     输出:无                */
 105          /*******************************/
 106          void timer0_isp()interrupt 1 using 2
 107          {  TR0=0;                              //关闭定时器 
 108   1         if(++msecond==100)                  //10毫秒中断一次 100次为1秒
 109   1             {msecond=0;                     
 110   2              ++second;
 111   2             }
 112   1         if(msecond==3)
 113   1           complete=~complete;               //设定闪烁标志位  
 114   1         //-----------------------------------------------------------------------------------
 115   1         if(second<=15)       caution=0x01;  //0-15s  东西方向红灯亮,  南北方向绿灯亮   共15s
 116   1         else if(second<=18)  caution=0x02;  //15-18s 东西方向红灯亮,  南北方向绿灯闪烁 共3s
 117   1         else if(second<=20)  caution=0x03;  //18-20s 东西方向红灯亮,  南北方向黄灯亮   共2s
C51 COMPILER V7.06   MAIN                                                                  01/05/2008 10:09:14 PAGE 3   

 118   1         else if(second<=35)  caution=0x04;  //20-35s 东西方向绿灯亮,  南北方向红灯亮   共15s
 119   1         else if(second<=38)  caution=0x05;  //35-38s 东西方向绿灯闪烁,南北方向红灯亮   共3s
 120   1         else                 caution=0x06;  //38-40s 东西方向黄灯亮,  南北方向红灯亮   共2s
 121   1        //-------------------------------------------------------------------------------------
 122   1         switch(caution)
 123   1             {case 0x01:LED=R_ON_G_ON;break;      //东西方向红灯亮 南北方向绿灯亮     
 124   2              case 0x02:if(complete)
 125   2                             LED=R_ON_G_ON ;
 126   2                        else LED=R_ON_G_OFF;
 127   2                        break;                    //东西方向红灯亮   南北方向绿灯闪动
 128   2              case 0x03:LED=R_ON_Y_ON;break;      //东西方向红灯亮   南北方向黄灯亮
 129   2              case 0x04:LED=G_ON_R_ON;break;      //东西方向绿灯亮   南北方向红灯亮
 130   2              case 0x05:if(complete)
 131   2                             LED=G_ON_R_ON;
 132   2                        else LED=G_OFF_R_ON;
 133   2                        break;                    //东西方向绿灯闪动 南北方向红灯亮
 134   2              case 0x06:LED=Y_ON_R_ON;break;      //东西方向黄灯亮   南北方向红灯亮
 135   2              default  :LED=0xFF;break;           //其他情况下 交通停止工作
 136   2             }
 137   1         //-------------------------------------------------------------------------------------
 138   1         if(second==40) second=0;            //40秒完成一次交通灯循环 秒值归0
 139   1         
 140   1        TH0=0xd8; //10ms                     //校正定时器启动值
 141   1        TL0=0xf0;                     
 142   1        TR0=1;                               //重新启动定时器
 143   1      }
 144          /*********************************************************************************************************
             -************************/


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


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

⌨️ 快捷键说明

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