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

📄 +

📁 基于单片机的智能交通灯系统的设计
💻
字号:
C51 COMPILER V8.05a   BIYESHEJI                                                            10/31/2012 22:38:17 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE BIYESHEJI
OBJECT MODULE PLACED IN .\biyesheji.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\biyesheji.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\biyesheji.obj)

line level    source

   1                  /***********************************************************
   2                         十字路口交通灯控制 C 程序
   3                  ***********************************************************/
   4                  #include <reg51.h>
   5                  #define uchar   unsigned char
   6                  #define uint    unsigned int
   7                  /*****定义控制位*******************************************/
   8                  sbit   Time_Show_LED2=P2^5;  //Time_Show_LED2(直行时间显示)控制位
   9                  sbit   Time_Show_LED1=P2^4;  //Time_Show_LED1(直行时间显示)控制位
  10                  sbit   EW_LED2=P2^3;         //EW_LED2控制位
  11                  sbit   EW_LED1=P2^2;         //EW_LED1控制位
  12                  sbit   SN_LED2=P2^1;         //SN_LED2控制位
  13                  sbit   SN_LED1=P2^0;         //SN_LED1控制位
  14                  sbit   SN_Yellow=P1^6;       //SN黄灯
  15                  sbit   EW_Yellow=P1^2;       //EW黄灯
  16                  sbit   EW_ManGreen=P3^0;     //EW人行道绿灯
  17                  sbit   SN_ManGreen=P3^1;     //SN人行道绿灯
  18                  sbit   Special_LED=P2^6;     //交通特殊指示灯
  19                  sbit   Busy_LED=P2^7;        //交通繁忙指示灯
  20                  sbit   Nomor_Button=P3^5;    //交通正常按键
  21                  sbit   Busy_Btton=P3^6;      //交通繁忙按键
  22                  sbit   Special_Btton=P3^7;   //交通特殊按键  
  23                  sbit   EW_ManRed=P3^3;       //EW人行道红灯
  24                  sbit   SN_ManRed=P3^4;       //SN人行道红灯
  25                  sbit   x=P1^7;
  26                  sbit   y=P1^3;
  27                  bit    Flag_SN_Yellow;      //SN黄灯标志位
  28                  bit    Flag_EW_Yellow;       //EW黄灯标志位
  29                  char   Time_EW;        //东西方向倒计时单元
  30                  char   Time_SN;        //南北方向倒计时单元
  31                  uchar  EW=60,SN=40,EWL=19,SNL=19;      //程序初始化赋值,正常模式
  32                  uchar  EW1=60,SN1=40,EWL1=19,SNL1=19;  //用于存放修改值的变量
  33                  uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //0-9段选码
  34                  uchar code S[8]={0x28,0x48,0x98,0x88,0x82,0x84,0x89,0x88};  
  35                  //交通信号灯控制代码
  36                  /**********************延时子程序**************************/
  37                  void Delay(uchar a)
  38                  {
  39   1                      uchar   i;
  40   1                      i=a;
  41   1                      while(i--){;}
  42   1              }
  43                  
  44                  /*****************显示子函数******************************/
  45                  void Display(void)
  46                  {
  47   1                      uchar h,l;
  48   1                      h=Time_EW/10;
  49   1                      l=Time_EW%10;
  50   1                      P0=table[l];        
  51   1                      EW_LED2=1;            //点亮EW_LED2
  52   1                      Delay(2);
  53   1                      EW_LED2=0;        //熄灭EW_LED2
  54   1                      P0=table[h];
  55   1                      EW_LED1=1;        //点亮EW_LED1
C51 COMPILER V8.05a   BIYESHEJI                                                            10/31/2012 22:38:17 PAGE 2   

  56   1                      Delay(2);
  57   1                      EW_LED1=0;
  58   1              
  59   1                      h=Time_SN/10;
  60   1                      l=Time_SN%10;
  61   1                      P0=table[l];
  62   1                      SN_LED2=1;        //点亮SN_LED2
  63   1                      Delay(2);
  64   1                      SN_LED2=0;
  65   1                      P0=table[h];
  66   1                      SN_LED1=1;                //点亮SN_LED1
  67   1                      Delay(2);
  68   1                      SN_LED1=0;
  69   1                              
  70   1                      h= EW1/10;
  71   1                      l= EW1%10;
  72   1                      P0=table[l];
  73   1                      Time_Show_LED1=1;        //点亮Time_Show_LED1
  74   1                      Delay(2);
  75   1                 Time_Show_LED1=0;
  76   1                      P0=table[h];
  77   1                      Time_Show_LED2=1;       //点亮Time_Show_LED2
  78   1                      Delay(2);
  79   1                      Time_Show_LED2=0;
  80   1              } 
  81                  /**********************外部0中断服务程序******************/
  82                  
  83                  void INT0_srv(void)interrupt 0 using 1
  84                  {
  85   1                       EX0=0;               //关中断
  86   1              
  87   1                  if(Nomor_Button==0) //测试按键是否按下,按下为正常状态
  88   1                  {
  89   2              EW1=60;
  90   2              SN1=40;
  91   2              EWL1=19;
  92   2              SNL1=19;
  93   2              Busy_LED=0;     //关繁忙信号灯
  94   2              Special_LED =0; //关特殊信号灯
  95   2                  }
  96   1                  if(Busy_Btton==0)   //测试按键是否按下,按下为繁忙状态
  97   1                  {
  98   2              EW1=45;
  99   2              SN1=30;
 100   2              EWL1=14;
 101   2              SNL1=14;
 102   2              Special_LED=0;  //关特殊信号灯
 103   2              Busy_LED=1;     //开繁忙信号灯
 104   2                              
 105   2                  }
 106   1                  if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
 107   1                  {
 108   2              EW1=75;
 109   2              SN1=55;
 110   2              EWL1=19;
 111   2              SNL1=19;
 112   2              Busy_LED=0;    //关繁忙信号灯
 113   2              Special_LED =1;//开特殊信号灯
 114   2                  }                                   
 115   1                              EX0=1;         //开中断
 116   1              }
 117                  /**********************T0中断服务程序*******************/
