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

📄 clock.lst

📁 1、学习Proteus的使用
💻 LST
字号:
C51 COMPILER V8.08   CLOCK                                                                 06/27/2008 20:17:06 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE CLOCK
OBJECT MODULE PLACED IN clock.OBJ
COMPILER INVOKED BY: E:\Program Files\xp\Keil\C51\BIN\C51.EXE clock.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************************/
   2          /*                                                                            */
   3          /*   多任务程序设计                                     */
   4          /*                                                                            */
   5          /******************************************************************************/
   6          
   7          #include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
   8          #include <reg51.h>
   9          
  10          //定义各任务
  11          #define INIT             0
  12          #define CLOCK_RUN        1
  13          #define CLOCK_DISPLAY    2
  14          #define KEY_SCAN         3
  15          #define KEY_DEAL         4
  16          #define CLOCK_BEEP       5
  17          //增加一个任务:CLOCK_BEEP
  18          
  19          //定义各个键值
  20          #define UPKEY            6
  21          #define DOWNKEY          5
  22          #define MODEKEY          3
  23          
  24          //定义数码管显示字符0-9,数码管是共阴极
  25          unsigned char numcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  26          //定义显存,buf[0]对应最左边数码管,buf[7]对应最右边数码管
  27          unsigned char buf[8];
  28          
  29          struct  Clock_Struc 
  30          {
  31             unsigned char  hour;
  32             unsigned char  minute;
  33             unsigned char  second;
  34          }  Clock,Beep_Clock,Display_Clock;
  35          
  36          sbit  BEEP  =  P2^3;
  37          
  38          unsigned char keyvalue;
  39          
  40          unsigned char status; 
  41          /*
  42              status =0--Clock Run ; 1--Change Clock Minute 2--Change Clock Hour 3--Change Alarm Minute 4--Change AL
             -ARM hour
  43              status =1--Change Clock.minute
  44              status =2--Change Clock.hour
  45              status =3--Change Beep_Clock.minute
  46              status =4--Change Beep_Clock.hour
  47          */
  48          
  49          /******************************************************************************/
  50          /*       Task 0 'job0':  RTX-51 tiny starts execution with task 0            */
  51          /******************************************************************************/
  52          void job0 (void) _task_ INIT 
  53           {                  
  54   1            Clock.hour   = 11;
C51 COMPILER V8.08   CLOCK                                                                 06/27/2008 20:17:06 PAGE 2   

  55   1            Clock.minute = 59;
  56   1            Clock.second = 50;    
  57   1            
  58   1                
  59   1            Beep_Clock.hour   = 12;
  60   1            Beep_Clock.minute = 0;
  61   1            Beep_Clock.second = 0;   
  62   1            
  63   1            status  = 0;
  64   1                
  65   1             os_create_task (CLOCK_RUN);                 /* start task 1                         */
  66   1            os_create_task (CLOCK_DISPLAY);             /* start task 2                         */
  67   1        
  68   1            os_create_task (KEY_SCAN);
  69   1            os_create_task (KEY_DEAL);
  70   1          os_create_task (CLOCK_BEEP);
  71   1             
  72   1             //创建 CLOCK_BEEP 任务     
  73   1            
  74   1            os_delete_task (INIT);                /* stop init task (no longer needed)    */
  75   1       }
  76          
  77          
  78          /******************************************************************************/
  79          /*       Task 1 'job1':  Clock Run                                            */
  80          /******************************************************************************/
  81          void job1 (void) _task_ CLOCK_RUN
  82          {                  
  83   1          while(1)
  84   1          {
  85   2               os_wait (K_IVL, 50, 0);          /* wait interval:  1 second             */
  86   2               os_send_signal(CLOCK_BEEP);
  87   2               Clock.second ++ ;
  88   2               if(Clock.second>=60)
  89   2               {
  90   3                      Clock.second = 0 ;
  91   3                      Clock.minute ++;
  92   3                      if(Clock.minute>=60)
  93   3                      {
  94   4                          Clock.minute = 0;
  95   4                          Clock.hour++;
  96   4                          if(Clock.hour>=24)
  97   4                              Clock.hour = 0; 
  98   4                      }       
  99   3                 }
 100   2             }
 101   1      }
 102              
 103              
 104          /******************************************************************************/
 105          /*       Task 2 'job2':  Clock Display                                        */
 106          /******************************************************************************/
 107          void job2 (void) _task_  CLOCK_DISPLAY
 108          {                  
 109   1           unsigned char i,j;
 110   1           while(1)
 111   1           {
 112   2                   if(status<=2)
 113   2                         Display_Clock = Clock;
 114   2                   else
 115   2                         Display_Clock = Beep_Clock;
 116   2                         
C51 COMPILER V8.08   CLOCK                                                                 06/27/2008 20:17:06 PAGE 3   

 117   2                   
 118   2                   buf[0] = numcode[Display_Clock.hour/10];
 119   2                 buf[1] = numcode[Display_Clock.hour%10];
 120   2                 buf[2] = 0x40;
 121   2                 buf[3] = numcode[Display_Clock.minute/10];
 122   2                 buf[4] = numcode[Display_Clock.minute%10];
 123   2                 buf[5] = 0x40;
 124   2                 buf[6] = numcode[Display_Clock.second/10];
 125   2                 buf[7] = numcode[Display_Clock.second%10];
 126   2                   
 127   2                 for(i=0;i<=7;i++)
 128   2                 {
 129   3                      P1 = buf[i];
 130   3                          P3 = i ;
 131   3                          for(j=0;j<20;j++)
 132   3                                  ;
 133   3                          P1 = 0x00;
 134   3                   }
 135   2           }
 136   1       }   
 137            
 138            void job3 (void) _task_  KEY_SCAN
 139            //此任务是不停地侦听是否有键按下
 140            {
 141   1             unsigned char i;
 142   1             while(1)
 143   1             {
 144   2                 os_wait (K_IVL, 10, 0); 
 145   2                 i = P2&0x07 ;
 146   2                 if(i!=0x07)
 147   2                 {
 148   3                   keyvalue = i ;
 149   3                                   
 150   3                   //在此添加一条语句,发送信号量给KEY_DEAL任务,告知有键按下
 151   3                    os_send_signal(KEY_DEAL);          
 152   3                   while(i!=0x07)
 153   3                        i = P2&0x07;  //等待键释放    
 154   3               }
 155   2            }        
 156   1                 
 157   1                                            
 158   1          }                   
 159                   
 160          
 161              
 162              void job4 (void) _task_  KEY_DEAL
 163              {
 164   1            //此任务是进行按键处理
 165   1             while(1)
 166   1             {
 167   2               //等待有键按下的信号量
 168   2                os_wait(K_SIG,0,0);
 169   2               /* 
 170   2                MODEKEY按键处理
 171   2                 当 status = 0 时,按下MODEKEY后,status = 1,系统进入修改走时的分针状态
 172   2                 当 status = 1 时,按下MODEKEY后,status = 2,系统进入修改走时的时针状态
 173   2                   当 status = 2 时,按下MODEKEY后,status = 3,系统进入修改闹时的分针状态
 174   2                   当 status = 3 时,按下MODEKEY后,status = 4,系统进入修改闹时的时针状态
 175   2                   当 status = 4 时,按下MODEKEY后,status = 0,系统进入正常的走时状态
 176   2                   
 177   2               UPKEY处理
 178   2                 当status = 1,走时的分针加1
C51 COMPILER V8.08   CLOCK                                                                 06/27/2008 20:17:06 PAGE 4   

 179   2                 当status = 2,走时的时针加1
 180   2                  当status = 3,闹时的分针加1
 181   2                  当status = 4,闹时的时针加1
 182   2              
 183   2               DOWNKEY处理
 184   2                 当status = 1,走时的分针减1
 185   2                 当status = 2,走时的时针减1
 186   2                  当status = 3,闹时的分针减1
 187   2                  当status = 4,闹时的时针减1
 188   2            
 189   2              */
 190   2           if(keyvalue==MODEKEY)
 191   2          {
 192   3           status++;
 193   3              if(status>=5)
 194   3                status=0;
 195   3                keyvalue=0;
 196   3          }
 197   2           switch(status)
 198   2          {
 199   3             case 1:
 200   3                if(keyvalue==UPKEY)
 201   3                 {
 202   4                  Clock.minute++;
 203   4                if(Clock.minute>=60)
 204   4                   Clock.minute=0;
 205   4                }
 206   3               if(keyvalue==DOWNKEY)
 207   3              {
 208   4                  Clock.minute--;
 209   4                  if(Clock.minute==0xFF)
 210   4                  Clock.minute=59;
 211   4             }
 212   3                break;
 213   3             case 2:
 214   3                if(keyvalue==UPKEY)
 215   3                    {
 216   4                     Clock.hour++;
 217   4                     if(Clock.hour>=24)
 218   4                     Clock.hour=0;
 219   4                    }
 220   3                 if(keyvalue==DOWNKEY)
 221   3                    {
 222   4                      Clock.hour--;
 223   4                      if(Clock.hour==0xFF)
 224   4                       Clock.hour=23;
 225   4                     }
 226   3                 break;
 227   3              case 3:
 228   3                  if(keyvalue==UPKEY)
 229   3                  {
 230   4                   Beep_Clock.minute++;
 231   4                   if(Beep_Clock.minute>=60)
 232   4                        Beep_Clock.minute=0;
 233   4                   }
 234   3                   if(keyvalue==DOWNKEY)
 235   3                   {
 236   4                   Beep_Clock.minute--;
 237   4                   if(Beep_Clock.minute==0xff)
 238   4                      Beep_Clock.minute=59;
 239   4                    }
 240   3                    break;
C51 COMPILER V8.08   CLOCK                                                                 06/27/2008 20:17:06 PAGE 5   

 241   3               case 4:
 242   3                 if(keyvalue==UPKEY)
 243   3                  {
 244   4                   Beep_Clock.hour++;
 245   4                   if(Beep_Clock.hour>=60)
 246   4                        Beep_Clock.hour=0;
 247   4                   }
 248   3                   if(keyvalue==DOWNKEY)
 249   3                   {
 250   4                   Beep_Clock.hour--;
 251   4                   if(Beep_Clock.hour==0xff)
 252   4                      Beep_Clock.hour=59;
 253   4                    }
 254   3                    break;
 255   3      
 256   3                    }
 257   2      
 258   2           }
 259   1      }  
 260            //增加一个任务,当走时Clock与设定的闹时Beep_Clock时间相等(只要时针和分针相同),BEEP驱动LED点亮
 261            void job5(void)_task_ CLOCK_BEEP
 262          
 263            {
 264   1        while(1)
 265   1        {
 266   2            os_wait(K_SIG,0,0);
 267   2            if(Clock.hour==Beep_Clock.hour&&Clock.minute==Beep_Clock.minute)
 268   2                BEEP=0;
 269   2           }
 270   1         }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    513    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     29       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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