1 设计任务 1.1 设计的目的和意义目前球场记分牌在传统操作模式下,采用记分员手动翻动记分牌记分,工作方式单一。由于种种弊端,电子记分板已经开始在一些大型的体育场流行起来,不仅发展速度迅猛并会逐渐取代传统的电子记分牌。
电子记分板根据篮球比赛的特点,采用单片机为核心控制LED数码管,具有亮度高、可视性好、功耗小、使用寿命长等优点;具有性能稳定,尺寸适中,运输安装方式灵活,物美价廉等特点,特别适用于中、小型体育馆和训练馆。
1.2 设计任务与要求设计题目:篮球赛电子计时记分牌
设计要求:
- 分别设计篮球比赛用的计时牌和记分牌;
- 上下半场各20分钟,要求能随时暂停,启动后继续计时,一场比赛结束后应可清零重新开始比赛;
- 能按照篮球计分规则计分并显示。
2 硬件系统设计 2.1 总体方案设计篮球记分器的硬件电路分成主控模块、键盘输入模块、信息提示模块三部分进行设计,系统整体结构如图1所示。
图1 系统硬件结构图
主控模块以AT89C52为核心,完成输入输出信息处理、计时器中断响应、数值计算等,协调整个系统有条不紊地工作。键盘输入模块作为人机交互接口,允许用户控制系统的工作状态,完成如计时计分开始/暂停、交换场地、计时计分清零、比赛队伍分数调整等功能。信息提示模块包含4个2位8段数码管、6个LED和一个蜂鸣器,用于实时显示系统工作状态,方便用户进行下一步操作。
2.2 芯片选型与具体电路设计 2.2.1 单片机的选型主控模块以AT89C52单片机作为微控制器。AT89C52单片机是一种低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。由于它的这些优良特性,AT89C52单片机在电子行业中有着广泛的应用。采用AT89C52作为微控制器,可以很好地满足篮球记分器的系统要求。
2.2.2 复位和振荡电路的设计图2给出了AT89C52单片机的引脚分布和最小系统接法。
图2 AT89C52单片机最小系统原理图
复位电路可以实现上电复位和按键复位两种复位方式:上电复位电路由电容串联电阻构成,由图并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以适当组合RC的取值就可以保证可靠的复位。按键复位电路则是通过按下RESET按键拉高RST引脚电平来实现的。
晶体振荡电路由一个12MHZ石英晶振和两个30pF的电容组成,用于产生稳定的时钟脉冲信号供单片机工作。
2.2.3 键盘输入模块的设计用户通过键盘输入模块对系统进行控制。键盘采用3*3矩阵式按键,其中按键“START/PAUSE”控制计时计分的开始与暂停,按键“EXCHANGE”用于在半场结束后交换双方记分牌上的分数,按键“CLEAR”用于在比赛结束后清除比分,其余的按键“A+1”、A+2”、“A+3”、“B+1”、“B+2”、“B+3”用于给参加比赛的A、B两队加上相应的分数。3*3矩阵按键的6条引线分别接至AT89C52的I/O口P3_0~P3_5,在单片机内部采用行列扫描法检测到按键按下,从而执行相应的任务。
矩阵键盘的连接方式如图3所示。
图3 矩阵键盘的连接方式
2.2.4 信息提示模块的设计信息提示模块包含4个2位8段共阴极数码管(图4)、6个LED指示灯(图5)和一个蜂鸣器。
4个数码管分别用两位数字显示比赛分钟、秒钟和赛场上两个篮板的分数。由于单片机I/O口资源有限,为了不占用太多的接口,在此使用P0口向数码管同时送出数据(段选信号)和地址(位选信号),使用两个74HC573锁存器来分离数据和地址,而P2_0和P2_1口分别用于使能段选锁存器和位选锁存器。由于P0口的电流驱动能力有限,所以外接了排阻RP1,从而增强了对数码管的驱动能力。
图4 数码管连接原理图
LED1、LED2、LED3分别指示比赛状态“开始”、“暂停”和“结束”;LED4用于“进球”指示,在比赛进行时按下任何一个加分按键,“进球”指示灯会闪一下;在上半场比赛结束后按下“EXCHANGE”键,“交换场地”指示灯LED5会亮,同时两个篮板的比分互换。“ERROR!”指示灯LED6用于指示用户的操作出错。6个LED采用共阳极连接方式,其阴极分别接单片机P1_0~P1_5口,当单片机某口输出低电平时,对应的LED亮。
图5 LED指示灯连接原理图
蜂鸣器接在P1_6口上,在半场结束或比赛结束后会发出提示音。
2.3 系统总体电路图6给出了系统硬件原理总图。
2.4 系统所用元器件本系统所用的元器件清单如表1所示。
表1 本系统所用的元器件
3 软件系统设计 3.1 软件系统总体设计方案单片机程序采用美国Keil Software公司出品的51系列兼容单片机C语言开发系统Keil C编写。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
Keil采用工程方式集中管理源程序,编写单片机程序首先要建立工程,然后在工程中添加源代码文件。在本系统的工程中包含6个C代码文件,对应功能介绍如下:
My_func.h ——自定义的头文件。存放常用宏定义、单片机I/O位定义、数据类型定义和所有函数的声明。在其他C文件里只需要写一句#include "my_func.h",即可直接调用任意函数,省去了重复写定义和声明的麻烦。
Main.c ——包含主程序main(),是整个程序执行的入口。在main()函数里,调用init()进行单片机的初始化,并在大循环里调用key_respond()和display()不断扫描按键输入、输出显示数据。同时设置定时器T0以工作方式1计时,从而在中断服务程序void Timer() interrupt 1里实现1s间隔的倒计时。
Key_scan.c ——包含按键扫描程序key_scan()。该函数采用行扫描法获取按键的状态,并将对应的键码传给Key_respond.c中的函数key_respond()。
Key_respond.c ——包含按键响应函数key_respond()。该函数里决定是否对按键请求进行响应:如果不响应,则调用宏LED_ERROR()使“ERROR!”指示灯闪动;如果响应,则调用相应函数完成不同的操作,如比赛状态的开始和暂停、加分、交换场地和分数清零等。
Display.c ——包含数码管显示驱动函数display()。在这个函数里实现比赛分数设置、比分交换、计时控制等,并通过P0口送出段选信号,通过P2_0和P2_1送出位选信号,从而控制数码管的动态显示。
My_func.c ——被调用函数的集合,包含延时函数void delay_ms(unsigned int xms)、初始化函数init()和蜂鸣器发声函数sounder()。