篮球计时计分

更新时间:2024-04-21 00:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

目录...................................................................................................................... 1 [摘要].................................................................................................................. 2 一 、系统概述.................................................................................................... 2

1.1背景知识.......................................................................................................... 2 1.2 设计内容及要求 ............................................................................................ 2

1.2.1 设计内容 ............................................................................................. 2 1.2.2 设计要求 ............................................................................................. 2 1.3 设计意义 ....................................................................................................... 3 二、系统软件方案设计 ..................................................................................... 3

2.1 总体方案 ........................................................................................................ 3 2.2 系统组成 ........................................................................................................ 4 三、

硬件设计方案........................................................................................ 4

3.1设计理念与方案 ........................................................................................... 4 3.2各模块电路设计图 ....................................................................................... 5

3.2·1复位电路的设计 .............................................................................. 5 3.2·2时钟电路的设计 .............................................................................. 5 3.2·3LCD1602显示的设计 ........................................................................ 6 3.2·4整体电路图 ...................................................................................... 9 3.3原件清单: ................................................................................................... 10 4、系统调试...................................................................................................... 10

4.1软件调试........................................................................................................ 10 4.2硬件调试........................................................................................................ 11 5、心得体会...................................................................................................... 11 [参考文献]........................................................................................................ 12 附录1 pcb......................................................................................................... 13 附录2 源程序 ................................................................................................ 14

1

[摘要] 篮球比赛计时计分器是为了解决篮球比赛时计分与计时准确方便,灵活适用的问题。此装置利用单片机AT89S52完成了计时和计分的功能。本文详细地介绍了系统硬件与软件的设计过程,采用该装置可根据实际情况进行比分修改和时间的准确显示,具有低功耗,可靠性,安全性以及低成本等特点。 关键词:单片机,篮球赛,LCD

一 、系统概述

1.1背景知识

体育比赛记分系统是对体育比赛过程中所产生的比分等数据进行快速采集记录,加工处理,传递利用的信息系统。根据不同运动项目的不同比赛规则要求,体育比赛的记分系统包括测量类,评分类,命中类,制胜类得分类等多种类型。

比如篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的记分系统是一种得分类型的系统。篮球比赛的记分系统由计分器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛记分系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。世界各大电气厂家,测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化的核心部件。篮球计时计分器就是以单片机为核心的计时计分系统,由计时器,计分器,综合控制器和24秒控制器等组成。

1.2 设计内容及要求 1.2.1 设计内容

1、倒计时方式显示单节比赛剩余时间,可暂停 2、显示双方得分,按键输入可修改分值 3、系统工作符合一般篮球赛计时计分器要求

1.2.2 设计要求

以单片机89C51芯片为系统核心设计一个篮球比赛计时计分器。设计要求如下:

2

1、能显示比赛第几节,并且每节比赛时间为12分钟。 2、初始显示为: 1st 12:00,

3、设置开始键\\暂停键、复位键、AB加1分键、AB减1分键。当接通电源时,初始显示开时减计时,减到(1st 00:00时),自动保持在当前状态,当球员准备就绪,再次按下开始键时,才开始第二节比赛,此时将从(2nd 12:00)开始进行减计时,同理进行第三、第四节比赛;在篮球比赛中我们会有暂停,在比赛进行的任意时刻,只要按下暂停键,立即停止减计时,按下开始键,又立即在停止的时间进行减计时;当比赛结束后,液晶显示屏显示:(GAME OVER),按下复位键,LCD显示:( 1st 12:00),以方便进行下一场比赛计时。加分键分为A队加1分和B队加1分,减分键为A队减1分和B队减1分。在倒计时进行时可以对A、B两队进行加减分。

4、液晶显示频的左上部分显示A vs B,左下对应显示其分数。便于在比赛中区分两队的分数。

5、采用24秒倒计时,当每次进攻结束时, 即24秒结束时,蜂鸣器响4秒,则本次进攻结束,若一次进攻不足24秒,要进行下一次进攻,则需要按下24秒复位,则下一次进攻继续。每节比赛结束蜂鸣器会响4秒,表示本节结束。

