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

📄 logic.lst

📁 利用单片机实现的控制电梯系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   LOGIC                                                                 05/15/2008 15:59:15 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LOGIC
OBJECT MODULE PLACED IN logic.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE logic.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #include        "PIN.H"                 // 修改该文件以适应硬件环境/单片机型号等
   3          #include        "CH452CMD.H"    // CH452常量定义
   4          #include    "definition.h"
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          #define step_motor_frequence 65536-1000
   8          #define timer_10ms 65536-10000
   9          #define up 1
  10          #define down 0
  11          extern void CH452_Write (unsigned short cmd);
  12          extern uchar CH452_Read( void );
  13          extern void keyboard_detact(uchar value);
  14          uchar up_list[5];
  15          uchar down_list[5];
  16          bit read_flag;
  17          bit direction_display_flag;
  18          bit highest_floor_flag;
  19          bit lowest_floor_flag;
  20          uchar storey;
  21          uint counter_5s;
  22          uchar over_load_flag;
  23          uchar up_list_flag=0;
  24          uchar down_list_flag=0;
  25          uchar inside_request=0;
  26          uchar outside_request=0;
  27          bit current_direction;
  28          sbit L297_clock=P1^0;
  29          sbit L297_reset=P1^1;
  30          sbit L297_mode=P1^2;
  31          sbit L297_direction=P1^3;
  32          sbit L297_on=P1^4;
  33          void interrupt_logic(void);
  34          void input_up_list(uchar request);
  35          void input_down_list(uchar request);
  36          /************************初始化程序******************/
  37          void init_port(void)
  38          {
  39   1       P0=0x00;
  40   1       P2=P2&0x07;
  41   1      }
  42          
  43          void init_serialport(void)
  44          {
  45   1       SCON=0x98;
  46   1       PCON=0x80;
  47   1       ES=1;
  48   1       IP=0x10;
  49   1      }
  50          
  51          void init_stepper_motor(void)
  52          {
  53   1       L297_on=1;
  54   1       L297_reset=1;
  55   1       L297_mode=1;
C51 COMPILER V7.50   LOGIC                                                                 05/15/2008 15:59:15 PAGE 2   

  56   1       L297_direction=up;
  57   1       current_direction=up;
  58   1      }
  59          
  60          void init_timer(void)
  61          {
  62   1       TMOD=0x11;
  63   1       TH0=step_motor_frequence/256;
  64   1       TL0=step_motor_frequence%256;
  65   1       ET0=1;
  66   1       TH1=timer_10ms/256;
  67   1       TL1=timer_10ms%256;
  68   1       ET1=1;
  69   1       TR0=1;
  70   1      }
  71           
  72          void init_exint0(void)
  73          {
  74   1       EA=1;
  75   1       EX0=1;
  76   1       IT0=1;
  77   1      }
  78          
  79          void init_CH451L(void)
  80          {
  81   1       CH452_Write(CH452_RESET);
  82   1       CH452_Write(CH452_BCD | 0x20);    // 选择BCD译码方式,扫描极限为2个数码管
  83   1       CH452_Write(CH452_SYSON2);     // 开启显示
  84   1       CH452_Write(CH452_DIG0 | 0);
  85   1      }
  86          
  87          void delay_ms(uint t)//延时子程序,延时 1MS*t S
  88          {
  89   1              uchar a;
  90   1              while(--t != 0)
  91   1              {
  92   2                      for(a = 0; a < 125; a++);
  93   2              }
  94   1      }
  95          
  96          void delay_s(uchar x)
  97          {
  98   1       uchar i;
  99   1       for(i=0;i<x;i++)
 100   1       delay_ms(1000);
 101   1      }
 102          /*****************************超重判断程序************************/
 103          void over_load_judge(void)
 104          {
 105   1       if(1==over_load_flag)
 106   1       {
 107   2        TR0 = 0;
 108   2        delay_s(3);
 109   2       }
 110   1       else if(2==over_load_flag)
 111   1       {
 112   2        TR0=1;
 113   2        over_load_flag=0;
 114   2       } 
 115   1      }
 116          /*****************************电梯逻辑程序************************/
 117          void transmit_run(void)
