单片机c51篮球计时计分器课程设计.docx
- 文档编号:9322573
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:22
- 大小:143.02KB
单片机c51篮球计时计分器课程设计.docx
《单片机c51篮球计时计分器课程设计.docx》由会员分享,可在线阅读,更多相关《单片机c51篮球计时计分器课程设计.docx(22页珍藏版)》请在冰点文库上搜索。
单片机c51篮球计时计分器课程设计
单片机微机原理及应用
课目:
篮球记分牌的设计
学院:
电气工程学院
班级:
自动化08-2
姓名:
库万古丽(20082102427)
麦地楠木(20082102426)
指导教师:
帕子来提
完成时间:
2011年12月11日
篮球赛计时计分器
一设计目的
设计并制作一个用于赛场的篮球赛计时计分器,实现如下基本功能:
(1)能记录整个赛程的比赛时间,并能修改比赛时间,暂停比赛时间。
(2)能随时刷新甲,乙两队在整个赛程中的比分。
(3)中场交换场地时,能交换甲,乙两队比分的位置。
(4)比赛时间结束时,能发出报警指令。
二设计意义
通过篮球计分计时器的制作,可以使我熟悉,了解单片机开发设计实例的过程,并能使读者加深对单片机的理解和运用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下的一些方面:
(1)篮球计分计时器包含了8051系列单片机的最小应用系统的构成,同时在此基础上扩展了一些实用性强的外围接口。
(2)掌握键盘接口原理,能正确地把键盘使用到单片机系统中,可以了解到LED显示器的结构,工作原理以及这种显示器的接口实例。
(3)学会调试电路,分析电路故障,积累电路调试经验。
三具体设计内容
1系统框图构成
基于单片机系统的篮球计分计时器的系统构成框图如下所示:
2硬件电路改进:
由于原来的电路比较复杂,用了很多芯片,浪费成本,而且给后期调试的调试会带来较多麻烦,故对原来的硬件电路进行了改动。
改动方面主要关于数码管显示的驱动和位选的,前期的电路设计采用了大量的CD4511和CD4094来进行数码管显示的驱动和位选,而这次的电路设计只用了8个三极管就实现了这项功能。
下面前期电路设计的计时部分的原理图,还有更为复杂的计分原理图未给出
后期改进的整体原理图:
(3)软件调试及组装
软件的编程调试首先要抓住计分和计时两大模块,在这两大模块成功的基础上再进行其他细小模块的组装和完善。
主要编程的问题,所以就概述就举例子概述一下
计分模块和计时模块刚开始均会出现显示数值范围不正确或者十位和个位二者之中只显示个位的情况,经软件调试,重新编程后成功的解决了问题。
I上半场比赛结束,可按下交换比分按钮,交换甲乙两队的比分,重新调整计时时间为20分钟,按下启动按钮,下半场比赛开始
八篮球赛计时计分器程序流程图及程序
代码如下:
K1BITP1.0
K2BITP1.1
K3BITP1.2
K4BITP1.3
K5BITP1.4
K6BITP1.5
K7BITP1.6
K8BITP1.7
MINEQU30H
SECEQU31H
SEC100EQU32H
DIS_BUFEQU33H
BUF_MIN_HEQUDIS_BUF
BUF_MIN_LEQUDIS_BUF+1
BUF_SEC_HEQUDIS_BUF+2
BUF_SEC_LEQUDIS_BUF+3
K_OLDEQU41H
K_NEWEQU42H
DIS_DIGITEQU43H
DIS_INDEXEQU44H
K_OLD1EQU45H
K_NEW1EQU46H
FLAGEQU47H
CONVERTEQU48H
ORG0000H
JMPMAIN
ORG0003H
LJMPINT_0
ORG0000BH
LJMPTIMER0
ORG0001BH
LJMPTIMER1
ORG0030H
MAIN:
MOVSP,#60H
MOVP0,#0FFH
MOVP2,#0FFH
MOVTMOD,#011H
MOVTH0,#0FCH
MOVTL0,#017H
MOVTH1,#0DCH
CLRA
MOVTL1,A
MOVCONVERT,#00H
MOVCONVERT+1,#00H
MOVCONVERT+2,#00H
MOVCONVERT+3,#00H
CLRA
MOVMIN,#20
MOVSEC,A
MOVSEC100,A
MOVBUF_MIN_H,#0A4H
MOVBUF_MIN_L,#0C0H
MOVBUF_SEC_H,#0C0H
MOVBUF_SEC_L,#0C0H
MOVDIS_BUF+4,#0C0H
MOVDIS_BUF+5,#0C0H
MOVDIS_BUF+6,#0C0H
MOVDIS_BUF+7,#0C0H
MOVFLAG,#00H
MOVK_OLD,#00H
BEEP_BL00:
MOVR3,#10
MOVR2,#200
MAIN1100:
CPLp3.7
LCALLDELAY500
LCALLDELAY500
DJNZR2,MAIN1100
CPLp3.6
LCALLDELAY500
LCALLDELAY500
LCALLDELAY500
MOVR2,#200
MAIN2100:
CPLp3.7
LCALLDELAY500
DJNZR2,MAIN2100
DJNZR3,MAIN1100
LJMPSTART
DELAY500:
MOVR7,#230
LOOP1:
DJNZR7,LOOP1
RET
START:
MOVDIS_DIGIT,#0FEH
CLRA
MOVDIS_INDEX,A
SETBEA
SETBET0
SETBTR0
SETBIT0
SETBEX0
SETBPT0
MAIN_LP:
CALLKEY_PROG
SJMPMAIN_LP
KEY_PROG:
CALLK_SCAN
MOVA,K_NEW
CJNEA,K_OLD,KEY_P1
JMPEND_PROC_KEY
KEY_P1:
MOVR4,#15
KEY_P2:
MOVR7,#10
CALLDELAYMS
DJNZR4,KEY_P2
CALLK_SCAN
MOVA,K_NEW
CJNEA,K_OLD,KEY_P3
JMPEND_PROC_KEY
KEY_P3:
JBACC.0,PROC_K1
JBACC.1,PROC_K2
JBACC.2,PROC_K3
JBACC.3,PROC_K4
LJMPEND_PROC_KEY
PROC_K1:
LCALLBEEP_BL001
INCMIN
MOVA,MIN;
CJNEA,#100,UPDATE_MIN21
MOVMIN,#00H
UPDATE_MIN21:
MOVA,MIN
MOVB,#10
DIVAB;A=MIN/10
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVBUF_MIN_H,A
MOVA,MIN
MOVB,#10
DIVAB
MOVA,B
MOVCA,@A+DPTR
MOVBUF_MIN_L,A
SJMPEND_PROC_KEY
PROC_K2:
LCALLBEEP_BL001
DECMIN
MOVA,MIN
CJNEA,#255,UPDATE_MIN1
MOVMIN,#99
UPDATE_MIN1:
MOVA,MIN
MOVB,#10
DIVAB
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVBUF_MIN_H,A
MOVA,MINL
MOVB,#10
DIVAB
MOVA,B
MOVCA,@A+DPTR
MOVBUF_MIN_L,A
SJMPEND_PROC_KEY
PROC_K3:
LCALLBEEP_BL001
PUSHPSW
INCFLAG
MOVA,FLAG
RRCA
JNCSTOP
CLRP3.6
SETBET1
SETBTR1
POPPSW
SJMPEND_PROC_KEY
STOP:
SETBP3.6
CLRET1
CLRTR1
POPPSW
SJMPEND_PROC_KEY
PROC_K4:
LCALLBEEP_BL001
MOVR3,CONVERT+1
MOVCONVERT+1,CONVERT+3
MOVCONVERT+3,R3
MOVR3,CONVERT
MOVCONVERT,CONVERT+2
MOVCONVERT+2,R3
LCALLCONVETER
END_PROC_KEY:
RET
;键扫描子程序
K_SCAN:
MOVP1,#0FFH
MOVK_NEW,#00H
MOVA,P1
CPLA
ANLA,#0F0H
SWAPA
MOVK_NEW,A
RET
USING0
TIMER0:
;定时器0中断服程序,用于数码管的动态扫描
PUSHACC
PUSHPSW
PUSHAR0
MOVTH0,#0FCH
MOVTL0,#017H
MOVP2,#0FFH
MOVA,#DIS_BUF
ADDA,DIS_INDEX
MOVR0,A
MOVA,@R0
MOVP0,A
MOVP2,DIS_DIGIT
MOVA,DIS_DIGIT
RLA
MOVDIS_DIGIT,A
INCDIS_INDEX
MOVR5,DIS_INDEX
CJNER5,#08H,TT
MOVDIS_INDEX,#00H
MOVDIS_DIGIT,#0FEH
TT:
POPAR0
POPPSW
POPACC
RETI
TIMER1:
;定时器1中断服务程序,产生时基信号10ms
PUSHPSW
PUSHACC
PUSHB
PUSHDPH
PUSHDPL
MOVTH1,#0DCH
MOVTL1,#00H
INCSEC100
MOVA,SEC100
CJNEA,#100,END_TIMER1
MOVSEC100,#00H
LCALLDEC_SEC
END_TIMER1:
POPDPL
POPDPH
POPB
POPACC
POPPSW
RETI;
DEC_SEC:
DECSEC
MOVA,MIN
JNZOBTAIN
CPLP3.6
MOVA,SEC
JNZOBTAIN
MOVBUF_SEC_L,#0C0H
CLRTR1
CLRET1
BEEP_BL:
MOVR3,#10
MOVR2,#200
MAIN11:
CPLp3.7
LCALLDELAY500
LCALLDELAY500
DJNZR2,MAIN11
CPLp3.6
LCALLDELAY500
LCALLDELAY500
LCALLDELAY500
MOVR2,#200
MAIN21:
CPLp3.7
LCALLDELAY500
DJNZR2,MAIN21
DJNZR3,MAIN11
LJMPOBTAIN
OBTAIN:
MOVA,SEC
CJNEA,#255,UPDATE_SEC
MOVSEC,#59
LCALLDEC_MIN
UPDATE_SEC:
MOVA,SEC
MOVB,#10
DIVAB
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVBUF_SEC_H,A
MOVA,SEC
MOVB,#10
DIVAB
MOVA,B
MOVCA,@A+DPTR
MOVBUF_SEC_L,A
RET
DEC_MIN:
DECMIN
MOVA,MIN
CJNEA,#255,UPDATE_MIN
MOVMIN,#00H
UPDATE_MIN:
MOVA,MIN
MOVB,#10
DIVAB;A=MIN/10
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVBUF_MIN_H,A
MOVA,MIN
MOVB,#10
DIVAB
MOVA,B
MOVCA,@A+DPTR
MOVBUF_MIN_L,A
RET
RET
;中断INT0服务程序
INT_0:
PUSHPSW
PUSHACC
PUSHB
PUSHDPH
PUSHDPL
JBk1,RKEY1
MOVR7,#30
LCALLDELAYMS
JBk1,RKEY1
LJMPKP1
RKEY1:
JBk2,RKEY2
MOVR7,#30
LCALLDELAYMS
JBk2,RKEY2
LJMPKP2
RKEY2:
JBk3,RKEY3
MOVR7,#30
LCALLDELAYMS
JBk3,RKEY3
LJMPKP3
RKEY3:
JBk4,RKEY4
MOVR7,#30
LCALLDELAYMS
JBk4,RKEY4
LJMPKP4
RKEY4:
LJMPKP5
KP1:
LCALLBEEP_BL001
INCCONVERT
MOVA,CONVERT
CJNEA,#0AH,KP5
MOVCONVERT,#00H
XX文库-让每个人平等地提升自我INCCONVERT+1
MOVA,CONVERT+1
CJNEA,#0AH,KP5
MOVCONVERT+1,#00H
LJMPKP5
KP2:
LCALLBEEP_BL001
DECCONVERT
MOVA,CONVERT
CJNEA,#255,KP5
MOVCONVERT,#09H
DECCONVERT+1
MOVA,CONVERT+1
CJNEA,#255,KP5
MOVCONVERT+1,#09H
LJMPKP5
KP3:
LCALLBEEP_BL001
INCCONVERT+2
MOVA,CONVERT+2
CJNEA,#0AH,KP5
MOVCONVERT+2,#00H
INCCONVERT+3
MOVA,CONVERT+3
CJNEA,#0AH,KP5
MOVCONVERT+3,#00H
LJMPKP5
KP4:
LCALLBEEP_BL001
DECCONVERT+2
MOVA,CONVERT+2
CJNEA,#255,KP5
MOVCONVERT+2,#09H
DECCONVERT+3
MOVA,CONVERT+3
CJNEA,#255,KP5
MOVCONVERT+3,#09H
LJMPKP5
KP5:
LCALLCONVETER
POPDPL
POPDPH
POPB
POPACC
POPPSW
RETI
DELAYMS:
;延时子程序
DLY_LP1:
MOVR6,#185
DLY_LP2:
NOP
NOP
NOP
DJNZR6,DLY_LP2
DJNZR7,DLY_LP1
END_DLYMS:
RET
;蜂鸣器响一声子程序
BEEP_BL001:
MOVR3,#1
PUTOFF:
;
MOVR2,#30
MAIN11001:
CPLp3.7
LCALLDELAY500
LCALLDELAY500
DJNZR2,MAIN11001
DJNZR3,PUTOFF
RET
;显示缓冲区代码转码子程序
CONVETER:
MOVA,CONVERT
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVDIS_BUF+7,A
MOVA,CONVERT+1
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVDIS_BUF+6,A
MOVA,CONVERT+2
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVDIS_BUF+5,A
MOVA,CONVERT+3
MOVDPTR,#DIS_CODE
MOVCA,@A+DPTR
MOVDIS_BUF+4,A
RET
查表指令
DIS_CODE:
DB0C0H
DB0F9H
DB0A4H
DB0B0H
DB099H
DB092H
DB082H
DB0F8H
DB080H
DB090H
DB0FFH
END
总结
这次课程设计虽然只有短短的两周时间,但我们受益匪浅。
刚开始时觉得自己的课题无处入手,但通过老师的讲解和查询资料,开始有了自己的思路,整理出了总体方案,然后设计出硬件原理图,源程序等。
在这次设计中困难最大的就是调试,收获最多的也是调试,因为调试的时候你必须对程序相当的熟悉,对每一条指令相当了解,并且硬件的连接也要清晰的印在脑海里,只有这样你才能让软件和硬件结合在一起,实现预期功能。
在编程结束时需要编写END指令,这也是初学者编程时经常忘记的。
总之,在课程设计中遇到了不少的困难,在老师的细心讲解和辅导下,最终完成了本次设计。
在此,由衷感谢老师的指导和帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 c51 篮球 计时 计分 课程设计