基于AT89C51的篮球计时、计分器设计

更新时间:2024-04-19 20:23:01 阅读量: 综合文库 文档下载

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

毕 业 论 文

学生姓名 学

张傲

学 号

170906039

物理与电子电气工程学院 电子信息科学与技术

专 业

题 目 基于AT89C51的篮球计时、计分器设计

指导教师

2013 年 5 月

魏东旭 硕士/讲师

淮阴师范学院毕业论文(设计)

摘 要:本文中的系统主要使用AT89C51芯片作为核心元件,结合外部的显示电路及键盘控制电路,构成了一个篮球计时计分器。整体电路主要由AT89C51芯片、键盘控制、计分显示器和计时显示器四个模块组成。设计中主要使用Keil软件和Proteus软件。Keil软件主要用来对C语言程序进行编译。Proteus软件主要用来对硬件电路进行仿真。整个设计可以实现计分显示、计时显示和比赛结束报警等功能。设计结果表明,在篮球比赛中使用计时计分器可以准确的记录比分和比赛时间,也可以增加篮球比赛的观赏性。

关键词:AT89C51,篮球,计时器,计分器

2

淮阴师范学院毕业论文(设计)

Abstract:In this paper, the system mainly uses AT89C51 chip as a core component, combination of external display circuit and keyboard control circuit, constituting a basketball timing score indicator. Overall circuit mainly consists of AT89C51 chip, the keyboard control, a scoring display and a timer display. The design Mainly used Keil software and Proteus software. Keil software is mainly used to compile the C language program. Proteus software is mainly used for the simulation of hardware circuit. The design can realize scoring display, timer display and alarm functions at the end of the game. Design results show that using the timer in the basketball match score indicator can accurately record the score and the game time. It can also add to the look of a basketball game.

Keywords:AT89C51, basketball, timer, score indicator

3

淮阴师范学院毕业论文(设计)

目录

1 绪论 ...................................................................................................... 5 1.1设计背景 .............................................................................................. 5 1.2设计目的 .............................................................................................. 5 1.3设计要求 .............................................................................................. 6 2 系统硬件介绍 ...................................................................................... 6 2.1单片机概述 .......................................................................................... 6 2.2 AT89C51性能介绍 ............................................................................. 6 2.3显示器介绍 ........................................................................................ 11 3 硬件电路设计 .................................................................................... 12 3.1系统构成框图 .................................................................................... 12 3.2振荡电路 ............................................................................................ 13 3.3计时计分LED显示器设计 .............................................................. 13 3.4控制键盘器 ........................................................................................ 15 4 软件设计方案 .................................................................................... 16 4.1篮球计时计分器总流程如图 ............................................................ 17 4.2计时器示流程图 ................................................................................ 18 4.3计分器显示流程图 ............................................................................ 19 5 仿真与调试 ........................................................................................ 20 5.1软件简介 ............................................................................................ 20 5.2仿真结果 ............................................................................................ 21 结 论 ........................................................................................................ 28 参 考 文 献 ............................................................................................ 29 致 谢 ...................................................................................................... 30 附录A 硬件电路整体图 ...................................................................... 31 附录B 源程序 ...................................................................................... 32

4

淮阴师范学院毕业论文(设计)

1 绪论

本文介绍的是基于单片机控制的篮球计时计分器的发展和前景,论述其系统的组成框图,对各部分电路的功能及其器件进行论证,主要包括计分器显示电路,计时器显示电路、键盘控制电路、振荡电路等。具体论述电路的实现方案及各部分电路使用器件。并设计软件部分的程序流程图、编写相应的程序。最后,应用Proteus软件,实现了功能仿真。

1.1设计背景

在日常生活中单片机将我们的生活变的更加智能,许多繁琐的系统如果改由单片机进行设计,便能使系统更简洁、更智能。给人们的生活带来更大的便捷。随着现在技术发展,智能化越来越普遍,越来越给人们的生活带来改变。单片机与串口通信的结合更多地应用到各种系统中已成一种趋势。

