📄 muxclock4.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 + -