篮球比赛计时计分系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
摘要............................................................................................................ I I ABSTRACT .............................................................................................. I II 1概述........................................................................................................ I II 2系统整体方案设计 (1)
2.1主控制器方案 (1)
2.2显示方案 (2)
3系统电路设计 (3)
3.1主控制器电路 (3)
3.2显示电路 (4)
3.3按键电路 (5)
3.4提示电路 (6)
4系统软件设计 (7)
4.1软件整体设计 (7)
4.2显示软件设计 (8)
4.3篮球计分软件设计 (9)
5系统仿真 (10)
5.1仿真设计电路图 (10)
5.2液晶显示 (11)
5.3系统启动仿真 (12)
5.4系统比赛分数控制仿真 (12)
5.5实物测试 (12)
总结 (15)
参考文献 (16)
致谢............................................................................. 错误!未定义书签。

附录.. (17)
摘要
篮球比赛是根据运动队员在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是属于体育比赛计时计分系统中一种得分类型的系统。

课题为篮球比赛计时计分系统。

项目选取STC89C52控制器完成核心工作,系统能够完成对整个篮球比赛的时间控制、比分控制,能够应用按键设置比赛比分,控制比赛时间,对篮球比赛的任何数据进行设置。

显示选择2组3位、1组4位、1组2位一体式的数码管,1组4位显示比赛倒计时,2组3位分别显示两队比分,1组2位显示24秒倒计时。

选取C语言实现代码开发,选取Keil工具实现代码开发运行。

代码开发结束选取Proteus环境完成功能验证。

不断优化,完成设计。

关键词:计分器;数码管;Proteus;篮球比赛计时
ABSTRACT
The basketball game is determined according to how much the sports team scores in the specified game time. Therefore, the timekeeping system of the basketball game is a type of scoring system in the sports time counting system. The subject is a basketball game timing scoring system. The project selects the STC89C52 controller to complete the core work. The system can complete the time control and score control of the entire basketball game. It can apply the button to set the game score, control the game time, and set any data of the basketball game. The display selects 2 groups of 3 digits, 1 group of 4 digits, and 1 group of 2 digits of integrated digital tube. One group of 4 digits displays the game countdown, 2 groups of 3 digits respectively display the scores of the two teams, and 1 group of 2 digits displays the 24 seconds countdown. Select C language to achieve code development, select Keil tool to achieve code development and operation. At the end of the code development, select the Proteus environment to complete the function verification. Continuously optimize and complete the design.
Key words: scorer; digital tube; Proteus; basketball game timi
1概述
篮球比赛是根据运动队员在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是属于体育比赛计时计分系统中一种得分类型的系统。

由于其独特的优点是高度集成的单芯片,功能性,通用性,尤其是它的体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和易于使用,现在已经成为了系统测量和控制应用的首选机型和新的电子产品的关键部件[1]。

在本设计中,使用的显示部分为LED显示屏,使用的按键为独立式键盘。

硬件方面,由于使用的是一体的LED显示屏,在构造方面同时也比较坚固,不易拆散。

在软件方面,由于是通过独立式键盘来进行控制单片机的,所以也减少了编码程序时的复杂性,从而优化了程序运行效率。

2系统整体方案设计
课题为篮球赛计时计分器设计,主要的核心器件是STC89C52单片机。

当进攻时间还剩下3秒时,系统开始报警。

进攻时间计时到0时如果没有进球,进攻时间重新刷新时间(处于暂停状态);当本节时间还剩下3秒时,系统开始报警。

本节时间计时为0时,直接进入下一节计时状态(计时处于暂停状态);比赛分为4节,当到达第3节时,分数显示自动交换位置;系统结构框图如图2-1所示。

图2-1 系统结构框图
2.1主控制器方案
方案一:单片机作为系统核心的控制器,是其他所有模块的连接枢纽,设计选用STC89C52。

单片机内部有存储模块,内部的存储模块具有超长时间的存储能力,单片机软件设计时通过MCS-51指令完成的,此指令标准在很多器件上都可以使用,通用性很强。

这款单片机的能耗也很小,在低功耗方面表现优异,单片机内核是51内核,现在很多单片机都是使用此内核,单片机是最基础入门级
8位单片机,在开发设计上也是最简单的,此款单片机内部可完成8K的代码量,如果代码量超过了8K,还可以设计外围代码存储方案,设计满足所有设计需要。

