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

📄 traffic.lst

📁 零基础单片机C语言设计全套教程
💻 LST
📖 第 1 页 / 共 2 页
字号:
 159   1                       &in_time.hour,
 160   1                       &in_time.min,
 161   1                       &in_time.sec);
 162   1        
 163   1        if (in_time.hour > 23  ||  in_time.min > 59  ||  //检查输入时间值是否有效
 164   1            in_time.sec > 59   ||  args < 2        ||  args == EOF)  
 165   1      {
 166   2          printf ("\n错误的时间格式!\n");    //输出错误信息
 167   2          return (0);
 168   2        }
 169   1        return (1);
 170   1      }
 171          
 172          
 173          
 174          void clock ()  _task_ CLK_TASK                          //任务2
 175          {
 176   1        while (1)  
 177   1      { 
 178   2      if (++now_time.sec == 60)                       //计算秒值
 179   2      {         
C51 COMPILER V8.08   TRAFFIC                                                               09/04/2008 10:42:40 PAGE 4   

 180   3            now_time.sec = 0;
 181   3            if (++now_time.min == 60)                         //计算分钟值
 182   3      {       
 183   4              now_time.min = 0;
 184   4              if (++now_time.hour == 24)              //计算小时值
 185   4      {    
 186   5                now_time.hour = 0;
 187   5              }
 188   4            }
 189   3          }
 190   2      if (display_time)                                       //显示时间
 191   2      {              
 192   3            os_send_signal (COMMAND_TASK);   //向任务1发送信号
 193   3          }
 194   2          os_wait (K_IVL, 100, 0);                    //等待1秒
 195   2        }
 196   1      }
 197          
 198          void blinking () _task_ BLINKING_TASK   //任务3
 199          { 
 200   1        bit sl;
 201   1        red    = 0;                              //熄灭红灯
 202   1        yellow = 0;                                                   //熄灭黄灯
 203   1        green  = 0;                                                   //熄灭绿灯
 204   1        stop   = 0;                                                   //熄灭行人红灯
 205   1        walk   = 0;                                                   //熄灭行人绿灯
 206   1      
 207   1        while (1)                                                     //闪烁循环
 208   1      {                                
 209   2          yellow = 1;                            //点亮黄灯
 210   2          os_wait (K_TMO, 30, 0);                //等待超时
 211   2          yellow = 0;                            //熄灭黄灯
 212   2          os_wait (K_TMO, 30, 0);                //等待超时
 213   2      sl= timeon ();
 214   2      if (sl)                                                         //如果闪烁时间段结束
 215   2      {                        
 216   3            os_create_task (LIGHTS_TASK);      //启动任务4
 217   3            os_delete_task (BLINKING_TASK);    //停止任务3
 218   3          }
 219   2        }
 220   1      }
 221          
 222          
 223          bit timeon ()                                                           //检查系统时钟是否处在开始时间和结束时间之间
 224          {
 225   1        if (memcmp (&start_time, &end_time, sizeof (struct time)) < 0)  
 226   1      {
 227   2          if (memcmp (&start_time, &now_time, sizeof (struct time)) < 0  &&
 228   2              memcmp (&now_time, &end_time,   sizeof (struct time)) < 0)  
 229   2      return (1);                                             //红绿灯处于活跃状态
 230   2        }
 231   1        else  
 232   1      { 
 233   2          if (memcmp (&end_time,   &now_time, sizeof (start_time)) > 0  &&
 234   2              memcmp (&now_time, &start_time, sizeof (start_time)) > 0)  
 235   2      return (1);
 236   2        }
 237   1        return (0);                                   //信号结束,开始闪烁黄灯
 238   1      }
 239          
 240          void lights () _task_ LIGHTS_TASK               //任务4
 241          {                     
C51 COMPILER V8.08   TRAFFIC                                                               09/04/2008 10:42:40 PAGE 5   

 242   1        red    = 1;                              //点亮红灯
 243   1        yellow = 0;                                                   //熄灭黄灯
 244   1        green  = 0;                                                   //熄灭绿灯
 245   1        stop   = 1;                                                   //点亮行人红灯
 246   1        walk   = 0;                                                   //熄灭行人绿灯
 247   1      
 248   1        while (1)                                                     //主循环
 249   1      {                              
 250   2          os_wait (K_TMO, 30, 0);                     //等待超时
 251   2      if (!timeon ())                                                 //如果系统时间处在活跃时间之外
 252   2      {                       
 253   3            os_create_task (BLINKING_TASK);    //启动任务3
 254   3            os_delete_task (LIGHTS_TASK);      //停止任务4
 255   3          }
 256   2          yellow = 1;
 257   2      os_wait (K_TMO, 30, 0);                 //等待超时
 258   2      
 259   2          red    = 0;                            
 260   2          yellow = 0;                                                 //为主干道点亮绿灯
 261   2      green  = 1;
 262   2      
 263   2          os_clear_signal (LIGHTS_TASK);
 264   2          os_wait (K_TMO, 30, 0);                //等待超时
 265   2      os_wait (K_TMO + K_SIG, 300, 0);       //等待超时和信号
 266   2      
 267   2          yellow = 1;
 268   2          green  = 0;
 269   2          os_wait (K_TMO, 30, 0);                //等待超时
 270   2          red    = 1;                           //为主干道点亮红灯
 271   2      yellow = 0;
 272   2      
 273   2          os_wait (K_TMO, 30, 0);                //等待超时
 274   2          stop   = 0;                           //为行人点亮绿灯,放行
 275   2      walk   = 1;
 276   2      
 277   2          os_wait (K_TMO, 100, 0);               //等待超时
 278   2          stop   = 1;                           //为行人点亮红灯
 279   2          walk   = 0;
 280   2        }
 281   1      }
 282          
 283          void buttonread () _task_ buttonREAD_Task       //任务5
 284          {
 285   1        while (1)  
 286   1      {                                 
 287   2      if (button)                                             //若行人按钮按下
 288   2      {                                
 289   3            os_send_signal (LIGHTS_TASK);      //向任务4发送信号
 290   3          }
 291   2          os_wait (K_TMO, 3, 0);                 //等待超时
 292   2        }
 293   1      }
 294          
 295          void get_escape () _task_ ESCEXIT_TASK   //任务6
 296          {
 297   1        while (1)  
 298   1      {
 299   2      if (_getkey () == ESC)                                  //如果ESC 键输入,置ESCExit标志
 300   2      ESCExit = 1;            
 301   2      if (ESCExit)                                            //如果有ESCExit标志,向任务1发送信号
 302   2      {                             
 303   3            os_send_signal (COMMAND_TASK);
C51 COMPILER V8.08   TRAFFIC                                                               09/04/2008 10:42:40 PAGE 6   

 304   3          }
 305   2        }
 306   1      }
 307          
 308          


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


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

⌨️ 快捷键说明

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