单片机课程设计篮球比赛计分牌的设计.docx
《单片机课程设计篮球比赛计分牌的设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计篮球比赛计分牌的设计.docx(20页珍藏版)》请在冰豆网上搜索。
![单片机课程设计篮球比赛计分牌的设计.docx](https://file1.bdocx.com/fileroot1/2022-11/25/c25978a9-51fb-4983-9532-903cb1cb9a4c/c25978a9-51fb-4983-9532-903cb1cb9a4c1.gif)
单片机课程设计篮球比赛计分牌的设计
西安文理学院机械与材料工程学院
课程设计报告
专业班级
课程单片机课程设计
题目单片机课程设计篮球比赛计分牌的设计
学号
学生姓名
指导教师
2016年11月
西安文理学院机械与材料工程学院
课程设计任务书
学生姓名专业班级学号
指导教师职称讲师教研室
课程单片机课程设计
题目
篮球比赛计分牌的设计
任务与要求
Ø设计任务:
以AT89S51单片机为核心,设计一个篮球比赛计分牌。
裁判控制开始、暂停、清除和两队的加分按键。
比赛每节10分钟,允许暂停,且使用不同LED表示比赛状态。
比赛开始,按下可开始按键,绿色LED亮,进入10分钟倒计时。
比赛期间,若暂停键按下,倒计时暂停,黄色LED亮;当再次按下暂停按键,比赛继续进行。
当倒计时为0,比赛结束,红色LED亮,蜂鸣器响5秒。
比赛期间,裁判可通过加分按键分别给A队或B队加分,每按下一次加2分。
当清除按键按下,时间与分数全部清零。
Ø设计要求:
1.完成系统的硬件电路设计与软件设计;
2.采用C51语言编程;
3.采用Proteus、KeilC等软件实现系统的仿真调试;
4.设计报告要求思路清晰,结构合理,语言流畅,书写格式符合要求。
开始日期2016.11.7完成日期2016.11.22
2016年11月3日
摘要
单片机,亦称单片微电脑或单片微型计算机。
它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。
本设计是基于AT89S51单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
在此设计中共接入了3个两位一体7段共阴LED显示器,一个用来记录赛程时间,其中2位用于显示A队成绩,2位用于显示B队成绩,每队2个LED显示器显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了5个按键,用于设置调整时间启动,调整分数和暂停等功能。
采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。
主控芯片采用AT89S51单片机,采用C语言进行编程,编程后利用KeiluVision3来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能是否能够正常实现。
仿真成功后,焊接硬件电路,通过ISP下载器将hex文件烧制到单片机。
关键词:
计时;计分;LED;AT89S51
(点击鼠标右键,选择“更新域”,只更改页码)
一、设计目的
1.加深学生对51单片机的理解和开发应用能力。
2.培养学生综合运用知识的能力和工程设计的能力。
3.熟练掌握单片机开发的相关软件。
4.熟悉应用开发基本流程,学会查询相关芯片资料并自主学习应用。
二、设计要求和任务
Ø设计任务:
以AT89S51单片机为核心,设计一个篮球比赛计分牌。
裁判控制开始、暂停、清除和两队的加分按键。
比赛每节10分钟,允许暂停,且使用不同LED表示比赛状态。
比赛开始,按下可开始按键,绿色LED亮,进入10分钟倒计时。
比赛期间,若暂停键按下,倒计时暂停,黄色LED亮;当再次按下暂停按键,比赛继续进行。
当倒计时为0,比赛结束,红色LED亮,蜂鸣器响5秒。
比赛期间,裁判可通过加分按键分别给A队或B队加分,每按下一次加2分。
当清除按键按下,时间与分数全部清零。
Ø设计要求:
1.完成系统的硬件电路设计与软件设计;
2.采用C51语言编程;
3.采用Proteus、KeilC等软件实现系统的仿真调试;
4.设计报告要求思路清晰,结构合理,语言流畅,书写格式符合要求。
三、设计环境
1.C51编程软件:
Keil;
2.原理图设计及联调软件:
Proteus。
四、设计方案
4.1系统总体方案设计
篮球计时记分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警模块、按键控制模块、LED灯模块。
通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。
总体模块组成框图如下图4.1所示:
图4.1
本设计是基于AT89S51单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
此设计中共接入了3个两位一体的7段共阴LED显示器,一个用来记录赛程时间,两个用来分别记录A、B两队比赛分数,每队每赢一次加2分且LED显示器显示范围可达0~99分,赛程计时采用倒计时方式,比赛开始启动计时,直至计时到零为止。
4.2单片机AT89S51的简介
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提高性价比的解决方案。
AT89S51具有如下特点:
40个引脚、4kBytesFlash片内程序存储器、128Bytes的随机存取数据存储器(RAM)、32个外部双向输入/输出(I/O)口、5个中断优先级、2层中断嵌套中断、2个16位可编程定时计数器、2个全双工串行通信口、看门狗电路、片内时钟振荡器。
本系统采用单片机AT89S51为控制核心,系统主要由五大模块组成及单片机最小系统模块、数码管显示模块、蜂鸣器报警模块、LED等显示模块、按键控制模块。
单片机最小系统作为整个系统的控制核心,按键模块的5个按键对分数和时间进行控制然后显示在数码管上,蜂鸣器报警模块则根据程序设定的时间进行报警。
下面对各模块设计进行论证比较。
4.3单片机最小系统模块
对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路。
4.4按键控制模块
本设计采用独立按键。
每个独立按键与单片机每个I/O口连接,虽然不能节省I/O口,但电路简单且编程容易。
4.5显示模块
本设计采用共阴极数码显示器,一般共阴极接低电平,其他管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,改端所连接的字符导通并点亮,根据发光字段的不同组合可显示出不同数字或字符。
同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
本次设计显示模块用到的是3个两位一体的共阴极数码管,采用排阻提供上拉电流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示。
4.6报警模块
报警模块中,信号由单片机输出经PNP型三极管放大后进入蜂鸣器发出声响进行比赛时间的提示功能。
4.7LED灯显示模块
此模块中用不同颜色LED灯表示进程的不同状态,按键开始绿色灯亮,暂停黄灯亮,倒计时为零红灯亮。
五、硬件电路的设计
5.1单片机最小系统的硬件设计
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。
对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路。
各个电路的作用如下:
复位电路:
由电容串联电阻构成,由图并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定。
典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位,一般教科书推荐C 取10u,R取10K。
当然也有其他取法,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。
根据电路分析,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10k*10UF=0.1S,大于两个机器周期2us((1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。
所以单片机就能复位。
晶振电路:
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)
如图5.1最小系统的硬件设计:
图5.1
5.2显示模块的硬件设计
本设计采用七段数码管显示。
设计方便,易于操作,通过对不同管脚输入相对的电流,使其发亮,从而显示出数字且能够显示出所有可用数字表示的参数的器件。
如图5.2数码管显示电路:
图5.2
5.3按键控制模块的硬件设计
按键控制模块采用5个独立按键分别为:
开始、暂停、复位、A队加分、B队加分,他们与单片机的P1`3、P1`4、P1`5、P1`6、P1`7连接,每个按键的另一端则与地连接。
如图5.3按键控制模块电路图:
图5.3
5.4蜂鸣器报警模块的硬件设计
蜂鸣器报警模块是由一个蜂鸣器和一个PNP型三极管组成,接在单片机的P3`7口,蜂鸣器为5V驱动。
如图5.4蜂鸣器报警模块电路图:
图5.4
5.5LED灯显示模块的硬件设计
此模块设计了三个LED灯,分别用亮绿色表示开始,亮黄色灯表示暂停,亮红色灯表示倒计时为零。
如图5.5LED灯模块电路图:
图5.5
六、软件设计
6.1主程序设计
本系统中单片机的主要功能就是利用内部的定时器计时,并随时接受控制模块的信息,将比赛得分和剩余时间显示在数码管上。
其主程序流程图如图6.1所示:
N
Y
N
Y
图6.1
6.2按键控制程序设计
当key1键按下,程序开始运行;当key2键按下,程序暂停;当key3键按下,复位;当key4键按下,A队加2分;当key5键按下,B队加2分。
程序流程图如图6.2所示:
Y
N
Y
N
Y
N
Y
N
Y
N
图6.2
6.3蜂鸣器报警程序设计
在程序里设定一个变量,用if语句判断,当变量等于设定的时间段时即为倒计时为零时蜂鸣器响五秒。
流程图如图6.3所示:
Y
N
图6.3
6.4篮球记分牌源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLED_GREEN=P3^2;//绿色指示灯
sbitLED_YELLOW=P3^3;//黄色指示灯
sbitLED_RAD=P3^4;//红色指示灯
sbitBELL=P3^7;//扬声器控制脚
unsignedcharSum1=0,Sum2=0;
unsignedcharFlagStart=0;//开始标志=1开始=2暂停=3停止
unsignedcharCountSeg=8;//数码管位扫描寄存器
unsignedcharMiao=0;//秒显示计数器
unsignedcharFen=0;//分显示计数器
unsignedintCountT1=0;
unsignedcharSegDat[8]={10,10,10,10,0,0,0,0};//数码管显示缓存,
//计时数码管(SEGDAT[0],[1])计分1数码管(SEGDAT[2],[3],[4],[5],计分2数码管(SEGDAT[6],[7],[8],[9]
unsignedcodeTable1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF};//字模0~9-
unsignedcodeTable2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
voidArmBell(void);
voidEndBell(void);
voidkey_scan(void);
/****************T11MS定时中断***************/
voidInitTimer1(void)
{
TMOD=0x10;
TH1=0x0F8;
TL1=0x30;
EA=1;
ET1=1;
TR1=1;
}
/******************ms延时子程序*******************/
voiddelayms(unsignedintms)
{
unsignedchark;
while(ms--)
{
for(k=0;k<114;k++)
;
}
}
/****************主程序****************/
voidmain(void)
{
ucharKeyValue;
P1=0xff;
LED_GREEN=1;
LED_YELLOW=1;
LED_RAD=1;
InitTimer1();
while
(1)
{
KeyValue=P1;
if(KeyValue!
=0xff)
{
delayms(10);
KeyValue=P1;
if(KeyValue!
=0xff)
{
if(KeyValue==0xf7)//开始
{
FlagStart=1;
LED_GREEN=0;
LED_YELLOW=1;
LED_RAD=1;
Fen=10;
Miao=0;
CountT1=500;
SegDat[0]=Fen/10;
SegDat[1]=Fen%10;
SegDat[2]=Miao/10;
SegDat[3]=Miao%10;
}
elseif(KeyValue==0xef)//暂停
{
if(FlagStart==1)
{
FlagStart=2;
LED_GREEN=1;
LED_YELLOW=0;
LED_RAD=1;
}
elseif(FlagStart==2)
{
FlagStart=1;
LED_GREEN=0;
LED_YELLOW=1;
LED_RAD=1;
}
}
elseif(KeyValue==0xdf)//清0键
{
FlagStart=0;
LED_GREEN=1;
LED_YELLOW=1;
LED_RAD=1;
Fen=0;
Miao=0;
Sum1=0;
Sum2=0;
SegDat[0]=10;
SegDat[1]=10;
SegDat[2]=10;
SegDat[3]=10;
SegDat[4]=0;
SegDat[5]=0;
SegDat[6]=0;
SegDat[7]=0;
}
elseif(KeyValue==0xbf)//A队加分
{
if(FlagStart==1)
{
Sum1+=2;
SegDat[4]=Sum1/10;
SegDat[5]=Sum1%10;
}
}
elseif(KeyValue==0x7f)//B队加分
{
if(FlagStart==1)
{
Sum2+=2;
SegDat[6]=Sum2/10;
SegDat[7]=Sum2%10;
}
}
while(P1!
=0xff);
}
}
}
}
/****************T1定时中断扫描数码管****************/
voidTimer1Interrupt(void)interrupt3
{
TH1=0x0F8;
TL1=0x30;
CountSeg--;//数码管移一位刷新
P2=0xff;
P0=Table1[SegDat[CountSeg]];//写七段数码管数据。
P2=Table2[CountSeg];
if(CountSeg==0)
CountSeg=8;
if(FlagStart==1)
{
if(CountT1>0)CountT1--;
{
if(CountT1==0)
{
CountT1=500;
if(Miao>0)Miao--;
else
{
if(Fen>0)
{
Miao=59;Fen--;
}
else
{
FlagStart=3;
LED_GREEN=1;
LED_YELLOW=1;
LED_RAD=0;
CountT1=2500;
}
}
SegDat[0]=Fen/10;
SegDat[1]=Fen%10;
SegDat[2]=Miao/10;
SegDat[3]=Miao%10;
}
}
}
if(FlagStart==3)
{
if(CountT1>0)
{
CountT1--;
BELL=~BELL;
}
else
{
BELL=1;
}
}
}
七、调试分析
7.1硬件调试
接通电源,计时显示及开始倒计时工作,每节比赛10分钟,按下开始键倒计时,LED灯绿灯亮,并给A、B两队分别每赢一次加2分。
如图7.1(a)所示:
图7.1(a)
按下暂停和启动可实现对篮球计分计时的相应控制,与此同时暂停时LED灯黄灯亮,恢复开始绿灯亮。
如图7.1(b)所示:
图7.1(b)
每节十分钟结束后,即倒计时为0,比赛结束,LED灯红灯亮,蜂鸣器响5秒。
如图7.1(c)所示:
图7.1(c)
当复位键按下时,时间与分数全部清零。
如图7.1(d)所示:
图7.1(d)
7.2软件调试
软件调试采用Keil软件完成。
在写好源程序后,新建工程,选择AT89S51处理器;接着新建文档编辑程序,编辑完存为.C,把保存的.C文件加入到工程里,检查无语法错误后生成.HEX文件。
7.3硬件软件联调
软硬件联合调试主要是运用Proteus完成。
将系统原理图在Proteus环境下画好之后,将软件调试阶段Keil生成的.HEX文件下载到单片机里在电脑上进行软件仿真。
八、心得体会
通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我不得不考虑这方的问题,这让我无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。
通过这次实践使我更深刻的体会到了理论联系实际的重要性,我在今后的学习工作中会更加的注重实际。
在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。
通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。
在方案设计选择和芯片的选择上,培养了我综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。
还锻炼我个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。
并且我们熟练掌握了有关器件的性能及测试方法。
感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。
课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。
九、参考文献
[1]李川,汪秋蒙.ISP技术的原理及实现方法[J].科技讯.2007,35期:
93-94.
[2]万光毅.单片机实验与实践教程[M].北京:
北京航空航天大学出版社.2005.1.
[3]金炯泰,金奎焕.如何使用KEIL8051C编译器[M].北京:
出版社
[4]彭介华.电子技术课程设计指导[J].北京:
高等教育出版社,1997.
[5]何砟麻等﹒云南宇宙射线站奇特事例的再分析﹒中国科学,1995,A25:
596
[6]韩其智,孙洪洲﹒群论﹒北京:
北京大学出版社,1987﹒101