单片机在设计出厂后做了加密处理,后期产品中使用后,不会被盗取设计文件,通过任何技术手段也无法进行解密。

单片机的执行速度也很快,一般搭配的晶振是11.0592Mhz晶振,单片机的稳定性很强,在很多复杂场景下都可以稳定运行。

此单片机最大优势就是成本方面,成本很低,这对于很多设计来说也是最重要的一点,所以这就是为什么在很多产品设计中可以看到它的声影。

所以不管是从能耗还是价格等方面都有着很大的优势,运行稳定,性价比高,价格相对便宜,且功耗低,加密性强,此外在系统核心模块的选择上采用STC系列能够有效提高系统的工作效率,能够在工作状态下进行在线运行,让系统工作更加便捷。

方案二:选择MSP430型号处理器,人们也把这种单片机叫做混合信号处理器,这种处理器集成了多种电路模块,主要有三种电路模块,第一种是模拟电路模块,第二种是数字电路模块,第三种是微处理器模块。

由德国德州仪器公司生产,1996年这种产品开始在市场上推广,它是一种混合信号处理器,其指令精简,功耗低。

在一些便携式的仪器仪表中,对这种单片机的应用比较广泛。

但利用这种单片机的开发的难度比较大,价格也相当昂贵。

因此,即使是在一些简单的设计中,也不宜采用这种单片机。

方案三:选取STM32集成芯片,内核选取ARM 32位的M3 CPU,产品具有高效、费用小、能耗小的32位处理器,此产品在很多的电子设备中进行使用,就像工业操作行业、航空航天领域,智能硬件等方面。

他的运行速度超过72MHz,搭配了高速存储设备,I/O引脚的数量很大。

拥有2个12位逐次逼近方式ADC 处理模块,可以接18模拟信号,所有通道的A/D处理能够单次、多次、扫描方式运行,计算速度达到1MHz,通道的采样间隔能够进行控制。

此产品具有非常明显的特点,在2个方面,首先为很好的计算能力,再有就是产品的反应时间非常短,因此在很多的地方都有使用此产品。

方案选择:方案二的MSP430系列单片机虽然是一个功能强大、功耗超低的单片机,但是STC89C52单片机可以实现全部功能。

而方案三的STM32虽然功能强大,但是成本较高,而且对于此系统的设计属于大材小用。

而且设计要求价格低廉,代码编写简单,性价比高,所以选择了STC89C52单片机作为本系统的主要控制芯片.
2.2显示方案
方案一:选取数码管显示。

静态驱动就是单片机的每一个输入输出端口分别控制一个与其相对应的数码管的段码。

相对于动态驱动,静态驱动的好处是程序简单,亮度比较高,不容易出错,显示的更清晰。

坏处是每一个段码都需要一个输入输出端口,一个数码管需要八个端口,如果程序中的数码管过多,则需要的
端口则更多,不利于设计实现。

方案二:选取LCD1602液晶显示项目中的参数。

LCD1602液晶显示屏和单片机的连接设计比较容易,程序设计容易上手。

将想要显示的内容对液晶进行读写、使能以及数据接口,就可以使任意位置内容的显示实现操作。

此液晶能显示32个字符但此液晶不能显示汉字。

LCD1602液晶的电源要求和系统单片机一致,都为5V。

在本次设计中液晶显示屏起到了很大的作用,它用来显示我们想要测量的数据,以及我们想要改变的数据。

液晶显示器的发展十分迅速,以前还是黑白的,现在科技中使用的都已经是液晶的了,而且再现在的家居中十分的常见,我们用它来显示数字信息,图片信息,甚至其他的视频信息[5]。

方案选择:方案二显示内容虽然多,但是不利于单个字符分开位置显示,而方案一可以选择单独位的数码管进行显示,这样更加适合比赛计分的设计。

3系统电路设计
3.1主控制器电路
STC89C52可以存储8K的代码量,对于大多数项目是够用的,此款单片机在产品中使用频率很高,主要因为单片机的开发设计更容易上手,对于工程师而言难度较小。

所以很多产品都使用它来作为主控制器方案。

这对于产品的成本很有优势,而且时间成本也会大大减小。