1.3 设计意义

使我们进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤,掌握了电子绘图软件Protel及仿真软件Proteus的使用方法,键盘和显示器在单片机控制系统中的应用以及撰写毕业设计论文的方法。此次设计很好的将书本上的理论知识和实践有机的联系了起来,使我们对理论知识有了更进一步的掌握,锻炼了我们的动手能力,同时也让我们懂得了理论与实际相结合的意义。为以后的工作和学习提供了宝贵的经验。

二、系统软件方案设计

2.1 总体方案

显示模块有两个方案:

方案一:采用数码管LED显示,LED显示器是由发光二极管构成的LED数码管、LED点阵显示器等。LED发光器件一般常用的有两类:数码管和点阵。

3

方案二:采用液晶电路来显示,LCD1602是工业字符型液晶,能够同时显示16x02即32个字符。

对以上两个方案加以比较,可以发现LED虽然使用简单,但是显示内容有限,显示效果不是很直观,硬件连接电路较为复杂,而且稳定性不高;而LCD1602连接线路简单,显示内容丰富,易于硬件电路实现,可靠性较好。

综上所述:显示模块采用第二种方案,采用LCD1602来实现本设计的显示功能。

液晶显示模块 键盘控制模块 单 片 机 报警模块 晶振模块 复位电路

2.2 系统组成

硬件电路由复位按钮、80C51单片机、按键开关和lcd1602液晶显示屏,报警电路。 软件部分主程序主要由系统初始化段、按键控制、一个lcd1602液晶显示屏显示器扫描显示子程序组成。

三、 硬件设计方案

3.1设计理念与方案

(1)、以单片机89C51芯片为设计核心,写出相应的程序,加上相应的外电路,实现相

4

应的功能。

(2)、用KEIL软件对所写程序进行编译,若程序有问题,做出相应的修改,直到能正常完成编译为止。

(3)、对程序进行相应的仿真,并验证相应的功能是否能实现,我们可以用用protes软件或单片机开发板进行仿真和验证,直到能准确的实现设计要求的相应功能。

(4)、仿真无误后,用protel 99se进行原理图连接、封装,然后生成pcb,连线,最后打印、制板子、打孔、焊接。

(5)、对试验中遇到的问题进行分析,并做相应的记录,完成相应的实验报告。

3.2各模块电路设计图

3.2·1复位电路的设计

复位操作有上电自动复位和按键手动复位两种方式。其中有上电复位电路、按键电平复位电路、按键脉冲复位电路等,本次实验采用按键脉冲复位电路。按键脉冲复位电路是利用RC微分电路产生的正脉冲来实现复位,其电路图如图(1)所示。

图(1)复位模块

3.2·2时钟电路的设计

C51的时钟电路可由两种方式产生,一种是内部方式;另外一种是外部方式。 8051片内有一个高增益反相放大器,用于构成振荡器。反相放大器的输入端为XTAL1,输出端为XTAL2。在XTAL1和XTAL2两端跨接石英晶体及两个电容就构成了稳定的自激振荡器,这种方式称为内部方式。本次实验采用内部方式,其电路图如图(2)所示。

5

图(2)晶振模块

3.2·3LCD1602显示的设计

本设计采用LCD1602实现显示功能, 1602是16字符*2行的字符型LCD显示器,它由32个字符点阵块组成,每个字符点阵块由5×7或5×10个点阵组成,可以显示ASCII码表中的所有可视的字符。它内置了字符产生器ROM(CGROM)、字符产生器RAM(CGRAM)和显示数据RAM(DDRAM)。1602液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。 1) LCD1602引脚及功能

表1 LCD1602引脚功能

编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压信号 编号 9 10 11 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正极 背光源负极 数据/命令选择端(H/L) 12 读/写选择端(H/L) 使能信号 Data I/O Data I/O 13 14 15 16 1、2 组电源,一组是模块的电源,一组是背光板的电源,均为5V 供电。 2、VL是调节对比度的引脚调节此脚上的电压可以改变黑白对比度。

3、RS是很多液晶上都有的引脚,是命令/数据选择引脚,脚电平为高时表示将进行数据操作,为低时表示进行命令操作。

