文档库

最新最全的文档下载
当前位置:文档库 > 基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

摘要

单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。

本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。

其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。

主控芯片采用AT89S52单片机,采用C语言进行编程,编程后利用Keil uVision3来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能是否能够正常实现。仿真成功后,焊接硬件电路,通过ISP下载器将hex文件烧制到单片机。

目录

1. 概述 (2)

1.1 背景知识介绍 (2)

1.2 设计内容 (2)

1.3计任务和要求 (3)

1.4 设计意义 (3)

2.系统总体方案及硬件设计 (4)

2.1 系统总体方案设计 (4)

2.2 硬件电路设计 (5)

2.2.1时钟电路模块 (6)

2.2.2 复位电路模块 (6)

2.2.3显示模块 (7)

2.2.4 报警模块 (8)

2.2.5总硬件电路设计 (9)

3 软件设计 (10)

3.1 软件总体设计方案 (10)

3.2 软件设计具体过程 (11)

3.2.1延时模块设计 (12)

3.2.2 数码管动态刷新显示程序 (12)

3.2.3 T0中断程序 (14)

3.2.4 加分子程序 (15)

3.2.5减分子程序 (15)

3.2.6 调整时间子程序 (16)

3.2.7 半场交换比分子程序 (18)

3.2.8 比赛暂停子程序 (19)

3.2.9 中场指示灯程序 (20)

3.2.10 主程序 (21)

4 . PROTEUS仿真 (23)

4.1 PROTEUS简介 (23)

4.2仿真过程 (23)

5. 硬件焊接与调试 (26)

6.课程设计体会 (27)

参考文献 (28)

附1 源程序 (29)

附2 系统原理图............................................................................................ 错误!未定义书签。

1. 概述

1.1 背景知识介绍

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

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

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

1.2 设计内容

本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。

其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。

1.3计任务和要求

任务:设计一个用于赛场的篮球计时计分器。

要求:1、能记录整个赛程的比赛时间,并能随时实现暂停。

2、能随时刷新甲、乙两队在整个过程中的比分。

3、中场交换比赛场地时,能自动交换甲、乙两队比分的位置。

4、比赛中场和结束时,能发出报警声。

5、通过指示灯指示上下半场。

6、当比赛时间需要回倒时,能通过按键实现回表。

7、加分有误时可通过按键实现减分调整。

1.4 设计意义

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

2.系统总体方案及硬件设计

2.1 系统总体方案设计

篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块。通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。这四个模块的相互连接如下图(图1)所示:

基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。

2.2 硬件电路设计 单片机AT89S52简介

AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash 存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S52(如图2)具有如下特点:40个引脚,8k Bytes Flash 片内程序存储器,256 bytes 的随机存取数据存储器(RAM ),32个外部双向输入/输出(I/O )口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT )电路,片内时钟振荡器.

X T A L 2

18

X T A L 1

19A L E 30E A 31P S E N

29

R S T

9

P 0.0/A D 0

39

P 0.1/A D 138P 0.2/A D 237P 0.3/A D 336P 0.4/A D 435P 0.5/A D 534P 0.6/A D 633P 0.7/A D 732P 1.0

1

P 1.12P 1.23P 1.34P 1.45P 1.56P 1.67P 1.78P 3.0/R X D

10

P 3.1/T X D 11P 3.2/I N T 012P 3.3/I N T 113P 3.4/T 014P 3.7/R D 17P 3.6/W R 16P 3.5/T 115P 2.7/A 1528P 2.0/A 8

21

P 2.1/A 922P 2.2/A 1023P 2.3/A 1124P 2.4/A 1225P 2.5/A 1326P 2.6/A 1427U1

AT89C5

图 2 AT89S52单片机引脚图

此模块电路包括时钟电路模块,复位电路模块及报警显示模块。

2.2.1时钟电路模块

时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。为达到振荡周期是12MHZ 的要求,这里要采用12MHZ 的晶振,另外有两个22P 的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。具体连接图如 图3所示:

图 3 晶振电路

2.2.2 复位电路模块

复位是单片微机的初始化操作,其主要功能是把PC 初始化为0000H ,使单片微机从0000H 单元开始执行程序。除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。RST 引脚是复位信号的输入端。复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图4

