单片机控制篮球计分器Word格式文档下载.docx
《单片机控制篮球计分器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机控制篮球计分器Word格式文档下载.docx(37页珍藏版)》请在冰点文库上搜索。
进度计划
时间(周.星期)
设计内容
1.1
布置设计任务,系统总体设计,
1.2—1.3
硬件系统设计
1.4—1.5
软件系统设计
2.1—2.2
绘制硬件电路图和软件程序框图
2.3—2.4
编写设计说明书,准备答辩
2.5
答辩
成绩评定办法(评定考核项目、考核标准、所占比重)
按出勤(10%)、方案设计(图纸+程序设计+说明书)(60%)、答辩(30%)给定设计成绩。
成绩分五档:
优、良、中、及格、不及格。
参考资料
(1)《单片机初级教程》,何立民,北京航空航天大学出版社,北京:
2004
(2)《单片机原理及接口技术》,余锡存等,西安电子科技大学出版社,西安:
2000
(3)《51系列单片机及C51程序设计》,王建校等,科学出版社,北京:
2002
(4)《ProtelDXP入门与精通实用教程》,唐清善等,中国水利水电出版社,北京:
指导教师(签字)
年月日
2.摘要
本设计主要设计了一个基于AT89C51单片机的电子时钟倒计时及篮球比赛双方的计分。
并在数码管上显示相应的时间及双方得分。
并通过一个控制键用来实现双方得分的转换和24秒倒计时还是半场25分钟倒计时。
应用Proteus的ISIS软件实现了单片机篮球计分系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
关键字:
单片机;
电子时钟;
篮球比赛;
键盘控制。
题目五:
(2)利用键盘进行比分输入、修改和暂停。
3概述
单片计算机即单片微型计算机。
由RAM,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬件的能力。
本次设计介绍一种有AT89C51编程控制LED8段数码管作显示的球赛计时计分系统。
本系统具有赛程定时设置、赛程时间暂停、及时刷新甲、乙队双方的成绩以及赛后成绩暂存等功能。
它具有价格低廉、性能稳定、操作方便且易携带等特点。
广泛适合各类学校和小团体作为赛程计时计分。
随着单片机载各个领域的广泛应用,许多用单片机作控制的球赛计时计分器系统也应运产生,如用单片机控制LCD液晶显示器计时计分器,用单片机控制LED七段显示器计时计分器等。
4.系统设计
4.1系统总体设计
4.1.1主控系统分析与论证:
据设计要求,本组认为此设计属于多输入量的复杂程序控制问题,通过小组组员的讨论,在老师指导下,本组采取使用单片机为核心部件的方案。
基于单片机的篮球比赛计时计分系统的构成框图如图1-1所示
本系统采用单片机AT8051作为本设计的核心元件。
利用8段
共阴LED作为显示器件。
在此设计中共接入10个8段共阴LED显示器,其中6个用于记录甲、乙两队的分数每队3个LED显示器显示分数范围可达到0-999分,足够满足赛程需要。
另外4个LED显示器则用来记录赛程的时间,其中2个用于分钟;
2个用于显示秒钟。
赛程设计采用倒计时方式。
即比赛前将时间设置好,比赛开始启动计时,直至计时到零为止。
计分范围可达到0~99分钟也满足实际赛程的需要。
其次,为了配合计时器和计分器校正、调整时间和比分,特定在本设计中设立了5个按键。
其中4个用于输入甲、乙两队的分数;
另外1个则用于完成设置、调整等功能。
最后,还设计了定时报警系统,即比赛时间到,我们立即通过扬声器发出报警声,提示整个赛程结束。
4.2控制系统的硬件设计
4.2.1单片机型号的选择
通过对多种单片机性能的分析,最终认为8051是最理想的电子篮球计分系统的开发芯片。
8051是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的8051是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。
4.2.2数码管显示工作原理
数码管是一种把多个LED显示段集成在一起的显示设备。
有两种类型,一种是共阳型,一种是共阴型。
共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。
共阴型就是把多个LED显示段的阴极接在一起,即为公共端。
阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。
通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP是小数点位段。
而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。
即所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。
数码管显示方法可分为静态显示和动态显示两种。
静态显示就是数码管的8段输入及其公共端电平一直有效。
动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;
每位数码管的阳极连在一起组成公共端。
利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
图3.1共阴数码管
4.2.3键盘电路设计
利用8段共阴LED作为显示器件。
图3.2控制键
4.2.4整个电路原理图
图3.3系统电路原理图
4.3控制系统的软件设计
4,3,1程序设计
本系统的软件系统主要可分为主程序、定时计数中断程序、数码显示程序、键盘扫描程序,数据处理程序【分值加减与处理程序】,时间与倒计时程序,延时程序四大模块。
在程序设计过程中,加强了部分软件抗干扰措施,下面对部分模块作介绍。
编程前,必须设置好地址、数据以及控制信号。
编程单元的地址加在P1口和P2口的P2.0—P2.3(11位地址范围为0000H—0FFFH),数据从P0口输入,引脚P2.6、P2.7、P3.6、P3.7的电平设置参考校验电路,/PSEN为低电平,RST保持高电平,EA/Vpp引脚是编程电源的输入端,按要求加上编程电压,ALE/PROG引脚输入编程脉冲。
编程时,可采用4—20MHZ的时钟振荡器,本次设计采用12MHZ的石英晶体振荡器。
具体过程是:
(1)在地址线上加上要编程单元的地址信号,这里为33H,34H,35H,36H,37H,38H,6个地址符。
(2)在数据线上加上要写入的数据字节,比如甲队加一分就是在36H地址上加上(偏移)一个字符06H。
(3)激活相应的控制信号。
(4)在高电压编程方式时,将EA/Vpp端加上+12V编程电压。
(5)改变编程单元的地址和写入的数据,重复1—5步骤,直到全部文件编程结束,每个字节写入周期是自身定时的,通常约为1.5ms。
3.2程序流程图:
本次设计的程序流程图如下图所示:
图3-1主要模块说明
图3-2主要模块说明
(1)赛程时间设置
通过按键K5、K6来设置赛程时间。
篮球比赛的一节时间为12分钟,通过按K5按键,使LED数码管1显示“1”即可。
在按K6按键,设置比赛时间的个位数,即使数码管2显示“2”。
(2)赛程时间启动/停止设置
当时间设置好之后,比如每节时间为12分钟,则数码管1~4上分别显示1200,即12表示时间,00表示秒钟。
这时,如果裁判吹响开始哨声,则立即按下K7按键,即比赛开始,计时显示由1200变为1159、1158……一直到0000时为止,即表示比赛结束。
图3-3计时部分流程图
(3)比分刷新控制
由于在比赛中,两队的比分在不断变化,所以需要设置比分刷新控制,该功能由按键K1~K4完成,具体如下:
K1按键:
甲队比分加1;
K2按键:
甲队比分减1;
K3按键:
乙队比分加1;
K4按键:
乙队比分减1。
2.2计分部分模块流程
图3-3计分部分流程图
(4)24s显示控制
24s值在程序中设置,由数码管5、6来显示,即数码管5、6显示24.比赛开始时按下K7按键24s随赛程时间一起计时,即计时显示由24变成23、22、21……直到00.然后再由24s开始重新计时。
(5)计时计分显示
计时计分显示采用七段共阴LED数码管显示,其中计分6个数码管,赛程时间4个数码管,24秒2个数码管,数码管显示格式分别是:
000000和0000以及00。
4.4外观设计
显示器外观正视图
显示器外观侧视图
按钮装配体截图
控制键盘正视图
5.结论
在齐凤莲老师耐心的指导下,我们顺利完成了这次单片机课程设计课题中的基于单片机的篮球计分系统的设计,通过这次的设计使我们认识到对单片机方面的知识知道的还是太少,对于书本上的很多知识还不能灵活运用,尤其是对程序设计的规范性和灵活性,不能够充分灵活运用每个语句,导致编程的程序过于复杂与无序,使得需要的存储空间增大,损耗了过多的内存资源,和阅读性降低。
本次的设计使我们从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我们所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的篮球计分系统设计给我奠定了一个实践基础,我们会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我们也学到了许多新的知识,在和同学协作过程中增进同学间的友谊。
最后,感谢老师对我们的细心的指导,正是由于齐老师的细心的辅导和他提供给我们的参考资料,使得我的课程设计能够顺利的完成,同时在课程设计过程中,我巩固和学习了我的单片机知识。
相信这对我以后的课程设计和毕业设计将会有很大的帮助!
6.参考文献
7附录
主程序:
ORG0000H;
程序执行开始地址
SJMPMAIN;
跳到标号MAIN执行
ORG000BH;
定时器T0中断程序入口
SJMPT0SEVER;
跳转标号t0SEVER执行;
主程序开始
ORG0030H;
主程序执行开始地址
MAIN:
MOVSP,#70H;
初始化指针
MOVTH0,#0D8H;
10MST0定时初值高位
MOVTL0,#0F0H;
10MST0定时初值低位
MOVTMOD,#01H;
写控制字
SETBTR0;
开定时器T0
SETBEA;
开放CPU中断
SETBET0;
开T0中断;
定义初值
MOVR2,#59;
倒计时赋初值60秒
MOVR5,#100;
赋给R5k100次循环实现1s计时
MOVR4,#24;
赋给R4k24为24s倒计时赋初值
MOVR0,#24;
赋给49Hk25为25分钟半场计时赋初值
;
真正的主函数
LOOP:
LCALLKEY;
调用键盘扫描程序
LCALLXIANS;
调用显示程序
SJMPLOOP;
返回实现循环
中断程序
T0SEVER:
MOVTH0,#0D8H;
DJNZR5,T0END;
减1非0,实现100次循环计时1s
MOVA,R2;
用来判断是否借位
JZTSEVER3
DECR2;
R2实现秒计时(减1)
SJMPTSEVER3
判24秒倒计时
MOVR2,#60
TSEVER3:
MOVA,54H;
用1或者0来判断是否开始24s倒计时
JZTSEVER1;
判断A是0还是非0,非0则程序往下执行,0则跳出
MOVA,R4;
把24s初值送给A
JNZTSEVER2;
判断A是0还是非0,0(即24s倒计时完成)则程序往下执行,非0则继续减1倒计时
CPLP1.2;
清除P1.2标志指示
CALLDELAY
CPLP1.2
SETBP1.0;
置位P1.0标志
SETBP1.1;
置位P1.1标志
判断倒计时是否完成,完成则跳出,没完成则继续
TSEVER2:
DECR4;
R4减1,实现倒计时
TSEVER1:
MOVR5,#100;
R5重新赋初值
T0END:
RETI;
中断结束
键盘扫描及处理
判定键盘是否为一次完整按键
KEY:
MOVP3,#0FFH;
P3口全写1,以实现键盘输入
MOVA,P3;
把P3口的值给A
CPLA;
把A的值取反,以实现正逻辑
ANLA,#11111100B;
与操作,判断哪个键按下
JZKEYEND3;
若没有键按下,则跳出键盘扫描程序,若有键按下,程序往下执行
MOV30H,A;
把A的值存入30单元
LCALLDELAY
KEY1:
MOVA,P3;
再次把P3的值送给A
CPLA;
ANLA,#11111100B;
与操作,判断那个键按下
JNZKEY1;
如果还有键按下,则等待,若没有键按下则程序往下执行
判断程序
MOVA,30H;
把按键的值送给A
JNBACC.4,KEY4;
判断ACC.4键是否按下,若ACC4键按下,则跳转到KEY4,没有则往下执行
INC50H;
50单元自加1
KEY4:
MOVA,50H;
把50单元的值给A
MOVB,#2;
把2送给B
DIVAB;
A除以B,把余数送给B,用0和1来实现判断是否进行24s倒计时
MOVA,B;
把B给A
JNZJIAF;
判断A的值,为0则往下执行,非0则跳转到JIAF
CLRP1.0;
清除P1.0标志
SETBP1.1;
再次把按键值送给A
JNBACC.0,KEY31;
判断ACC.0键是否按下,没按下则跳转到KEY31,有则往下执行
INCR1;
甲方分数加1
KEY31:
JNBACC.1,KEY32;
判断ACC.1键是否按下,没按下则跳转到KEY32,有则往下执行
INCR1
甲方加2
KEY32:
JNBACC.2,KEY3;
判断ACC.2键是否按下,没按下则跳转到KEY3,有则往下执行
甲方加3
KEY3:
JNBACC.3,KEYEND2;
判断ACC.3键是否按下,没按下则跳转到KEYEND2,有则往下执行
MOVA,R1
JZKEYEND2分数减1
DECR1;
甲方
KEYEND2:
SJMPKEYEND1;
跳转到KEYEND1
JIAF:
CLRP1.1;
清除P1.1标志
SETBP1.0;
JNBACC.0,KEY21;
判断ACC.0键是否按下,没按下则跳转到KEY21,有则往下执行
INCR3;
乙方加1
KEY21:
JNBACC.1,KEY22;
判断ACC.1键是否按下,没按下则跳转到KEY22,有则往下执行
INCR3
乙方加2
KEY22:
JNBACC.2,KEY2;
判断ACC.2键是否按下,没按下则跳转到KEY2,有则往下执行
乙方加3
KEY2:
JNBACC.3,KEYEND1;
判断ACC.3键是否按下,没按下则跳转到KEYEND1,有则往下执行
MOVA,R3
JZKEYEND1
DECR3;
乙方减1
KEYEND1:
MOVA,30H;
JNBACC.5,KEYEND3;
判断ACC.5键是否按下,没按下则跳转到KEYEND3,有则往下执行
INC53H;
53单元自动加1
MOVA,53H;
把53单元的值给A
把2给B
A除以B,把余数给B
MOV54H,B;
把B的值存入54单元
MOVR4,#24
KEYEND3:
RET;
子程序结束
显示程序
甲方显示
XIANS:
MOVA,R1;
把甲方的分数给A
MOVB,#10;
把10给B
A除以B
MOV55H,B
DIVAB
MOVDPTR,#1000H;
把地址1000h给DPTR
MOVCA,@A+DPTR;
把A指向表格的内容给A
MOVP0,A;
把A的值送到p0口,实现甲方分数高位显示
MOVP2,#0FEH;
用p2口控制显示的位置
SETBP3.0
SETBP3.1
LCALLDELAY;
调用延时程序
MOVP2,#0FFH;
清除p2口控制
MOVA,B
MOVDPTR,#1000H;
MOVCA,@A+DPTR;
MOVP0,A;
把A的值送到p0口,实现甲方分数高位显示
MOVP2,#0FDH;
LCALLDELAY;
MOVA,55H;
把甲方低位给A
MOVDPTR,#2000H;
MOVP0,A;
把A的