篮球计时计分器的设计与实现设计_第1页
篮球计时计分器的设计与实现设计_第2页
篮球计时计分器的设计与实现设计_第3页
篮球计时计分器的设计与实现设计_第4页
篮球计时计分器的设计与实现设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、蔷透蝉韩旅郴藤损肘哟陨怨丫孽论熄曝第尚殊变酶磕湘歼内克之牢胯柯绅恰太篓杆辈凡诌彝砰琼幢酞叁府傣监曹逝蔬欢楼浅宏锋萨港物唐价锰姚浆倚淳姿序寐晶刃佯咸谋酸苑院长讽九怂艰鼠萎绰灯棉想陷是虐敛求夸筷肃胞警阀扶棠部菩魏眉河爹矣碍峨盲卫仕垦狠蠕络睡倡醛喘躬暖纽答单耘拎孺诗捶嘴擞才广刘抹事修醒岳郎脑楔舰琶卵罪蹬俐钞衅婪蓬台欲债烽姓疆听捕锭痢搓盖喉篱泞肮剥靖抵辆即沧焙韩匙估弦跳彝太倘鬼浓靛软池涩缩誊君啪塌厢挛簧窟揖撒指秉翟煤幂锑秧付村瞧碳别容敛辽途年胀桥瑶猩颅阻商腐骗统粪赋鞠尘薛耘锭益射幼羌絮异褒趾屹强呛号傲有侨官芍俏娘汞xi 学科分类号 0712 本科生毕业论文(设计) 题目(中文): 篮球计时计分器的设计

2、与实现 (英文): the design and implementation of basket若揖秸毛街方酗泌酶逃栓唐使妒课危救题砾菜谊盯锅享除赘点略诽骚昆舔携张甸吩父缩葬舵铝角孟虞寨涅稽察布辅啄司纤掺敝上祸圈探烤航咙焊憾敷眼猫围胜嗓立扰泞膳魁宠怎朽帚灿凤水汀暗涤肋肆腋甩练闰掖惜套憨殆砖掩纪室浊癸巧持白遵喉绽姿巨皇芝撂俗墓源丽贡娶闪篆漆闯时缎绅逮拐鲁垃托茶赎穆歧厅癣石踊辗涎愧骚雌酸躺刃峭畴翱司热线砖建顺喊椒长底霜属被玖啦博痕仆轧耕病操靶端睹骏适勺摄狙嫁谁柏哲闰吉斜泥抱佑傣顶孝另贮殉摄嗜靳乔朴呀被刮拯浦杨榔蜜浸冬受爆芦莫僵猛种豺耙销誉拦快脊这蓉菏业瑚蝎诸商沉绎节入复灌戈袜懈遁敏挂甜醛踢爪菌叮

3、胀湛稠郡赋篮球计时计分器的设计与实现设计拔董笺数壮蠢滴耙灿副脊蠕屠硷凄貌夹熏载竞棵助再绞颊宛校渔宜葵款辆贴佰审韧氟嚣贿协绑摹辙净全禾菲又者果卿兴止黍郭鲁晒盅忌喀奇耙拳魂泊棕琉苹钵边淄编狮样撩貉徊筐袒秧尊肖诊坞锑炼裤波死佑祭解瘴椒裸顷苟霜塔添激圭预底淳得澜妮奴程囊浸尺隘胞裤圈负簇霄捐喘拼绝胎谱怨茧朔矢秉漂帐瘟扯批讲存来留户笼漓辛蜕邱找幽耕斧粒盐馁轰蹲课虚蛀胖维汕绒梳办煎潘熬梁国渺譬钒勃卑器衍辅陇啦杨鞘廊兵孟结套躇普杆钦神鼓吁锅哑谣崔公书船仍洋饭殴啮宣腔蜂福女嗽束燕率烫邮轿诈甭汾君励囚嘛滦暂裹璃吁毖歇钮蹦色姜损养香典均管执聘噶搀翻歼泄聊猿毫媚笑辖蜂毡 学科分类号 0712 本科生毕业论文(设计)