6

4、R/W也是很多液晶上都有的引脚,是读写选择端,该脚电平为高是表示要对液晶进行读操作,为低时表示要进行写操作。

5、E 同样很多液晶模块有此引脚,通常在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。

6、D0—D7 8位双向并行总线,用来传送命令和数据。 7、BLA是背光源正极,BLK是背光源负极。 2)LCD1602基本操作时序。

表2 LCD1602基本操作时序

读状态 输入 RS=L,R/W=H,E=H 写指令 输入 RS=L,R/W=L,D0~D7=指令码,E=高脉冲 读数据 输入 RS=H,R/W=H,E=H 写数据 输入 RS=H,R/W=L,D0~D7=数据,E=高脉冲 对此液晶操作主要有以下几种方法。

1 写命令(包括但不限于初始化、调节显示位置、清除显示) 2 写数据 (把一个字符的ASC 码写入液晶使其显示)

3 读忙信号(液晶乃低速设备,每次操作前应该测试忙信号,确定其不忙时再操作 3)1602LCD的指令码(命令码)

此液晶上电的时候需要初始化,典型的指令码是38H,也就是上电的时候需要 调用 void write_cmd(unsigned char command)这个函数写指令码,用法是write_cmd(0x38);执行完这个函数可以把液晶初始化成16x2 显示5x7 的点阵8 位总线接口。

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)。

指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示

输出 输出 D0~D7=数据 无 输出 输出 D0~D7=状态字 无 7

关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符高电时显示5x10的点阵

字符。 ,

指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:写数据。 指令11:读数据。 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。液晶LCD指令见表3:

表3 液晶LCD指令

指令 清楚显示 光标返回 置输入模式 显示开关显示 光标和字符移位 置功能 置字符发生寄存器地址 置数据存储器器地址 读忙标志或地址 写数CGRAM或DDRAM 0 0 1 0 1 0 1 1 BF 显示数据存储器地址ADD 计数器地址AC RS 0 0 0 0 0 0 0 RW 0 0 0 0 0 0 0 D7 0 0 0 0 0 0 0 D6 0 0 0 0 0 0 1 D5 0 0 0 0 0 1 D4 0 0 0 0 1 DL D3 0 0 0 1 D2 0 0 1 D D1 0 1 D0 1 * I/D S C B * * S/C R/L * N F * 字符发生存储器地址AGG 要写的数据 读出的数据 从CGRAM或DDRAM读数 1

8

图(3)lcd显示模块

3.2·4整体电路图

整体电路就是将各模块电路与89C51搭建起来,形成完整的电路,以实现功能,其

protes仿真中的整体电路如图(4)所示:

图(4)整体电路

9

3.3原件清单:

名称 数量 At89c51 1 按键开关 7 电容(1nf 20uf) (2 1) 极性电容 1

电阻1k 2 12Mhz晶振 1 9脚上拉排阻 1 蜂鸣器 1 PNP 1 LCD1602液晶显示屏 1

4、系统调试

系统调试分为软件调试和硬件调试,单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。但通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。可见硬件的调试是基础,如果硬件调试不通过,软件设计则是无从做起。

4.1软件调试

软件调试主要是运用Keil和Proteus完成。在写好源程序,画出原理图之后,在电脑上进行软件仿真。 Keil的使用简介:

先建一个新的工程,选择处理器,这里选择AT89S52;接下来可以新建一个文档用来编辑程序,编辑完存为.asm(汇编源文件)或 .h(C语言头文件)或.c(C语言实现文件)即可;接下来把保存的.asm, .c或.h文件加入到工程里即可。然后进行工程配置。点击Project菜单下的Options for Target ‘Target 1’。 在弹出对话框的Target 项里输入晶振为12M,然后勾上Use On-chip ROM。在Output项里勾上Create HEX File。最后编译程序,keil会自动为你生成.hex文件。 Proteus的使用简介:

将系统原理图在Proteus环境下画好,然后运用Proteus进行仿真,观察其功能实现情况。

10

4.2硬件调试