此次设计就是单片机和篮球的完美结合。现如今篮球是一项风靡全球的运动,特别是美国职业篮球的球星们更是众多球迷所喜爱的运动员。很多人很熟悉篮球,也对篮球的计时计分有所了解。篮球比赛是两个队在规定的时间内得分多少来决定胜负的,这就需要有计时计分器记录下每队的得分以及所花时间。因此篮球计时计分器就应运而生。或许许多人有着用翻牌器计分的记忆,但是根据目前高水平的篮球要求,需要更精确更及时的计时计分。以便于观众能更好的欣赏比赛,能更好的感受比赛紧张的气氛。于是就有了应用AT89C51设计的篮球计时计分器。

1.2设计目的

当今社会随着单片机在各个领域的广泛应用,许许多多用单片机做核心的球赛计时计分系统也随之而产生,例如用AT89C51单片机控制LCD液晶显示器计时计分器,还有使用单片机控制LED七段显示器计时计分器等。

本次设计采用的是由AT89C51控制LED七段数码管作显示的篮球比赛计时计分器。该系统具有比赛时间设置,比赛时间暂停,甲乙双方比分累加,甲乙双方比分切换等功能。它具有价格低廉,性能稳定,操作方便并且易于携带等特点。广泛适合各类学校或者小型团体作为赛程计时计分 [1]。

通过本次基于C51系列篮球计时计分器的设计,可以了解、熟悉有关单片机开发设计的过程,并加深对单片机的理解和应用以及掌握单片机与外接设备连接的一些方法和技巧,这主要表现在以下一些方面:

5

淮阴师范学院毕业论文(设计)

(1) 篮球赛计时计分系统包含了8051系列单片机的最小系统的构成,同时在此基础上扩展了一些外接设备。

(2) 可以了解到LED显示器的结构、工作原理以及这种显示器的接口实例、具体连接与编程方法。

1.3设计要求

(1)篮球计时计分器功能:

记录比赛双方比分,可进行加减分 交换场地时比分交换 倒计时形式记录比赛时间 比赛结束发出报警声 (2)设计硬件电路图。

(3)画出程序流程图、编写程序、完成编译。 (4)硬件电路进行连接、调试、并完成Proteus仿真。

2 系统硬件介绍 2.1单片机概述

单片机是把一个计算机系统集成在一块半导体芯片上,其目的在于计算机微型化和提高系统的可靠性。单片机的内部硬件结构和指令系统主要是针对自动控制应用而设计的,所以单片机又称微控制器MCU(Micro Controller Unit)。单片机由运算器,控制器,存储器,输入输出设备构成,相当于一个微型的计算机(最小系统),和计算机相比,单片机缺少了外围设备等。单片机是通过内部的总线把计算机的各个主要部分连接到一个机构,其内部包括三种总线:地址总线、控制总线和数据总线[2]。单片机的体积小、质量轻、价格便宜,为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择[3]。

2.2 AT89C51性能介绍

MCS-51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了很多品种,如8031,8051,8751等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51

6

淮阴师范学院毕业论文(设计)

系列单片机。

AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k 字节的可反复擦写的只读程序存储器和128 bytes的随机存取数据存储器(RAM)。AT89C51单片机使用的是高密度的生产技术并且还不容易丢失内部存储的数据,对其进行编译是可以使用51单片机指令系统。

AT89C51是一个使用性能高但是损耗功率很小的单片机,40个外部引脚,其中包含有32个双向输入/输出(I/O)端口,单片机内部还含2个全双工串行通信口,以及2个16位可编程定时计数器和2个外中断口;它主要由中央处理器,控制器,存储器,I/O接口,定时器/计数器, 中断控制系统,内部总线等部分组成。如图2-1所示

2-1 AT89C51引脚图 主要特性:

兼容MCS-51的相关指令系统 4K字节可擦写存储器 32个I/O接口 8*128bit位内部RAM 2个16位定时/计数器 工作时钟频率0-24MHz 5个中断源

可供编程使用的串行口

7

淮阴师范学院毕业论文(设计)

