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

📄 traffic.lst

📁 零基础单片机C语言设计全套教程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   TRAFFIC                                                               09/04/2008 10:42:40 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 <stdio.h> 
   3          #include <ctype.h> 
   4          #include <math.h>
   5          #include <string.h> 
   6          #include <rtx51tny.h> 
   7          
   8          code char MenuOption[] =                                        //系统命令菜单
   9             "\n"
  10             "+*** C51 道路交通灯多任务控制系统 ***+\n"
  11             "+ -----命令 -------+ ------格式 ----+ ----------------功能 --------------------+\n"
  12             "| Display                   | D           | 显示时间                     |\n"
  13             "| Time                      | T hh:mm:ss  | 设置时钟时间                 |\n"
  14             "| start_time        | S hh:mm:ss  | 设置起始时间                 |\n"
  15             "| end_time          | E hh:mm:ss  | 设置结束时间                 |\n"
  16             "+--------------------+-------------------+--------------------------------------------+\n";
  17          
  18          idata    char inline[16];                       //存储输入命令行
  19          
  20          #define uchar unsigned char                             //宏定义
  21          
  22          extern getline (char idata *, char);                    //外部函数声明:,用于行输入
  23          extern init_serial ();                          //外部函数:声明,用于初始化串行口
  24          bit readtime (char idata *buffer)  ;                    //读取时间函数
  25          bit timeon ();                                                          //检查系统时钟是否处在开始时间和结束时间之间
  26          
  27          #define INIT_TASK               0               //任务0:  初始化系统
  28          #define COMMAND_TASK    1             //任务1:  命令处理
  29          #define CLK_TASK                2             //任务2:  时钟控制
  30          #define BLINKING_TASK   3             //任务3:  黄色灯闪烁
  31          #define LIGHTS_TASK     4             //任务4:  交通灯工作
  32          #define buttonREAD_Task         5             //任务5:  读取行人按钮
  33          #define ESCEXIT_TASK    6             //任务6:  退出
  34          
  35          #define ESC  0x1B                        //定义ESC 键代码
  36          
  37          struct time                                                     //定义时间结构
  38          {
  39            uchar hour;                                   //小时
  40            uchar min;                                    //分
  41            uchar sec;                                    //秒
  42          };
  43          
  44          struct time now_time = { 0,  0,  0 };                   //存储时钟的时间值
  45          struct time start_time = {  6, 30,  0 };                //开始时间
  46          struct time end_time   = { 20, 30,  0 };        //结束时间
  47          
  48          struct time in_time;                                    //输入时间暂存
  49          
  50          bit   ESCExit;                              //ESC 键输入标志
  51          bit   rt;                                                               //读取时间标志
  52          bit display_time = 0;                           //信号命令状态显示时间标志
  53          
  54          sbit  green  = P2^1;                            //绿灯
  55          sbit  yellow  = P2^2;                   //黄灯
C51 COMPILER V8.08   TRAFFIC                                                               09/04/2008 10:42:40 PAGE 2   

  56          sbit  red    = P2^3;                            //红灯
  57          sbit  stop   = P1^0;                            //行人停止灯
  58          sbit  walk   = P1^1;                            //行人通过灯
  59          sbit  button  = P1^2;                   //行人按钮
  60          
  61          
  62          init () _task_ INIT_TASK                                //任务0,程序起始处
  63          {
  64   1        init_serial ();                               //初始化单片机串行口
  65   1        os_create_task (CLK_TASK);                    //启动任务2
  66   1        os_create_task (COMMAND_TASK);       //启动任务1
  67   1        os_create_task (LIGHTS_TASK);          //启动任务4
  68   1        os_create_task (buttonREAD_Task);       //启动任务5
  69   1        os_delete_task (INIT_TASK);              //停止任务0
  70   1      }
  71          
  72          void command () _task_ COMMAND_TASK     //任务1
  73          {
  74   1        uchar i;
  75   1      
  76   1        printf (MenuOption);                       //系统命令菜单
  77   1        while (1)  
  78   1      {                                 
  79   2          printf ("\nCommand: ");                     //显示命令提示符
  80   2          getline (&inline, sizeof (inline));         //获得命令行输入
  81   2      
  82   2      for (i = 0; inline[i] != 0; i++)                        //将命令字符串转换为大写
  83   2      {               
  84   3            inline[i] = toupper(inline[i]);
  85   3          }
  86   2      
  87   2          for (i = 0; inline[i] == ' '; i++);                 //跳过字符串中的空格符
  88   2      
  89   2      switch (inline[i])                                      //命令处理
  90   2      { 
  91   3            case 'D':                                 //显示时间命令
  92   3              printf ("start_time=: %02bd:%02bd:%02bd    "
  93   3                      "end_time=: %02bd:%02bd:%02bd\n",
  94   3                       start_time.hour, start_time.min, start_time.sec,
  95   3                       end_time.hour,   end_time.min,   end_time.sec);
  96   3              printf ("输入ESC键退出!\r");
  97   3      
  98   3              os_create_task (ESCEXIT_TASK);    //在显示任务中检查ESC 键
  99   3              display_time = 1;                   //显示时间标志置1
 100   3              ESCExit = 0;                       //清除 ESC 标志
 101   3              os_clear_signal (COMMAND_TASK); 
 102   3      
 103   3              while (!ESCExit)                                //如果没有输入ESC
 104   3      { 
 105   4                printf ("Time: %02bd:%02bd:%02bd\r", 
 106   4                         now_time.hour, now_time.min, now_time.sec);
 107   4                os_wait (K_SIG, 0, 0);                //等待
 108   4              }
 109   3      
 110   3              os_delete_task (ESCEXIT_TASK);    //删除任务
 111   3              display_time = 0;                   //显示时间标志置0
 112   3              printf ("\n\n");                                        //输出换行符
 113   3              break;
 114   3      
 115   3            case 'T':                             //设置时间命令
 116   3              rt= readtime (&inline[i+1]);                    //获取输入时间
 117   3      if (rt)                         
C51 COMPILER V8.08   TRAFFIC                                                               09/04/2008 10:42:40 PAGE 3   

 118   3      {
 119   4                now_time.hour = in_time.hour;
 120   4                now_time.min  = in_time.min;
 121   4                now_time.sec  = in_time.sec;
 122   4              }
 123   3              break;
 124   3      
 125   3            case 'S':                             //设置开始时间命令
 126   3              rt= readtime (&inline[i+1]);                    //获取输入时间
 127   3              if (rt)                         
 128   3      {               
 129   4                start_time.hour = in_time.hour; 
 130   4                start_time.min  = in_time.min;
 131   4                start_time.sec  = in_time.sec;
 132   4              }
 133   3              break;
 134   3      
 135   3            case 'E':                             //设置结束时间命令
 136   3              rt= readtime (&inline[i+1]);                    //获取输入时间
 137   3              if (rt)                         
 138   3      {               
 139   4                end_time.hour = in_time.hour; 
 140   4                end_time.min  = in_time.min;
 141   4                end_time.sec  = in_time.sec;
 142   4              }
 143   3              break;
 144   3      
 145   3            default:                                  //无效指令
 146   3              printf("Error!\n");
 147   3              printf (MenuOption);                //显示系统命令菜单
 148   3              break;
 149   3          }   
 150   2        }
 151   1      }
 152          
 153          bit readtime (char idata *buffer)                       //读取时间函数
 154          {
 155   1        uchar args;                         
 156   1      
 157   1        in_time.sec = 0;                           //初始化
 158   1        args = sscanf (buffer, "%bd:%bd:%bd",       //扫描输入,并保存至变量

⌨️ 快捷键说明

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