基于单片机课程设计电子记分牌Word文件下载.docx
《基于单片机课程设计电子记分牌Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机课程设计电子记分牌Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
数码管工作的本质是将要显示的数据的字型码送给他,如何采集到变化的分数和时间并送给数码管。
用查表吗?
c:
分数时间显示都应该有对应的数码管,如何控制数码管,使时间和分数都显示在相对应的数码管上?
加分与倒计时在程序中最本质的东西是什么,如何用程序来说明这样的事件,各事件之间又是如何联系的。
虽然这些问题看似很普通,似乎在设计过程中都要面对这样的问题,何不事先就解决这些问题呢,在逐一回答这些问题的同时,该任务的设计方案已见雏形。
以下就是该方案的详细内容以及我问题的答案。
系统原理图如下图一所示:
图一
二硬件设计说明:
(一)电路图:
(二)单片机AT89SC51的I/O口分配使用情况
图中P0.0,P0.1,P0.2,分别是给A对加分,B对加分,比赛暂停的控制口,通过按键检测高低电平来控制,其具体控制过程见程序。
P3.2与P3.3口是外部中断,其中断服务程序的功能是实现比分交换和比分与时间的切换显示。
P2.0至P2.3口是数码管工作控制单,电路中选择共阳极的数码管,可以省去输入端的驱动电路,使电路更简洁。
P0口作为字形码的输出口,与数码管的八只管教相连。
(三)元器件的参数及规格:
主要元器件有单片机芯片AT89SC51,共阳极数码管,9012PNP三极管。
其中单片机承载程序,实现电路功能,三极管起开关及驱动数码管显示作用。
数码管显示比分和时间。
三软件设计说明:
程序的总体思路是主程序一直在扫描按键,倒计时减一,比分显示,比分交换,时间与比分的切换都在中断服务程序中完成。
其具体内容如下所示。
(一)软件设计思路及流程图:
--------------主程序流程图------------------
---------按键扫描程序-----------------------
------------------分数显示程序流程图--------------
其中时间显示的子程序流程图与分数的大同小异,此处就不再一一列出。
(二)程序的总体框架结构说明:
程序包含按键扫描程序,不断地扫描按键,一旦有控制中断的按键按下,就执行中断程序,交换比分,切换时间与比分,并且显示时间或分数。
中断服务程序,INT_0交换A对与B对的总分,INT_1改变软件标志位就可以切换分数与时间的显示,同时扫描按键。
时间显示程序;
分数显示程序,延时程序,用于按键消抖。
(三)重要程序段的功能,作用及思路简介:
按键扫描程序是本程序中最重要的程序段,其连接了所有的子程序,子程序的调用都是在其中完成。
下面就对该程序段的功能,作用及编写思路做详细说明。
;
---------------------按键扫描程序----------------------
L0:
JNBF0,L1;
检测软件标志位,其中软件标志位
;
P3.2,P3.3决定,即外部中断。
LCALLDISPLAY_FS;
显示分数,并且扫描按键
L5:
AJMPKEY
L1:
LCALLDISPLAY_SJ;
中断时显示时间
KEY:
JBP1.0,KEY_1
LCALLDEL12MS
JNBP1.0,$
INCR2;
完成给A对加分并且显示
CJNER2,#99,L2
MOVR2,#00H
L2:
LJMPKEY_1
KEY_1:
JBP1.1,KEY_2
LCALLDEL12MS
JNBP1.1,$
INCR3;
完成给B对加分
CJNER3,#99,L3
MOVR3,#00H
L3:
LJMPKEY_2
KEY_2:
JBP1.2,KEY_3
JNBP1.2,$
cplTR1;
暂停时关闭定时计数器,停止计时
LJMPL0
JBP1.2,KEY_3;
若要比赛开始,检测开始键是否按下
SETBTR1;
比赛开始,恢复计时,完成暂停与开始切换,
LJMPKEY_3
KEY_3:
LJMPL0
(四)完整的程序清单:
------------程序初始化---------------------------------
TIME1EQU11H;
存储时间秒的个位
TIME2EQU12H;
存储时间秒的十位
TIME3EQU13H;
存储时间分的个位
TIME4EQU14H;
存储时间分的十位
TIMESEQU15H;
存储时间秒
TIMEFEQU16H;
存储时间分
ASCORE2EQU17H;
A队分数的十位
ASCORE1EQU18H;
A队分数的个位
BSCORE2EQU19H;
B队分数的十位
BSCORE1EQU20H;
B队分数的个位
------------主程序-----------------------------------
ORG0000H
LJMPSTART
ORG0003H;
外部中断0入口地址
LJMPINT_0
ORG001BH;
定时器T1中断入口地址
LJMPINT_2
ORG0013H;
外部中断1入口地址
LJMPINT_1
ORG0100H
START:
MOVSP,#60H
MOVTMOD,#10H
MOVTL1,#0B0H
MOVTH1,#3CH;
基本定时时间为50ms
MOVR7,#20
MOVTIME4,#1
MOVTIME3,#1
MOVTIME2,#5
MOVTIME1,#9;
设开始比赛时间为12分钟
MOVTIMES,#59
MOVTIMEF,#11
MOVASCORE2,#00H
MOVASCORE1,#00H
MOVBSCORE2,#00H
MOVBSCORE1,#00H;
置比赛开始时A对与B对的比分为00:
00
MOVR3,#00H;
暂存比赛分数,初始状态为零
SETBTR1
SETBEA
SETBET1
SETBEX0
SETBEX1
SETBIT0
SETBIT1
JNBF0,L1
LCALLDISPLAY_FS
LCALLDISPLAY_SJ
JNBP1.0,$
INCR2;
LJMPKEY_1
JBP1.1,KEY_2
LJMPKEY_2
JBP1.2,KEY_3
比赛开始,恢复计时,完成暂停与开始切换,但是中断要关吗?
LJMPL0
----------场地交换时跳到INT_1场地交换入口--------------
------------------显示程序-----------------------------
DISPLAY_FS:
MOVDPTR,#TAB
MOVA,R2
MOVB,#10
DIVAB
MOVASCORE1,B
MOVASCORE2,A
MOVA,R3
MOVBSCORE1,B
MOVBSCORE2,A
MOVP2,#0FBH
MOVA,ASCORE1
MOVCA,@A+DPTR
MOVP0,A;
显示A对个位分数
MOVP2,#0F7H
MOVA,ASCORE2
显示A对十位分数
MOVP2,#0FEH
MOVA,BSCORE1
显示B对个位分数
MOVP2,#0FDH
MOVA,BSCORE2
显示B对十位分数
RET
DISPLAY_SJ:
MOVDPTR,#TAB
MOVA,TIMES
MOVTIME1,B
MOVTIME2,A
MOVA,TIMEF
MOVTIME3,B
MOVTIME4,A;
将时间BCD码转换,送往对应的存储单元
MOVA,TIME3
显示时间分的个位
MOVA,TIME4
显示时间分的十位
MOVA,TIME1
显示时间秒的个位
MOVA,TIME2
显示时间秒的十位
-------------------------定时器中断服务程序------------------------
INT_2:
DJNZR7,J1;
判断计时1秒是否已到?
CJNEA,#0,JJ1
CJNEA,#0,JJ2
MOVTIMEF,#12
SJMPJ1
JJ2:
DECTIMEF
JJ1:
DECTIMES
J1:
MOVTH1,#3CH;
1秒定时还没到,返回主程序继续执行
RETI
--------外部中断服务程序,实现场地交换,分数与时间切换------------------
INT_0:
MOV51H,R2
MOVR3,51H
MOVR2,A;
中断时执行A对与B对的总分交换
INT_1:
CPLF0;
由按键改变软件标志位,实现分数与时间的切换
-------------延时程序----------------------
DEL12MS:
MOV31H,#2;
延时子程序
MOVTMOD,#11H
MOVTL0,#18H
MOVTH0,#0FCH
SETBTR0
LOOP:
JNBTF0,$
CLRTF0
DJNZ31H,LOOP
RET
-------------------查表数据--------------------
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
-------------------程序结束---------------------
END
四制作调试说明:
(一)程序调试过程:
程序调试我花了两天的时间,此程序虽然不复杂,由于我平时学习的不够深入,也没用心学。
对于我这样的基础来说调试过程真的很痛苦。
刚开始调试时程序有两处让我感觉很乱,倒计时的中断程序和按键扫描程序中的中断程序如何调用。
当寄存A对或B对的分数累加到99的时候,就清零,但还没有累加到99的时候,程序应该跳往何处执行,我最初的是跳了继续累加。
在仿真中的现象就是分数一直显示99,加不了。
我真的是太大意了,调试的时候不踏实。
同样的错误我在时间显示中又犯了。
LCALLDISPLAY_FS
在按键扫描的入口程序处,我当时的疑虑是当软件标志位为0,即外部中断显示时间,当不中断的时候扫描按键,可是分数什么时候显示呢?
其是问题很简单,可以显示分数,那么也可以显示时间,只要用外部中断1即INT_1改变软件标志位即可。
(二)硬件调试:
此次的硬件焊接很成功,电路布局很清晰,虽然在调试时也发现错误,但用万用表很容易就检测出来了,其中有几根线的皮包线熔了,肉眼看不到。
重新整理电路后,功能明显成功。
至此,本次的单片机课程设计圆满结束。
五总结心得体会:
本次课程设计我得到的东西远比成功的设计结果得到的多。
某天在写程序烦的时候,我本想放弃,我平时单片机学的就很浅。
郁闷之际我看了一部美国励志电影,<
<
风雨哈弗路》.影片中的女主角丽丝在申请纽约时报奖学金最后一轮面试中的一段自白让我明白了为什么我做了很多,可我还是不懂。
就如同我的单片机,其实我平时还是认真学的,课本上的每句话我都读过。
可是一遇到稍微难一点的编程我就没信心,我就想退缩。
改变我想法的这段对白是这样的:
丽丝说道:
你会怀疑地球是否在转动,即使你不在也如此。
情况总不能像你希望的一样,有些人的需求,有些人的信念比你更强烈。
我想人们在不知道生活有多困苦时感到失败,所以人们久久围困于自己的失败中,我们称为愤怒,对事物的整体视而不见。
对于所有能成功的微小元素,以及什么事成功视而不见。
因为我的父母迫使我向深处里观察,我有幸能看到所有的微小事物是如何最终聚集在一起,最终形成产物的,所以我从来不问为什么这样,为什么那样,我知道为什么。
这样并不能让我高兴,很多时候倒让我觉得和难过。
但我总是勇于接受,但我总是勇于接受事实,我知我总想离开的环境。
对与我来说,她的这段自白让我明白我不是笨,也不是我懒,而是我思考的不够深。
对于那些构成成功的微小元素视而不见。
往往就是这些微小的元素决定啦成败。
所以我鼓起勇气坚持我的程序,虽然不是很顺利,但也尝到了点成功的滋味,他给我的是在以后让我学会如何思考。
六参考资料列表:
单片机原理及接口技术.机械工业出版社.胡建主编
维普期刊