管脚说明: VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口是一个8位双向输入/输出端口,拥有内部上拉电阻。P2端口输出的缓冲器能够驱动4个TTL逻辑电平。当P2端口写“1”时,内部上拉电阻拉高端口,这种状态下P2端口可以作为输入端口使用。在被作为输入端口使用时,被外部拉低的引脚因为内部电阻的原因,从而输出电流。当访问外部程序存储器或使用16位地址的外部数据存储器(例如执行MOVX @DPTR)时,P2口送出高8位地址数据。在此应用中,P2口运用很强的内部上拉发送“1”。当使用8位地址(如MOVX @RI)来访问外部数据存储器时,P2端口输出P2锁存器的内容。因此,当Flash编程和校验时,P2口也会同时接收高8位地址字节和大量的控制信号[3]。

P3口:P3口为8位准双向I/O接口,内部具有上拉电阻,它是双功能复用口,每个引脚可驱动4个TTL负载。作为通用I/O接口时,功能与P1口相同,常使用第二功能。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能

P3.7端口也作为 /RD端口,功能是:外部数据存储器读选通 P3.6 端口也作为 /WR端口,功能是:外部数据存储器写选通 P3.5 端口也作为T1端口,功能是:记时器1外部输入 P3.4 端口也作为T0端口,功能是:记时器0外部输入 P3.3 端口也作为/INT1端口,功能是:外部中断1 P3.2 端口也作为/INT0端口,功能是:外部中断0 P3.1 端口也作为TXD端口,功能是:串行输出口 P3.0 端口也作为RXD端口,功能是:串行输入口

8

淮阴师范学院毕业论文(设计)

P3口同时也可以接收一些控制信号供编程校验和闪烁编程使用。

RST端口:复位输入端。当RST端口持续两个机器周期的高电平时,则单片机进行复位。

ALE/PROG:地址锁存允许/编程引脚。当访问外部的程序存储器时,ALE的输出用于锁存地址的地位字节,一边与P0口实现地址/数据复用。当不访问外部程序存储器时,ALE端口将输出一个1/6时钟频率的脉冲信号,这个信号可以用于识别单片机是否工作,也可以当做一个时钟向外输出。第二功能是对EPROM芯片进行编程和校验是,此引脚传送52ms宽的负脉冲信号。在需要的情况下,可以将地址为8EH单元的SFR的D0位置“1”,则ALE操作将无效。若这个位置“1”,ALE则仅在执行MOVC或MOVX指令时能被激活[13]。

PSEN:作为片外ROM选通线。在执行访问片外ROM的指令MOVC时,80C51自动在该引脚上产生一个负脉冲,用于对片外ROM的选通。在其他情况下,该引脚均为高电平封锁状态。

EA/VPP:作为允许访问片外程序存储器/编程电源线。80C51内置有4KB的程序存储器,当EA为高电平并且程序地址小于4KB时,读取内部程序存储器指令数据,而超过4KB地址时,则读取外部程序存储器指令。如果为低电平,则不管地址大小,一律读取外部程序存储器指令。由此看出,对于片内没有程序存储器的单片机,此引脚必须接地。

此引脚是复用引脚,其第二功能是片内EPROM编程/校验时的电源线,在编程时,此引脚需加上21V的编程电压。

XTAL1/XTAL2:作为片内振荡电路的输入端。作为片内振荡电路的输出端。

1.振荡器特性:

XTAL1引脚为片内振荡电路的输入端,XTAL2引脚为片内振荡电路的输出端。80C51单片机的时钟有两种方式:一种是片内时钟振荡方式,但是需要在18和19引脚外部接上一个石英晶振和振荡电容,振荡电容的值一般取30pF;另一种是外部时钟方式,就是将XTAL1悬空,外部时钟信号从XTAL2引脚输入[12]。

2.芯片擦除

当ALE引脚持续10ms的低电平时,我们可以通过准确的控制信号的不同组合方式来对三个锁定位和整个阵列进行电擦除。要想擦除芯片,就需要在不为空的存储字节在程序中被重复的编程之前,将代码阵列的值全部设置为“1”,如果不采取此动作,则无法擦除芯片[4]。