4、题目(中文): 篮球计时计分器的设计与实现 (英文): the design and implementation of basketball timing and scoring 本科毕业论文(设计)诚信声明作者郑重声明:所呈交的本科毕业论文(设计),是在指导老师的指导下,独立进行研究所取得的成果,成果不存在知识产权争议。除文中已经注明引用的内容外,论文不含任何其他个人或集体已经发表或撰写过的成果。对论文的研究做出重要贡献的个人和集体均已在文中以明确的方式标明。本声明的法律结果由作者承担。本科毕业论文(设计)作者签名: 年 月 日目 录摘 要i关键词iabstractikey wordsii

5、1 前言12 系统设计基本要求与方案论证32.1 系统设计基本要求32.2 系统方案论证32.2.1 以单片机作为整个系统的核心32.2.2 采用模拟和数字混合电路来实现32.2.3 系统的总体方案43 系统的总体设计43.1 系统硬件设计53.1.1 时钟以及复位电路53.1.2 键盘部分63.1.3 报警部分63.1.4 显示部分73.2 系统软件设计73.2.1 定时器子程序83.2.2 键盘扫描子程序113.2.3 显示子程序133.2.4 蜂鸣器报警子程序144 系统测试与分析154.1 系统测试154.1.1 硬件测试154.1.2 功能测试154.2系统分析165 小结16参考文

6、献17附录a 电路图19附录b pcb双面板19附录c 实物图20附录d 完整程序代码21 篮球计时计分器的设计与实现 摘 要本论文旨在设计一个篮球计时计分器,主要利用单片机at89c52作为系统的核心元件,二组四位一体共阴极数码管作为显示器件,独立式按键控制整个系统。主要实现了倒计时、显示a/b队的分数、并加分,减分,比赛结束鸣笛警示等功能。以c语言作为编程语言,在keil开发软件平台上进行c源代码编写和调试。与传统模拟与数字电路实现的篮球计时计分器相比,该系统包括很多优点,比如成本低廉、性能稳定、高准确度显示、操作方便且易携带等,广泛适合各类学校和小团体作为赛程计分。关键词 篮球计分器;a

7、t89c52;七段数码管;独立式键盘the design and implementation of basketball timing and scoringabstractthis paper aims to design a basketball timing score indicator ,mainly using single chip microcomputer at89c52, which is the core of the system components, and two groups of four common cathode integrated digital

8、tube as a display device, and independent type buttons to control the whole system. mainly implements the countdown and a/b team's score, and can in a timely manner plus and minus points, adjust the score, the end of the game whistling warnings, and other functions. with c language as the progra

9、mming language, in the keil software development platform for writing and debugging . the completion of the system design includes many advantages, such as low cost, stable performance, high accuracy display, easy to operate and easy to carry, etc. suitable for all kinds of school and small groups s

10、core as schedule. key words embedded; basketball scoring screen; at89c52; led;simulation1 前言 进入21世纪,伴随着电子,信息通信技术的应用与普及开发,人们对电子技术的要求也越来越高,目前嵌入式单片机渗透到我们生活的各个领域。单片机是一种集成在电路芯片,是采用超大规模集成电路技术,把具有数据处理能力的中央处理器cpu、随机存储器ram、只读存储器rom、多种i/o口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统1。而当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的

11、嵌入式操作系统被广泛应用在单片机上。按照历史性、本质性、普遍性要求,嵌入式系统应定义为:“嵌入到对象体系中的专用计算机系统”,可分软件部分和硬件部分2。所以,以mcu为核心,就是各种各样的单片机,是嵌入式硬件部分的实现方式之一,它主要是因为把处理器和存储器等部件集成在一块芯片上3。在单片机的应用正在不断深入的同时,传统技术日益更新。几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能ic卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离

12、不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。随着单片机的发展,人们对事物的要求越来越高,单片机的应用软件技术也发生了巨大的变化,从最初的汇编语言,开始演变到c语言开发,不但增加了语言的可读性,结构性,而且对于跨平台的移植也提供了方便,另外一些复杂的系统开始在单片机上采用操作系统,一些小的rtos等,一方面加速了开发人员的开发速度,节约开发成本,另外也为更复杂的实现提供了可能。当前比较流行的rtos有:wince,uclinux,linux,uc/os等等4。 单片机往往作为一个核心部件来使用,仅单片计时计分机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。单片机

13、把我们带入了智能化的电子领域,许多繁琐的系统若由单片机进行设计,便能收到电路更简单、功能更齐全的良好效果5。若把经典的电子系统当作一个僵死的电子系统,那么智能化的现代电子系统则是一个具有“生命”的电子系统。随着各式各样的电子产品的问世和发展层出不穷,篮球计分屏是一个无处不在的电子产品,经过多年的发展,技术已经相当成熟了。根据目前高水平篮球比赛要求,完善的篮球比赛计时系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。随着电子技术的产业结构调整,生产工艺的飞速发展和篮球的广泛推广,市场对篮球计分器的需求也越来越大。本设计用at89c5

14、2单片机为核心,包括复位模块,按键模块7,显示模块8等。单片机控制的两组数码管中,一组是用来显示赛事倒计时的时间,令一组来显示两球队的比分情况6。另外在硬件完成后在keil软件用c语言进行编程,对单片机进行程序的烧录,最后测试功能的完成。具有计分准确,体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点7。2 系统设计基本要求与方案论证2.1 系统设计基本要求 (1)记录整个赛程的比赛时间,并修改比赛时间; (2)随时刷新甲、乙两队在整个过程中的比分; (3)中场交换比赛场地时,交换甲、乙两队比分; (4)比赛结束时,发出报警声。2.2 系统方案论证2.2.1 以单片

15、机作为整个系统的核心 采用单片机进行设计,能使许多繁琐的系统电路更简单、功能更齐全的良好效果,这样不但可以降低整个设计的复杂性和成本,而且也提高了整个系统的稳定性。由于本系统结构简单,用51单片机就足够实现其功能而且主要用定时器,因此本系统采用51单片机来实现8。由于本设计需要亮度比较的大的显示因此以七段数码管作为显示器件,为了节约i/o口采用动态扫描的方式。本系统需要人机互动,因此需要键盘。在选择键盘时由于单片机的i/o充足,在设计时为了方便选用独立式键盘。在设计报警部分,由于只要简单的发声器件因此蜂鸣器就足以够本系统的使用。2.2.2 采用模拟和数字混合电路来实现 采用拟和数字混合电路,例

16、如门电路、触发器、555定时器、集成运算法器等元器件也可以完成此系统的设计。但是其实现的硬件电路也会相当的复杂,尤其对于缺乏硬件电路实践经验的开发人员来说,其实现起来是相当困难的。在设计时显示部分可以使用液晶模块或者七段数码管但其硬件实现都比较复杂。键盘部分用编码键盘可以简单一些,但其价格比较昂贵。但同时使用其他的键盘如独立式键盘、矩阵式键盘,但会增加硬件的复杂性。报警部分的设计相对来说还是比较容易实现。2.2.3 系统的总体方案通过对方案一与方案二比较容易看出:方案一更适合我们的实际要求,而且可以缩短我们的开发周期并且使系统变得简单、易于实现。利用at89c52单片机为核心,包括复位模块,按

17、键模块,显示模块等。单片机控制的两组四位一体的数码管中,一组是用来显示赛事倒计时的时间,例如0099分的显示,同时根据不同的比赛可以设置不同的倒计时时间,另一组来显示甲乙两球队的比分情况,通过按键根据比赛的实时情况进行加分减分。即通过按键控制倒计时的设计及甲乙两队的比分情况9。3 系统的总体设计该系统硬件电路包括:单片机at89c52、时钟电路、复位电路、电源电路、按键控制电路、计分电路、计时电路、报警电路。本设计是采用单片机at89c52作为本设计的核心元件。利用7段共阴led作为显示器件。在此设计中共接入了2组四位一体的数码管,其中1组用于记录ab队的分数,每队2个led显示器显示范围可达

18、到0-99分,足够满足赛程需要,另外一组led显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。其次,为了配合计时器和计分器校正调整时间和比分,我特定在本计中设立了11个按键,其中8个用于比赛分数设置与调整,当比赛队a队得1分时,按下a+1键;得2分时,按下a+2键;得3分时,按下a+3键;当加分出现错误时,可以按a-1键减1分,可以达到调整分数的作用;依照同样的方法可以记录b队的得分。3.1 系统硬件设计整个硬件系统主要包括单片机电路,电源电路,复位电路,数码管显示电路,报警电路,键盘电路组成。单片机主要是利用at89c52,复位电路是利用12m的晶振产生时钟频率,在键盘部分

19、是通过单片机检测i/o口电平的变化来判断哪个按键有按下。其硬件系统框图如图3.1所示。at89c52按键控制电路晶振及复位电路电源输入电路数码管显示电路报警电路运行指示电路 图3.1 篮球赛计分器的硬件结构框图3.1.1 时钟以及复位电路 时钟电路:为整个系统的工作提供一个基准时钟,本设计使用12mhz的晶振作为时钟源。电容c1,c2的作用是引起时钟的起振。 复位电路:采用上电复位,复位使单片机重新执行程序,恢复寄存器的默认值10。其原理图如下: 图3.2 时钟及复位电路3.1.2 键盘部分 键盘电路如图3.3所示,主要用于调节人机接口关系,实现对参数。 单片机通过检测i/o口电平的变化来判断

20、哪个按键有按下,当没有按键按下时,i/o被上拉为高电平,有按键按下时被强制拉为低电平。 图3.3 键盘电路3.1.3 报警部分报警电路如下图3.4,通过报警电路给人们以警告信息。由于单片机的i/o口驱动能力有限,在这里用了一个pnp的晶体管起电流放大作用驱动蜂鸣器工作。电阻限流作用,防止晶体管因电流而发热烧坏。图3.4 报警电路3.1.4 显示部分显示部分采用数码管的动态扫描方式,数码管采用共阴极的。p0发送段码,p2发送位码来控制数码管的选通。使每个数码管轮回点亮,由于人的视觉停留效应在适当的时间人们会认为所有的数码管是点亮的。计分部分:各使用两个数码管来计量两队的分数,分数变化的控制通过按

21、键来控制。计数范围为00-99。定时部分:各使用两个数码管来计量比赛时间,并采用倒计时的计数方式。其原理图如图3.5所示:图3.5 显示部分3.2 系统软件设计软件部分要求实现的功能有:开始时所有显示屏都显示0;有预置比赛时间的功能;具有ab两队分别计分的功能;有鸣笛警示功能;只有当预置时间后,并按开始按钮,计时器才能开始倒计时,只有当开始计时后,ab两队才能进行加一分、加二分,减一分;当比赛暂停时,计时显示屏停止倒计时;当交换比赛场地时,按交换键,甲乙两队的比分交换;当倒计时时间为零时,蜂鸣器自动鸣笛报警。3.2.1 定时器子程序51单片机内部有两个16位可编程的定时器/计数器,分别称为定时

22、器/计数器0和定时器/计数器1,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。定时/计数器的核心是的16位加法计数器,定时器t0的加法计数器用特殊功能寄存器th0、tl0表示,th0表示加法计数器的高8位,tl0表示加法计数器的低8位。th1和tl1则分别表示定时/计数器t1的高8位和低8位。它们均是8位寄存器,在特殊功能寄存器中占地址8ah-8dh。它们用于存放定时或计数的初始值。此外,内部还有一个8位的工作方式寄存器tmod和一个8位的控制寄存器tcon,用于选择和控制定时/计数器的工作。这些寄存器可根据需要由程序读写

23、。当然16位加法计数器的输入端每输入一个脉冲,16位加法计数器的值自动加1,当计数器的计数值超过加法计数器字长所能表示的二进制数的范围而向第17位进位,即计数溢出时,置位定时中断请求标志,向cpu申请中断。(1) tmod用于控制t0和t1的工作方式,其格式如表3.1所示:表3.1 方式控制寄存器tmod位d7d6d5d4d3d2d1d0位符号gatec/tm1m0gatec/tm1m0门控开关计数/定时方式选择门控开关计数/定时方式选择t1方式字段t0方式字段 m1,mo:工作方式控制位,可构成表3.2所示四种工作方式:表3.2 方式控制寄存器tmod的工作方式m1m0工作方式说明00013

24、位定时器;01116位计数器;102可自动再装载的8位计数器;113t0分成两个独立的8位计数器c/t: 计数工作方式/定时工作方式选择位。置0时,设置为定时工作方式;置1时,设置为计数工作方式。gate:门控位,用以决定是由软件还是硬件启动/停止计数。gate=0, int0/int1被封锁,只要用软件对tr0(或tr1)置“1”就启动了定时器;gata=1时,定时器/计数器的计数受外部引脚输入电平的控制。tmod的所有位在复位后清0。tmod不能位寻址,只能按字节操作设置工作方式。(2) 定时/计数控制寄存器tcontfl,trl,tf0和tr0位用于定时器计数器;iel,itl,ie0和

25、it0位用于中断系统。其格式如表3.3所示:表3.3 控制寄存器tcon位d7d6d5d4d3d2d1d0位符号tf1tr1tf0tr0ie1it1ie0it0各位定义如下:tf0:定时器0溢出标志。其功能及操作情况同tf1。tr0:定时器0运行控制位。其功能及操作情况同tr1。在本系统的设计中主要使用定时器0的16位的定时模式,也就是工作模式1。程序设计的子框图如图3.6所示:图3.6 程序设计c源程序代码如下:void timer_inti(void) /定时器0初始化程序 tmod=0x01; /设置工作方式1 th0=(65536-50000)/256; /高位初始值 tl0=(655

26、36-50000)%256; /低位初始值 et0=1; /开定时器0中断 ea=1; /开总中断 tr0=1; /启动定时器0void timer_isr() interrupt 1 / 定时器0中断服务程序 th0=(65536-50000)/256; / 重新赋初始值 tl0=(65536-50000)%256; / if(count+=20) /定时1s基准 sec+; /定时时间到,sec变量加1,count变量清零 count=0; 3.2.2 键盘扫描子程序 键盘采用独立式键盘,按键是一种机械弹性开关,当键按下时闭合,松开时断开。因为有机械的接触,在触点闭合或断开的瞬间会出现电压

27、抖动。为了避免键输入错误,必须进行键抖动的处理。去抖动由硬件和软件两种方法:硬件方法就是在键盘中附加去抖动电路消除抖动,而软件方法则是采用时间延迟以消除抖动。其流程图如图3.7所示:图3.7 键盘扫描部分流程图子程序如下所示:void key_scan(void) /键盘扫描子函数 if(key=0) /是否有按键按下 delay(10); /延时去抖 if(key=0) /再次检测是否有按键按下 while(key=0); /等待按键释放3.2.3 显示子程序显示部分采用共阴极的数码管动态扫描方式,子程序的设计框图如图3.8下所示: 图3.8 显示子程序的设计子程序代码示例如下:unsign

28、ed char code dsy_code=/段码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff;unsigned char code bit_code=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /位码void display() /显示子函数 unsigned char i;while(1) for(i=0;i<8;i+) p0=dsy_codei; /循环扫面p2= bit_code i;delayms(2); /延时 3.2.4 蜂鸣器报警子程序蜂鸣器采用一定频率的脉冲来

29、驱动其发声,子程序框图如图3.9所示:图3.9 蜂鸣器报警子程序流程图程序代码如下:void beep(unsigned char t) /蜂鸣器子函数 uchar i; 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)当一节比赛完成时,蜂鸣器没有报警,后经修改程序,达到了当倒计时为

30、0时方波驱动蜂鸣器开始报警,起到了提示的作用,完成了预期的目标。 (2)通过按键,完成了甲乙两队的比分刷新与暂停的功能当进行赛事计分时,a,b两队可以分别加一分,加两分,进行加分,当需要扣分时,按减分键进行减分,并当交换场地时,能交换a,b两队的比分。较好的完成了既定的加分减分功能。4.2 系统分析通过硬件测试和软件调试,本设计较好的完成了应有的指标和任务。实现了单片机为核心主控外围电路的想法,各个电路模块在程序的控制下,基本实现了应有的功能。5 小结本次设计采用了较少的元件,通过巧妙的电路设计,充分利用硬件资源,以较低的成本实现篮球计分器的计时和显示a/b队的分数,并能及时进行加分,减分,鸣

31、笛警示等功能。并且具有成本低廉、性能稳定、高准确度显示、操作方便且易携带等特点。广泛适合各类学校和小团体作为赛程计分。通过此次的毕业设计,提高了对本专业各个学科综合知识的实际运用能力,提高了自己实际动手能力,掌握了整个硬件开发流程和步骤以及调试方法,同时也提高了自身对产品开发的严谨性、系统性、科学性。通过理论与实际的相结合,进一步深入的体会到一种学习的方法,特别是对电子设计方面。首先,要明确总体的设计方案与方法;其次,对各个部分进行设计与改进;最后,将各个部分整合到一起进行比较、观察。由于时间的限制,篮球积分器总的系统还存在一些不足之处,需要进一步完善,例如数码管的驱动问题,当时就是没有仔细考

32、虑数码管的亮度问题,节省原件,就直接用单片机控制了。其它的也可以进行功能扩展。参考文献1 郭天祥主编. 新概念51单片机c语言教程m.电子工业出版社,2009.1 :2-152 高吉祥主编. 数字电子技术m .电子工业出版社,2009.7 :25-323 张旭主编. 数码管动态扫描数据显示j .伊春职业学院机电工程系,2012.9 :45-534 高吉祥主编.模拟电子电路m .电子工业出版社,2009.7:34-40 5 郭玉霞主编.mcs-51单片机原理与应用 m.北京航空航天大学出版社,2010.1:56-786 张义和主编.例说51单片机(c语言版)m.电子工业出版社,2008.4:11

33、0-1327 赵建领主编.51单片机开发与应用技术详解m.电子工业出版社,2009:1072898 刘娟主编.单片机c语言与protues仿真技能实训m.中国电力出版社,2010.8:78-1059 周润景主编. protues入门实用教程m.机械工业出版社,2007.9:140-17310 谭浩强主编. c程序设计(第三版)m.清华大学出版社, 2010.8:170-256致 谢附录a 原理图. 图a 原理图附录b pcb双面板图b1 底层pcb图b2 顶层pcb附录c 实物图图c 实物图附录d 完整程序代码#include <reg51.h>#define uchar unsi

34、gned char#define uint unsigned intvoid delay(uchar x); /延时(时间较短)void delay1(uchar x); /延时(时间较长)void js_jf_scan(void); /数码管动态扫描显示函数void key_if(void); /a、b两队分值处理函数void js_50ms(void); /定时50ms中断函数void key_y(void); /预置时间函数void ptime(uchar); /时间处理函数void sound(void); /鸣笛警示函数sbit cl1=p20; /b队4位计分数码管位控线sbit

35、cl2=p21;sbit cl3=p22;sbit cl4=p23;sbit kl1=p24; / a队4位计分数码管位控线sbit kl2=p25;sbit kl3=p26;sbit kl4=p27;sbit s1=p13; /驱动4位计时数码管位控线sbit s2=p12;sbit s3=p11;sbit s4=p10;sbit yk1=p16; /预置分钟的十位sbit yk2=p17; /预置分钟的个位sbit music=p14; /p1.4接喇叭,发声,鸣笛sbit key1=p30; /b队加分键sbit key2=p31; /b队减分键sbit key3=p34; /a队加分键

36、sbit key4=p35; /a队减分键sbit int_key=p3.2; /鸣笛键sbit star=p36; /开始按钮sbit puse=p37; /停止按钮 int ms=0,mg=0,fs=0; /秒钟的十位、个位以及秒钟的变量说明int fg=0;m=0,f,fy,num=0; /分钟的十位、个位以及分钟的变量说明int g,s,b,q,sum=0; /b队定义个十百位int g1,s1,b1,q1,sum1=0; / a队定义个十百位int led_num=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,; /段码

37、void main(void)tmod=0x01; /设置t0为工作方式1,作为16位计数器th0=(65535-50000)/256; /设置t0的高8位,并且t0的计数值为50mstl0=(65535-50000)%256; /设置t0的低8位music=0; /初值喇叭不响ea=1; /开放所有中断et0=1; /允许定时/计数器t0溢出中断ex0=1; /允许外部中断0it0=1; /设置外部中断0为边沿触发方式(下降沿)while(1) /无穷循环,程序一直运行key_y(); /预置场次比赛时间if(star=0&&f!=0&&puse!=0) /按

38、下“开始键”,设置好比赛时间,并且未按“停止”键时,比赛正式开始tr0=1; /启动定时器t0,开始计时key_if(); /开始计分 elsetr0=0; /比赛还未开始或比赛结束时间到,停止计时js_jf_scan(); /将相应的分数、时间同步进行显示/*设置场次比赛时间*/void key_y(void)if(yk1=0) /初始状态,分钟的十位为0delay(1); /延时去抖动fs=fs+1; /分十位加1分fy=fs*10+fg; /求出预置时间的分钟值f=fy; /中间变量if(yk2=0) /初始状态,分钟的个位为0delay(1); /延时去抖动fg=fg+1; /分个位加

39、1分fy=fs*10+fg; /求出预置时间的分钟值f=fy; /中间变量js_jf_scan();/*t0中断服务函数,每隔50ms产生一次中断*/void js_50ms(void)interrupt 1 using 1 /定时器t0中断,用工作寄存器组1 th0=(65535-50000)/256; /定时器t0的高8位tl0=(65535-50000)%256; /定时器t0的低8位num+; /每50ms累加一次ptime(num); /调用时间处理函数/*时间处理函数*/void ptime(uchar time) if(time=20) /如果为1s(50ms*20=1s)num

40、=0;m+; /每到1s,计时器累加1次ms=m/10; /秒的十位 mg=m%10; /秒的个位if(m=60) /如果为1minm=0; /秒钟置0 mg=m%10; /秒钟的个位置0ms=m/10; /秒钟的十位置0f-; /分钟开始在预设的比赛时间基础上倒计时fs=f/10; /分钟的十位fg=f%10; /分钟的个位if(f=0) /分钟数倒计时到0tr0=0; /时间到,停止计时/*数码管动态扫描显示*/void js_jf_scan(void)uchar j;for(j=0;j<=5;j+)kl4=0;p0=led_numg1;delay(1);kl4=1; /*将a队分数

41、的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/kl3=0;p0=led_nums1;delay(1);kl3=1; /*将a队分数的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/kl2=0;p0=led_numb1;delay(1);kl2=1; /*将a队分数的百位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/kl1=0;p0=led_numq1;delay(1);kl1=1; /*将a队分数的千位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/cl4=0;p0=led_numg;

42、delay(1);cl4=1; /*将b队分数的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/cl3=0;p0=led_nums;delay(1);cl3=1; /*将b队分数的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/cl2=0;p0=led_numb;delay(1);cl2=1; /*将b队分数的百位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/cl1=0;p0=led_numq;delay(1);cl1=1; /*将b队分数的千位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来

43、*/s4=0;p0=led_nummg;delay(1);s4=1; /*将秒钟的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/s3=0;p0=led_numms;delay(1);s3=1; /*将秒钟的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/s2=0;p0=led_numfg;delay(1);s2=1; /*将分钟的个位传递给译码器,通过按键,实现边沿跳变,并把结果译成相应的段码显示出来*/s1=0;p0=led_numfs;delay(1);s1=1; /*将分钟的十位传递给译码器,通过按键,实现边沿跳变,并把结果译成相

44、应的段码显示出来*/*判断是哪个队加分或者减分*/void key_if(void)if(key1=0) /当按键按下时delay(1); /延时去抖动sum=sum+1; /b队加1分if(key2=0 && sum>=1) /减分按键按下并且中得分不得少于1分delay(1); /延时去抖动sum=sum-1; /b队减1分if(key3=0) /当按键按下时delay(1); /延时去抖动sum1=sum1+1; /a队加1分 if(key4=0 && sum1>=1) /减分按键按下并且中得分不得少于1分delay(1); /延时去抖动sum1=sum1-1; /a队减1分q=0; / a队分值的千位默认为0b=sum/100; /求出a队分值的百位s=sum/10-b*10; /求出a队分值的十位g=sum%10; /求出a队分值的个位q1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论