桦砣汽车网
您的当前位置:首页篮球赛记分牌设计分析共25页

篮球赛记分牌设计分析共25页

来源:桦砣汽车网




精选优质文档-----倾情为你奉上
篮球赛记分牌设计

前言

篮球是一项充满乐趣的运动,打篮球不仅可以强身健体,而且能增进队友之间的相互信任。现在篮球普及率已经很高,打篮球不仅仅是专业运动员的运动,也是普通老百姓的活动,不管你是走在学校里,还是公园里,或者是小区里,都能看到篮球场,都能看到打篮球的人,篮球已成为我们大部分人生活里不可缺少的一部分,每天都能听到有人在谈论篮球,说说自己喜欢的NBA巨星……因为喜欢篮球,所以打篮球,时不时会来场激烈的比赛,但是传统的记分方式如粉笔或记计分人员手动翻动记分牌给我们带来诸多不便。随着社会的发展、科学技术的进步以及人们生活水平的不断提高,各种电子产品开始进入人们的生活,使人们的生活更加便利。篮球赛记分牌设计的实现使得我们轻轻松松几个按钮开关就能记下分数,让我们感受到科技给我们带来的巨变。

篮球比赛的胜负是由两支队伍在规定时间里得分多少来决定。由于比赛的不可重复性和绝对的公平性,决定了篮球赛记分牌系统是一个实用性很强、可靠性要求极高的以计算机技术为核心的电子服务系统。这种设备是篮球比赛中不可或缺的一种电子设备,篮球赛记分牌系统设计是否合理,关系到整个篮球比赛系统运行的稳定和可靠,并直接影响到整个篮球比赛的顺利进行。篮球赛记分牌系统是篮球比赛的重要工程项目,是关系到比赛成败的关键工程,这种记分牌还可以运用到其他体育竞赛,如足球、羽毛球。

1 系统总体设计方案

随着单片机[1]广泛应用于各领域,许多用单片机作控制的球赛记时记分系统也随之产生,例如用单片机控制LCD液晶显示器记时记分器和用单片机控制LED七段显示器计时计分器等。

本设计根据所学的C语言基础知识和一些编程思想,对所需要的一些硬件在市场上进行了调查比较,选择了比较简单,容易实现的51单片机,结合运用C语言思想进行方案设计,使用keiluVision 软件编写程序。51单片机内部的定时器/计数器进行中断可以结合软件延时实现计时。采用的硬件核心是C51芯片,其内部采用FlashROM,具有4KBROM存储空间,能与3V的超低压工作,电路设计中由于不具备ISP在线编程技术,可以运用STC-ISP烧入程序。
这个设计实现的功能是记下双方比分,随时显示,能够随时更改双方比分,能够调整比赛的时间,还有暂停时间,能够在双方更换比赛场地时交换双方比分,时间走完时能发出比赛终止信号。

专心---专注---专业



精选优质文档-----倾情为你奉上
基于单片机系统的篮球赛记分牌的系统构成框图如图1-1所示。

1-1 总体框图

2 硬件电路设计

2.1 系统电路的构成部分
电路主要包含CPU部分、电源部分、复位电路部分、按键部分、LED显示、蜂鸣器部分六部分。

2.1.1 CPU部分
51单片机为单芯片微控制器[2],常见封装形式为40脚双列直插式塑料封装DIP-40,其引脚识别为:正面面向用户,缺口向上,左上面第一脚为1脚,然后按逆时针方向依次为2~40脚。通常第一脚有标志符号。51单片机管脚图如图2.1.1-1所示。

ATC51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFlashProgrammable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。ATC单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

?

主要特性

MCS-51兼容,4K字节可编程FLASH存储器,数据保留时间是10年,寿命是1000/擦循环,静态工作频率是0Hz-24MHz,三级程序存储器锁定,128×8位内部RAM32可编程I/O线,两个16位定时器/计数器,可编程串行通道,5个中断源,低功耗的闲置和掉电模式,片内振荡器和时钟电路。

专心---专注---专业



精选优质文档-----倾情为你奉上

2.1.1-1 单片机引脚图

? 管脚说明:
VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻态输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4TTL门电流,当P2口被写“1时,其管脚被内部上拉电阻拉高,且作为输入。并 专心---专注---专业



精选优质文档-----倾情为你奉上
因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为ATC51的一些特殊功能口,见表2.1.1-1所示:

2.1.1-1 P3 8个管脚的功能

口管脚

备选功能

P3.0 RXD