此外,稳态逻辑也存在于AT89C51中,静态逻辑在频率接近零频率时产生,而且其掉电模式能够从两种不同的软件中自选。

在空闲工作式下,将IDL位置为1,此时封锁了进入CPU的时钟,于是CPU进入空闲

9

淮阴师范学院毕业论文(设计)

待机状态。中断系统、串行口、计数器/定时器,仍有时钟信号,继续工作。在掉电工作方式下,将PD位置为1,可以使单片机的振荡器停止振荡,只有片内的RAM和SER中的数据保持不变,而且包括中断系统在内的全部电路都将处于停止工作的状态 [6]。

3.掉电模式

在掉电工作方式下,将PD位置为1,可以使单片机的振荡器停止振荡,只有片内的RAM和SER中的数据保持不变,而且包括中断系统在内的全部电路都将处于停止工作的状态。要想退出掉电工作方式,只能采用硬件复位,即需要在RST引脚上外加一个足够宽的复位脉冲,使80C51复位。不能采用中断唤醒的方法。想要使单片机从掉电方式退出后继续执行掉电前的程序,则必须在掉电前预先把SFR中的内容保存到片内RAM中 [5]。

表2-3 外部引脚状态表

模式 空闲模式 空闲模式 掉电模式 掉电模式 程序存储器 内部 外部 内部 外部 ALE 1 1 0 0 /PROG 1 1 0 0 P0 数据 浮空 数据 浮空 P1 数据 数据 数据 数据 P2 数据 数据 数据 数据 P3 浮空 浮空 数据 数据 4.程序储存器的加密

AT89C51可使用对芯片上的三个加密位LB1、LB2、LB3进行编程(P)或者不进行编程(U)。当加密位LB1被编程时,在复位期间,EA断的逻辑电平被采样并锁存,如果单片机上电后一直没有服位,则锁存起的初始值是一个随机数,这个随机数会保存到真正复位为止 。

10

淮阴师范学院毕业论文(设计)

2.3显示器介绍

显示器是最常用的输出设备,其种类繁多,但在单片机系统设计中最常用的是发光二极管显示器(LED)和液晶显示器(LCD)两种。由于这两种显示器结构简单,价格便宜,接口容易实现,因而得到广泛的应用。液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息, 如汉字、图形、图表等 。

两者之间的区别:

(1)二极本身发光, 液晶本身不发光,只是透射光。

(2)二极管体积大,图像质量一般,适合作室外大屏幕,价格较低。液晶成本较高,面积无法做得很大,但图像质量很好,适合做显示器。

(3)二极管耗电大,液晶耗电小。 (4)二极管图像刷新率低,液晶的高

LED显示器又称为数码管,LED数码管是将8个发光二极管组合在一起从而构成一个数码管。其中7个组成一个“8”字型,还有一个是圆点样的发光二极管作为一个小数点。由于其内部结构的引线已经全部连接完成,所以只要导出各自的每一笔划以及公共的电极。LED显示器有两种不同的形式:共阴极LED显示器和共阳极LED显示器,如图2-2所示 。本次设计使用的是共阴极LED显示器。

图2-2 共阴与共阳极LED显示器结构

LED显示器有两种方式:一是静态显示;二是动态显示。在本次设计中,采用的是动态显示。静态显示和动态显示各有各的有点;LED的静态显示优点是编程容易、管理简单,但是静态显示所要占的I/O口资源很多;而动态显示所占用资源较少,因此在显示的LED点较多的情况下,一般都采用动态显示方式[4]。在本次设计中,采用的是动态显示。这种电路的优点在于:通过分时方法分别控制每一个LED数码管的COM端口,从而促使每个数码管依次的接受控制并显示。通过程序设置依次点亮每个数码管,产生1ms~2ms的发光时间,因为每个人都存在视觉暂留的现象,加之受到发光二极管余辉效应的影响和信号的扫

11

淮阴师范学院毕业论文(设计)