此款产品常用接口有32个,包括P0、P1、P2、P3四组接口,每组8个接口,这样数量的接口对于大部分设计都可以满足要求,而且有的IO口还配备有第二功能,既可以作为常用IO,也可以作为特殊功能使用,比如P3.0为串口通信的输入端,P3.1为串口通信的输出端,P3.2为定时器0的中断信号输入口,P3.3为定时器1的中断信号输入口,这4个IO为特殊功能,也可以作为普通IO使用。

单片机除了设计有普通IO,还有一些必要的接口,单片机的运行必须有复位电路、晶振电路。

单片机的9脚接单片机的复位电路,此引脚可以输入有效得到复位信号对单片机的运行进行复位,单片机的晶振电路通过单片机的18脚、19脚输入时钟信号。

还有31脚EA,此引脚的信号会觉得单片机的运行程序的位置,如果EA不接或者接低电平,单片机会默认从芯片内部存储模块读取运行程序,如果EA接高电平,单片机会从外部读取运行程序,这时P0口就会作为地址以及数据接口,作为程序读取的通道。

作为一款控制器,电源是比不可少的,40脚为电源,20脚为电源地。

主控制器如图3-1所示。

RP1
C3
30
图3-1 单片机引脚图
3.2显示电路
在本设计中, 显示部分采用数字管显示, 可以满足比赛倒计时和两队的得分数据。

四位集成数字管分别设计用于显示。

数字管由三极管驱动。

由于数字管选择四合一数字管, 三极管和数字管的位选择信号是连接的, 因此只需4个三极管
就可以完成四合一四组数字管的驱动电路。

如图3-2所示。

图3-2数码管接口电路图
3.3按键电路
在本系统当中所要使用的按键并不多,键盘对应名称如下:ADD1,DEC1,EXCHANGE,ADD2,DEC2,SEC24,RUN/STOP,其中ADD1为甲队比分加1键,(比赛开始前为调整时间加1),DEC1为甲队比分减1键,(比赛开始前为调整时间减1),EXCHANGE为换场键,一节比赛结束后才可换场。

ADD2为甲队比分加1键,(比赛开始前为调整时间加1),DEC2为甲队比分减1键,(比赛开始前为调整时间减1),SEC24为24秒复位键,比赛时随时复位24秒。

RUN/STOP为启动暂停键,比赛开始前按下启动计时,比赛开始,比赛开始后,按下为暂停计时,比赛暂停。

如图3-3所示。

图3-3 按键电路
3.4提示电路
指示灯选用发光二极管。

报警选用蜂鸣器进行报警提示。

系统控制蜂鸣器进行声音报警提示[7]。

蜂鸣器驱动需要进行驱动设计,一般的设计都是选取只三极管完成驱动设计,对三极管的基极进行操作即可实现蜂鸣器的驱动,开发费用小。

当比赛时间剩10秒时,声光报警闪烁提示,当比赛时间到了。

如图3-4。

图3-4 提示电路
4系统软件设计
系统的软件通过C语言进行设计,C语言的关键词通俗易懂,受很多工程师欢迎。

软件开发上手快,C语言为了更快的让工程师上手,设计了很多便于工程师理解的语法,和汇编比起来,C语言更贴近我们认识的语言,可以说是一目了然,在后期代码的理解上也更容易,现在基本上所有的项目产品都是通过C语言完成的代码设计。

编译环境选择Keil,对C语言代码进行编译[8]。

4.1软件整体设计
此项目所有代码开发涵盖:软件初始化、按键扫描、数据显示、声光提示控制。

系统进行初始化之后,系统开始默认比赛时间是12分钟,可在没开始或暂停的时候按“调整时间”,调整比赛时间,在调整时间时,按“开始”键加1,按“交换场地”键减1,按“确认”键,退出调整并保存数据;按“开始”键,可以切换开始和暂停;在暂停或没开始的时候,按“交换场地”键,A方和B方交换场地;按计分键,对应分数加或减相应数值,在暂停或没开始的时候,按“确认”键可清除两队分数;比赛开始,液晶屏显示比赛时间,时间以倒计时显示,24秒违规也开始计时,同样采用倒计时方式;当球有投出或持球队变换时,可通过24秒复位键复位24秒,当24秒时间到时,比赛犯规,比赛暂停,并且报警提示,可按“开始”键继续比赛;当比赛时间剩10秒时,声光报警闪烁提示,当比赛时间到了,声光报警提示一段时间后停止;比赛时间到,比赛结束,除了“确认”键,其他按键全部失效,可按“确认”键,开始行的比赛;见图4-1。

