当前位置:文档之家› 单片机C51篮球计时计分器课程设计

单片机C51篮球计时计分器课程设计

篮球赛计时计分器一设计目的设计并制作一个用于赛场的篮球赛计时计分器,实现如下基本功能:(1)能记录整个赛程的比赛时间,并能修改比赛时间,暂停比赛时间。

(2)能随时刷新甲,乙两队在整个赛程中的比分。

(3)中场交换场地时,能交换甲,乙两队比分的位置。

(4)比赛时间结束时,能发出报警指令。

二设计意义通过篮球计分计时器的制作,可以使我熟悉,了解单片机开发设计实例的过程,并能使读者加深对单片机的理解和运用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下的一些方面:(1)篮球计分计时器包含了8051系列单片机的最小应用系统的构成,同时在此基础上扩展了一些实用性强的外围接口。

(2)掌握键盘接口原理,能正确地把键盘使用到单片机系统中,可以了解到LED显示器的结构,工作原理以及这种显示器的接口实例。

(3)学会调试电路,分析电路故障,积累电路调试经验。

三具体设计内容1 系统框图构成基于单片机系统的篮球计分计时器的系统构成框图如下所示:2硬件电路改进:由于原来的电路比较复杂,用了很多芯片,浪费成本,而且给后期调试的调试会带来较多麻烦,故对原来的硬件电路进行了改动。

改动方面主要关于数码管显示的驱动和位选的,前期的电路设计采用了大量的CD4511和CD4094来进行数码管显示的驱动和位选,而这次的电路设计只用了8个三极管就实现了这项功能。

下面前期电路设计的计时部分的原理图,还有更为复杂的计分原理图未给出后期改进的整体原理图:(3)软件调试及组装软件的编程调试首先要抓住计分和计时两大模块,在这两大模块成功的基础上再进行其他细小模块的组装和完善。

主要编程的问题,所以就概述就举例子概述一下计分模块和计时模块刚开始均会出现显示数值范围不正确或者十位和个位二者之中只显示个位的情况,经软件调试,重新编程后成功的解决了问题。