描达到一定足够的速度,就能看到点亮后的显示结果。LED数码显示器如图2-3所示。

2-3 7段LED数码管

3 硬件电路设计 3.1系统构成框图

本次设计主要基于AT89C51单片机,主体的计时计分器系统框图如图3-1所示。 晶振电路 计分显示电路 控制键盘

图3-1系统整体框图

计时显示电路 89C51 本系统采用单片机AT89C51作为本设计的核心元件。利用7段共阴LED作为显示器件。在本次设计中,共接入8个共阴LED显示器,其中4个用于记录 甲、乙两队的分数,每队2个LED显示器分数范围可达到0—99分,足够满足赛程需要。另外4个LED显示器则用于记录赛程的时间,分别用于记录分钟和秒钟。赛程计时采用倒计时方式。即比赛前将时间设置为10分钟,比赛开始时启动计时,直至计时到零为止。其次键盘共设置了16个开关,0-7号键盘为计分键盘分别控制甲队、乙队得分,为防止出现分加错的情况,特别设置了3、7号开关为减分按钮。8、9按钮分别是比分清零和比分切换按钮。A-F按钮则是控制时间及比赛开始。复位按钮控制复位情况。

12

淮阴师范学院毕业论文(设计)

3.2振荡电路

本次设计要使用到AT89C51单片机的时钟振荡功能。AT89C51中有一个用于构成内部震荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自激振荡器[7]。AT89C51的时钟主要分为两种方式:第一种是片内时钟振荡,另一种是外部时钟方式。本次设计采用的是第一种片内时钟振荡方式,通过在18和19端口外接石英晶体和振荡电容组成,这样既可产生本设计所需的时钟。振荡电路如图3-2所示。

图3-2 时钟振荡电路

3.3计时计分LED显示器设计

本次设计的核心就是采用AT89C51设计出一整套计时计分器,以满足与篮球比赛的需要。本次设计的LED显示器采用的是动态驱动方式。

动态驱动,就是通过控制依次点亮每一段数码管,每个数码管点亮的时间在1ms至2ms,利用人眼的视觉暂留现象,就可以让人看到显示的结果。加之发光二极管还有余晖效应,只要信号的扫描达到一定的速度,就能稳定的显示信息。动态驱动不需要使用过多的I/O端口,这样可以简化电路。

要使LED数码管要能够正常显示,需要用驱动电路驱动数码管的各个段码,由此显示需要的数字和字母,所以按照LED不同的驱动方式,可以将其分为静态模式和动态模式两种[11]。

(1)动态显示驱动:使用数码管动态显示界面的显示方式,已成为在单片机的应用中最广泛的一种,动态驱动就是将每个数码管的8个显示的笔划“a, b, c, d, e, f, g, dp”

13

淮阴师范学院毕业论文(设计)

这几个引脚的同名端相连接,同时给数码管公共极COM增加了位元件选通控制电路,该位元件选通通过各自的独立输入/输出线控制。若单片机依次输出了字形码,则所有的数码管必会接收到同样的字形码。但是,单片机对于位元件选通电路的控制则决定了最终是哪个数码管能够显示出字形。因此,我们若想所需的数码管灯亮,则只要打开所需对应的数码管的选通控制,而不打开相应选通控制的数码管没有办法亮。动态驱动就是通过分时方法分别控制每一个LED数码管的COM端口,从而促使每个数码管依次的接受控制并显示。数码管在依次显示的过程当中,会产生1ms~2ms的发光时间,因为每个人都存在视觉暂留的现象,加之受到发光二极管余辉效应的影响和信号的扫描达到一定足够的速度,所以,人会接收到稳定的显示信息[10]。

(2)静态显示驱动:直流驱动被称为静态驱动。所谓的静态驱动就是其每一个的段码都必须要有一个单片机的输入/输出端口完成驱动。编程简单是静态驱动的优点,它的显示亮度非常高,占用I/O口多是它的缺点,假设想要驱动5个数码管都进行静态显示,那么就需要5?8?40根I/O口来驱动数码管,因为一个89C52单片机只有32个I/O口,所以,在实际应用时则需要用利用译码器进行驱动,因而对于硬件电路来说则提高了它的复杂度[9]。

