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

📄 muxclock4.c

📁 rtx51full版本的一个实例
💻 C
字号:
#pragma CODE DEBUG OBJECTEXTEND

#include <reg52.h>
#include <rtx51.h>            // RTX-51 functions & defines

#define INIT         0        // task number of task :  init
#define SETMINUTE    1        // task number of task :  setminute
#define SETHOUR      2        // task number of task :  sethour
#define BLINK        3        // task number of task :  blink
#define DIGITALCLOCK 4        // task number of task :  digitalclock
#define SCANDISPLAY  5        // task number of task :  scandisplay

char second,minute,hour=0;
char BCD[] = {0,0,0,0};
char ticks = 20;

sbit minute_switch = P3^2;
sbit hour_switch   = P3^3;
sbit flick         = P3^4;

void split (char h, char m){
     BCD[0] = 0x80 + (h/10);
     BCD[1] = 0x40 + (h%10);
     BCD[2] = 0x20 + (m/10);
     BCD[3] = 0x10 + (m%10);
}

/***********************************************************************/
/*        _task_ 2 'setminute': minute adjustment                      */
/***********************************************************************/
void setminute(void) _task_ SETMINUTE{
     while (1){
           if (!minute_switch){
              if (++minute==60) minute=0;
              split(hour,minute);}
           os_wait (K_TMO, 25,0); // wait for 250 mS
     }
}

/***********************************************************************/
/*        _task_ 3 'sethour': hour adjustment                          */
/***********************************************************************/
void sethour(void) _task_ SETHOUR{
     while (1){
           if (!hour_switch){
               if (++hour==24)  hour=0;
               split(hour,minute);}
           os_wait (K_TMO, 25,0); // wait for 250 mS
     }
}

/***********************************************************************/
/*        _task_ 4 'blink': blink every half second                    */
/***********************************************************************/
void blink(void) _task_ BLINK{
     while (1){
     	     flick=!flick;
           os_wait (K_TMO, 50,0); // wait for 500 mS
     }
}

/***********************************************************************/
/*        _task_ 5 'digitalclock': Digital Clock                       */
/***********************************************************************/
void digitalclock(void) _task_ DIGITALCLOCK{
	   while (1){
           if (++second==60){
             second=0;
             if (++minute==60){
                 minute=0;
                 if (++hour==24) hour=0;
             }
           }
           split(hour,minute);
           os_wait (K_TMO,100,0); // wait for 1000 mS
     }
}

/***********************************************************************/
/*        _task_ 6 'scandisplay': Scanning 7 segment display           */
/***********************************************************************/
void scandisplay(void) _task_ SCANDISPLAY{
static char i=0;
     while (1)
	 {
           P1 = BCD[++i & 0x03];
           os_wait (K_TMO, 1, 0); // wait for 10 mS
     }
}

/***********************************************************************/
/*        _task_ 0 'init': Initialize                                  */
/***********************************************************************/
void init (void) _task_ INIT  {   // program execution starts here
  split(hour,minute);
  os_set_slice (10000);           // set the system timebase to 10 ms
  //os_create_task (INIT);
  os_create_task (SETMINUTE);
  os_create_task (SETHOUR);
  os_create_task (BLINK);
  os_create_task (DIGITALCLOCK);
  os_create_task (SCANDISPLAY);
  os_delete_task (INIT);          // stop init _task_ (no longer needed)
}

void main (void) {
   os_start_system (INIT);        // start the first _task_
}

⌨️ 快捷键说明

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