硬件方面主要是对电路板焊接技术以及布线的整体把握,电路板做好后,经过对单片机烧写程序、调试等一系列工序,硬件达到了预期的效果,各个按钮均能实现其预期功能。

5、心得体会

本次计算机综合设计让我更加的了解到单片机的应用,和C语言的重要性。我通过基于典型单片机AT89S52的设计和应用,对单片机的工作原理及功能有了更加深刻的了解,并对单片机程序语言设计有了新的、进一步的认识。

在本次设计的过程中,我发现很多的问题,给我的感觉就是下手很难,很不顺手,看似很简单的电路,要动手把它给设计出来,是很难的一件事,主要原因是我们没有经常动手设计过电路。另外单片机系统的知识似懂非懂,而且很多知识当时弄明白了,现在要用的时候又不记得,造成我用了大量的时间去查阅各种资料和程序命令,因此整个过程时间安排不合理。由于设计的计划没有安排好,设计的时间极为仓促,尤其是在硬件调试的过程中出现了很大的问题。

11

[参考文献]

[1]徐惠民,安德宁.单片微型计算机原理、接口及应用.第二版[M].北京:北京邮电大学出版社.2000.

[2]李建忠.单片机原理及应用[M].西安:西安电子科技大学出版社.2007.

[3]胡汉才.单片机原理及其接口技术学习辅导与实践教程[M] .北京:清华大学出版社.2003.

[4]夏路易,石宗义.电路原理图与电路板设计教程[M].北京:北京希望电子出版社.2002. [5]李刚,林凌.新概念单片机教程[M].天津:天津大学出版社.2003. [6]崔华,蔡炎光.单片机实用技术[M].北京:清华大学出版社.2005.

[7]张毅刚,彭喜源,谭晓昀.MCS52单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社.2004.

[8]何立民.单片机应用系统设计[J].单片机与嵌入式系统应用.1990.

[9]马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社.2005. [10]张迎辉,贡雪梅.单片机实训教程[M].北京:北京大学出版社.2006. [11]彭介华.电子技术课程设计指导[M].北京:高等教育出版社.1997

12

附录1 pcb

13

附录2 源程序

#include

#define uchar unsigned char #define uint unsigned int

uchar code tab1[]=\

uchar code tab3[]=\比赛结束时显示

uchar code tab4[]=\比赛结束时显示A/B最后得分 sbit lcden=P2^0;

sbit lcdrw=P2^1; //1602的3个控制接口 sbit lcdrs=P2^2; sbit key1=P1^0;

sbit key2=P1^1; //四个按键接口 sbit key3=P1^2; sbit key4=P1^3; sbit key5=P1^4; sbit key6=P1^5;

sbit Bell=P2^7; //蜂鸣器接口 uint flag; //标志位定义

uchar i,num,count; uchar sec,min,miao; //其它参数定义 uchar Ascore,Bscore; //两队得分定义

void delay(uint z) //液晶显示延时函数 { uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com(uchar com) //LCD命令函控制数 { lcdrs=0; P0=com; delay(5);

lcden=1; delay(5); lcden=0;

}

void write_dat(uchar date) //LCD数据写入函数 { lcdrs=1;

14

P0=date; delay(5);

lcden=1; delay(5); lcden=0;

}

void write_time(uchar add,uchar date) //写入时间函数 { uchar shi,ge; shi=date/10; ge=date;

write_com(0x80+add); write_dat(0x30+shi);

write_dat(0x30+ge);

}

void write_miao(uchar add,uchar date) //{ uchar shi,ge; shi=date/10;

ge=date;

write_com(0x80+0x40+add); write_dat(0x30+shi); write_dat(0x30+ge);

}

void write_Ascore(uchar add,uchar date) //{ uchar bai,shi,ge; bai=date/100; shi=date/10;

ge=date;

write_com(0x80+0x40+add); write_dat(0x30+bai); write_dat(0x30+shi); write_dat(0x30+ge);

} void write_Bscore(uchar add,uchar date) //{ uchar bai,shi,ge; bai=date/100; shi=date/10;

ge=date;

write_com(0x80+0x40+add);

write_dat(0x30+bai);