计时计分器电路分别如图3-3、3-4所示。

图3-3计时显示器电路

14

淮阴师范学院毕业论文(设计)

图3-4计分显示器电路

3.4控制键盘器

控制键盘由16个按钮组成,主要分为两个部分,第一部分是比分控制键盘,另一部分是时间控制键盘。比分控制键盘由0-9号按钮组成,分别按下0~2号按钮甲队分别加一分、两分和三分,3号按钮为减分按钮,防止分数加错,每按下一次甲队减一分。4-6号按钮控制的是乙队的加一分、两分和三分,7号按钮同样是减分按钮每按下一次,乙队减一分。按下8号键,双方比分清零;中场结束后开始下半场比赛时需要交换比赛双方比分,此时按下9号按钮即可。A-F按钮则是比赛控制按钮及时间控制按钮。按钮A和按钮B分别控制时间的加一和减一,时间的加减只能再时间停止时进行。按下按钮C整个计时计分

15

淮阴师范学院毕业论文(设计)

5-10乙队加1分 5-12 乙队加3分

5-11乙队加2分

5-13 乙队减1分

2

6

淮阴师范学院毕业论文(设计)

5-14上半场甲乙两队得分 5-15 下半场交换场地比分交换

5-16比赛结束比分清零

27

淮阴师范学院毕业论文(设计)

结 论

通过本次基于AT89C51的篮球计时、计分器的毕业设计,实现了篮球比赛的计时计分,可应用于学校中的篮球比赛的计时计分。此次设计也使我对于单片机工作原理、功能有了宏观的了解,并对单片机汇编程序的应用有了新的、进一步的认识。

在进行本次设计之前,觉得这个设计是一个比较简单的设计,而且自己对篮球比赛也有所了解,举得自己应该能做好。不过在设计的过程中发现自己还是有许多不足的,虽然对知识有所了解,但是并不熟练,不能准确的将书本上的知识转化为设计的结果

在本次设计的过程中,我发现很多的问题,给我的感觉就是下手很难,很不顺手,看似很简单的电路,要动手把它给设计出来,是很难的一件事,主要原因是我们没有经常动手设计过电路。另外单片机系统的知识似懂非懂,而且很多知识当时弄明白了,现在要用的时候又不记得,造成我用了大量的时间去查阅各种资料和程序命令,因此整个过程时间安排不合理。由于设计的计划没有安排好,设计的时间极为仓促,尤其是在硬件调试的过程中出现了很大的问题。另外资料的查找也是一大难题,这就要求我们在以后的学习中,应该注意到这一点,更重要的是我们要学会把从书本中学到的知识和实际的电路联系起来,这不论是对我们以后的就业还是学习,都会起到很大的促进和帮助。

对于基于AT89C51的篮球计时、计分器的毕业设计,还有两点改进之处。一是加入24秒倒计时,对单次进攻时间做出限制;二是在单节比赛时间小于1分钟时,倒计时显示可以精确到0.1秒,这样可以更直观的看到比赛最后阶段的时间变化,也能使比赛变的更激烈,分秒必争。

28

淮阴师范学院毕业论文(设计)

参 考 文 献

[1] 彭为.黄科,雷道仲.单片机典型系统设计实例精讲[M].北京:电子工业出版社,2006. [2] 李广弟. 单片机基础[M]. 北京:北京航空航天大学出版社,1996. [3] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,1996.

[4] 诸昌钤.LED显示屏系统原理及工程技术[M].成都:电子科技大学出版社,2000. [5] 唐俊杰,高秦生. 微型计算机原理及应用[M]. 北京:高等教育出版社,1998. [6] 陈梓城. 电子技术实训[M].北京:机械工业出版社,2002.

[7] 何立民.MCS-51单片机应用系统设计[M].北京:北京航天航空大学出版社,1990. [8] 张建勋.C语言程序设计教程[M].北京:清华大学出版社,2008.

