篮球计时计分器的设计与实现.docx
学科分类号Mil本科生毕业论文(设计)题目(中文):篮球计时计分器的设计与实现(英文):TheDeSignandImPIemematiOnOfBaSketballTiminHandSCorinN本科毕业论文(设计)诚信声明作者郑重声明:所呈交的本科毕业论文(设计),是在指导老师的指导下,独立进行研究所取得的成果,成果不存在知识产权争议。除文中已经注明引用的内容外,论文不含任何其他个人或集体已经发表或撰写过的成果。对论文的研究做出重要贡献的个人和集体均已在文中以明确的方式标明。本声明的法律结果由作者承担。本科毕业论文(设计)作者签名:年月日篮球计时计分器的设计与实现摘要本论文旨在设计一个篮球计时计分器,主要利用单片机AT89C52作为系统的核心元件,二组四位一体共阴极数码管作为显示器件,独立式按键控制整个系统。主要实现了倒计时、显示A/B队的分数、并加分,减分,比赛结束鸣笛警示等功能。以C语言作为编程语言,在Keil开发软件平台上进行C源代码编写和调试。与传统模拟与数字电路实现的篮球计时计分器相比,该系统包括很多优点,比如成本低廉、性能稳定、高准确度显示、操作方便且易携带等,广泛适合各类学校和小团体作为赛程计分。关键词篮球计分器;AT89C52;七段数码管;独立式键盘TheDesignandImplementationofBasketballTimingandScoringAbstractThispaperaimstodesignaBasketballTimingScoreIndicator,mainlyusingsinglechipmicrocomputerAT89C52,whichisthecoreofthesystemcomponents,andtwogroupsoffourcommoncathodeintegrateddigitaltubeasadisplaydevice,andindependenttypebuttonstocontrolthewholesystem.MainlyimplementsthecountdownandA/Bteam'sscore,andcaninAtimelymannerplusandminuspoints,adjustthescore,theendofthegamewhistlingwarnings,andotherfunctions.WithClanguageastheprogramminglanguage,intheKeilsoftwaredevelopmentplatformforwritinganddebugging.Thecompletionofthesystemdesignincludesmanyadvantages,suchaslowcost,stableperformance,highaccuracydisplay,easytooperateandeasytocarry,etc.Suitableforallkindsofschoolandsmallgroupsscoreasschedule.KeywordsEmbedded;Basketballscoringscreen;AT89C52;LEDjSimuIation1前言进入21世纪,伴随着电子,信息通信技术的应用与普及开发,人们对电子技术的要求也越来越高,目前嵌入式单片机渗透到我们生活的各个领域。单片机是一种集成在电路芯片,是采用超大规模集成电路技术,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器RoM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。而当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在单片机上。按照历史性、本质性、普遍性要求,嵌入式系统应定义为:“嵌入到对象体系中的专用计算机系统”,可分软件部分和硬件部分。所以,以MCU为核心,就是各种各样的单片机,是嵌入式硬件部分的实现方式之一,它主要是因为把处理器和存储器等部件集成在一块芯片上。在单片机的应用正在不断深入的同时,传统技术日益更新。几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。随着单片机的发展,人们对事物的要求越来越高,单片机的应用软件技术也发生了巨大的变化,从最初的汇编语言,开始演变到C语言开发,不但增加了语言的可读性,结构性,而且对于跨平台的移植也提供了方便,另外一些复杂的系统开始在单片机上采用操作系统,一些小的RToS等,一方面加速了开发人员的开发速度,节约开发成本,另外也为更复杂的实现提供了可能。当前比较流行的RTOS有:WlNCE,uClinux,Linux,uC0S等等。单片机往往作为一个核心部件来使用,仅单片计时计分机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。单片机把我们带入了智能化的电子领域,许多繁琐的系统若由单片机进行设计,便能收到电路更简单、功能更齐全的良好效果。若把经典的电子系统当作一个僵死的电子系统,那么智能化的现代电子系统则是一个具有“生命”的电子系统。随着各式各样的电子产品的问世和发展层出不穷,篮球计分屏是一个无处不在的电子产品,经过多年的发展,技术已经相当成熟了。根据目前高水平篮球比赛要求,完善的篮球比赛计时系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。随着电子技术的产业结构调整,生产工艺的飞速发展和篮球的广泛推广,市场对篮球计分器的需求也越来越大。本设计用AT89C52单片机为核心,包括复位模块,按键模块,显示模块等。单片机控制的两组数码管中,一组是用来显示赛事倒计时的时间,令一组来显示两球队的比分情况。另外在硬件完成后在Keil软件用C语言进行编程,对单片机进行程序的烧录,最后测试功能的完成。具有计分准确,体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点。2系统设计基本要求与方案论证2.1系统设计基本要求(1)记录整个赛程的比赛时间,并修改比赛时间;(2)随时刷新甲、乙两队在整个过程中的比分;(3)中场交换比赛场地时,交换甲、乙两队比分;(4)比赛结束时,发出报警声。2.2系统方案论证2.2.1 以单片机作为整个系统的核心采用单片机进行设计,能使许多繁琐的系统电路更简单、功能更齐全的良好效果,这样不但可以降低整个设计的复杂性和成本,而且也提高了整个系统的稳定性。由于本系统结构简单,用51单片机就足够实现其功能而且主要用定时器,因此本系统采用51单片机来实现。由于本设计需要亮度比较的大的显示因此以七段数码管作为显示器件,为了节约I/O采用动态扫描的方式。本系统需要人机互动,因此需要键盘。在选择键盘时由于单片机的I/O充足,在设计时为了方便选用独立式键盘。在设计报警部分,由于只要简单的发声器件因此蜂鸣器就足以够本系统的使用。2.2.2 采用模拟和数字混合电路来实现采用拟和数字混合电路,例如门电路、触发器、555定时器、集成运算法器等元器件也可以完成此系统的设计。但是其实现的硬件电路也会相当的复杂,尤其对于缺乏硬件电路实践经验的开发人员来说,其实现起来是相当困难的。在设计时显示部分可以使用液晶模块或者七段数码管但其硬件实现都比较复杂。键盘部分用编码键盘可以简单一些,但其价格比较昂贵。但同时使用其他的键盘如独立式键盘、矩阵式键盘,但会增加硬件的复杂性。报警部分的设计相对来说还是比较容易实现。2.2.3 系统的总体方案通过对方案一与方案二比较容易看出:方案一更适合我们的实际要求,而且可以缩短我们的开发周期并且使系统变得简单、易于实现。利用AT89C52单片机为核心,包括复位模块,按键模块,显示模块等。单片机控制的两组四位一体的数码管中,一组是用来显示赛事倒计时的时间,例如0099分的显示,同时根据不同的比赛可以设置不同的倒计时时间,另一组来显示甲乙两球队的比分情况,通过按键根据比赛的实时情况进行加分减分。即通过按键控制倒计时的设计及甲乙两队的比分情况。3系统的总体设计该系统硬件电路包括:单片机AT89C52,时钟电路、复位电路、电源电路、按键控制电路、计分电路、计时电路、报警电路。本设计是采用单片机AT89C52作为本设计的核心元件。利用7段共阴LED作为显示器件。在此设计中共接入了2组四位一体的数码管,其中1组用于记录AB队的分数,每队2个LED显示器显示范围可达到0-99分,足够满足赛程需要,另外一组LED显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。其次,为了配合计时器和计分器校正调整时间和比分,我特定在本计中设立了11个按键,其中8个用于比赛分数设置与调整,当比赛队A队得1分时,按下A+1键;得2分时,按下A+2键;得3分时,按下A÷3键;当加分出现错误时,可以按A-I键减1分,可以达到调整分数的作用;依照同样的方法可以记录B队的得分。3.1 系统硬件设计整个硬件系统主要包括单片机电路,电源电路,复位电路,数码管显示电路,报警电路,键盘电路组成。单片机主要是利用AT89C52,复位电路是利用12M的晶振产生时钟频率,在键盘部分是通过单片机检测I/O口电平的变化来判断哪个按键有按下。其硬件系统框图如图3.1所示。图3.1篮球赛计分器的硬件结构框图3.1.1 时钟以及复位电路时钟电路:为整个系统的工作提供一个基准时钟,本设计使用12MHZ的晶振作为时钟源。电容Cl,C2的作用是引起时钟的起振。复位电路:采用上电复位,复位使单片机重新执行程序,恢复寄存器的默认值加。其原理图如下:3.1.2 键盘部分键盘电路如图3.3所示,主要用于调节人机接口关系,实现对参数。单片机通过检测I/O口电平的变化来判断哪个按键有按下,当没有按键按下时,1/。被上拉为高电平,有按键按下时被强制拉为低电平。图3.3键盘电路3.1.3 报警部分报警电路如下图3.4,通过报警电路给人们以警告信息。由于单片机的I/O口驱动能力有限,在这里用了一个PNP的晶体管起电流放大作用驱动蜂鸣器工作。电阻限流作用,防止晶体管因电流而发热烧坏。图3.4报警电路3.1.4 显示部分显示部分采用数码管的动态扫描方式,数码管采用共阴极的。PO发送段码,P2发送位码来控制数码管的选通。使每个数码管轮回点亮,由于人的视觉停留效应在适当的时间人们会认为所有的数码管是点亮的。计分部分:各使用两个数码管来计量两队的分数,分数变化的控制通过按键来控制。计数范围为00-99。定时部分:各使用两个数码管来计量比赛时间,并采用倒计时的计数方式。其原理图如图3.5所示:图3.5显示部分3.2 系统软件设计软件部分要求实现的功能有:开始时所有显示屏都显示0;有预置比赛时间的功能;具有AB两队分别计分的功能;有鸣笛警示功能;只有当预置时间后,并按开始按钮,计时器才能开始倒计时,只有当开始计时后,AB两队才能进行加一分、加二分,减一分;当比赛暂停时,计时显示屏停止倒计时;当交换比赛场地时,按交换键,甲乙两队的比分交换;当倒计时时间为零时,蜂鸣器自动鸣笛报警。3.2.1 定时器子程序51单片机内部有两个16位可编程的定时器/计数器,分别称为定时器/计数器O和定时器/计数器1,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。定时/计数器的核心是的16位加法计数器,定时器TO的加法计数器用特殊功能寄存器TH0、TLO表示,THO表示加法计数器的高8位,TLO表示加法计数器的低8位。THl和TLl则分别表示定时/计数器Tl的高8位和低8位。它们均是8位寄存器,在特殊功能寄存器中占地址8AH-8DH。它们用于存放定时或计数的初始值。此外,内部还有一个8位的工作方式寄存器TMOD和一个8位的控制寄存器TCON,用于选择和控制定时/计数器的工作。这些寄存器可根据需要由程序读写。当然16位加法计数器的输入端每输入一个脉冲,16位加法计数器的值自动加1,当计数器的计数值超过加法计数器字长所能表示的二进制数的范围而向第17位进位,即计数溢出时,置位定时中断请求标志,向CPU申请中断。(I)TMOD用于控制TO和Tl的工作方式,其格式如表3.1所示:表3.1方式控制寄存器TMOD位D7D6D5D4D3D2DlDO位符号GATEC/TMlMOGATEC/TMlMO门控开关计数/定时方式选择门控开关计数/定时方式选择Tl方式字段TO方式字段Ml,MO:工作方式控制位,可构成表3.2所示四种工作方式:表3.2方式控制寄存器TMOD的工作方式MlMO工作方式说明00013位定时器;01116位计数器;102可自动再装载的8位计数器;113TO分成两个独立的8位计数器C/T:计数工作方式/定时工作方式选择位。置O时,设置为定时工作方式;置1时,设置为计数工作方式。GATE:门控位,用以决定是由软件还是硬件启动/停止计数。GATE=O,INTO/INTI被封锁,只要用软件对TRO(或TRI)置“1”就启动了定时器;GATA=I时,定时器/计数器的计数受外部引脚输入电平的控制。TMOD的所有位在复位后清OoTMOD不能位寻址,只能按字节操作设置工作方式。定时/计数控制寄存器TCONTFl,TRI,TFO和TRO位用于定时器/计数器;IEl,ITbIEO和ITO位用于中断系统。其格式如表3.3所示:表3.3控制寄存器TCON位D7D6D5D4D3D2DlDO位符号TFlTRlTFOTROIElITlIEOITO各位定义如下:TFO:定时器0溢出标志。其功能及操作情况同TF1。TRO:定时器0运行控制位。其功能及操作情况同TR1。在本系统的设计中主要使用定时器0的16位的定时模式,也就是工作模式1。程序设计的子框图如图3.6所示:图3.6程序设计C源程序代码如下:voidTimer_Inti(void)定时器O初始化程序TMOD=OXOi;设置工作方式1THO=(65536-50000)/256;高位初始值TLO=(65536-50000)%256;低位初始值ETO=I;开定时器0中断EA=I;开总中断TRO=I;启动定时器0voidTimerISR()interrupt1定时器0中断服务程序THO=(65536-50000)/256;重新赋初始值TLO=(65536-50000)%256;/if(count+20)定时IS基准(sec+;定时时间到,SeC变量加1,CoUnt变量清零count=0;3.2.2 键盘扫描子程序键盘采用独立式键盘,按键是一种机械弹性开关,当键按下时闭合,松开时断开。因为有机械的接触,在触点闭合或断开的瞬间会出现电压抖动。为了避免键输入错误,必须进行键抖动的处理。去抖动由硬件和软件两种方法:硬件方法就是在键盘中附加去抖动电路消除抖动,而软件方法则是采用时间延迟以消除抖动。其流程图如图3.7所示:图3.7键盘扫描部分流程图子程序如下所示:voidKey_Scan(void)键盘扫描子函数(if(key-0)是否有按键按下(Delay(IO);延时去抖If(key-0)再次检测是否有按键按下(While(Rey=O);等待按键释放)3.2.3 显示子程序显示部分采用共阴极的数码管动态扫描方式,子程序的设计框图如图3.8下所示:图3.8显示子程序的设计子程序代码示例如下:unsignedcharcodeDSYCODE口二段码0xc0,0xf9,0xa4,OxbO,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,Oxff);unsignedcharcodeBIT_CODE=0xfe,Oxfd,Oxfb,0xf7,Oxef,Oxdf,Oxbf,0x7f;位码voiddisplay()显示子函数(unsignedchari;while(l)(for(i=0;i<8;i+)(PO=DSY_CODEi;循环扫面P2=BIT_CODEi;Delayms(2);延时3.2.4 蜂鸣器报警子程序蜂鸣器采用一定频率的脉冲来驱动其发声,子程序框图如图3.9所示:(开始)C结束)图3.9蜂鸣器报警子程序流程图程序代码如下:voidbeep(unsignedchart)蜂鸣器子函数(uchari;for(i=0;i<100;i+)(BEEP="BEEP;高低电平取反DelayMS(t);延时BEEP=0;关闭蜂鸣器4系统测试与分析4.1 系统测试4.1.1 硬件测试(1)经过测量,电源电压达到标准的5V;(2)用万用表测试,所有的电路都通了;(3)用示波器检查晶振,看到示波器上显示标准的正弦波。4.1.2 功能测试(1)当一节比赛完成时,蜂鸣器没有报警,后经修改程序,达到了当倒计时为O时方波驱动蜂鸣器开始报警,起到了提示的作用,完成了预期的目标。(2)通过按键,完成了甲乙两队的比分刷新与暂停的功能当进行赛事计分时,A,B两队可以分别加一分,加两分,进行加分,当需要扣分时,按减分键进行减分,并当交换场地时,能交换A,B两队的比分。较好的完成了既定的加分减分功能。4.2 系统分析通过硬件测试和软件调试,本设计较好的完成了应有的指标和任务。实现了单片机为核心主控外围电路的想法,各个电路模块在程序的控制下,基本实现了应有的功能。5小结本次设计采用了较少的元件,通过巧妙的电路设计,充分利用硬件资源,以较低的成本实现篮球计分器的计时和显示A/B队的分数,并能及时进行加分,减分,鸣笛警示等功能。并且具有成本低廉、性能稳定、高准确度显示、操作方便且易携带等特点。广泛适合各类学校和小团体作为赛程计分。通过此次的毕业设计,提高了对本专业各个学科综合知识的实际运用能力,提高了自己实际动手能力,掌握了整个硬件开发流程和步骤以及调试方法,同时也提高了自身对产品开发的严谨性、系统性、科学性。通过理论与实际的相结合,进一步深入的体会到一种学习的方法,特别是对电子设计方面。首先,要明确总体的设计方案与方法;其次,对各个部分进行设计与改进;最后,将各个部分整合到一起进行比较、观察。由于时间的限制,篮球积分器总的系统还存在一些不足之处,需要进一步完善,例如数码管的驱动问题,当时就是没有仔细考虑数码管的亮度问题,节省原件,就直接用单片机控制了。其它的也可以进行功能扩展。参考文献1郭天祥主编.新概念51单片机C语言教程M.电子工业出版社,2009.1:2-152高吉祥主编.数字电子技术M.电子工业出版社,2009.7:25-323张旭主编.数码管动态扫描数据显示J.伊春职业学院机电工程系,2012.9:45-534高吉祥主编.模拟电子电路M.电子工业出版社,2009.7:34-405郭玉霞主编.MCS-51单片机原理与应用M.北京航空航天大学出版社,2010.1:56-786张义和主编.例说51单片机(C语言版)M.电子工业出版社,2008.4:IlOT327赵建领主编.51单片机开发与应用技术详解IM.电子工业出版社,2009:1072898刘娟主编.单片机C语言与PR0TUES仿真技能实训M.中国电力出版社,2010.8:78-1059周润景主编.Protues入门实用教程加.机械工业出版社,2007.9:140-17310谭浩强主编.C程序设计(第三版)ML清华大学出版社,2010.8:170-256致谢附录A原理图图A原理图BBBB附录BPCB双面板图B2顶层PCB附录C实物图图C实物图/延时(时间较短)延时(时间较长)数码管动态扫描显示函数A、B两队分值处理函数定时50ms中断函数预置时间函数时间处理函数鸣笛警示函数/B队4位计分数码管位控线附录D完整程序代码ftinclude<reg51.h>UdefineucharunsignedcharItdefineuintunsignedintvoiddelay(ucharx);voidclelayl(ucharx);voidJs_Jf_Scan(void);voidKey_if(void);voidJs_50ms(void);voidKey_Y(void);voidPtime(uchar);voidsound(void);sbitCL1=P20;sbitCL2=P21;sbitCL3=P2a2;sbitCL4=P23;sbitKL1=P24;sbitKL2=P25;sbitKL3=P26;sbitKL4=P27;sbitS1=P3;sbitS2=P2;sbitS3=P1;sbitS4=P1O;sbitYKl=Pr6;sbitYK2=P7;sbitmusic=Pl4;sbitKeyl=P30;sbitKey2=P3l;sbitKey3=P34;sbitKey4=P35;sbitInt_Key=P3.2;sbitStar=P36;sbitPuse=P37;A队4位计分数码管位控线驱动4位计时数码管位控线预置分钟的十位预置分钟的个位P1.4接喇叭,发声,鸣笛/B队加分键/B队减分键/A队加分键/A队减分键鸣笛键开始按钮停止按钮intms=0, mg=0, fs=O;int fg=0;m-0, f, fy, num=0;int g, s, b, q, sum=0;int gl, si, bl, ql, suml=0;voidmain(void)(TMOD=OxOI;THO=(65535-50000)/256;TLO=(65535-50000)%256;music=0;秒钟的十位、个位以及秒钟的变量说明分钟的十位、个位以及分钟的变量说明/B队定义个十百位/A队定义个十百位intLED_Num=OxOO,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,;/段码设置TO为工作方式1,作为16位计数器设置TO的高8位,并且TO的计数值为50InS设置TO的低8位初值喇叭不响EA=I;开放所有中断ETO=I;允许定时/计数器TO溢出中断EXO=I;允许外部中断0ITO=I;设置外部中断。为边沿触发方式(下降沿)while(1)无穷循环,程序一直运行tKey_Y();/预置场次比赛时间if(Star=O&&f!=O&&Puse!=O)按下“开始键”,设置好比赛时间,并且未按“停止”键时,比赛正式开始TRO=I;启动定时器T0,开始计时KeyJfO;开始计分else(TRO=0;比赛还未开始或比赛结束时间到,停止计时)JsJJScan();将相应的分数、时间同步进行显示延时去抖动/*设置场次比赛时间*/if(YKl=O)(delay(l);初始状态,分钟的十位为0延时去抖动fs=fs+l;分十位加1分fy=fs*10+fg;f=fy;求出预置时间的分钟值中间变量)if(YK2=0)初始状态,分钟的个位为0voidKeyY(void)delay(1);fg=fg+l;fy=fs*10+fg;f=fy;Js_Jf_Scan();)分个位加1分求出预置时间的分钟值中间变量*T0中断服务函数,每隔50ms产生一次中断*/voidJs50ms(void)interrupt1using1定时器TO中断,用工作寄存器组1(THO=(65535-50000)/256;定时器TO的高8位TLO=(65535-50000)%256;定时器TO的低8位num+;每50ms累加一次Ptime(num);调用时间处理函数)/*时间处理函数*/voidPtimc(uchartime)TRO=O;时间到,停止计时if(time=20)/如果为Is(50ms*20=ls)num=0;m+;每到Is,计时器累加1次ms=m10;秒的十位mg=m%10;秒的个位if(m-=60)如果为Imintm=0;秒钟置0mg=m%10;ms=m10;秒钟的个位置0秒钟的十位置0f;分钟开始在预设的比赛时间基础上倒计时fs=f10;分钟的十位fg=f%10;if(f=O)分钟的个位分钟数倒计时到0)/*数码管动态扫描显示*/voidJs_Jf_Scan(void)(ucharj;for(j=0;j<=5;j+)(KL4=0;PO=LED.Nmgl;delay(1);KL4=1;*将A队分数的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/KL3=0;PO=LEDNums1;de1ay(1);KL3=1;/*将A队分数的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/KL2=0;P0=LED_Numb1;de1ay(1);KL2=1;/*将A队分数的百位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/KLl=O;PO=LED_NumqlJdelay(I);KLl=I;/*将A队分数的千位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/CL4=0;P0=LED_Numg;delay(1);CL4=1;/*将B队分数的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/CL3=0;Po=LED_NumsRelay(I);CL3=1;/*将B队分数的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/CL2=0;PO=LED_NumbRelay(I);CL2=1;/*将B队分数的百位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/CLl=0;P0=LED_NumqJdelay(I);CL1=1;/*将B队分数的千位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/S4=0;P0=LED_Nummg;delay(1);S4=1;/*将秒钟的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/S3=0;P0=LED_Numms;delay(1);S3=1;/*将秒钟的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/S2=0;PO=LEDNUinfgBelay(I);52=1;/*将分钟的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/Sl=O;PO=LEDNumfs;delay(1);Sl=I;/*将分钟的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/*判断是哪个队加分或者减分*/voidKeyif(void)(if(Key1=0)(delay(l);sum=sum+l;/B队加1分)if(Key2=0&&sum>=l)(delay(l);sum=sum-l;/B队减1分)if(Key3=0)(delay(1);suml=suml+l;/A队加1分if(Key4=0&&suml>=l)(delay(l);SUml=Suml-I;/A队减1分)q=0;b=sum100;s=sum10-b*10;g=sum%10;ql=0;bl=suml100;sl=suml10-bl*10;gl=suml%10;)当按键按下时延时去抖动减分按键按下并且中得分不得少于1分延时去抖动当按键按下时延时去抖动减分按键按下并且中得分不得少于1分延时去抖动/A队分值的千位默认为0求出A队分值的百位求出A队分值的十位求出A队分值的个位/B队分值的千位默认为0求出B队分值的百位求出B队分值的十位求出B队分值的个位uchari, j;if(Int_key=0)(for(i=0;i<8;i+)(for(j=0;j<250;j+)(music二、music;delayl (1);)Js_Jf_Scan();)for(i=0;i<16;i+)(for(j=0;j<250;j+)(music=usic;delay(l);Js_Jf_Scan();)elsemusic=0;)喇叭不响/*鸣笛处理*/voidsound(void)interrupt0using0外部中断0(INTO),用工作寄存器组0判断鸣笛键是否按下,有按下就鸣笛控制一种发音的时间控制发音的频率,延时长,频率低,音低取反延时去抖动控制另一种发音的时间控制发音的频率,延时短,频率高,音高取反延时去抖动/*延时L8ms的子程序*/voiddelayl(ucharx)uchark;whiIe(x-)for(k=0;k<215;k+);延时长/*延时LomS的子程序*/voiddelay(ucharx)(uchark;whiIe(x一)for(k=0;k<120;k+);延时短