I 上半场比赛结束,可按下交换比分按钮,交换甲乙两队的比分,重新调整计时时间为20分钟,按下启动按钮,下半场比赛开始八 篮球赛计时计分器程序流程图及程序开始定时清零甲乙两队分数清零设置定时启动键是否按下定时时间到否倒计时开始定时暂停键是否按下K1,K2,K3,K4是否按下对应甲乙两队加减分数喇叭响10秒交换键是否按下甲乙两队交换分数并显示YNYYYYNNNN代码如下:K1 B IT P1.0 K2 B IT P1.1K3 BIT P1.2 K4 BIT P1.3 K5 B IT P1.4 K6 B IT P1.5K7 BIT P1.6 K8 BIT P1.7MIN EQU 30H SEC EQU 31HSEC100 EQU 32H DIS_BUF EQU 33H BUF_MIN_H EQU DIS_BUFBUF_MIN_L EQU DIS_BUF+1 BUF_SEC_H EQU DIS_BUF+2 BUF_SEC_L EQU DIS_BUF+3K_OLD EQU 41HK_NEW EQU 42HDIS_DIGIT EQU 43HDIS_INDEX EQU 44HK_OLD1 EQU 45HK_NEW1 EQU 46HFLAG EQU 47HCONVERT EQU 48HORG 0000HJMP MAINORG 0003HLJMP INT_0ORG 0000BHLJMP TIMER0ORG 0001BHLJMP TIMER1ORG 0030HMAIN:MOV SP,#60HMOV P0,#0FFHMOV P2,#0FFHMOV TMOD,#011HMOV TH0,#0FCHMOV TL0,#017HMOV TH1,#0DCHCLR AMOV TL1,AMOV CONVERT,#00HMOV CONVERT+1 ,#00HMOV CONVERT+2,#00HMOV CONVERT+3 ,#00HCLR AMOV MIN,#20MOV SEC,AMOV SEC100,AMOV BUF_MIN_H,#0A4HMOV BUF_MIN_L,#0C0HMOV BUF_SEC_H,#0C0HMOV BUF_SEC_L,#0C0HMOV DIS_BUF+4,#0C0HMOV DIS_BUF+5,#0C0HMOV DIS_BUF+6,#0C0HMOV DIS_BUF+7,#0C0HMOV FLAG ,#00HMOV K_OLD,#00HBEEP_BL00: MOV R3,#10MOV R2,#200MAIN1100:CPL p3.7LCALL DELAY500LCALL DELAY500DJNZ R2,MAIN1100CPL p3.6LCALL DELAY500LCALL DELAY500LCALL DELAY500MOV R2,#200MAIN2100:CPL p3.7LCALL DELAY500DJNZ R2,MAIN2100DJNZ R3,MAIN1100LJMP STARTDELAY500:MOV R7,#230LOOP1:DJNZ R7,LOOP1RETSTART: MOV DIS_DIGIT,#0FEH CLR AMOV DIS_INDEX,ASETB EASETB ET0SETB TR0SETB IT0SETB EX0SETB PT0MAIN_LP:CALL KEY_PROGSJMP MAIN_LPKEY_PROG:CALL K_SCANMOV A,K_NEWCJNE A,K_OLD,KEY_P1JMP END_PROC_KEY KEY_P1:MOV R4,#15KEY_P2:MOV R7,#10CALL DELAYMSDJNZ R4,KEY_P2CALL K_SCANMOV A,K_NEWCJNE A,K_OLD,KEY_P3JMP END_PROC_KEY KEY_P3:JB ACC.0,PROC_K1JB ACC.1,PROC_K2JB ACC.2,PROC_K3JB ACC.3,PROC_K4LJMP END_PROC_KEYPROC_K1:LCALL BEEP_BL001 INC MINMOV A,MIN ;CJNE A, #100,UPDATE_MIN21MOV MIN,#00HUPDATE_MIN21:MOV A,MINMOV B,#10DIV AB ; A = MIN / 10MOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV BUF_MIN_H,AMOV A,MINMOV B,#10DIV ABMOV A,BMOVC A,@A+DPTRMOV BUF_MIN_L,ASJMP END_PROC_KEYPROC_K2:LCALL BEEP_BL001 DEC MINMOV A,MINCJNE A, #255, UPDATE_MIN1MOV MIN,#99UPDATE_MIN1:MOV A,MINMOV B,#10DIV ABMOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV BUF_MIN_H,AMOV A,MIN LMOV B,#10DIV ABMOV A,BMOVC A,@A+DPTRMOV BUF_MIN_L,ASJMP END_PROC_KEYPROC_K3: LCALL BEEP_BL001PUSH PSWINC FLAGMOV A ,FLAGRRC AJNC STOPCLR P3.6SETB ET1SETB TR1POP PSWSJMP END_PROC_KEYSTOP:SETB P3.6CLR ET1CLR TR1POP PSWSJMP END_PROC_KEYPROC_K4: LCALL BEEP_BL001MOV R3,CONVERT+1MOV CONVERT+1,CONVERT+3MOV CONVERT+3,R3MOV R3,CONVERTMOV CONVERT,CONVERT+2MOV CONVERT+2,R3LCALL CONVETEREND_PROC_KEY:RET; 键扫描子程序K_SCAN:MOV P1,#0FFHMOV K_NEW,#00HMOV A,P1CPL AANL A,#0F0HSW AP AMOV K_NEW,ARETUSING 0TIMER0:; 定时器0中断服程序, 用于数码管的动态扫描PUSH ACCPUSH PSWPUSH AR0MOV TH0,#0FCHMOV TL0,#017HMOV P2,#0FFHMOV A,#DIS_BUFADD A,DIS_INDEXMOV R0,AMOV A,@R0MOV P0,AMOV P2,DIS_DIGITMOV A,DIS_DIGITRL AMOV DIS_DIGIT,AINC DIS_INDEXMOV R5 , DIS_INDEXCJNE R5,#08H,TTMOV DIS_INDEX ,#00HMOV DIS_DIGIT,#0FEHTT: POP AR0POP PSWPOP ACCRETITIMER1:; 定时器1中断服务程序, 产生时基信号10ms PUSH PSWPUSH ACCPUSH BPUSH DPHPUSH DPLMOV TH1,#0DCHMOV TL1,#00HINC SEC100MOV A,SEC100CJNE A, #100, END_TIMER1MOV SEC100,#00HLCALL DEC_SECEND_TIMER1:POP DPLPOP DPHPOP BPOP ACCPOPPSWRETI ;DEC_SEC:DEC SECMOV A ,MINJNZ OBTAINCPL P3.6MOV A ,SECJNZ OBTAINMOV BUF_SEC_L,#0C0HCLR TR1CLR ET1BEEP_BL: MOV R3,#10MOV R2,#200MAIN11:CPL p3.7LCALL DELAY500LCALL DELAY500DJNZ R2,MAIN11CPL p3.6LCALL DELAY500LCALL DELAY500LCALL DELAY500MOV R2,#200MAIN21:CPL p3.7LCALL DELAY500DJNZ R2,MAIN21DJNZ R3,MAIN11LJMP OBTAINOBTAIN:MOV A,SECCJNE A, #255,UPDATE_SECMOV SEC,#59LCALL DEC_MINUPDATE_SEC:MOV A,SECMOV B,#10DIV ABMOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV BUF_SEC_H,AMOV A,SECMOV B,#10DIV ABMOV A,BMOVC A,@A+DPTRMOV BUF_SEC_L,ARETDEC_MIN:DEC MINMOV A,MINCJNE A, #255, UPDATE_MINMOV MIN,#00HUPDATE_MIN:MOV A,MINMOV B,#10DIV AB ; A = MIN / 10 MOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV BUF_MIN_H,AMOV A,MINMOV B,#10DIV ABMOV A,BMOVC A,@A+DPTRMOV BUF_MIN_L,ARETRET; 中断INT0服务程序INT_0:PUSH PSWPUSH ACCPUSH BPUSH DPHPUSH DPLJB k1,RKEY1MOV R7,#30LCALL DELAYMS JB k1,RKEY1LJMP KP1RKEY1 :JB k2,RKEY2 MOV R7,#30LCALL DELAYMS JB k2,RKEY2LJMP KP2RKEY2 :JB k3,RKEY3MOV R7,#30LCALL DELAYMS JB k3,RKEY3LJMP KP3RKEY3 : JB k4,RKEY4 MOV R7,#30LCALL DELAYMS JB k4,RKEY4LJMP KP4RKEY4: LJMP KP5KP1: LCALL BEEP_BL001 INC CONVERTMOV A,CONVERTCJNE A,#0AH,KP5MOV CONVERT ,#00H INC CONVERT+1MOV A,CONVERT+1 CJNE A,#0AH,KP5MOV CONVERT+1,#00H LJMP KP5KP2: LCALL BEEP_BL001 DEC CONVERTMOV A,CONVERT CJNE A,#255,KP5MOV CONVERT,#09H DEC CONVERT+1MOV A,CONVERT+1 CJNE A,#255,KP5MOV CONVERT+1,#09H LJMP KP5KP3: LCALL BEEP_BL001 INC CONVERT+2MOV A,CONVERT+2CJNE A,#0AH,KP5MOV CONVERT+2 ,#00H INC CONVERT+3MOV A,CONVERT+3CJNE A,#0AH,KP5MOV CONVERT+3,#00H LJMP KP5KP4: LCALL BEEP_BL001DEC CONVERT+2MOV A,CONVERT+2CJNE A,#255,KP5MOV CONVERT+2 ,#09H DEC CONVERT+3MOV A,CONVERT+3 CJNE A,#255,KP5MOV CONVERT+3,#09H LJMP KP5KP5:LCALL CONVETER POP DPLPOP DPHPOP BPOP ACCPOPPSWRETIDELAYMS:; 延时子程序DLY_LP1:MOV R6,#185DLY_LP2:NOPNOPNOPDJNZ R6,DLY_LP2DJNZ R7,DLY_LP1END_DLYMS:RET;蜂鸣器响一声子程序BEEP_BL001: MOV R3,#1 PUTOFF: ;MOV R2,#30MAIN11001:CPL p3.7LCALL DELAY500LCALL DELAY500DJNZ R2,MAIN11001DJNZ R3,PUTOFFRET;显示缓冲区代码转码子程序CONVETER:MOV A,CONVERTMOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV DIS_BUF+7,AMOV A,CONVERT+1 MOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV DIS_BUF+6,AMOV A,CONVERT+2 MOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV DIS_BUF+5,AMOV A,CONVERT+3 MOV DPTR,#DIS_CODEMOVC A,@A+DPTRMOV DIS_BUF+4,ARET查表指令DIS_CODE:DB 0C0HDB 0F9HDB 0A4HDB 0B0HDB 099HDB 092HDB 082HDB 0F8HDB 080HDB 090HDB 0FFHEND总结这次课程设计虽然只有短短的两周时间,但我受益匪浅。

相关主题