[9] 余发山.单片机原理及应用技术[M].徐州:中国矿业大学出版社,2003.12. [10] 吴秀清. 微型计算机原理与接口技术[M].北京:中国科学技术出版社,2008.6. [11] 樊明龙,任丽静.单片机原理与应用[M].北京:化学工业出版社,2005.6. [12] 周航慈.单片机应用程序设计技术[M].北京:北京航空航天大学出版社,2002. [13] 崔华,蔡炎光著.单片机实用技术[M].北京:清华大学出版社,2001.

29

淮阴师范学院毕业论文(设计)

致 谢

在这三个半月的时间里,首先感谢魏老师对我的帮助。魏老师是一个有责任心、有耐心、有包容心的一个老师,具有丰富的单片机知识和设计经验。在此次设计中魏老师给予了我很大的帮助,当我对程序不知所措时,是魏老师给我指点迷津,让我在毫无头绪的状态下慢慢理清思绪,在他的帮助和指导下我才能顺利的完成此次设计。我从魏老师身上学到了很多专业知识,还学到了对待学术严谨的态度和独立发现并解决问题的能力。

其次我要感谢物理与电子电气工程学院的所有老师,谢谢你们四年来对我的教诲以及帮助,没有你们的教诲也不会有今天的我。还要感谢我的班主任孙老师,这四年来你为我们操劳了很多,感谢这四年来你对我的关心和指导。

我还要感谢我的舍友,大学四年来是你们陪我度过每一个日日夜夜,在你们的支持和陪伴下,我走过来大学四年。在本次设计中你们也给了我很大的帮助,在我困惑的时候帮我理清思路。还要感谢全班同学,是你们给了我一个多姿多彩的大学生活。

最后我要感谢所有帮助过我的同学和老师,还有我的父母,在你们的支持下,我走过来大学四年,从你们身上我学到了很多,让我终生受益,谢谢你们!

30

淮阴师范学院毕业论文(设计)

附录A 硬件电路整体图

31

淮阴师范学院毕业论文(设计)

附录B 源程序

#include #define uchar unsigned char #define uint unsigned int Uchar

code

tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//0,1,2,3,4,5,6,7,8,9关显示 uchar b,d,t; //定义变量

uchar fen=10,miao=0; //定时初始时间变量 uchar flag; //标志位 uchar temp; //矩阵键盘键值 sbit beep=P1^7; //蜂鸣器 void delay(uint z) //延时子函数 { uint x,y; for(x==z;x>0;x--) for(y==110;y>0;y--); }

void dispaly() //定时时间显示 {

uchar miaoge,fenge,miaoshi,fenshi; miaoge=miao; P2=0x80;; P0=tab[miaoge]; delay(1); miaoshi =miao/10; P2=0x40; P0=tab[miaoshi]; delay(1); fenge=fen; P2=0x10;

32

淮阴师范学院毕业论文(设计)

P0=tab[fenshi]; delay(1); P2=0x00; }

void dispaly1(char a) //甲队比分显示 {

uchar ge1,shi1; b=a; ge1=b; P2=0x02; P0=tab[ge1]; delay(1); shi1=b/10; P2=0x01; P0=tab[shi1]; delay(1); P2=0x00; }

void dispaly2(char c) {

uchar ge2,shi2; d=c; ge2=b; P2=0x08; P0=tab[ge2]; delay(1); shi2=d/10; P2=0x04; P0=tab[shi2]; delay(1); P2=0x80;

3

3 乙队比分显示淮阴师范学院毕业论文(设计)

}

void keyscan() //矩阵键盘扫描控制 {

