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

📄 +

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


C51 COMPILER V8.05a, COMPILATION OF MODULE BIYESHEJI1
OBJECT MODULE PLACED IN .\biyesheji1.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\biyesheji1.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\biyesheji1.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   x=P1^5;
  18                  sbit   y=P1^7;
  19                  sbit   a=P1^0;
  20                  sbit   b=P1^1;
  21                  sbit   c=P1^3;
  22                  sbit   d=P1^4;
  23                  sbit   SN_ManGreen=P3^1;     //SN人行道绿灯
  24                  sbit   Special_LED=P2^6;     //交通特殊指示灯
  25                  sbit   Busy_LED=P2^7;        //交通繁忙指示灯
  26                  sbit   Nomor_Button=P3^5;    //交通正常按键
  27                  sbit   Busy_Btton=P3^6;      //交通繁忙按键
  28                  sbit   Special_Btton=P3^7;   //交通特殊按键  
  29                  sbit   EW_Green=P3^3;       //EW人行道红灯
  30                  sbit   SN_Green=P3^4;       //SN人行道红灯
  31                  bit    Flag_SN_Yellow;      //SN黄灯标志位
  32                  bit    Flag_EW_Yellow;       //EW黄灯标志位
  33                  char   Time_EW;        //东西方向倒计时单元
  34                  char   Time_SN;        //南北方向倒计时单元
  35                  uchar  EW=60,SN=40,EWL=19,SNL=19;      //程序初始化赋值,正常模式
  36                  uchar  EW1=60,SN1=40,EWL1=19,SNL1=19;  //用于存放修改值的变量
  37                  uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //0-9段选码
  38                  uchar code S[8]={0xA0,0xA0,0x80,0xC0,0xA0,0xA0,0x20,0x24};  
  39                  //交通信号灯控制代码
  40                  /**********************延时子程序**************************/
  41                  void Delay(uchar a)
  42                  {
  43   1                      uchar   i;
  44   1                      i=a;
  45   1                      while(i--){;}
  46   1              }
  47                  
  48                  /*****************显示子函数******************************/
  49                  void Display(void)
  50                  {
  51   1                      uchar h,l;
  52   1                      h=Time_EW/10;
  53   1                      l=Time_EW%10;
  54   1                      P0=table[l];        
  55   1                      EW_LED2=1;            //点亮EW_LED2
C51 COMPILER V8.05a   BIYESHEJI1                                                           10/31/2012 22:36:56 PAGE 2   

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

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

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

 242   2              
 243   2                              /*******S6状态**********/
 244   2              //SN_ManRed=1;     //SN人行道禁止
 245   2              SN_ManGreen=0;
 246   2              //EW_ManRed=1;   //EW人行道禁止
 247   2              EW_ManGreen=0;
 248   2              Flag_EW_Yellow=0;//EW关黄灯显示信号
 249   2              Time_EW=EWL;
 250   2              while(Time_EW>=5)
 251   2                              {
 252   3              P1=S[6];     //EW左拐绿灯亮,SN红灯
 253   3              Display();
 254   3                              }
 255   2              
 256   2                              /*******S7状态**********/
 257   2                              P1=0X00;
 258   2                              while(Time_EW>=0)
 259   2                              {
 260   3              Flag_EW_Yellow=1; //EN开黄灯信号位
 261   3              x=1;
 262   3              P1=P1|0x20;    //保持SN红灯
 263   3              Display();
 264   3                              }
 265   2                                      
 266   2                              /***********赋值********/
 267   2                              EW=EW1;
 268   2                              SN=SN1;
 269   2                              EWL=EWL1;
 270   2                              SNL=SNL1;
 271   2                      }
 272   1              }
 273          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    522    ----
   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 + -