本设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。该系统具有赛程定时设置、赛程时间暂停、及时刷新甲乙双方的成绩等功能。
电路主要由STC89C52单片机+最小系统+数码管显示模块+数码管驱动模块+蜂鸣器模块+按键模块;
(1)采用一个四位一体数码管显示比赛时间,时间格式如:15:00,两个三位一体数码管显示甲乙两对的比分,比分格式如:008;
(2)比赛时间采用倒计时方式,以一秒的频率减时,上电时默认初值为15:00。在没有开始比赛时,“比赛时间”可以按键加减,比赛开始后不能修改;
(3)甲乙队比分采用三位数,上电初值为000,最大值为999,满足常理要求,未开始比赛以及比赛结束后比分无法加减;
(4)本设计加了24秒倒计时功能,可通过按键随时复位24秒。如果24秒违例,会启动蜂鸣器报警,同时比赛时间暂停,处理好后按一下24秒复位键,比赛继续;
(5)比赛未开始之前,可以通过ADD1、DEC1键对比较时间的分钟进调时,通过ADD2、DEC2键对比较时间的秒进行调时;
(6)可随时暂停/启动比赛时间;
(7)比赛进行时,可以通过ADD1、DEC1键对甲队比分加、减,可以通过ADD2、DEC2对乙队比分加、减。每按一次键,加/减1分;
(8)当一节比赛完后,可以通过(EXCHANGE)换场键换场,换场后,比分交换显示,交换后,下一节比赛开始时,相应的比分加减键也随之交换;
(9)当比赛结束时,蜂鸣器发出声音报警,提示比赛结束。
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
主程序源码
//******************************主函数*************************************************
void main(void)
{
TMOD=0x11;
TL0=0xb0;
TH0=0x3c;
TL1=0xb0;
TH1=0x3c;
minit=min; //初始值为15:00
second=sec;
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
EX0=1;
IT0=1;
IT1=1;
// EX1=1;
PX0=1;
// PX1=1;
PT0=0;
P1=0xFF;
P3=0xFF;
alam=1;
while(1)
{
keyscan();
display();
}
}
void PxInt0(void) interrupt 0
{
Delay5ms();
EX0=0;
alam=1;
TR1=0;
if(timeover==1)
{
timeover=0;
}
if(playon==0)
{
playon=1; //开始标志位
TR0=1; //开启计时
if((minit+second)==0)
{
sec24=24;
minit=min;
second=sec;
}
}
else
{
playon=0; //开始标志位清零,表示暂停
TR0=0; //暂时计时
}
EX0=1; //开中断
}
资料链接:https://pan.baidu.com/s/1oqKCxVHgPrdQDAvd80OFQg?pwd=i4hu