char a,c,e,f; dispaly1(a); dispaly2(c); P3=0xfe; temp=P3; temp=temp&0xf0; while (temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while (temp!=0xf0); {) temp=P3; if(temp==0xee) { delay(5); if(temp==0xee) {

a++; if(a>=100) a=99; dispaly1(a); } }

if(temp==0xde) { dalay(5);

//甲队比分加1 3

4 淮阴师范学院毕业论文(设计)

if(temp==0xde) {

a=a+2; //甲队比分加2 if(a>=100) a=99; diapaly1(a); } }

if(temp==0xbe) { dalay(5); if(temp==0xbe) {

a=a+3; //甲队比分加3 if(a>=100) a=99; diapaly1(a); } }

if(temp==0x7e) { dalay(5); if(temp==0x7e) { a=a--;

if(a<=-1) //甲队比分减1 a=0; diapaly1(a); } }

while(temp!=0xf0) //松手检测

3

5

淮阴师范学院毕业论文(设计)

{ temp=P3; temp=temp&0xf0; dispaly1(a); } } } P3=0xfd; temp=P3; temp=temp&0xf0; while (temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while (temp!=0xf0) { ) temp=P3; if(temp==0xed) { delay(5); if(temp==0xed) {

c++; //乙队比分加1 if(c>=100) c=99; dispaly2(c); } }

if(temp==0xdd) {

3

6 淮阴师范学院毕业论文(设计)

dalay(5); if(temp==0xdd) {

c=c+2; //乙队比分加2 if(c>=100) c=99; diapaly2(c); } }

if(temp==0xbd) { dalay(5); if(temp==0xbd) {

c=c+3; if(c>=100) c=99; diapaly2(c); } }

if(temp==0x7d) { dalay(5); if(temp==0x7d) { c=c--;

if(c<=-1) c=0; diapaly2(c); } }

//乙队比分加3 //乙队比分减1

3

7

淮阴师范学院毕业论文(设计)

while(temp!=0xf0) { temp=P3; temp=temp&0xf0; dispaly2(c); } } } P3=0xfb; temp=P3; temp=temp&0xf0; while (temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while (temp!=0xf0) { temp=P3; if(temp==0xeb) { delay(5); if(temp==0xeb) {

a=0; dispaly1(a);

c=0; dispaly2(c); } }

if(temp==0xdb)

//甲队比分清零//乙队比分清零3

8 淮阴师范学院毕业论文(设计)

{ delay(5); if(temp==0xdb) { e=a; f=c; a=f; dispaly1(a); c=e;

dispaly2(c); //两队比分切换 } }

if(flag!=1) //避免误操作,只有在时间停止的情况下才能加减定时时间 {

if(temp==0xbb) { delay(5); if(temp==0xbb) {

fen++; //定时时间加1 if(fen==99) fen=0; } }

if(temp==0x7b) { delay(5); if(temp==0x7b) {

fen--; //定时时间减1 if(fen==-1)

39

淮阴师范学院毕业论文(设计)

fen=99; } } }

while(temp!=0xf0) { temp=P3; temp=temp&0xf0; dispaly2(c); } } } P3=0xf7; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; if(temp==0xe7) { delay(5); if(temp==0xe7) {

TR0=1; flag=1; }

//比赛开始计时按键4

0

淮阴师范学院毕业论文(设计)

}

if(temp==0xd7) { delay(5); if(temp==0xd7) {

TR0=0; //比赛暂停计时按键 flag=0; } }

if(temp==0xb7) { delay(5); if(temp==0xb7) {

fen=0; //比赛时间清零 miao=0; } }

while(temp!=0xf0) { temp=P3; temp=temp&0xf0; dispaly2(c); } } } }

void timer0(void)interrupt1 //T0中断服务 {

TH0=0x4C; //50ms延时初值

41

淮阴师范学院毕业论文(设计)

TL0=0x00; t++; if(t==20)

{ //50ms走20次刚好1s,1s时间到减1操作 t=0; miao--; if(miao==-1) {

fen--; //当59s减完,分减1 miao=59; }

if(fen==-1) {

fen=0; //分清零 miao=0; //秒清零

beep=0; //时间停止,蜂鸣器响 } } }

void init() //T0中断初始化 {

TMOD=0x01;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; ET0=1; EA=1; TR0=0; }

void main() //主程序 { P2=0xfe;

4

2 淮阴师范学院毕业论文(设计)

init(); while(1) { dispaly(); keyscan(); } }

4

3

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

Top