📄 scorecounter.c
字号:
#include <rtx51tny.h> /* RTX-51 tiny functions & defines */
#include <reg52.h>
//定义各任务
#define INIT 0
#define CLOCK_RUN 1
#define SCORE_DISPLAY 2
#define KEY_SCAN 3
#define KEY_DEAL 4
#define CLOCK_ALARM 5
//定义各个键值
#define TEAMCHOSE 0
#define SCOREADD1 1
#define SCOREADD2 2
#define SCOREADD3 3
#define BREAKKEY 4
#define TIMESET 5
#define SCORECLR 6
#define SCOREDEL 7
#define TIMEMODE 8
#define TIMEUP 9
#define TIMEDOWN 10
#define NUMCOUNT 11
#define uchar unsigned char
#define uint unsigned int
uchar keyvalue;
uchar numcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar buf[12];
uchar timesta;
/*
timesta = 0--Clock Run
timesta = 1--Change Clock.second
timesta = 2--Change Clock.minute
*/
uchar teamsta;
/*
teamsta = 0--Score Display
teamsta = 1--Change Score.hscore
teamsta = 2--Change Score.rscore
*/
uchar pausesta;
/*
pausesta = 0--Clock Break
pausesta = 1--Clock Run
*/
uchar beepsta;
/*
beepsta = 0--Beep Off
beepsta = 1--Beep On
*/
uchar numsta;
/*
numsta = 0--Score Display
numsta = 1--Score.hscore count
numsta = 2--Score.rscore count
*/
sbit DA = P0^4;
sbit BEEP = P2^0;
sbit MINLIGHT = P2^1;
sbit SECLIGHT = P2^2;
sbit HLIGHT = P2^3;
sbit RLIGHT = P2^4;
struct Clock_Struc
{
uchar minute;
uchar second;
} Clock;
struct Score_Struc
{
uchar hscore;
uchar rscore;
} Score;
void job0 (void) _task_ INIT
{
Clock.minute = 00;
Clock.second = 18;
Score.hscore = 000;
Score.rscore = 000;
BEEP = 1;
MINLIGHT = 1;
SECLIGHT = 1;
HLIGHT = 1;
RLIGHT = 1;
pausesta = 1;
teamsta = 0;
timesta = 0;
keyvalue = 15;
beepsta = 0;
numsta = 0;
os_create_task (CLOCK_RUN);
os_create_task (SCORE_DISPLAY);
os_create_task (KEY_SCAN);
os_create_task (KEY_DEAL);
os_create_task (CLOCK_ALARM);
os_delete_task (INIT);
}
void job1 (void) _task_ CLOCK_RUN
{
while(1)
{
if(pausesta==1)
{
os_wait (K_IVL,92,0);
Clock.second -- ;
if(Clock.second==0xff)
{
Clock.second = 59 ;
Clock.minute --;
if(Clock.minute==0xff)
Clock.minute=99;
}
if((Clock.second<=10)&&(Clock.minute==00))
beepsta = 1;
else
beepsta = 0;
}
else
os_wait(K_IVL,20,0);
}
}
void job2 (void) _task_ SCORE_DISPLAY
{
uchar i,j;
while(1)
{
buf[0] = 0xf4;
buf[1] = numcode[Score.hscore/100];
buf[2] = numcode[(Score.hscore%100)/10];
buf[3] = numcode[(Score.hscore%100)%10];
buf[4] = 0xb1;
buf[5] = numcode[Score.rscore/100];
buf[6] = numcode[(Score.rscore%100)/10];
buf[7] = numcode[(Score.rscore%100)%10];
buf[8] = numcode[Clock.minute/10];
buf[9] = numcode[Clock.minute%10]+0x80;
buf[10] = numcode[Clock.second/10];
buf[11] = numcode[Clock.second%10];
for(i=0;i<=11;i++)
{
P1 = buf[i];
P3 = i;
for(j=0;j<20;j++)
;
P1 = 0x00;
}
}
}
void job3 (void) _task_ KEY_SCAN
{
while(1)
{
os_wait (K_IVL,10,0);
if(DA==1)
{
keyvalue = P0&0x0f ;
os_send_signal(KEY_DEAL);
}
}
}
void job4 (void) _task_ KEY_DEAL
{
uchar rscorekeep,hscorekeep,aa,ab,ac,ba,bb,bc,dat;
dat = 0;
hscorekeep = 0;
rscorekeep = 0;
aa = 0;
ab = 0;
ac = 0;
ba = 0;
bb = 0;
bc = 0;
while(1)
{
os_wait(K_IVL,10,0);
os_wait(K_SIG,0,0);
if(keyvalue==TEAMCHOSE)
{
teamsta++;
if(teamsta>=3)
{
teamsta = 0;
HLIGHT = 1;
RLIGHT = 1;
keyvalue = 15;
}
}
switch(teamsta)
{case 1: HLIGHT = 0;
RLIGHT = 1;
if(keyvalue==SCOREADD1)
{
Score.hscore++;
aa++;
dat = 1;
if(Score.hscore>=999)
Score.hscore = 000;
}
if(keyvalue==SCOREADD2)
{
Score.hscore = Score.hscore+2;
ab++;
dat = 2;
if(Score.hscore>=999)
Score.hscore = 000;
}
if(keyvalue==SCOREADD3)
{
Score.hscore = Score.hscore+3;
ac++;
dat = 3;
if(Score.hscore>=999)
Score.hscore = 000;
}
if(keyvalue==SCOREDEL)
{
Score.hscore = Score.hscore-dat;
if(dat==1)
aa--;
if(dat==2)
ab--;
if(dat==3)
ac--;
dat = 0;
if(Score.hscore==0xff)
Score.hscore = 000;
}
break;
case 2:RLIGHT = 0;
HLIGHT = 1;
if(keyvalue==SCOREADD1)
{
Score.rscore++;
ba++;
dat = 1;
if(Score.rscore>=999)
Score.rscore = 000;
}
if(keyvalue==SCOREADD2)
{
Score.rscore = Score.rscore+2;
bb++;
dat = 2;
if(Score.rscore>=999)
Score.rscore = 000;
}
if(keyvalue==SCOREADD3)
{
Score.rscore = Score.rscore+3;
bc++;
dat = 3;
if(Score.rscore>=999)
Score.rscore = 000;
}
if(keyvalue==SCOREDEL)
{
Score.rscore=Score.rscore-dat;
if(dat==1)
ba--;
if(dat==2)
bb--;
if(dat==3)
bc--;
dat = 0;
if(Score.rscore==0xff)
Score.rscore = 000;
}
break;
}
if(keyvalue==BREAKKEY)
{
pausesta=~pausesta;
}
if(keyvalue==TIMEMODE)
{
timesta++;
if(timesta>=3)
{
timesta = 0;
pausesta = 1;
MINLIGHT = 1;
SECLIGHT = 1;
keyvalue = 15;
}
}
switch(timesta)
{case 1: MINLIGHT = 1;
SECLIGHT = 0;
pausesta = 0;
if(keyvalue==TIMEUP)
{
Clock.second++;
if(Clock.second>=60)
Clock.second=0;
}
if(keyvalue==TIMEDOWN)
{
Clock.second--;
if(Clock.second==0xFF)
Clock.second=59;
}
break;
case 2:MINLIGHT = 0;
SECLIGHT = 1;
pausesta = 0;
if(keyvalue==TIMEUP)
{
Clock.minute++;
if(Clock.minute>=100)
Clock.minute=0;
}
if(keyvalue==TIMEDOWN)
{
Clock.minute--;
if(Clock.minute==0xFF)
Clock.minute=99;
}
break;
}
if(keyvalue==NUMCOUNT)
{
numsta++;
if(numsta==1)
{
hscorekeep = Score.hscore;
rscorekeep = Score.rscore;
}
if(numsta>=3)
{
numsta = 0;
HLIGHT = 1;
RLIGHT = 1;
keyvalue = 15;
Score.hscore = hscorekeep;
Score.rscore = rscorekeep;
}
}
switch(numsta)
{case 1:HLIGHT = 0;
RLIGHT = 1;
if(keyvalue==SCOREADD1)
{
Score.hscore = aa;
}
if(keyvalue==SCOREADD2)
{
Score.hscore = ab;
}
if(keyvalue==SCOREADD3)
{
Score.hscore = ac;
}
break;
case 2:HLIGHT = 1;
RLIGHT = 0;
if(keyvalue==SCOREADD1)
{
Score.rscore = ba;
}
if(keyvalue==SCOREADD2)
{
Score.rscore = bb;
}
if(keyvalue==SCOREADD3)
{
Score.rscore = bc;
}
break;
}
if(keyvalue==SCORECLR)
{
Score.hscore = 000;
Score.rscore = 000;
}
if(keyvalue==TIMESET)
{
Clock.minute = 48;
Clock.second = 00;
}
}
}
void job5 (void) _task_ CLOCK_ALARM
{
while(1)
{
os_wait (K_IVL,10,0);
while(beepsta == 1)
{
BEEP = 0;
os_wait (K_IVL,100,0);
BEEP = 1;
os_wait (K_IVL,100,0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -