




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、四川师范大学成都学院本科毕业设计基于单片机的篮球计时计分器的设计前言 随着社会以及经济的进步,简单的衣食住行已经不能满足人们的物质精神生活需要。于是体育运动也得到了空前的发展,篮球是体育运动中的热门项目,也越来越受到人们的关注与喜爱。裁判、教练、球员、以及观众四者关系的协调,已经成为国际篮联急需解决的问题之一。篮球计时计分系统用于比赛实时数据的监控,它在现代篮球计时计分系统中发挥着重要的作用。传统的篮球计时计分过程都是有人工完成,计时精度不能达到要求,而计分完全有人工通过翻计分薄的方法来计分,不但浪费大量的人力。还导致计分的实时性差,不能把比赛的最新动态呈现给观众。由于比赛用的计分薄多以纸或者
2、塑料薄膜制成,对环境造成巨大的压力。为了避免以上的现象发生,而研制的基于at89单片机的篮球计时计分器,可对nba 等多国篮球联赛实行计时计分。 一、 at89单片机介绍(一)at89单片机总体介绍at89c52 atmel公司生产的低电压,高性能cmos 8位单片机片内含8k的可反复擦写的只读程序存储器(eeprom)和256b 。的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,与标准mcs-51指令系统及8052 产品引脚兼容,片内置通用8位中央处理器cpu 和flash存储单元,功能强大at89c52单片适用于许多较为复杂控制应用场合。 (二)at8
3、9c52单片机的基本性能参数与mcs-51产品指令和引脚完全兼容。8字节可重擦写flash闪速存储器、1000 次擦写周期、全静态操作:0hz-24mhz、三级加密程序存储器、256字节内部ram、32个可编程i/0口线、3个16 位定时计数器、8个中断源、可编程串行uart通道、低功耗空闲和掉电模式。at89c52的内部框图及引脚图如图1和图2。 图1 at89c52内部框图 图2 at89c52引脚图(三) at89c52单片机的基本功能模块1.功能引脚说明vcc:电源电压gnd:地p0:p0口是一组8位漏极开路型双向1/o 口,也即地址/数据总线复用口。作为输出口用时每位能吸收电流的方式
4、驱动8个ttl 逻辑门电路,对端口p0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部 上拉电阻。在flash由编程时,p0口接收指令字节,而在程序校验时,输出指令字 节,校验时,要求外接上拉电阻。p1口:pi 是一个带内部上拉电阻的8位双向i/o口,pl的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻某个引脚被外部信号拉低时会输出一个电流iil与at89c51不同之处是,pl.0 和p1.1还
5、可分别作为定时/计数器2 的外部计数输入(pl.0/t2 )和输入(p1.1/t2ex) 。 p2口: 是一个带有内部上拉电阻的8位双向i/o口,p2的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑电路。对端口p2写“l,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(llt )。在访问外部程序存储器或16位地址的外部数据存储器(例如执行movxdptr 指令)时,p2送出高8 位地址数据。在访问8位地址的外部数据存储器、如执行movxri指令)时,p2口输出p2锁存器的内容。flash编程或校验时,p2亦接收
6、高位地址和一些控制信号。p3口:p3口是一组带有内部上拉电阻的8位双向i/o口。p3口输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对p3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的p3口将用上拉电阻输出电流iil。p3口除了作为一般的i/0口线外,更重要的用途是它的第二功能,如下表所示:表1 at89c52 p3口第二功能端口引脚第二功能名称基本功能p3.0rxd串行输入口p3.1txd串行输出口p3.2into外中断0p3.3into外中断lp3.4to定时计数器0p3.5tl定时计数器lp3.6wr外部数据存储器写选通p3.7rd外部数据存储器读选
7、通 此外,p3口还接收一些用于flash闪速存储器编程和程序校验的控制信号。rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将使单片机复位。ale/prog:当访问外部程序存储器或数据存储器时,ale(地址锁存允许)输出脉冲用于锁存地址的低8位字节一般情况下,ale仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ale脉冲。对flash存储器编程期间,该引脚还用于输入编程脉冲(prog)。如有必要,可通过对特殊功能寄存器(sfr)区中的8eh单元的d0位置位可禁止ale操作。该位置位后,只有一条
8、movx和movc指令才能将ale激活,此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ale禁止位无效。psen:程序储存允许psen输出是外部程序存储器的读选通信号,当at89c52由外部程序存储器取指令(或数据)时,每个机器周期两次psen有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次psen信号。ea/vpp:外部访问允许。欲使cpu 仅访问外部程序存储器(地址为0000h-ffffh ) , ea端必须保持低电平(接地)需注意的是:如果加密位lbi被编程,复位时内部会锁存ea端状态。如ea端为高电平(接vcc端), cpu则执行内部程序存储器中的指令。flas
9、h存储器编程时,该引脚加上+12v的编程允许电源vpp ,当然这必须是该器件是使用12v编程电压vpp 。xtal1:振荡器反相放大器的及内部时钟发生器的输入端。xtal1:振荡器反相放大器的输出端。2.定时器/计数器定时器/计数器是单片机中的重要功能模块之一,在检测、控制和智能仪器等设备中经常用来定时。另外还可以用来对外部事件计数。(1)定时器/计数器的主要特性mcs-51的52系列有三个定时器,即t0、t1、t2定时器/计数器。每个定时器/计数器及可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,通过编程设定来实现。每个定时器/计数器都有多种工作方式,其中t0有四种工作方式;t
10、1有三种工作方式;t2有三种工作方式。通过编程可以设定工作在那种工作方式。每一个定时器/计数器定时计数时间到时产生溢出,是相应的溢出位置位,溢出可通过查询或中断方式处理。(2)定时器/计数器t0、t1的结构及工作原理定时器/计数器t0、t1的结构如图3所示,它由计数器、方式寄存器tmod、控制器tcon等组成。图3 定时器/计数器t0.t1的结构框图定时器/计数器,其作用主要包括产生各种时标间隔、记录外部事件的数量等,是微机中最常用、最基本的部件之一。8051有2个16位的定时器/计数器:定时器0(t0)和定时器1(t1)。 t0由2个定时寄存器th0和tl0构成,t1则由th1和tl1构成,
11、它们都分别映射在特殊功能寄存器中,从而可以通过对特殊功能寄存器中这些寄存器的读写来实现对这两个定时器的操作。作定时器时,每一个机器周期定时寄存器自动加l,所以定时器也可看作是计量机器周期的计数器。由于每个机器周期为12个时钟振荡周期,所以定时的分辨率是时钟振荡频率的1/12。计数器时,只要在单片机外部引脚t0(或t1)有从1到0电平的负跳变,计数器就自动加1。计数的最高频率一般为振荡频率的l/24。(3)定时器/计数器的控制寄存器定时器/计数器t0和t1有2个控制寄存器-tmod和tcon,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等
12、。其中,tcon寄存器中另有4位用于中断系统。定时器方式控制寄存器tmodtmod在特殊功能寄存器中,字节地址为89h,无位地址。tmod的格式如图4所示。gatec/t m1m0gatec/tm1m0 tmod 定时器1 定时器0 图4 定时器/计数器的方式寄存器tmod由图可见,tmod的高4位用于t1,低4使用于t0,4种符号的含义如下: gate:门控制位。其作用见图16。gate和软件控制位tr、外部引脚信号int的状态,共同控制定时器/计数器的打开或关闭。 c/t:定时器/计数器选择位。c/t1,为计数器方式;c/t0,为定时器方式。 m1m0:工作方式选择位,定时器/计数器的4种
13、工作方式由m1m0设定。 m1m000:工作方式0(13位方式)。 m1m001:工作方式1(16位方式)。 m1m010:工作方式2(8位自动装入时间常数方式)。 mlm0=11:工作方式3(2个8位方式-仅对t0)。定时器控制寄存器tcontcon在特殊功能寄存器中,字节地址为88h,位地址(由低位到高位)为88h一8fh,由于有位地址,十分便于进行位操作。 tcon的格式如图5示。其中,tfl,trl,tf0和tr0位用于定时器/计数器;iel,itl,ieo和it0位用于中断系统。tf1tr1tf0tr0ie1it1ie0it0 tcon 图5 定时器/计数器的控制寄存器tcontfl
14、,trl用于定时器t1;tf0,tr0用于定时器t0。两组符号有相同的含义。 tf:定时器/计数器中断请求标志位。当定时器计满回零时,tf1,并可申请中断;当cpu响应中断并进入中断服务程序后,tf自动清零。如对tf查询,定时器回零后,要用指令将tf清零。 tr:定时器/计数器开闭控制位。 iel,itl用于外部中断1(1ntl);ie0,it0用于外部中断0(1nt0)。两组符号的含义相同。 it:下跳沿/低电平引起外部中断请求的选择位。it=1,由下跳沿引起;it0,由低电平引起。 ie:外部中断的中断申请标志。ie0,表明无外部中断请求;ie1,表明有外部中断请求。当有外部中断请求时,i
15、e自动为1,单片机cpu响应此中断后,ie自动清零。(4)定时器/计数器的工作方式 t0或t1无论用作定时器或计数器都有4种工作方式:方式0、方式1、方式2和方式3。除方式3外,t0和t1有完全相同的工作状态。下面以t1为例,分述各种工作方式的特点和用法。工作方式0 13位方式由tl1的低5位和th1的8位构成13位计数器(tl1的高3位无效)。工作方式0的结构见图6。图6 t0、t1方式0的结构图中,c/t为定时/计数选择:c/t0,t1为定时器,定时信号为振荡周期12分频后的脉冲;c/tl,t1为计数器,计数信号来自引脚t1的外部信号。 定时器t1能否启动工作,还受到了r1、gate和引脚
16、信号int1的控制。由图中的逻辑电路可知,当gate0时,只要tr11就可打开控制门,使定时器工作;当gate1时,只有tr11且int11,才可打开控制门。gate,tr1,c/t的状态选择由定时器的控制寄存器tmod,tcon中相应位状态确定,int1则是外部引脚上的信号。 在一般的应用中,通常使gate0,从而由trl的状态控制tl的开闭:trl1,打开t1;trl0,关闭t1。在特殊的应用场合,例如利用定时器测量接于int1引脚上的外部脉冲高电平的宽度时,可使gate1,trl1。当外部脉冲出现上升沿,亦即int1由0变1电平时,启动t1定时,测量开始;一旦外部脉冲出现下降沿,亦即in
17、t1由l变o时就关闭了t1。 定时器启动后,定时或计数脉冲加到tll的低5位,从预先设置的初值(时间常数)开始不断增1。tl1计满后,向thl进位。当tl1和thl都计满之后,置位t1的定时器回零标志tfl,以此表明定时时间或计数次数已到,以供查询或在打开中断的条件下,可向cpu请求中断。如需进一步定时/计数,需用指令重置时间常数。工作方式116位方式。与工作方式0基本相同,区别仅在于工作方式1的计数器tl1和th1组成16位计数器,从而比工作方式0有更宽的定时/计数范围。工作方式1的结构见图7。图7 t0、t1方式1的结构工作方式28位自动装入时间常数方式。由tll构成8位计数器,thl仅用
18、来存放时间常数。启动t1前,tll和thl装入相同的时间常数,当tl1计满后,除定时器回零标志tfl置位,具有向cpu请求中断的条件外,thl中的时间常数还会自动地装入tll,并重新开始定时或计数。所以,工作方式2是一种自动装入时间常数的8位计数器方式。由于这种方式不需要指令重装时间常数,因而操作方便,在允许的条件下,应尽量使用这种工作方式。当然,这种方式的定时计数范围要小于方式0和方式1。工作方式2的结构见图8。 图8 t0、t1方式2的结构工作方式32个8位方式。工作方式3只适用于定时器0。如果使定时器1为工作方式3则定时器1将处于关闭状态。 当t0为工作方式3时,tho和tl0分成2个独
19、立的8位计数器。其中,tl0既可用作定时器,又可用作计数器,并使用原t0的所有控制位及其定时器回零标志和中断源。th0只能用作定时器,并使用t1的控制位trl、回零标志tfl和中断源,见下图。 通常情况下,t0不运行于工作方式3,只有在t1处于工作方式2,并不要求中断的条件下才可能使用。这时,t1往往用作串行口波特率发生器(见14),th0用作定时器,tl0作为定时器或计数器。所以,方式3是为了使单片机有1个独立的定时器计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的。这时,可把定时器l用于工作方式2,把定时器0用于工作方式3。工作方式2的结构见图9。 图9 t0方式3的结构
20、在方式3下,计数器的最大计数值、初值的计算与方式2的完全相同。3.中断系统(1)中断的基本概念在cpu 与外设交换信息时,存在着一个快速的 cpu 与慢速的外设之间的矛盾。为解决这个问题,发展了中断的概念。 单片机在某一时刻只能处理一个任务,当多个任务同时要求单片机处理时,这一要求应该怎么实现呢?通过中断可以实现多个任务的资源共享。 中断现象在现实生活中也会经常遇到,例如,你在看书手机响了你在书上作个记号你接通电话和对方聊天谈话结束从书上的记号处继续看书。这就是一个中断过程。通过中断,你一个人在一特定的时刻,同时完成了看书和打电话两件事情。用计算机语言来描述,所谓的中断就是,当 cpu 正在处
21、理某项事务的时候,如果外界或者内部发生了紧急事件,要求 cpu 暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程称作中断。 从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回这样三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。(2)mcs-51单片机的中断系统mcs-51单片机的中断源共有两类,它们分别是:外部中断和内部中断外部中断源 外部中断0( ):来自 p3.2 引脚,采集到低电平或者下降沿时,产生中断请求。外部中断1( ):来自 p3.3
22、 引脚,采集到低电平或者下降沿时,产生中断请求。内部中断源 定时器计数器0:定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外p3.4引脚。发生溢出时,产生中断请求。定时器计数器1:定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外p3.5引脚。发生溢出时,产生中断请求。串行口:为完成串行数据传送而设置。单片机完成接受或发送一组数据时,产生中断请求。中断控制的专用寄存器mcs-51单片机为用户提供了四个专用寄存器,来控制单片机的中断系统。 定时器控制寄存器(tcon) 该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88h。按位操作时,各位的地址为
23、88h8fh。寄存器的内容及位地址表示如下:表2 寄存器的内容位地址8fh8eh8dh8ch8bh8ah89h88h位符号tf1tr1tf0tr0ie1it1ie0it0 it0 和it1外部中断请求触发方式控制位it0 (it1)1 脉冲触发方式,下降沿有效it0 (it1)0 电平触发方式,低电平有效lie0和ie1外中断请求标志位 当cpu采样到 (或 )端出现有效中断请求时,ie0(ie1)位由硬件置“1”。当中断响应完成转向中断服务程序时,由硬件把ie (或ie )清零。ltr0 和tr1定时器运行控制位tr0 (tr1 )0 定时器/计数器不工作tr0 (tr1 )1 定时器/计数
24、器开始工作ltf0和tf1计数溢出标志位 当计数器产生计数溢出时,相应的溢出标志位由硬件置“1”。当转向中断服务时,再由硬件自动清“0”。计数溢出标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。串行口控制寄存器(scon)进行字节操作时,寄存器地址为98h。按位操作时,各位的地址为98h9fh。寄存器的内容及位地址表示如下: 表3 scon寄存器内容位地址 9fh 9eh 9dh 9ch 9bh 9ah 99h 98h 位符号 sm0 sm1 sm2 ren tb8 rb8 tiri 其中与中断有关的控制位共2位:ti串行口发送中断请求标志位
25、当发送完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。ri串行口接收中断请求标志位当接收完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。串行中断请求由ti和ri的逻辑或得到。就是说,无论是发送标志还是接收标志,都会产生串行中断请求。中断允许控制寄存器(ie)进行字节操作时,寄存器地址为0a8h。按位操作时,各位的地址为0a8h0afh。寄存器的内容及位地址表示如下:表4 ie寄存器内容位地址 0afh 0aeh 0adh 0ach 0abh 0aah 0a9h 0a8h 位符号 ea / / es et1 ex1 et0 ex0 其中与中断有关的
26、控制位共6位:lea中断允许总控制位ea0 中断总禁止,禁止所有中断ea1 中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设置。l ex0和ex1外部中断允许控制位ex0(ex1)0 禁止外部中断ex0(ex1)1 允许外部中断l et0和et1定时器/计数器中断允许控制位et0(et1)0 禁止定时器/计数器中断et0(et1)0 允许定时器/计数器中断l es串行中断允许控制位es=0 禁止串行中断es=1 允许串行中断可见,mcs-51单片机通过中断允许控制寄存器对中断的允许(开放)实行两级控制。即以ea位作为总控制位,以各中断源的中断允许位作为分控制位。当总控制位为
27、禁止时,关闭整个中断系统,不管分控制为状态如何,整个中断系统为禁止状态;当总控制位为允许时,开放中断系统,这时才能由各分控制位设置各自中断的允许与禁止。mcs-51单片机复位后(ie)00h,因此中断系统处于禁止状态。单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后,应根据需要使用有关指令禁止中断,即以软件方式关闭中断。中断优先级控制寄存器ipmcs-51单片机的中断优先级控制比较简单,因为系统只定义了高、低2个优先级。高优先级用“1”表示,低优先级用“0”表示。各中断源的优先级由中断优先级寄存器(ip)进行设定。ip寄存器地址0b8h,位地址为0bfh0b8h。寄存器的内容及位地址
28、表示如下:表5 ip寄存器内容位地址 0bfh 0beh 0bdh 0bch 0bbh 0bah 0b9h 0b8h 位符号 / / / ps pt1 px1 pt0 px0 其中: px0外部中断0优先级设定位;pt0定时中断0优先级设定位;px1外部中断1优先级设定位;pt1定时中断1优先级设定位;ps串行中断优先级设定位。以上各位设置为“0”时,则相应的中断源为低优先级;设置为“1”时,则相应的中断源为高优先级。优先级的控制原则是:l低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。l如果一个中断请求已被响应,则同级的其它中断服务
29、将被禁止。即同级不能嵌套。如果同级的多个中断同时出现,则按cpu查询次序确定哪个中断请求被响应。其查询次序为:外部中断0定时中断外部中断定时中断串行中断。中断优先级控制,除了中断优先级控制寄存器之外,还有两个不可寻址的优先级状态触发器。其中一个用于指示某一高优先级中断正在进行服务,从而屏蔽其它高优先级中断;另一个用于指示某一低优先级中断正在进行服务,从而屏蔽其它低优先级中断,但不能屏蔽高优先级的中断。此外,对于同级的多个中断请求查询的次序安排,也是通过专门的内部逻辑实现的。上述四个专用寄存器的用途可以用图10说明。图10 mcs-51中断系统二、本篮球计时计分器功能及实现过程(一) 系统总体设
30、计 1. 系统总体设计思路作为一个基于单片机的篮球计时计分器,本设计所采用的美国atmel公司的at89c52单片机是一个低电压,高性能cmos 8位单片机,片内含8k bytes的可反复擦写的flash只读程序存储器和256 bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器和flash存储单元,功能强大的at89c52单片机可为您提供许多较复杂系统控制应用场合。由于at89c52单片机的上述优点,所以在本系统中采用此单片机可以尽可能地降低成本。本设计是一个基于美国atmel公司的at89系列
31、的单片机的篮球计时计分器,整个系统可分为中央处理器及美国atmel公司的at89c52单片机,关于at89c52单片机的一些参数及简单原理已经在前面有介绍。人及交互界面,其中人及交互界面又包括显示部件,本系统的显示界面是采用七段式共阴数码管作为输出。七段是共阴数码管,由于发光二极管的单向导电性,将一定数量的发光二极管按照一定的排列方式排列,在通过编程实现部分或者全部二极管的亮灭即可以显示0到9的所以数字从而实现单片机的输出。在数码管中的发光二极管具有两种电气连接方式,一种是共阳一种是共阴,在这两种连接方式中,七段式共阴数码管内部的八个发光二极管的负极全部接地,每个发光二极管的正极作为输入只要在
32、数码管的正极给一个高电平,数码管的负极接地就可以点亮数码管从而实现显示。共阳数码管的原理同共阴数码管一样的只是在数码管内部采用的是与共阴数码管相反的接法即将所有的数码管正极相连,工作的时候只要公共正极接高,而每个二极管的负极只要接低电平就可以实现数字的显示。其中有六位数码管输出甲乙队的比分,由于在有限的比赛时间内比分不可能会超过三位数,所以只每一个比赛方提供三位数的计分。其余的4位数码管用于计时,预设48分钟的总比赛时间。五个按键作为系统的输入,其中四个分别为甲对加分、甲队减分、乙队加分、乙队减分,第五个按键作为继续/暂停键使用。其中还有一个蜂鸣器用于提醒球员在预设的时间点注意时间。2. 计时
33、部分设计分析 由于本设备为基于单片机的篮球计时计分器,所以设备的计分就不可避免。由于at89c52单片机内部自带有计时计数器,在at89c52单片机内部可以通过对关于计时计数器寄存器的设置来规定单片机内部计时计数器的工作方式,其中有工作方式0,工作方式1,工作方式2,工作方式3,关于每种工作方式的详情在前面有关单片机的计时计数器已经有所介绍,由于at89c52自带的计时计数器的功能能够完全满足本系统的设计需求,而在尽量降低成本的前提下我们采用单片机自带的计时器来计时。当然也可以采用外部计时计数器作为单片机的计时计数器,并且也有这样的现成模块供使用。根据美国篮球协会的规定:一场篮球比赛的总的比赛
34、时间为48分钟,一共分为四节,每一节平均12分钟,中场和小节有一定的休息时间。所以在本系统中的计时部分在系统开机时自动将时间赋给总的比赛时间及48分钟并在比赛开始时自动倒计时计时单位为1秒。由于比赛具有随机性,可以在系统运行的任何时候只要按下暂停键即可以实现计时器的暂停功能,当需要比赛继续时只要再一次按下暂停键就可以实现比赛的继续,即计时器继续计时。还由于在比赛过程中每完成一个小节的计时任务有小节结束的暂停时间,并且此过程不需要人为的干涉,所以在系统每小节计时结束时应该有一个暂停的功能。当小节结束的暂停时将结束时可以在人为的按一下暂停键即可以实现计时的继续,在后面的小节结束并且需要暂停的时候能
35、够在小节结束时自动暂停。并且需要继续计时时只要在人为的按一下暂停键即可实现继续计时。整个篮球计时过程结束时即48分钟计时完毕,计时器上显示时间结束,此时如果需要加时赛只要在按一下暂停键就可以在有5分钟的加时赛时间,依次类推,如果加时赛结束还没有分出胜负待计时结束后只需要在一次按下暂停键即可再一次得到5分钟的加时赛时间。所以本设计中的计时部分在开机时设为初值48分钟并在比赛开始时自动倒计时,计时单位为1秒。并且考虑到在每一节比赛结束时有一定的暂停时间,所以系统在每计时12分钟时会有一个自动暂停,当需要比赛继续时直接按一下暂停键即可。这样依次倒计时当48分钟倒计完时计时结束。 当每节及终场快结束的
36、时候,在结束的最后3分钟蜂鸣器响10秒来提醒球员和裁判注意合理利用时间。3. 计分部分设计分析 分部分的设计,根据设计要求。由于本计时计分器时用于对篮球比赛的计时计分,所以计分的对象有两个,及比赛的主队与客队。所以本计时计分器也实现对两队的计分功能。由于在有限的48分钟比赛时间内主客两队的分数必定在一定的范围内,根据以往的比赛经验篮球比赛分数一般不会超过3位数。所以本计时计分器的计分部分位数为3位计分,及本系统的最大计分值为999分,够满足要求。计分部分分为两部分:显示部分,以及分数输入部分。由于计分部分采用三位数码管,所以两队的计分器一共有6位数码管。所以在本系统的程序中,由于计时和计分部分
37、是本系统的两大主要程序设计模块,所以在程序设计中先通过初始化子函数的调用来对程序进行初始化,为了使得程序看起来更简洁,所以将计时和计分部分以及其他的程序都采用子函数的方式,当在主函数中需要实现相应的模块功能是只要在主函数中对相应的子函数调用即可。而对于在程序中的计时部分子函数的设计,所以在计分部分的分数显示部分函数设计中同样采用计时部分程序设计的思路,即采用动态显示的方式对6位数码管进行扫描显示。计分部分的显示部分分为甲队和乙队分数显示,在程序设计中将甲队分数的百位送到6位数码管的第一位显示,并延时一定时间,然后将甲队的分数的十分位送到6位数码管的第二位显示并延时一定的时间,在再将甲队的分数的
38、个位送到6位数码管中的第三位显示并延时一定的时间。同样的在显示乙队的分数时也采用的方法来显示,这样在数码管的动态显示过程中即可实现甲乙队的分数刷新显示。由于篮球比赛过程中的加分时间具有随机性,所以本计时计分器的分数输入部分采用4个按键输入。其中两个用于主队的加分和减分,并且每按一次加分键主队加一分,同样每按一次减分键分数减一分。另外两个按键用于客队的分数加减。当需要加减不止一分时可以通过连续按下几次加减分键来实现。4. 加时赛部分设计分析由于篮球比赛在规定的时间内分数具有随机性,所以在48分钟的有限时间内有可能主客队的分数一样。这样就区分不出来主客队的输赢,由于有这样的可能性存在,此时就必须要
39、求加时赛。在本计时计分器中加入计时赛计时部分,具体的实现方法是在比赛结束的时候及48分钟计时结束后如果需要进行加时赛,只需要在按一下暂停键即可得到5分钟的加时赛时间。如果加时赛时间已经结束还是没有分出胜负,可以在按一下暂停键有可以得到5分钟的加时赛时间。5. 程序设计的步骤根据程序的设计步骤,首先是程序的头文件申明,然后初始化程序然后分别调用计时部分和计分部分。由于本单片机计时计分器的设计采用的是美国atmel公司的at89c52单片机,该单片机是基于intel 公司的mcs-51系列的单片机。故本设计的程序设计部分采用c+语言来设计。首先在程序开头处申明头文件,即#include。在头文件的
40、申明中将reg52.h文件包含到了程序中来,使用此文件的目的是在程序开始处即对本设计所要采用的单片机的寄存器进行申明。由于在对单片机的控制时,不外乎就是采用软件的方法对其寄存器不断地进行置位和清零的操作,所以在程序开始时先采用reg52.h文件对本设计所采用的单片机进行寄存器初始化说明。在程序包含reg52.h文件申明结束后接着是申明两个宏定义,及#define uint unsigned int 和#define uchar unsigned char即是什么了uint和uchar两个宏定义,这两个宏定义分别表示了无符号的int型数据及无符号的整型数据变量和无符号的char型数据即为无符号的
41、字符变量 。在两个宏定义的定义结束后就是对本程序所要使用到得变量进行申明,其中uchar型变量有aa,minute,second,minuteshi,minutege,secondshi,secondge,score1,score2,score1bai,score1shi,score1ge,score2bai,score2shi,score2ge分别为aa 表示在计时过程中要用到的中间变量,还有就是在计时过程中的分钟minute 和计时过程中的秒变量second,由于需要把比赛时间显示出来,有因为在本系统中的硬件采用的动态扫描显示技术,所以在软件设计的时候也需要根据硬件做出相应的调整,又由于在
42、比赛的时间是由四位数分别表示的时间分钟的时位,时间分钟的个位,时间秒钟的十位以及时间秒钟的个位。所以在此处的程序开始的申明时就需要将以上时间的四个位数依次申明以便于在程序设计时能进行相应功能的实现。由于此系统实现的功能是计时计分的功能,所以就涉及到有对分数的记录由于篮球的双方比分一般都不会超过三位数,所以在以上的uchar型变量的申明中对比赛双方的分数进行了申明,并且同样采用与时间显示的方式对分数进行显示,即将score1 和score2 的百位和十位以及个位分别申明便于程序使用变量。当对程序中要使用的变量申明结束后,由于在系统中还要用到分数的加减,即是人为的操作,所以本系统中用到了按键。所以
43、就不可置疑的就要使用位定义将所使用的每个按键都定义到其对应的寄存器中。所以在对程序中间变量的申明结束后就需要进行位定义,此处的位定义采用sbit 命令。并将硬件电路中用用到的两个74hc573锁存器的使能端分别定义到单片机的p3.6和p3.7口,为段选和位选的定义。还有将甲乙队的加分键和减分键都定义到单片机的p3口。位定义结束后在定义一个中间变量temp,采用uint型的数据变量来定义。当所有的数据变量定义结束后,在来定义三组无符号的字符型变量的代码段。即为table,table1,fenwei。此三组代码段分别为显示的代码区和位选择代码区。由于单片机的ram非常紧张,所以在定义此三组数据时采
44、用uchar code table=的形式目的是将此段数据放在rom中以缓解单片机紧张的ram。至此此程序的变量定义部分完成。由于在此程序中采用了模块化的程序设计思想,所以只需要设计好相应的子程序,并且在main函数中来不断地调用子函数即可实现相应的函数功能。下面分别对各个子函数进行解释。子函数void init()子函数,此函数是初始化函数,顾名思义就是对程序的参数以及单片机的寄存器进行初始化的函数。在init函数中首先对锁存器74hc573的选通进行初始化,及将选通多设为0,即是说将锁存器在程序开始时全部关掉。接下来是对计时初值和比分初值进行初始化,由于本设计是采用的48分钟倒计时的方法计
45、时,所以将分钟数的初始值设为47分钟,将秒钟的初始值设为59秒,这样当开机或设备复位时即可冲48分钟开始倒计时。比分的初始值设为0,这样就可以在比赛开始时比分显示0:0可根据比赛的进行来实现比分的加减。然后是对单片机的定时器进行初值设定,即定时器的功能工作模式设定,本设计采用了单片机的两个定时器,故需要对两个定时器都进行初值的设定。由于在此设计中要用到单片机的中断功能,所以还要在初始化函数中对中断的相关寄存器进行初始化,及将ea置位来打开总中断,分别设et0=1、et1=1即是打开定时器中断。tr0=1、tr1=1即为打开定时器。it0=1即为使外部中断为脉冲触发方式,对ex0置位使其打开外部
46、中断0。至此所有程序需要的寄存器设定完结。void display()子函数是显示时间的子函数,在该函数中打开段锁存器及对先前所定义的位进行操作。打开后将要显示的时间的分钟数的十位送到锁存器,然后关闭段锁存器,可以看到的是在此时的程序中将段锁存关闭后又立即将一个数0xff送到了单片机的p0口,此目的是为了消去数码管中残留的余光。送完要显示的数后,在通过位锁存器选择是要将刚才送入的数据放在哪一个位的数码管显示,这样就可以达成在特定的位显示特定的数据。可以才有那个同样的方法将时间的分钟位的个位以及秒钟位的十位和个位送入数码管显示,由于单片机处理数据的速度非常快,所以就可以利用肉眼的视觉停留就可以看
47、到连续的时间显示。void control()子函数是用来在程序中队时间取进位条件的判断,在时间的判断中可以看到首先在进入此子函数的时候首先是检查aa变量是否为20,在定时器0中我将aa定为每进入一次定时器中断将将aa加1。通过对定时器0的初值进行分析可以看到每到1/20秒的时候就进入依次中断,那么在此处当aa加到20时就证明了时间已经到了一秒。然后将aa清0重新进行下一秒的计时,并且second减1,也就是将秒减1,在通过display()函数就可以将此反应给显示系统。接下来是判断一分钟是否计时完毕,可以看到在程序中当60秒计时完毕的时候分钟数减1 ,此时秒钟数在回到59秒从而实现继续下一分
48、钟的计时。继续下来是判断整个计时间是否结束,及整个预设的48分钟计时是否结束,如果整个时间结束。就在将4赋给minute实现的功能是计时结束的时候如果还没有分出胜负就可以在通过按下暂停键来得到5分钟的加时赛时间。如果加时赛时间用完了还没有分出胜负还可以通过同样的方法在得到5分钟的加时赛时间,依次类推,直到最终分出胜负为止。接下来就是实现在每个小节结束的钱3分钟蜂鸣器响一下来实现提醒球员和裁判注意时间以及在每小节结束的时候自动停止计时达到暂停的作用。void keyscan()子函数是检测键盘的子函数,其中已进入此子函数即对四个加减分键进行检测,如果检测到有相应的键被按下就执行相应的动作,及如果
49、jiajia键所对应的键被按下,经过相应的演示函数消抖后执行score1+ ,即对甲队的分数加一分,其他的键原理相同即可通过四个键实现甲乙两队的加分以及减分操作。void delay()子函数是本程序中最简单的一个子函数,其功能只是实现一段时间延长,及在这个时间间隔内单片机什么事情都不做,只是实现时间的等待。void timer0() interrupt 1是定时器0的定时中断服务子程序,其功能是当定时器的初值寄存器中所对应的时间用完后单片机自动产生一次中断,产生中段后就立即进入相应的定时器中断服务子程序。由于在进入中断服务子程序前的一瞬间寄存器th和tl中的数据用完,所以在进入中断服务子程序
50、后应立即将装初值的寄存器填上值,这样以便于进行下一轮的计时中断。装完值后,将程序开始定义的aa自加1,这样就可以根据aa的值来判断进行过多少次定时器中断。接下来就是检测时间如果是到了每个小节结束前三分钟,程序就让蜂鸣器响一定的时间一提醒裁判和球员注意时间。如果每小节结束则激发一次外部中断,使系统自动暂停。如果需要比赛继续则可以认为的按一下暂停键在激发一次外部中断使计时继续。void insresvr0() interrupt 0外部中断0服务子程序,此子函数只有一条指令。就是将et0寄存器取反即可。那么要实现的功能就是当检测到有外部中断0发生时,就进入此中断函数是et0取反,从而达到暂停计时的
51、功能。void timer1() interrupt 3 子函数为定时器中断1子函数,此函数是实现分数的刷新子函数。同样由于是定时器中断函数,所以在进入中断函数时首先要将定时器初值寄存器中值刷新。这样才能有效地进行下一次的定时中断触发。本中断子程序是实现分数的刷新的子函数。所以要将分数显示出来就需要将甲乙两队的分数的百位十位个位进行提取,并送给相应的数码管进行显示,所以在对定时器的初值进行刷新后就是对分数进行提取并送数码管显示。由于在本系统中,分数显示部分是采用的74ls138译码器作为分数位显示。所以就需要不同于时间显示的方式来显示,将要显示的甲队的分数的百位送给数码管的段端口,然后将要显示
52、的的位数送给译码器,送完第一个数据后并作相应的延时。这样第一个数便显示完成,其他的数依次送到数码管显示,这样由于单片机的处理速度很快,所以就可以在人眼看来是连续的显示分数。void main()函数,是本程序的主函数。首先在进入主函数后就调用前面已经解释过的初始化子函数void init()这样就大大简化了主函数的代码量,看起来更美观。初始化子函数调用结束后,程序进入一个while循环,在循环里头即是程序所要做的主要的内容,此处未来将达到程序看起来可读性强,所以全部在主函数中采用反复调用子函数的方法来达到设计要求。即首先进入主函数就掉用void control()函数,此函数的功能在上面的子函数介绍中已有介绍。当此函数的功能实现后接着调用下面的void display()函数实现时间以及比赛分数的显示。 分数以及时间显示完成一个显示周期后在检查是否在此时有加减分的现象,及再调用void keyscan()函数来检查是否有分数的减价情况。当有分数加减时就可以在调用键盘检查子函数的过程中实现相应的操作。由于单片机的处理速度很快,所以这里就可以不用担心在执行control()函数以及display()函数的时候有键盘输入而漏掉操作。键盘检查子函数结束后可以看到主函数已经结束,此时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业领域技术研发工作经验证明(6篇)
- 诗词歌赋与修辞技巧融合:初中英语词汇教学方法
- 化工工艺流程及安全知识考核
- 艺术欣赏考试试题及答案
- 沂源小学考试试题及答案
- 六一亲子签到活动方案
- 六一德克士活动方案
- 六一活动女装活动方案
- 六一活动小集市活动方案
- 六一活动投纸球活动方案
- 2025至2030中国年龄相关性黄斑变性行业产业运行态势及投资规划深度研究报告
- 2025年河北省中考麒麟卷生物(一)及答案
- 化学●重庆卷丨2024年重庆市普通高中学业水平等级考试化学试卷及答案
- 物流行业总经理年度工作总结及计划
- 村文书考试题及答案岷县
- 磷化池安全管理制度
- 工厂车间计件管理制度
- 太空安全主题班会课件
- 护理文书课件
- 2025年企业大脑·AI赋能低空经济白皮书
- 2024北京海淀区六年级(下)期末数学试题及答案
评论
0/150
提交评论