串行输入口

P3.1 TXD

串行输出口

P3.2 /INT0

外部中断0

P3.3 /INT1

外部中断1

P3.4 T0

记时器0 外部输入

P3.5 T01

记时器1 外部输入

P3.6 /WR

外部数据存储器写选通

P3.7 /RD

外部数据存储器读选通

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVXMOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周 专心---专注---专业



精选优质文档-----倾情为你奉上
期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

? 振荡器特性:
XTAL1XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

单片机是一种微控制器,任何控制器正常工作最基本的条件是要有正确的电源、时钟电路好复位信号,三者缺一不可。

单片机正常工作最基本条件是:正确的电源、时钟信号、复位信号。51系列单片机第40引脚接电源+5V,20引脚接地。电压过高或者过低均会引起单片机CPU部工作,CPU控制电路如图2.1.1-2所示。单片机指令执行时在时钟脉冲控制下进行的,时钟脉冲信号是由单片机内部时钟电路及18脚、19脚外接晶振和电容组成的时钟电路产生的。时钟电路异常,也会引起单片机CPU部工作,可通过测量30脚(ALE)是否有时钟脉冲六分频信号输出来判断振荡电路是否起振。复位电路时在CPU通电后,给复位端9脚(RST 51系列单片机是高电平复位,在正确的一个复位脉冲,使CPU内部处于初始工作状态。

复位后(工作状态)9脚应保持低电平。如果复位电路出现故障,CPU也将无法工作。由于CPU的复位电路只有在开机瞬间产生复位脉冲,周期一般为几毫秒,用万用表无法鉴别正常与否。对于只有上电复位的复位电路,快速判断CPU是否有故障可以采取强制复位的方法,将复位瞬时接电源正端,如果此时CPU恢复工作,说明CPU的复位电路出现故障。对于有按键复位的复位电路,按下复位键,测量复位端是否有高电平产生来判断复位电路工作是否正常。

专心---专注---专业



精选优质文档-----倾情为你奉上

2.1.1-2 CPU控制电路

2.1.2 电源部分

如图2.1.2-1所示为单片机复位电路提供电源。

2.1.2-1 电源部分

2.1.3 复位电路部分

专心---专注---专业



精选优质文档-----倾情为你奉上

如图2.1.3-1 所示,单片机中RST 端口通过一个10uF 的电解电容接VCC,又通过

一个10K的电阻接地[3]。接VCC的电容为复位电容,接地的电阻为下拉电阻。工作过程:单片机刚上电时需复位一次才能可靠工作,通过电容接VCC,是利用电容充电来提供>>2个机器周期的高电平时间让单片机复位,如此单片机可以正常工作了,这之后又不要求单片机复位,所以可以通过10K的电阻下拉接地,保证RST脚维持在低电平状态(即不复位状态)。

2.1.3-1 复位电路

2.1.4 按键部分
如图2.1.4-1所示,键盘[4]对应名称如下:
ADD1DEC1EXCHANGEADD2DEC2RUN/STOP其中,
ADD1甲队比分加1键,(暂停时为调整时间分钟加1 DEC1甲队比分减1键,(暂停时为调整时间分钟减1 EXCHANGE换场键,半场休息时换场。

ADD2乙队比分加1键,(暂停时为调整时间秒钟加1
DEC2乙队比分减1键,(暂停时为调整时间秒钟减1
RUN/STOP启动暂停键,比赛开始时按下启动计时,比赛开始。比赛开始后,按下为暂停计时,比赛暂停。

专心---专注---专业



精选优质文档-----倾情为你奉上

2.1.4-1 按键部分

2.1.5 LED显示部分
如图2.1.5-1,图2.1.5-2和图2.1.5-3所示,分别代表甲乙两队记分牌和剩余时间牌。其中图2.1.5-1为剩余时间牌,初始剩余时间默认为12:00;图2.1.5-2和图2.1.5-3为甲乙两队的比分值,用三位数表示,范围从000999

2.1.5-1 D2(4LED

2.1.5-2 D3(3LED)2.1.5-3 D4(3LED)

专心---专注---专业



精选优质文档-----倾情为你奉上
2.1.6蜂鸣器部分
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。蜂鸣器主要分为电磁式蜂鸣器和压电式蜂鸣器两种类型。应用比较广泛,主要是在打印机、复印机、计算机、报警器、电子玩具、电话、汽车电子设备、定时器等电子产品中作发生器件。电路中的蜂鸣器用字母“HA或“H表示。如图2.1.6-1所示是将蜂鸣器接到P1.7上实现报警功能。

2.1.6-1 蜂鸣器部分

2.2 系统的总电路图
本系统以单片机C51为核心,利用单片机复位电路提供电源,采用1个四位八段和238段的数码管作为显示双方比分和比赛时间,并且使用了6个按键达到加减分数和时间的功能,不仅如此本系统还使用一个蜂鸣器实现报警功能。具体的系统的总电路图见附录2

3 系统软件设计

3.1 keil uVision软件的简介
KeiluVision 是德国KeilSoftware 公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,C语言在结构性、功能上、可读性、可维护性上比汇编有很明显的优势,因此易学易用,并且提高了工作人员的工作效率和项目开发的周期,他还能嵌入汇编,你可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保 专心---专注---专业



精选优质文档-----倾情为你奉上
留了汇编代码快速,高效的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision的集成开发环境中,这个集成开发环境包含:编译器,汇编器,项目管理器,调试器,实时操作系统。

3.2 程序流程图
单片机程序总流程图如图3.2-1所示

3.2-1 单片机程序总流程图

专心---专注---专业



精选优质文档-----倾情为你奉上

按照单片机程序总流程图在keil uVision 软件上用C 语言进行程序的编写,部分源

程序代码见附录1

3.3 测试方法和测试结果

3.3.1 Proteus的简介

英国Labcenter公司开发了一款可以用于电路分析与实物仿真的软件Proteus。它在

Windows操作系统上运行,可以仿真、分析(SPICE)各种集成电路和模拟器件,该软件的

特点有如下几点。

? 实现了单片机仿真和SPICE电路仿结合。具有数字电路仿真、模拟电路仿真、

单片机及其外围电路组成的系统的仿真、RS232动态仿真、SPI调试器、I2C调试

器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信

号发生器等。

? 支持主流单片机系统的仿真。截止到目前支持的单片机类型有:8051系列、68000

系列、Z80系列、PIC12系列、PIC16系列、PIC18系列、HC11系列以及各种外围芯

片。

? 提供软件调试功能。在硬件仿真系统中具有的调试功能是全速、单步、设置断点,

同时可以观察各个变量、寄存器等所处状态,因此在该软件仿真系统中,也必须

具有这些功能;同时支持第三方的软件编译与调试环境,如KeilC51 uVision2

软件。

? 具有强大的原理图绘制功能。总的来说,该软件是一款集单片机和SPICE分析于

一身的仿真软件,功能非常强大。

3.3.2 proteus下的仿真

调整比赛时间:插上电源后,系统默认的比赛时间是1200,甲乙两支队伍的比分

默认为000,只要我们按下ADD1键,就可以对比赛时间的分钟数加1,按下DEC1键,

就可以对比赛时间的分钟数减1;同理,按下ADD2键,就可以对比赛时间的秒加1

按下DEC2键,就可以对比赛时间的秒减1

开始比赛:按下RUN/STOP键,计时开始,比赛时间以1秒的频率倒计时。

暂停比赛:比赛进行的情况下,按下RUN/STOP键,比赛暂停,计时暂停。

比分修改:在比赛进行的情况下,按下ADD1DEC1键,可以对甲队加1分、减

1分,按下ADD2DEC2键,可以对乙队分数加1分、减1分。

交换场地:在上半场结束休息时,按下EXCHANGE键,比赛时间重新设置成初始

1200,同时左右两边数码管所显示的比分进行交换。此时按下启动键可以开始下半

专心---专注---专业



精选优质文档-----倾情为你奉上场的比赛。

报警提示:当比赛时间倒计时到0000时,蜂鸣器立即发出报警提示。仿真全图如图3.3.2-1所示

3.3.2-1 仿真全图

4 电路制作和调试

4.1电路板的的焊接
要区分开电源地和信号地,电源地主要是针对电源回路而言的,而信号地主要是指两块芯片或者模块之间的通信信号的回流所流过的路径,电源地可以理解为通过发电厂与大地相连接,而信号地仅仅是电路板上所有接地信号的公共端,两者之间应该接在一起。但是由于电源地存在很多的高频污染,所以经常通过电感,电容,磁珠或者欧姆电阻将二者相连。磁珠的等效电路相当于带阻限波器,只对某个频点的噪声有显著抑制作用,使用时需要预先估计噪点的频率,以便选用适当的型号。主流的直流电变换芯片主要分为相控电源,线性电源,开关电源三类。焊接CPU时,首先要检查CPU的各个管脚,保证没有弯曲或者错位,然后将CPU各个管脚跟PCB板上的焊盘仔细的对齐,然后用电烙 专心---专注---专业



精选优质文档-----倾情为你奉上
铁轻轻烫一下管脚,由于CPU管脚和焊盘上均有少量的残锡,可以将CPU固定住,然后用电烙铁依次将管脚压平。接下来最关键的步骤:补锡。先在CPU管脚的一端点少量焊锡,然后将一排管脚涂满松香,快速而缓慢的划过管脚。焊接电路要有分块化的思想,首先焊接电源模块,然后测试各个供电电压;然后焊接CPU模块、Rs232TTL电平转换模块,通电后通过串口ISP测试CPU是否启动并且可以烧入程序。然后是无线通讯某块和IO串口某块,最后成功后焊接引出的管脚。晶振(Crystal)即为石英振荡器,是一种机电器件,这种晶体有一个是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。

很重要的特性,如果给它通电,它就会产生机械振荡,反之,如果给它机械力,它又会产生电,这种特性叫机电效应。它们有一个很重要的特点,其振荡频率与他们的形状,材料,切割方向等密切相关。由于石英晶体化学性能非常稳定,热膨胀系数非常小,其振荡频率也非常稳定,而且控制几何尺寸可以做到很精密,因此,其谐振频率也很准确。根据石英晶体的机电效应,我们可以把它等效为一个电磁振荡回路,即谐振回路。他们的机电效应是机---....的不断转换,由电感和电容组成的谐振回路是电场-磁场的不断转换。在电路中的应用实际上是把它当作一个高Q值的电磁谐振回路。由于石英晶体的损耗非常小,即Q值相当高,做振荡器用时,可以产生非常稳定的振荡,作滤波器用,可以获得非常稳定的带通或带阻曲线。

4.2程序的调试
程序的调试是编写一个程序的重要步骤,根据思想框图写好代码,不是写完就可以运用,由于一些因素可能会造成程序无法编译,这等于代码不能使用,有时候会因为一个小小的标点符号,会使你半天找不到错误,因为目标太小,但却是致命的,debug过程比写程序还要麻烦,有时候你模仿别人的程序写出所需程序,写好了就是无法编译,这是跟编程者的思想息息相关,编写程序最好模块分明,注释明了,使人一目了然,让懂的人一看便知你的思想,这是最重要的,所以要条理清晰,这是我调试程序的一些心得体会。

5 结论

本次设计叙述了篮球赛记分牌的基本原理及使用方法,给出了一种篮球赛记分牌的设计方案,该设计主要利用单片机程序设计原理来实现篮球记分牌的各项功能。此次设计的篮球赛记分牌,电路简单,而且较容易看懂,使操作者使用起来非常便利,设计内

专心---专注---专业



精选优质文档-----倾情为你奉上
容涉及记时,记分,时间终止报警,比分显示等部分,可以是参加比赛的成员、裁判和观众一目了然的看到比赛双方的成绩,该篮球赛记分牌还能广泛用于各类知识竞赛。

这次毕业设计使我受益匪浅,之前的我对于单片机的了解很片面,在运用keiluVision 软件编写程序和利用Proteus软件进行仿真这两方面的能力较薄弱。此次设计完成过后,我能够比较熟练的掌握这些软件的使用,而且对从大一至大三所学的相关知识做了进一步的巩固和提高,通过网上搜索和在图书馆翻阅相关专业书籍、期刊等掌握了一些以前专业课上未涉及的知识,这让我深刻认识到了自己对专业知识的了解是多么的少;同时也熟悉了很多的硬件设备,更重要的是让我在学习和掌握这些知识的同时,能够使我的思维更加活跃。在此之前,我分析问题和解决问题的能力很差,而这次设计我以较高标准严格要求自己,
使得自己在分析问题和解决问题的能力上得到培养和提高。这次毕业设计还锻炼和培养了我的基本素质,它使我做事更加有耐心、细心、谨慎;学会了坚持不懈,不轻言放弃。此次的毕业设计更让我明白要理论与实践相结合,因为我们学习理论就是为了在实践中运用这些理论,而且这次设计中收获的宝贵经验对我将来的工作很有帮助。当然,毕业设计期间,指导老师也给予我耐心的辅导和热情的帮助。对于我解决不了的问题老师更是很有耐心、不厌其烦的给我讲解,并且花费大量时间对设计报告进行了仔细的审阅,提出了适当的修改意见与建议,保证我的设计报告质量。

专心---专注---专业



精选优质文档-----倾情为你奉上

附录1:部分源程序代码

#include<reg51.h>
#defineLED Data P0 //定时数码管的段值从P0口输出
unsignedchar code LED
Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管0--9的编码 unsignedchar minit,second,count,count1; //分,秒,计数器
unsignedchar set _limit =12,set_second=0;
sbitadd1=P1^0; //甲队加分,每按一次加1/比赛前为时间加1
sbitdec1=P1^1; //甲队减分,每按一次减1/比赛前为时间减1
sbitexchange=P1^2; //交换场地
sbitadd2=P1^3; //乙队加分,每按一次加1/比赛前为时间加1
sbitdec2=P1^4; //乙队减分,每按一次减1/比赛前为时间减1
sbitsecondpoint=P0^7; //秒闪动点
//----数码管的位选控制脚,共有10位数码管------
sbitled1=P2^7;
sbitled2=P2^6;
sbitled3=P2^5;
sbitled4=P2^4;
sbitled5=P2^3;
sbitled6=P2^2;
sbitled7=P2^1;
sbitled8=P2^0;
sbitled9=P3^7;
sbitled10=P3^6;
sbitalam=P1^7; //报警
bit playon=0; //比赛进行标志位,为1时表示比赛开始,计时开启 bit timeover=0;
//比赛结束标志位,为1时表示比赛结束 bit AorB=0; //甲乙队交换位置标志位
专心---专注---专业



精选优质文档-----倾情为你奉上

bit halfsecond=0; unsigned int scoreA; unsigned int scoreB;

//半秒标志位
//甲队得分
//乙队得分

//====================延时==================
voidDelay5ms(void)
{
unsignedint i;
for(i=100;i>0;i--);
}
voiddisplay(void)
{
//-----------显示时间(分钟)--------------
LEDData=LEDCode[minit/10]; //显示分钟的十位
led1=0; //开启位选
Delay5ms(); //延时,以便足以点亮数码管。

//关闭位选led1=1;

LEDData=LEDCode[minit%10]; led2=0;
Delay5ms();
led2=1;

//-------------秒点闪动------------ if(halfsecond==1)
LEDData=0x80;
else
LEDData=0x00;
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();
led5=1; }
//=========================按键检测程序 void keyscan(void)
{

if(playon==0)
{
if(add1==0)
{

//在比赛未开始的状态下

//add1按键按下时

display(); //调用显示,同时作为延时消抖

if(add1==0);
{

//延时消抖后,依然检查到按键按下

if(minit<99) //当分钟小于99 时,分钟加1
minit++;
else
minit=99; //否则,分钟仍然为99,调整为99 分钟}

专心---专注---专业



精选优质文档-----倾情为你奉上

do

//当按键未松开时,一直调用显示,防止数码管闪

动,
display();
while(add1==0);
}
if(dec1==0) //dec1键按下时,dec1的原理与add一样, {
display();
if(dec1==0);
{
if(minit>0)
minit--;
else
minit=0;
}
do
display();
while(dec1==0);
}
if(exchange==0) //换场键
{
display();
if(exchange==0);
{
TR1=0; //关闭T1计数器
alam=1; //关报警
AorB=~AorB; //开启交换

}

minit=set_minit; //并将时间预设为1200

second=0;

do
display();
专心---专注---专业



精选优质文档-----倾情为你奉上 while(exchange==0);
}
}
else //比赛开始。

{
//add1键按下if(add1==0)
{
display(); //调用显示,同时延时消抖 if(add1==0);
{
if(AorB==0) //当场地标志位=0时, {

if(scoreA<999)
scoreA++;
else

//A方的比分小于999时,比分加1

scoreA=999; //否则最大值为999

}

else //当场地标志位=1 时,

{

if(scoreB<999)
scoreB++;
else

//B方的比分小于999时,比分加1

scoreB=999; //否则最在值为999 }
}
do
display();
while(add1==0);
}
//******************************主函数
void main(void)

专心---专注---专业



精选优质文档-----倾情为你奉上
{
TMOD=0x11; //TMOD设置
TL0=0xb0; //定时器0,初值为0x3CB0,既定时0.05s TH0=0x3c;
TL1=0xb0;
//定时器1,初值为0x3CB0,即定时0.05s TH1=0x3c;
minit=set_minit; //初始值为1200
second=0;
EA=1; //开总中断
ET0=1;
//T0中断 ET1=1; //T1中断
TR0=0;
TR1=0;
EX0=1; //开外部中断0
IT0=1;
IT1=1;
// EX1=1;
PX0=1;
// PX1=1;
PT0=0;
P1=0xFF;
P3=0xFF;
while(1)
{
keyscan(); //按键检查
display(); //显示程序
}
}
//============外部中断0中断程序=================
voidPxInt0(void) interrupt 0
{

专心---专注---专业



精选优质文档-----倾情为你奉上

Delay5ms();

EX0=0; //关中断使能

alam=1; //关蜂鸣器

TR1=0; //关定时器0

if(timeover==1)
{

//当一节比较时间结束时,结束标志位=1

timeover=0; //清除标志位

}

if(playon==0) //当比赛结束或暂停时

{

playon=1; //开始标志位

TR0=1; //开启计时

}

else

{

playon=0; //开始标志位清零,表示暂停

TR0=0; //暂停计时

}

EX0=1; //重新开中断

}

//===================定时器0 中断服务函数======================

void time0_int(void) interrupt 1

{

TL0=0xb0; //重赋初值

TH0=0x3c;

TR0=1; //启动计时

count++; //软件计数器加1

if(count==10)
{

//0.05s*10=0.5s,0.5秒钟时

halfsecond=0; //半秒标志位清零

专心---专注---专业



精选优质文档-----倾情为你奉上}

if(count==20)
{

//0.05s*20=1s,即1秒钟

count=0; //清除计数器

halfsecond=1; //半秒标志置1

if(second==0)=59,分钟减1

{

//倒计时,每计时1秒钟,时间减1,当秒=0时,

if(minit>0)
{
second=59;
minit--;
}
else //当分,秒都为0 时,表示倒计时时间到, {
timeover=1; //时间标志位置1
playon=0; //比赛标志清0,表示1 节比赛结束 TR0=0; //关闭定时器0
TR1=1; //开启定时1,使蜂鸣器报警
}
}
else
second--;
}
}

//==============定时器1 中断服务函数========================== void time1_int(void) interrupt 3
{
TL1=0xb0; //重赋初值
TH1=0x3c;
TR1=1; //启动计时
专心---专注---专业



精选优质文档-----倾情为你奉上

count1++;
if(count1==10)

//软件计数器加1
//0.05s*10=0.5s,也就是半秒钟

{

alam=0; //开启蜂鸣器

}

if(count1==20)
{

//0.05s*20=1s,也就是1秒钟

count1=0; //清除软件计数器,

alam=1; //关闭蜂鸣器,也就是蜂鸣器以1 秒的频率响

}

}

专心---专注---专业



D

精选优质文档-----倾情为你奉上

B


附录2: 系统的总电路图

D4
3LED


LS1

SPEAKER


D2
4LED

D3
3LED

VCC

Q1
8550

b

R3

4.7K

C4
104


RP1
1K

VCC

S1

VCC

SWITCH

R1
4.7K

U1
ATC51

D1
POWER

VCC

12MHz

C3
22

R2
10K

2
4

RUN/STOP

K7

1
3

DEC2

2
4

K6

Y1

C2
22

1
3

ADD2

2
4

K5

1
3

EXCHANGE

2
4

K4

1
3

VCC

C

+ C1
10uF

2
4

DEC1

K3

1
3

2
4

1

VCC

K2

ADD1

DC

P1

1
3

2


专心---专注---专业









精选优质文档-----倾情为你奉上
参考文献:
[1]冯育长:单片机系统设计及实例分析,西安电子科技大学出版社,2007.5,P15-P29
[2]余发山:单片机原理及应用技术,中国矿业大学出社,2003,P5-P40
[3]雷思孝、冯育长:单片机系统设计及工程应用,西安电子科技大学出版社,2005.5,P88-P117
[4]刘法治:常用电子器件及典型芯片应用技术,机械工业出版社,2007,P70-P85 [5] 杨欣、王玉凤、刘湘黔:电子设计从零开始,清华大学出版社,2005.10P10-P31[6] 何立民:MSC--51系列单片机应用系统设计,北京航空航天大学出版社,1993P5-P300
[7]周航慈:单片机应用程序设计技术,北京航空航天大学出版社,2011.02P5-P77[8] 张毅坤、陈善久、裘雪红:单片微型计算机原理及应用,西安电子科技大学出版社,1998.09P15-P67

专心---专注---专业

显示全文