湖南工程学院课程设计课程名称专业设计课题名称篮球比赛电子记分牌设计专业电子科学与技术班级1102班学号201101040211姓名指导教师李延平2014年5月15日等级:湖南工程学院课程设计任务书课程名称专业设计课题篮球比赛电子记分牌设计专业班级电子科学与技术1102班学生姓名学号11指导老师李延平审批任务书下达日期2014年5月5日任务完成日期2014年5月16日设计内容与设计要求设计内容及要求:设计一个篮球比赛记分牌,使用6位数码管显示倒计时的分钟、秒钟值;3位数码管显示A方得分;3位数码管显示B方得分;使用LED灯作为上、下半场的标志;按键实现单次加分值包括1分、2分和3分;半场时间到输出3秒的声光提示;可进行比赛暂停、比赛加时等操作;终场时间到输出5秒的声光提示目录一系统总体方案设计........................................................11总体设计思路..........................................................12总体设计框图..........................................................2二软件仿真设计............................................................32.1主程序设计..........................................................32.1.1设计思路......................................................32.1.2流程图........................................................42.1.3仿真总图......................................................52.2键盘输入模块设计....................................................62.2.1设计思路......................................................62.2.2流程图........................................................72.2.3仿真电路......................................................82.3数码管显示模块设计..................................................82.3.1设计思路......................................................82.3.2流程图.......................................................102.3.3仿真电路.....................................................10三系统调试...............................................................11四总结与心得体会.........................................................18五参考文献...............................................................19六附录(源程序).........................................................201一系统总体方案设计1总体设计思路本设计以STC89C52RC单片机为核心设计的篮球比赛电子记分牌。本设计采用定时器T0中断计时,定时器T1中断分时显示比赛比分与比赛时间,并由6位八段共阴数码管显示(比赛时间显示只用四位)。控制模块由4*4矩阵键盘输入控制,具有:开始暂停功能,对比赛分数加1、加2、加3、减1,中场切换显示比赛得分功能;对时间(加时赛)加1、减1功能。提示模块由8个LED灯和蜂鸣器完成。L0~L3亮表示上半场,L4~L7亮表示下半场,L0、L1、L6、L7亮表示加时赛,全亮表示半场(上半场、下半场或加时赛)结束;上半场时间到8个LED灯全亮3秒,蜂鸣器蜂鸣3秒;终场时间到8个LED灯全亮5秒,蜂鸣器蜂鸣5秒。22总体设计框图图1.2总体设计框图01234567891011121314154*4矩阵键盘STC59C52RC8个LED指示灯L1L2L0L33L4L5L6L7蜂鸣器6位7段共阴数码管3二软件仿真设计在本设计中,系统的软件设计采用了模块化的设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。2.1主程序设计2.1.1设计思路本设计中单片机的主要功能就是利用内部的定时器计时,并随时接受矩阵键盘控制模块的信息,将比赛的得分(分别以3个数码管)和剩余时间显示在6位八段共阴数码管上。利用定时器T0实现比赛时间的倒计时,并以分、秒显示在4个数码管上。定时器T1实现比赛的比分与比赛剩余时间分时(相隔3秒)显示在数码管上。上半场结束时,A、B对比赛得分自动切换显示在数码管上。上半场比赛时,以D1~D4点亮作为标志;下半场比赛时,以D5~D8点亮作为标志;加时赛时,以D1、D2、D7、D8点亮作为标志。上半场结束时,D1~D8全亮3秒,蜂鸣器蜂鸣3秒;下半场或终场结束时,D1~D8全亮5秒,蜂鸣器蜂鸣5秒。42.1.2流程图图2.1.2主程序流程图NN开始初始化倒计时显示是否按键执行控制程序是否到时蜂鸣器响LED亮YN52.1.3仿真总图图2.1.3仿真总图62.2键盘输入模块设计2.2.1设计思路本设计中采用4*4矩阵键盘,矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4*4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。编程算法采用线反转法。线反转法原理是先将行线作为输出线,行线作为输入线,列线输出全“0”信号,读入行线的值,那么在闭合键所在的列行线上的值必为0;然后从列行线输出全“0”信号,再读取列线的输入值,闭合键所在的列线值必为0。这样,当一个键被按下时,必定可读到一对唯一的行列值。再由这一对行列值可以求出闭合键所在的位置,之后对系统进行相应的控制。矩阵键盘的行线分别与P3.0~P3.3相连,P3.4~P3.7相连。其中,按键“A+1”、“A+2”、“A+3”、“A-1”、“B+1”、“B+2”、“B+3”、“B-1”分别对A、B队加减相应的分数,“开始/暂停”键控制计分计时的开始与暂停,“T+1”、“T-1”对加时赛的比赛得分加减,“中场切换”用于在半场结束后交换双方记分牌上的分数,按键12~15未被使用。72.2.2流程图图2.2.2键盘输入模块流程图开始列线输出为0,读入行线值去抖检测有无按键按下行线输出为0,读入列线值去抖检测有无按键按下再次读入行线值,保存当前行线值读入列线值等待按键松开键盘行、列值的线值组合值,查码表,得到对应值121A+22A+33A-14B+18开始/暂停0A+1811314155B+26B+37B-111切换10T-19T+1执行相应的操作NNYY82.2.3仿真电路图2.2.3键盘输入模块仿真图2.3数码管显示模块设计2.3.1设计思路本设计用到的是六位一体的八段共阴数码管。由于数码管内部发光二极管点亮时也需要5mA以上的电流,而单片机的I/O口送不出如此的的电流,所以使用74HC573锁存器驱动数码管。数码管的A、B、C、D、E、F、G、DP的引脚全部连在一起与U1元件74HC573锁存器的数据输出端相连,锁存器的数据输入端连接单片机的P0口,P0口同时加了上拉电阻。数码管中1、2、3、4、5、6是它们的位选端,每一个数码管对应一个位选端,与U2元件74HC573的数据输出9端的低六位相连,U2的数据输入端也接到单片机的P0口。两个锁存器的锁存端分别与单片机的P2.6和P2.7相连,因为用单片机可以锁存器的锁存端,进而控制锁存器的数据输出,这种分时控制的方法便可以方便的控制任意数码管显示任意数字。为了实时显示数据需要数码管动态扫描显示,所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光二极管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快,人眼已经无法分辨出来。需要注意的是:每次送段选数据前,需要加上“消影”,即“P0=0xff”。解释如下:送段选数据前,P0口仍然保持上次的位选数据,若不“消影”,接下来的打开段选锁存器命令后,原来保持在P0口的位选数据将立即通过段选锁存器直接加在数码管上,接下来才是再次通过P0口给段选锁存器送入段选数据,使得数码管出现混乱现象。102.3.2流程图图2.3.2数码管显示模块流程图2.3.3仿真电路图2.3.3数码管显示模块仿真图关段选开位选开位选送位选数据关位选延时关位选关显示P0=0xff开始开段选送段选数据11三系统调试在系统完成之际,调试过程中发现了一些问题。首先是数码管显示部分,在单片机执行其他任务如等待按键释放或蜂鸣器发声的时候,数码管就会灭掉,我尝试了很多解决办法,但最后还是没有拿出一个比较满意的方案。究其原因,8051系列单片机是单任务系统,在执行“等待按键释放”这一任务时,就会停止对数码管的驱动,导致数码管熄灭。使用锁存器可以保持数码管的显示,但是数字是“死”的,即在另一任务结束之前无法刷新,因此最终设计方案是每次按键时使数码管全灭。另一个问题是实物演示过程中出现的,当将程序下载到开发板上运行时,有一行按键始终无法响应,但是在Proteus里仿真却是正常的。最终证明是按键消抖延时的问题,这让我意识到仿真和实物是有差距的,只有亲自接触实物,才能真正学好单片机。12部分仿真与硬件显示效果图:上半场时间显示:13上半场比赛比分显示:14下半场比赛比分显示:15半场时间到,显示:16加时赛比赛比分显示:17比赛结束显示:18四总结与心得体会为期两周的专业设计拉下了帷幕,我深刻体会到了其中的苦与乐,感悟甚是深切。所谓的专业设计对我来说也就是个单片机课程设计,只不过这次的课程设计与以往的课程设计不同,这次是课程还没结束前做的课程设计。由于自己在去年的时候就开始在自学51单片机,因此对单片机有一定的了解,有一定的实践操作,所以这次课程设计对我来说相对轻松一点点。这一次的课程设计,我的课题是《篮球比赛电子记分牌》。由于这一系统包含单片机基础、数码管动态显示、矩阵键盘扫描、定时器和中断等知识体系,涉及面较广,通过这一课程设计,可以更好地检测和巩固学到的知识,系统的组织的知识,加深对单片机认识。从程序设计到仿真再到硬件调试,我除了得到了正确的结果之外,更多的是面对错误和失败,而这些错误大多数是由于自己对该部分电路原理掌握的不够透彻导致的算法错误,及编程实践经验太少导致的语法错误。比如在比赛得分与比赛剩余时间的分时显示设计中,由于没有把分时显示的标志变量放到while死循环中,导致无法实现分时显示的功能。另外,按键时数码管熄灭多个函数调用按键扫描程序导致的部分按键失效,这都是我对单片机认识不够深入,因为8051系列单片机是单任务系统。不过面对误与失败我从未放弃过,曾经为了解决按键失效的问题,我整整搞了一天半,终于在第二天晚上一点钟的时候把它给解决了。当然,遇到问题时,更多的是查阅资料及与同学讨论。通过与同学的讨论,在同学帮助下,我一一解决了