C51 COMPILER V8.05a   BIYESHEJI                                                            10/31/2012 22:38:17 PAGE 3   

 118                  void timer0(void)interrupt 1 using 1
 119                  {
 120   1                      static uchar count;
 121   1                      TH0=(65536-50000)/256;
 122   1                      TL0=(65536-50000)%256;
 123   1                      count++;
 124   1                      
 125   1                      if(count==10)
 126   1                      {
 127   2                          if(Flag_SN_Yellow==1)  //测试南北黄灯标志位
 128   2                              {SN_Yellow=~SN_Yellow;}
 129   2                          if(Flag_EW_Yellow==1)  //测试东西黄灯标志位
 130   2                              {EW_Yellow=~EW_Yellow;} 
 131   2                      }
 132   1                      if(count==20)
 133   1                      {
 134   2                          Time_EW--;
 135   2                          Time_SN--;
 136   2                          if(Flag_SN_Yellow==1)  //测试南北黄灯标志位
 137   2                              {SN_Yellow=~SN_Yellow;}
 138   2                          if(Flag_EW_Yellow==1)  //测试东西黄灯标志位
 139   2                              {EW_Yellow=~EW_Yellow;}
 140   2                          count=0;
 141   2                      }
 142   1              }
 143                  /*********************主程序开始***********************/
 144                  void    main(void)
 145                  { 
 146   1              Busy_LED=0;
 147   1              Special_LED=0;
 148   1              IT0=1;     //INT0负跳变触发
 149   1              TMOD=0x01; //定时器工作于方式1
 150   1              TH0=(65536-50000)/256; //定时器赋初值
 151   1              TL0=(65536-50000)%256;
 152   1              EA=1;  //CPU开中断总允许
 153   1              ET0=1; //开定时中断
 154   1              EX0=1; //开外部INTO中断
 155   1              TR0=1; //启动定时
 156   1              
 157   1                  while(1)
 158   1                  {                           
 159   2                      /*******S0状态**********/
 160   2              SN_ManRed=0;
 161   2              SN_ManGreen=1;  //SN人行道通行
 162   2              EW_ManRed=1;    //EW人行道禁止
 163   2              EW_ManGreen=0;
 164   2              Flag_EW_Yellow=0;          //EW关黄灯显示信号
 165   2              Time_EW=EW;
 166   2              Time_SN=SN;
 167   2              while(Time_SN>=5)
 168   2                              {    
 169   3                                  P1=S[0];    //SN绿灯,EW红灯
 170   3                                  Display();
 171   3                              }
 172   2              
 173   2                              /*******S1状态**********/
 174   2                              P1=0x00;
 175   2                              while(Time_SN>=0)
 176   2                              {
 177   3              Flag_SN_Yellow=1; //SN开黄灯信号位
 178   3              P1=P1|0x08;    //保持EW红灯
 179   3              Display();
C51 COMPILER V8.05a   BIYESHEJI                                                            10/31/2012 22:38:17 PAGE 4   

 180   3                              }
 181   2              
 182   2                              /*******S2状态**********/
 183   2              SN_ManRed=1;      //SN人行道禁止
 184   2              SN_ManGreen=0;
 185   2              EW_ManRed=1;      //EW人行道禁止
 186   2              EW_ManGreen=0;
 187   2              Flag_SN_Yellow=0; //SN关黄灯显示信号
 188   2              Time_SN=SNL;
 189   2              while(Time_SN>=5)
 190   2                              {
 191   3              P1=S[2];      //SN左拐绿灯亮,EW红灯
 192   3              Display();
 193   3                              }
 194   2              
 195   2                              /*******S3状态**********/
 196   2                              P1=0x00;
 197   2                              while(Time_SN>=0)
 198   2                              {
 199   3              //Flag_SN_Yellow=0;     //SN开黄灯信号位
 200   3              x=1;
 201   3              P1=P1|0x08;    //保持EW红灯
 202   3              Display();
 203   3                              }
 204   2              
 205   2                              /***********赋值*********/
 206   2              EW=EW1;
 207   2              SN=SN1;
 208   2              EWL=EWL1;
 209   2              SNL=SNL1;
 210   2                              /*******S4状态**********/
 211   2              SN_ManRed=1;      //SN人行道禁止
 212   2              SN_ManGreen=0;
 213   2              EW_ManRed=0;
 214   2              EW_ManGreen=1;    //EW人行道通行
 215   2              Flag_SN_Yellow=0; //SN关黄灯显示信号
 216   2              Time_EW=SN;
 217   2              Time_SN=EW;
 218   2              while(Time_EW>=5)
 219   2                              {
 220   3                                  P1=S[4];      //EW通行,SN红灯
 221   3                                      Display();
 222   3                              }
 223   2              
 224   2                              /*******S5状态**********/
 225   2                              P1=0X00;
 226   2                              while(Time_EW>=0)
 227   2                              {
 228   3              Flag_EW_Yellow=1;//EW开黄灯信号位
 229   3              P1=P1|0x80;    //保持SN红灯
 230   3              Display();
 231   3                              }
 232   2              
 233   2                              /*******S6状态**********/
 234   2              SN_ManRed=1;     //SN人行道禁止
 235   2              SN_ManGreen=0;
 236   2              EW_ManRed=1;     //EW人行道禁止
 237   2              EW_ManGreen=0;
 238   2              Flag_EW_Yellow=0;//EW关黄灯显示信号
 239   2              Time_EW=EWL;
 240   2              while(Time_EW>=5)
 241   2                              {
C51 COMPILER V8.05a   BIYESHEJI                                                            10/31/2012 22:38:17 PAGE 5   

 242   3              P1=S[6];     //EW左拐绿灯亮,SN红灯
 243   3              Display();
 244   3                              }
 245   2              
 246   2                              /*******S7状态**********/
 247   2                              P1=0X00;
 248   2                              while(Time_EW>=0)
 249   2                              {
 250   3              //Flag_EW_Yellow=0; //EN开黄灯信号位
 251   3              y=1;
 252   3              P1=P1|0x80;    //保持SN红灯
 253   3              Display();
 254   3                              }
 255   2                                      
 256   2                              /***********赋值********/
 257   2                              EW=EW1;
 258   2                              SN=SN1;
 259   2                              EWL=EWL1;
 260   2                              SNL=SNL1;
 261   2                      }
 262   1              }
 263          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    531    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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