C51 COMPILER V7.50   LOGIC                                                                 05/15/2008 15:59:15 PAGE 3   

 118          {
 119   1        SBUF=0x0f;
 120   1        while(0==TI);
 121   1        TI=0;
 122   1      }
 123          
 124          void transmit_stop(void)
 125          {
 126   1        SBUF=0xf0;
 127   1        while(0==TI);
 128   1        TI=0;
 129   1      }
 130          
 131          void start_lift(void)
 132          {
 133   1       uchar temp;
 134   1       do
 135   1       {
 136   2        if(1==read_flag)
 137   2        {
 138   3         temp=CH452_Read();
 139   3         keyboard_detact(temp);
 140   3         read_flag=0;
 141   3        }
 142   2       }
 143   1       while(storey!=1);
 144   1       TR0=0;                          //电梯停转
 145   1       CH452_Write(CH452_DIG0 | storey);
 146   1       CH452_Write(CH452_DIG1 | 0x10);
 147   1       delay_s(2);
 148   1       direction_display_flag=0;
 149   1      }
 150          
 151          void keyboard_program(void)
 152          {
 153   1       uchar keyboard_value;
 154   1       if(1==read_flag)
 155   1       {
 156   2        keyboard_value=CH452_Read();
 157   2        keyboard_detact(keyboard_value);
 158   2        interrupt_logic();
 159   2        read_flag=0;
 160   2       }
 161   1      }
 162          
 163          void direction_display(void)
 164          {
 165   1       if(up==current_direction)
 166   1       CH452_Write(CH452_DIG1 | 0x07);
 167   1       else
 168   1       CH452_Write(CH452_DIG1 | CH452_BCD_CH_L);
 169   1       CH452_Write(CH452_DIG0 | storey);
 170   1      }
 171          
 172          void turn_off_lights(uchar level)
 173          {
 174   1       switch(level)
 175   1       {
 176   2        case 1:
 177   2        {
 178   3         inside_led1=0;
 179   3         outside_up_led1=0;
C51 COMPILER V7.50   LOGIC                                                                 05/15/2008 15:59:15 PAGE 4   

 180   3         break;
 181   3        }
 182   2        case 2:
 183   2        {
 184   3         inside_led2=0;
 185   3         if(up==current_direction)
 186   3         {
 187   4          outside_up_led2=0;
 188   4              if(2>=up_list[0])
 189   4              outside_down_led2=0;
 190   4         }
 191   3         else
 192   3         {
 193   4          outside_down_led2=0;
 194   4              if(2<=down_list[0])
 195   4              outside_up_led2=0;
 196   4         }
 197   3         break;                        
 198   3        }
 199   2        case 3:
 200   2        {
 201   3         inside_led3=0;
 202   3         if(up==current_direction)
 203   3         {
 204   4          outside_up_led3=0;
 205   4              if(3>=up_list[0])
 206   4              outside_down_led3=0;
 207   4         }
 208   3         else
 209   3         {
 210   4          outside_down_led3=0;
 211   4              if(3<=down_list[0])
 212   4              outside_up_led3=0;
 213   4         }
 214   3         break;
 215   3        }
 216   2        case 4:
 217   2        {
 218   3         inside_led4=0;
 219   3         if(up==current_direction)
 220   3         {
 221   4          outside_up_led4=0;
 222   4              if(4>=up_list[0])
 223   4              outside_down_led4=0;
 224   4         }
 225   3         else
 226   3         {
 227   4          outside_down_led4=0;
 228   4              if(4<=down_list[0])
 229   4              outside_up_led4=0;
 230   4         }
 231   3         break;
 232   3        }
 233   2        case 5:
 234   2        {
 235   3         inside_led5=0;
 236   3         outside_down_led5=0;
 237   3         break;
 238   3        }
 239   2        default:break;
 240   2       }
 241   1      }
C51 COMPILER V7.50   LOGIC                                                                 05/15/2008 15:59:15 PAGE 5   

 242          
 243          void lift_run(void)
 244          {
 245   1       uchar i;
 246   1       if((0==down_list_flag)&&(0==up_list_flag))
 247   1       {
 248   2        TR0=0;
 249   2        CH452_Write(CH452_DIG1 | 0x10);
 250   2       }
 251   1       else if(up==current_direction)
 252   1       {
 253   2        if(0!=up_list_flag)
 254   2        {
 255   3         L297_direction=up;
 256   3         if(storey==up_list[0]) //到达楼层后电梯停转
 257   3         {
 258   4          TR0=0;//电梯停转
 259   4              transmit_stop();
 260   4          for(i=0;i<4;i++)
 261   4          {
 262   5           up_list[i]=up_list[i+1];//在队列中去除应最先响应的楼层
 263   5          }
 264   4          up_list[4]=0;
 265   4              turn_off_lights(storey);
 266   4          up_list_flag--;
 267   4          CH452_Write(CH452_DIG1 | 0x10);
 268   4          TR1=1;
 269   4          counter_5s=500;
 270   4          while(counter_5s)
 271   4              {
 272   5           keyboard_program();
 273   5              }
 274   4          TR1=0;
 275   4         }
 276   3         else//若没有到达楼层,则判断是否电梯停转,若停转则启动,没有停转就跳过
 277   3         {
 278   4          if(0==TR0)
 279   4          {
 280   5               TR0=1;
 281   5               transmit_run();
 282   5               direction_display();
 283   5              }
 284   4         }
 285   3        }
 286   2        else if((0==up_list_flag)&&(0!=down_list_flag))//若上升队列为空而下降队列不为空,则判断下降队列,
 287   2        {
 288   3         current_direction=down;
 289   3        }
 290   2       }
 291   1       else if(down==current_direction)
 292   1       {
 293   2        if(0!=down_list_flag)
 294   2        {
 295   3         L297_direction=down;
 296   3         if(storey==down_list[0])
 297   3         {
 298   4          TR0=0;
 299   4              transmit_stop();
 300   4          for(i=0;i<4;i++)
 301   4          {
 302   5           down_list[i]=down_list[i+1];
 303   5          }
C51 COMPILER V7.50   LOGIC                                                                 05/15/2008 15:59:15 PAGE 6   

 304   4          down_list[4]=0;
 305   4          turn_off_lights(storey);
 306   4          down_list_flag--;
 307   4          CH452_Write(CH452_DIG1 | 0x10);
 308   4          TR1=1;
 309   4          counter_5s=500;
 310   4          while(counter_5s)
 311   4          {
 312   5           keyboard_program();
 313   5              }
 314   4          TR1=0;
 315   4         }
 316   3         else
 317   3         {
 318   4          if(0==TR0)
 319   4              {

⌨️ 快捷键说明

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