写入24秒函数 写入A队得分函数 写入B队得分函数

15

write_dat(0x30+shi);

write_dat(0x30+ge); }

void write_score(uchar add,uchar date) //比赛结束写入得分函数 { }

uchar bai,shi,ge; bai=date/100; shi=date/10; ge=date;

write_com(0x80+0x40+add); write_dat(0x30+bai); write_dat(0x30+shi); write_dat(0x30+ge);

void delay_Bell(uint z) //蜂鸣器延时函数 { }

uint x,y;

for(x=z;x>0;x--) for(y=255;y>0;y--);

void init() //初始化函数 { Bell=1; flag=0; min=12; sec=0; miao=24; 冲

write_com(0x38); //写入显示模式指令

write_com(0x0c); //显示是否打开以及光标的设置 write_com(0x06); //地址指针的加减和整屏是否移动 write_com(0x01); //清屏指令

write_com(0x80+0x00); //显示字符的初始位置 for(num=0;num<16;num++) {

write_dat(tab1[num]);

Ascore=0; Bscore=0; lcdrw=0;

lcden=0; //E的初始值为低电平,后面的程序给高电平从而满足E为高脉

}

write_Ascore(0,Ascore); write_Bscore(5,Bscore); TMOD=0x01;

TH0=(65536-50000)/256;

16

TL0=(65536-50000)%6; EA=1; ET0=1;

TR0=0; //关定时器 write_time(10,min); write_time(14,sec); //显示比赛时间

write_miao(14,miao);

}

void keyscan() //按键函数 { if(key1==0) {

TR0=!TR0; //开/关中断 delay(5); }

if(key2==0) //刷新24秒 { delay(5); if(key2==0) {

while(!key2);

miao=25;

} }

if(key3==0) { delay(5);

if(key3==0) { while(!key3);

Ascore++;

write_Ascore(0,Ascore);

}

//写入A队得分

}

if(key4==0) { delay(5); if(key4==0) { while(!key4);

Bscore++;

write_Bscore(5,Bscore); } //写入B队得分

}

17

if(key5==0) { delay(5); if(key5==0) { }

while(!key5); Ascore--;

write_Ascore(0,Ascore);

}

if(key6==0) { delay(5); if(key6==0) {

while(!key6);

Bscore--;

write_Bscore(5,Bscore); }

}

}

void main() { init(); while(1) { keyscan();

if(flag==0) { write_com(0x80+0x40+10); // write_dat('1'); write_dat('s'); write_dat('t');

}

if(flag==1) { write_com(0x80+0x40+10); // write_dat('2'); write_dat('n'); write_dat('d');

}

if(flag==2) {

write_com(0x80+0x40+10); //写入第一节写入第二节写入第三节

18

write_dat('3');

write_dat('r'); write_dat('d'); }

if(flag==3) { write_com(0x80+0x40+10); //写入第四节 write_dat('4'); write_dat('t'); write_dat('h');

}

if(flag==4) //比赛结束显示\和两队比分

{

TR0=0;

write_com(0x80); for(i=0;i<16;i++) { write_dat(tab3[i]); //\字符串数组

}

write_com(0x80+0x40); //起始地址为53,将字符调到了第二行 for(i=0;i<16;i++)

{ write_dat(tab4[i]); }

write_score(5,Ascore); //比赛结束写入两队比分 write_score(11,Bscore);

}

} }

void timer0() interrupt 1 //定时器 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; count++; if(count==18) { count=0; sec--; miao--; if(sec==((-1))) { sec=59;min--; if(min==(-1)) //若比赛(单节)结束,蜂鸣器响4秒

{

Bell=0;

19

delay_Bell(2040);

Bell=1; min=11; flag++; } }

if(miao==0)

write_miao(14,miao);

}

}

{ miao=24;

TR0=!TR0;

write_miao(14,miao); write_time(10,min); write_time(14,sec); Bell=0;

delay_Bell(2040);

Bell=1;

}

write_time(10,min); write_time(14,sec);

显示比赛时间20

//

本文来源:https://www.bwwdw.com/article/nm5p.html

Top