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

📄 traffic.lst

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   TRAFFIC                                                               04/25/2008 15:44:36 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE TRAFFIC
OBJECT MODULE PLACED IN TRAFFIC.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE TRAFFIC.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>                              //头文件
   2          #include <rtx51tny.h> 
   3          #include <stdio.h> 
   4          #include <ctype.h> 
   5          #include <string.h> 
   6          
   7          code char sysmenu[] =                                   //系统命令菜单
   8             "\n"
   9             "+*** TRAFFIC LIGHT CONTROLLER using AT89S52 and RTX-51 Tiny ***+\n"
  10             "+ 命令 ----+ 格式 -------+ 功能 -------------------------------+\n"
  11             "| Display  | D           | 显示时间                            |\n"
  12             "| Time     | T hh:mm:ss  | 设置时钟时间                        |\n"
  13             "| start_time    | S hh:mm:ss  | 设置起始时间                        |\n"
  14             "| end_time      | E hh:mm:ss  | 设置结束时间                        |\n"
  15             "+----------+-------------+-------------------------------------+\n";
  16          
  17          idata    char inline[16];                       //存储输入命令行
  18          
  19          #define uchar unsigned char                             //宏定义
  20          
  21          extern getline (char idata *, char);                    //外部函数声明:,用于行输入
  22          extern init_serial ();                          //外部函数:声明,用于初始化串行口
  23          
  24          #define INIT      0                             //任务0:  初始化系统
  25          #define COMMAND   1                     //任务1:  命令处理
  26          #define CLK     2                               //任务2:  时钟控制
  27          #define BLINKING  3                     //任务3:  黄色灯闪烁
  28          #define LIGHTS    4                     //任务4:  交通灯工作
  29          #define buttonREAD   5                          //任务5:  读取行人按钮
  30          #define GET_ESC   6                     //任务6:  退出
  31          
  32          #define ESC  0x1B                        //定义ESC 键代码
  33          
  34          struct time  {                                  //定义时间结构
  35            uchar hour;                                   //小时
  36            uchar min;                                    //分
  37            uchar sec;                                    //秒
  38          };
  39          
  40          struct time clk_time = { 0,  0,  0 };                   //存储时钟的时间值
  41          struct time start_time = {  6, 30,  0 };                //开始时间
  42          struct time end_time   = { 20, 30,  0 };        //结束时间
  43          
  44          struct time ztime;                              //输入时间暂存
  45          
  46          bit   escape;                              //ESC 键输入标志
  47          bit display_time = 0;                //标志:信号命令状态显示时间 
  48          
  49          sbit  green  = P2^0;                            //绿灯
  50          sbit  yellow = P2^1;                            //黄灯
  51          sbit  red    = P2^2;                            //红灯
  52          sbit  stop   = P2^3;                            //行人停止灯
  53          sbit  walk   = P2^4;                            //行人通过灯
  54          sbit  button    = P2^5;                         //行人按钮
  55          
C51 COMPILER V8.08   TRAFFIC                                                               04/25/2008 15:44:36 PAGE 2   

  56          
  57          
  58          init () _task_ INIT                                             //任务0,程序起始处
  59          {
  60   1        init_serial ();                               //初始化单片机串行口
  61   1        os_create_task (CLK);                         //启动任务2
  62   1        os_create_task (COMMAND);             //启动任务1
  63   1        os_create_task (LIGHTS);                      //启动任务4
  64   1        os_create_task (buttonREAD);                  //启动任务5
  65   1        os_delete_task (INIT);                        //停止任务0
  66   1      }
  67          
  68          
  69          
  70          
  71          void clock ()  _task_ CLK                                       //任务2
  72          {
  73   1        while (1)  
  74   1      { 
  75   2      if (++clk_time.sec == 60)                               //计算秒值
  76   2      {         
  77   3            clk_time.sec = 0;
  78   3            if (++clk_time.min == 60)                         //计算分钟值
  79   3      {       
  80   4              clk_time.min = 0;
  81   4              if (++clk_time.hour == 24)              //计算小时值
  82   4      {    
  83   5                clk_time.hour = 0;
  84   5              }
  85   4            }
  86   3          }
  87   2      if (display_time)                                       //显示时间
  88   2      {              
  89   3            os_send_signal (COMMAND);         //向任务1发送信号
  90   3          }
  91   2          os_wait (K_IVL, 100, 0);                    //等待1秒
  92   2        }
  93   1      }
  94          
  95          
  96          
  97          bit readtime (char idata *buffer)                       //读取时间函数
  98          {
  99   1        uchar args;                         
 100   1      
 101   1        ztime.sec = 0;                           //初始化
 102   1        args = sscanf (buffer, "%bd:%bd:%bd",     //扫描输入,并保存至变量
 103   1                       &ztime.hour,
 104   1                       &ztime.min,
 105   1                       &ztime.sec);
 106   1        
 107   1        if (ztime.hour > 23  ||  ztime.min > 59  ||  //检查输入时间值是否有效
 108   1            ztime.sec > 59   ||  args < 2        ||  args == EOF)  
 109   1      {
 110   2          printf ("\nINVALID TIME FORMAT!\n");       //输出错误信息
 111   2          return (0);
 112   2        }
 113   1        return (1);
 114   1      }
 115          
 116          command () _task_ COMMAND                       //任务1
 117          {
C51 COMPILER V8.08   TRAFFIC                                                               04/25/2008 15:44:36 PAGE 3   

 118   1        uchar i;
 119   1      
 120   1        printf (sysmenu);                             //系统命令菜单
 121   1        while (1)  
 122   1      {                                 
 123   2          printf ("\nCommand: ");                     //显示命令提示符
 124   2          getline (&inline, sizeof (inline));         //获得命令行输入
 125   2      
 126   2      for (i = 0; inline[i] != 0; i++)                        //将命令字符串转换为大写
 127   2      {               
 128   3            inline[i] = toupper(inline[i]);
 129   3          }
 130   2      
 131   2          for (i = 0; inline[i] == ' '; i++);                 //跳过字符串中的空格符
 132   2      
 133   2      switch (inline[i])                                      //命令处理
 134   2      { 
 135   3            case 'D':                                 //显示时间命令
 136   3              printf ("start_time=: %02bd:%02bd:%02bd    "
 137   3                      "end_time=: %02bd:%02bd:%02bd\n",
 138   3                       start_time.hour, start_time.min, start_time.sec,
 139   3                       end_time.hour,   end_time.min,   end_time.sec);
 140   3              printf ("Input ESC to abort\r");
 141   3      
 142   3              os_create_task (GET_ESC);         //在显示任务中检查ESC 键
 143   3              display_time = 1;                   //显示时间标志置1
 144   3              escape = 0;                             //清除 ESC 标志
 145   3              os_clear_signal (COMMAND); 
 146   3      
 147   3              while (!escape)                                 //如果没有输入ESC
 148   3      { 
 149   4                printf ("Time: %02bd:%02bd:%02bd\r", 
 150   4                         clk_time.hour, clk_time.min, clk_time.sec);
 151   4                os_wait (K_SIG, 0, 0);                //等待
 152   4              }
 153   3      
 154   3              os_delete_task (GET_ESC);         //删除任务
 155   3              display_time = 0;                   //显示时间标志置0
 156   3              printf ("\n\n");                                        //输出换行符

⌨️ 快捷键说明

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