XTAL2

18

XTAL1

19

RST

9

P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.0/A821P2.1/A922P2.2/A10

23

U1

C1

33p

C5

33p

X2

CRYSTAL

XTAL2

18

30

PSEN

29RST

9

K5

C1

10u

R6

200R

22p

图 4 复位电路

2.2.3显示模块

本设计采用共阴极数码显示器,通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。本次设计在显示模块用到的是一个4位一体和2个两位一体共阴极数码管,共有8个代码输入口和8个位选输入口,采用排阻提供上拉电流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同,其具体图形如下图5图6所示

基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

图5

基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

图6

2.2.4 报警模块

蜂鸣器通过一NPN 三极管进行驱动,如图触发信号有基极引入。(图7)

LS1

SPEAKER

Q2

NPN

R3

0R1

图7

2.2.5总硬件电路设计

基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

图8

3 软件设计

在设计程序之前,我们首先要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。其次,要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的基础和条件。

3.1 软件总体设计方案

本次单片机课程设计软件设计部分采用模块化程序设计,程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成.其程序流程图如图9图10。

基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

图9 主程序流程图

基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)

图10扫描刷新显示子程序流程图

3.2 软件设计具体过程

软件设计部分采用模块化程序设计,用C语言编写。Keil是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows

界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51

生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成。

3.2.1延时模块设计

void delay(int t) 调用该子程序能实现延时功能

{ 通过参数t,可以调成延时时间while(t--)

{

unsigned int i; 设置变量i的变化范围,能调整延时的单位时间for(i=0;i<200;i++); 长度,i越小,延时的单位时间越短,精度越高}

}

3.2.2 数码管动态刷新显示程序

void display(int i,int j,int x,int y) 变量i,j,x,y分别为分,秒,A分数,B分数

{

if(jie==1&&bujin!=2) 当中间变量jie==1时,为上半场,此时对P1赋值

P1=0xbf; 使P1=0xbf, 即P1=1011 1111B,上半场指示灯对应点亮

P2=0xfe; 数码管动态刷新显示程序P2=1111 1110, i为分钟

P0=seg[i%100/10]; P2=0xfe,所以刷新显示时间的分钟十位,调用延时程序,delay(1); 延时数码管的点亮

P2=0xff;

P0=0;

P2=0xfd; 同理,动态刷新时分钟个位并延时点亮

P0=seg[i%10];

delay(1);

P2=0xff;

P0=0;

P2=0xfb; 同理,动态刷新时秒钟十位并延时点亮P0=seg[j%100/10];

delay(1);

P0=0;

P2=0xff;

P2=0xf7; 同理,动态刷新时秒钟个位并延时点亮

P0=seg[j%10];

delay(1);

P0=0;

P2=0xff;

P2=0xef; 同理,动态刷新A分数十位并延时点亮P0=seg[x%100/10];

delay(1);

P2=0xff;

P0=0;

P2=0xdf; 同理,动态刷新A分数个位并延时点亮

P0=seg[x%10];

delay(1);

P2=0xff;

P0=0;

P2=0xbf; 同理,动态刷新B分数十位并延时点亮

P0=seg[y%100/10];

delay(1);

P0=0;

P2=0xff;

P2=0x7f; 同理,动态刷新B分数十位并延时点亮

P0=seg[y%10];

delay(1);

P0=0;

P2=0xff;

}

本设计中各个数码管采用动态驱动,使各位数码管逐个轮流受控显示,由于扫描速度极快(本实验中大约每20毫秒刷新一次),所以显示效果与静态驱动相同。

3.2.3 T0中断程序

void t0(void) interrupt 1 本设计调用定时器T0,计时单位为一秒{

TH0=0xb1; 对定时器T0送入计数初值,由于TH0=0xb;

TL0=0x10; TL0=0x10 故定时器定时为20毫秒,即每

if(n==0) 20毫秒调用一次void t0(void) interrupt 1 {

n=60;

m--;

}

i++;

if(i==50)

{ 令i值为50 50*20毫秒=1秒,来实现计时 n--; 单位为一秒

i=0;

}

display(m,n-1,x,y); 调用动态刷新显示程序,即每20毫秒刷新一} 次数码管