图4-1 系统软件设计流程图
4.2显示软件设计
数码管的选择是一个4位集成数字管, 它需要扫描位选择信号, 并在选择相应的位信号时输出相应的数据信号。

LED数码管的动态显示是每个数码管的端发光二极管, 因此应考虑每个点的保留时间和间隔时间。

如果保持时间太短, 发光就会太弱, 人类的眼睛看不到;如果保持时间过长, 间隔时间将过长(假设N位, 间隔时间=保持时间X (N-1)), 使数字闪烁被人的眼睛看到。

在程序中, 我们应该合理地选择合适的保留时间和间隔时间。

周期的数量与显示的变化速度成正比。

如图4-2数码管显示流程图所示。

图4-2数码管显示流程图
4.3篮球计分软件设计
篮球计分的软件设计是应该单片机的定时器进行定时,按照篮球比赛的计时方式进行倒计时,需要对定时器进行初始化,实现周期为1秒的计时。

如图4-3。

图4-3计分软件设计流程图
主函数的相关的代码如下所示。

void JS_Count()
{
if(JS_Running)
{
ms--;
if(ms==0)
{
ms = 99;
sec--;
if(sec <= 0)
{
ms = 0;
sec = 0;
Buzzer = 0;
JS_Running = 0;
}
}
JS_Refresh = 1;
}
5 系统仿真
5.1仿真设计电路图
设计选用Proteus完成对系统的验证,打开软件绘制系统电路图,和代码进行联机调试。

仿真设计图如图5-1。

仿真包括显示控制、按键输入、声音控制、主控制器。

图5-1 系统仿真电路图
5.2数码管显示
启动仿真,数码管显示内容如图5-2所示。

1000表示比赛总时长,24表示表示24秒进攻时间,000表示A对和B对的比分。

图5-2 系统液晶显示仿真
5.3系统启动仿真
系统启动仿真后,通过启动按键,比赛开始,比赛时间进行倒计时,24秒进行倒计时。

如图5-3所示。

图5-3 系统启动仿真
5.4系统比赛分数控制仿真
通过分数设置按键,可以对A队和B队的比分进行设置,如图5-4。

A对比分2,B对比分4。

图5-4 系统比分控制仿真
5.5实物测试结果与分析
系统调试完成后,购买器件,器件清单如下:准备烙铁、焊锡、吸抢、高温棉、镊子等常用工具。

进行实物焊接组装[10]。

组装完成后不可立即上电,首先需要用万用板测量电源正负是否短路,防止在焊接过程中有虚焊,造成电源短路,上电是烧坏电路板。

电源不短路后,上电测试所有功能。

实物效果如图5-5、5-6所示。

图5-5 实物图
图5-6实物图
总结
在本次实际设计当中使我们对单片机的工作原理及其应用有个更加深刻地认知,同时在系统的设计过程中还更加深入地了解了硬件和软件的各组成部件和相关程序。

通过细致且认真地分析,还在设计过程中发现了自己专业知识较为薄弱的方面,这可以为我今后更加全面地学习研究单片机提供借鉴和参考。

在本文的设计中,软件程序部分借助了C语言知识,而设计过程中最困难的部分正在于如何实现程序与电路的匹配。

在本次设计中,受自身能力的影响还存在着许多的不足,甚至现有设计中也并没做到十全十美,但经过这次的实践,单片机的应用以及与之相关的知识使我能够更加清楚而直观地感受到,此外在操作仿真软件的能力方面也有了大幅提升。

尽管此次的设计过程十分艰辛,问题也多种多样,但最终还是在我的努力下,在各位同学和师长的帮助下克服了困难,完成最终的设计,使我受益良多。

参考文献
[1]夏志华. 基于单片机的温度控制系统的研究与实现[J]. 煤炭技
术,2013,(02):191-193.
[2]姜宝华,齐强. 基于单片机的无线遥控智能小车的设计与制作[J]. 电子世
界,2013,(03):24-25.
[3]程望斌,刘凌,杨陈明,李慧,李璇. 基于单片机的火灾烟雾报警系统设计[J]. 湖南理
工学院学报(自然科学版),2014,(03):41-44
[4]刘兵. 基于单片机的家庭报警系统的研究与设计[D].山东大学,2015.
[5]李剑雄,梁春美. 基于单片机的无线防盗报警器设计研究[J]. 信息与电脑(理论
版),2015,(08):3-4+8.
[6]贾应炜. 基于STC89C52单片机的火灾报警系统设计[J]. 机械电
子,2015,(04):50-53.
[7]刘裕舸. 单片机门禁系统的设计与研究[J]. 电子测试,2016,(07):13+25.
聂茹,屈艳. 基于单片机的红外报警监控系统设计与实现[J]. 微处理机,2016,(03):90-92.
[8]吴育军. 浅析单片机的应用与发展[J]. 无线互联科技,2016,(13):22-23.
[9]马宏坤. 51系列单片机C语言应用[J]. 工业控制计算机,2016,(01):132-134+139.
[10]封杰文. 单片机的发展与应用[J]. 电子制作,2016,(12):91.
[11]杜洪林. 论单片机应用系统的可靠性设计[J].电子技术与软件工程,2016,(06):257.
[12]申景,张丽丽. 基于单片机的家用无线火灾报警系统设计[J]. 消防科学技
术,2016,(10):1421-1424.
[13]杜朝. 基于单片机的嵌入式系统开发[J]. 无线互联科技,2016,(01):56-57.
Linda J, Engelman. Interacting on the Internet. Irwin Book Team. U. S. A, 2016
附录
#include<reg51.h>
#define LEDData P0
unsigned char code LEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int minit,second,count,count1; //分,秒,计数器
char min=15,sec=0;
sbit add1=P1^0; //甲对加分,每按一次加1分/在未开始比赛时为加时间分
sbit dec1=P1^1; //甲对减分,每按一次减1分/在未开始比赛时为减时间分
sbit exchange=P1^2; //交换场地
sbit add2=P1^3; //乙对加分,每按一次加1分/在未开始比赛时为加时间秒
sbit dec2=P1^4; //乙对减分,每按一次减1分/在未开始比赛时为减时间秒
sbit p24_sec=P1^5;
sbit secondpoint=P0^7; //秒闪动点
//----依次点亮数码管的位------
sbit led1=P2^7;
sbit led2=P2^6;
sbit led3=P2^5;
sbit led4=P2^4;
sbit led5=P2^3;
sbit led6=P2^2;
sbit led7=P2^1;
sbit led8=P2^0;
sbit led9=P3^7;
sbit led10=P3^6;
sbit led11=P3^5;
sbit led12=P3^4;
sbit alam=P1^7; //报警
bit playon=0; //比赛进行标志位,为1时表示比赛开始,计时开启bit timeover=0; //比赛结束标志位,为1时表示时间已经完
bit AorB=0; //甲乙对交换位置标志位
bit halfsecond=0; //半秒标志位
unsigned int scoreA; //甲队得分
unsigned int scoreB; //乙队得分
unsigned char sec24=24;
void Delay5ms(void)
{
unsigned int i;
for(i=100;i>0;i--);
}
void display(void)
{
//-----------显示时间分--------------
LEDData=LEDCode[minit/10];
led1=0;
Delay5ms();
led1=1;
LEDData=LEDCode[minit%10];
led2=0;
Delay5ms();
led2=1;
//-------------秒点闪动------------
if(halfsecond==1)
LEDData=0x7f;
else
LEDData=0xff;
led2=0;
Delay5ms();
led2=1;
secondpoint=0;
//-----------显示时间秒------------
LEDData=LEDCode[second/10];
led3=0;
Delay5ms();
led3=1;
LEDData=LEDCode[second%10];
led4=0;
Delay5ms();
led4=1;
//-----------显示1组的分数百位------- if(AorB==0)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led5=0;
Delay5ms();
//---------------显示1组分数的十位----------- if(AorB==0)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led6=0;
Delay5ms();
led6=1;
//---------------显示1组分数的个位----------- if(AorB==0)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led7=0;
Delay5ms();
led7=1;
//-----------显示2组分数的百位-------
if(AorB==1)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led8=0;
Delay5ms();
led8=1;
//-----------显示2组分数的十位-----------
if(AorB==1)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led9=0;
Delay5ms();
//-----------显示2组分数的个位-----------
if(AorB==1)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led10=0;
Delay5ms();
led10=1;
//-----------显示时间分--------------
LEDData=LEDCode[sec24/10];
led11=0;
Delay5ms();
led11=1;
LEDData=LEDCode[sec24%10];
led12=0;
Delay5ms();
led12=1;
}
//=========================按键检测程序================================================
void keyscan(void)
{
if(playon==0)
{
if(add1==0)
{
display();
if(add1==0);
{
minit++;
else
minit=99;
min=minit;
}
do
display();
while(add1==0);
}
if(dec1==0)
{
display();
if(dec1==0);
{
if(minit>0)
minit--;
else
minit=0;
min=minit;
}
do
display();
while(dec1==0);
}
if(add2==0)
{
display();
if(add2==0);
{
second++;
else
second=59;
sec=second;
}
do
display();
while(add2==0);
}
if(dec2==0)
{
display();
if(dec2==0);
{
if(second>0)
second--;
else
second=0;
sec=second;
}
do
display();
while(dec2==0);
}
if(exchange==0)
{
display();
if(exchange==0);
{
TR1=0; //关闭T1计数器
alam=1; //关报警
AorB=~AorB; //开启交换
minit=min; //并将时间预设为15:00
second=sec;
sec24=24;
}
do
display();
while(exchange==0);
}
}
else
{
if(add1==0)
{
display();
if(add1==0);
{
if(AorB==0)
{
if(scoreA<999)
scoreA++;
else
scoreA=999;
}
else
{
if(scoreB<999)
scoreB++;
else
scoreB=999;
}
}
display();
while(add1==0);
}
if(dec1==0)
{
display();
if(dec1==0);
{
if(AorB==0)
{
if(scoreA>0)
scoreA--;
else
scoreA=0;
}
else
{
if(scoreB>0)
scoreB--;
else
scoreB=0;
}
}
do
display();
while(dec1==0);
}
if(add2==0)
{
display();
if(add2==0);
if(AorB==1)
{
if(scoreA<999)
scoreA++;
else
scoreA=999;
}
else
{
if(scoreB<999)
scoreB++;
else
scoreB=999;
}
}
do
display();
while(add2==0);
}
if(dec2==0)
{
display();
if(dec2==0);
{
if(AorB==1)
{
if(scoreA>0)
scoreA--;
else
scoreA=0;
}
else
{
if(scoreB>0)
scoreB--;
else
scoreB=0;
}
}
do
display();
while(dec2==0);
}
if(p24_sec==0)
{
display();
if(p24_sec==0)
{
sec24=24;
TR0=1;
alam=1;
while(p24_sec==0) display();
}
}
}
}
//******************************主函数
************************************************* 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; //开中断
}
/*
void PxInt1(void) interrupt 2
{
Delay5ms();
EX1=0; //关中断
if(timeover==1) //比赛结束标志,必须一节结束后才可以交换,中途不能交换场地
{
TR1=0; //关闭T1计数器
alam=1; //关报警
AorB=~AorB; //开启交换
minit=15; //并将时间预设为15:00
second=0;
}
EX1=1; //开中断
}
*/
//*********************************中断服务函数**************************************
void time0_int(void) interrupt 1
{
TL0=0xb0;
TH0=0x3c;
TR0=1;
count++;
if(count==10)
{
halfsecond=0;
}
if(count==20)
{
count=0;
halfsecond=1;
// if(second>0)
{
second--;
if(second<0)
{
if(minit>0)
{
second=59;
minit--;
}
else
{
second=0;
timeover=1;
playon=0;
TR0=0;
TR1=1;
}
}
}
sec24--;
if(sec24==0&&(minit+second)!=0)
{
alam=0;
TR0=0;
}
}
}
//*********************************中断服务函数**************************************
void time1_int(void) interrupt 3
{
TL1=0xb0;
TH1=0x3c;
TR1=1;
count1++;
if(count1==10)
{
alam=0;
}
if(count1==20)
{
count1=0;
alam=1;
}
}。

相关文档
最新文档