設計題目:基于單片機的籃球比賽計分器 設計內容及要求: 1)設計一款顯示籃球比分的記分牌; 2)通過加分按鈕可以給A隊,或B隊加分; 3)設計對調功能,更換場地后,AB隊分數互換; 4)計時:能實現0~99分和0~59秒任意調整,具有啟動、暫停、復位功能; 5)秒計時:能實現0~99秒任意調整,具有啟動、暫停、復位功能; 6)增加局數比分功能; 7)增加比賽時間倒計時功能; 8)報警:0~99秒違例自動聲、光報警:0~99分終場自動聲響; 9)可實現A、B兩隊暫停次數和犯規的顯示和任意加減; 摘要: 本設計是采用單片機AT89C51作為本設計的核心元件。利用7段共陰LED作為顯示器件。在此設計中共接入了8個7段共陰LED顯示器,其中4個用于記錄AB隊的分數,每隊2個LED顯示器顯示范圍可達到0~99分,足夠滿足賽程需要,另外4個LED顯示器則用來記錄賽程時間,其中2個用于顯示分鐘,2個用于顯示秒鐘。賽程計時采用倒計時方式。即比賽前將時間設置好,比賽開始時啟動計時,直至計時到零為止。計時范圍可達到0~99分鐘,也完全滿足實際賽程的需要。當比賽隊A隊得1分時,按下A+1鍵;得2分時,按下A+2鍵;得3分時,按下A+3鍵;當加分出現錯誤時,可以按A-1鍵減1分,可以達到調整分數的作用;依照同樣的方法可以記錄B隊的得分。 采用單片機控制使這個系統按鍵操作使用簡潔,LED顯示,安裝方便。解決了籃球比賽計分器的安裝問題,節約了線材,適合在各種規模的體育場館使用,完全可以代替傳統的用鐘表進行計時的方法,當然稍加改動也可以用于其他球類比賽,是體育器材向智能化發展的一個實例。
目錄
一. 設計的基本步驟及方案 ..................................3 1.AT89C51簡介 ..................................3 2.數碼管顯示原理..................................3 3.總體方案..................................4 二. 硬件電路設計及描述..................................5 1. 硬件原理電路圖..................................6 2. 硬件電路設計及描述.................................. 7 三. 軟件設計思想及流程圖..................................8 1 .主流程圖.................................. 8 2.記分流程圖.................................. 9 3.時間中斷流程圖..................................10 4.源程序代碼見附錄一..................................12 四.硬軟件的調試過程及調試方法..................................12 五.課程設計心得體會..................................14 附錄一 源程序代碼..................................15
一.設計的基本步驟及方案 1.AT89C51簡介 單片機是在一塊芯片中集成了CPU、RAM、ROM、定時/計數器和多功能I/O口等計算機所需要的基本部件的大規模集成電路。 其以體積小、功能全、性價比高等諸多優點而獨具特色,在工業控制、尖端武器、通信設備、家用電器等嵌入式應用領域中獨占鰲頭。如果說C語言程序設計課程設計軟件設計的基礎課,那么單片機以其系統硬件構架完整、價格低廉、學生能動手等特點,成為工科學生硬件設計基礎課。 2.數碼管顯示原理 數碼管實際上是由7個發光管組成8字形構成的,加上小數點就是8個。我們分別把他命名為A,B,C,D,E,F,G,H。

圖1 數碼管內部結構圖
假設我們要顯示一個數字2, 那么 A、B、G、E、D這5個段的發光管亮就可以了,C、F、H不亮,同時由于接法為共陰接法,那么為高電平是亮,低電平是滅。從高往低排列, P1.7-P1.0寫成二進制為01011011, 把他轉化為16進制則為5BH。我們可以根據硬件的接線把數碼管顯示數字編制成一個表格,見下表,以后直接調用就行了。 數碼管的接口有靜態接口和動態接口兩種。靜態接口為固定顯示方式,無閃爍,其電路可采用一個并行口接一個數碼管,數碼管的公共端按共陰接GND,本次課程設計由于所需數碼管不多,故可用些種方法接線。這種接法占用接口多,僅能接少量數碼管。 動態接口采用各數碼管循環輪流顯示的方法,當循環顯示的頻率較高時,利用人眼的暫留特性,看不出閃爍顯示現象,這種顯示需要一個接口完成字形碼的輸出,另一接口完成各數碼管的輪流點亮。 多位一體的數碼管原理和單個的差不多。 表2 共陰極數碼管顯示
3.總體方案: 基于單片機系統的籃球賽計時計分器的系統構成圖如下圖所示: 圖3 系統結構圖 本系統采用單片機AT89C51作為AT89C51本設計的核心元件。利用7段共陰LED作為顯示器件。在此設計中共接入了8個7段共陰LED顯示器,其中4個用于記錄AB隊的分數,每隊2個LED顯示器顯示范圍可達到0~99分,足夠滿足賽程需要,另外4個LED顯示器則用來記錄賽程時間,其中2個用于顯示分鐘,2個用于顯示秒鐘。賽程計時采用到計時方式。即比賽前將時間設置好,比賽開始時啟動計時,直至計時到零為止。計時范圍可達到0~99分鐘,也完全滿足實際賽程的需要。 其次,為了配合計時器和計分器校正調整時間和比分,我們特定在本設計中設立了11個按鍵,其中8個用于設置,交換場地,啟動和暫停等功能。
二. 硬件電路設計及描述 1.硬件原理電路 系統硬件圖如下圖4所示: 
記分圖如下圖5所示: 
計時圖如下圖6所示: 
2.硬件電路設計及描述 硬件部分的設計是整個設計中的一個重要部分。在進行硬件部分設計時,首先要確定元器件,并且知道這些器件的工作原理和功能。然后才可以進行設計。本設計的硬件電路包括兩部分:計時電路、計分電路。硬件電部分的設計除了硬件電路的設計,還包括PCB板的繪制。 
三. 軟件思想及流程1. 主流程圖8: 
2. 記分流程圖9: 比分顯示程序: DISPF:MOV R0,#34H MOV R3,#7FH MOV A,R3 PLAYF:MOV P2,A MOV A,@R0 MOV DPTR,#DSEG1 MOVC A,@A+DPTR MOV P0,A LCALL DL1 MOV P2,#0FFH MOV A,R3 RR A JNB ACC.3,LD1 INC R0 MOV R3,A LJMP PLAYF AJMP LD1 鍵盤掃描子程序 
3. 時間中斷流程圖10 時間中斷程序: TIME: PUSH ACC PUSH PSW MOV TH0,#0D8H MOV TL0,#0F0H DJNZ R2,RET0 MOV R2,#64H MOV A,20H CLR C DEC A MOV 20H,A MOV A,21H CJNE A,#00H,PFF ;;;;;;;;;非0分跳轉;;;;;;;;;;;;;;;;; MOV A,20H CJNE A,#00H,PFF ;;;;;;;;;非0分0秒情況跳轉;;;;;;;;;; CLR TR0 ;;;;;;;;;比賽結束停止計時;;;;;;;;;; MOV 20H,#00H MOV 21H,#00H MOV 32H,#00H MOV 33H,#00H LCALL MINGYIN MOV 21H,26H MOV 30H,#00H MOV 31H,#00H MOV 32H,24H MOV 33H,25H LJMP RET0 PFF: MOV A,20H CJNE A,#0FFH,OUT MOV 20H,#59 ; MOV 30H,#09H MOV 31H,#05H MOV A,21H DEC A MOV 21H,A OUT: MOV A,20H MOV B,#0AH DIV AB MOV 30H,B MOV 31H,A MOV A,21H MOV B,#0AH DIV AB MOV 32H,B MOV 33H,A RET0: POP PSW POP ACC RETI YANSHI:PUSH ACC ;定時器1中斷 PUSH PSW MOV TH1,#0D8H MOV TL1,#0F0H DJNZ R2,RET1 MOV R2,#64H DJNZ 39H,RET1 MOV 39H,#03H ;TIAN HEIHEI MOV R2,#64H CLR TR1 CLR P3.6 RET1: POP PSW POP ACC RETI 時間顯示程序: DISPT: MOV R0,#30H MOV R3,#0F7H MOV A,R3 PLAYT:MOV P2,A MOV A,@R0 MOV DPTR,#DSEG1 MOVC A,@A+DPTR MOV P0,A LCALL DL1 MOV P2,#0FFH MOV A,R3 RR A JNB ACC.7,LD1 INC R0 MOV R3,A LJMP PLAYT LD1: RET

4. 源程序代碼見附錄一
四.硬軟件的調試過程及調試方法 1.進入比賽,先設置時間為一節或者半場。默認是12分鐘(按下“A+1”進行分鐘加1,按下“A-1”進行分鐘減1),如圖11 
圖11 2.按下“K1”開始比賽或者暫停,如圖12 
3.上面的液晶顯示為計時顯示。下面的液晶顯示為分數顯示“左側為攻左半場的隊的分數,右側為攻右半場的對的分數。”換場后依然如此。 4.按下“K2”交換場地,重新計時。 5.A+1,A+2,A+3,A-1,B+1,B+2,B+3,B-1進行兩隊分數調整 五.課程設計心得體會 俗話說:好的開始是成功的一半。說起課程設計,最重要的就是做好設計的預習,認真的研究老師給的題目,選一個自己感興趣的題目。其次,老師對課程設計的講解要一絲不茍的去聽去想,因為只有都明白了,做起設計就會事半功倍。最后,要重視程序的模塊化,修改的方便,也要注重程序的調試,掌握其方法。 本次設計,我查閱了相關書籍,做好各項準備后才開始進行設計,本次設計測試結果以及不足之處:計時電路可完成倒計時、暫停、繼續等功能,在比賽時間到后可進行報警。記分電路工作正常,可完成對比分的刷新與暫存。但在測試過程中發現,在比賽上半場時間到后,不能進行比分的交換。進行分析后得出結論如下:系統電路部分設計沒有原則性的錯誤,在制版的過程中注意了走線,因此硬件部分功能完好。但因為軟件系統編寫方面的疏忽,在比分交換及計時部分沒有能很好的實現。除此之外,軟件達到了系統的要求。 通過課程設計,發現了我們的很多不足,我們知識的很多漏洞,看到了我們的實踐經驗還是比較缺乏,理論聯系實際的能力還急需提高。在這個過程中,我們也曾經因為實踐經驗的缺乏失落過,也曾經仿真成功而熱情高漲。通過單片機課程設計,我們加深了對單片機理論的理解,學回了怎樣將理論很好地應用到實際當中去,而且我們還學會了如何去培養我們的不畏困難的挑戰精神,從而不斷地戰勝自己,超越自己,我們在這一設計過程中,學會了堅持不懈,不輕易言棄。設計過程,也好比是我們人類成長的歷程,常有一些不如意,也許這就是在對我們提出了挑戰,勇敢過,也戰勝了,勝利的鐘聲也就一定會為我們而敲響。 此次課程設計充分鍛煉了我們的設計能力和團隊合作能力,給我們注入了一些全新的認識,為我們以后的設計和實驗奠定了基礎,也為引導我們以理論結合實踐起到重要意義。
單片機源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 0003H
- LJMP CHANGE
- ORG 000BH
- LJMP TIME
- ORG 0013H
- LJMP TIAOSHI
- ORG 001BH
- LJMP YANSHI
- MAIN: MOV SP,#50H
- MOV TCON,#04H
- MOV 20H,#00H ;秒
- MOV 21H,#0CH ;分
- MOV 22H,#00H ;;;;;;;;;A隊分數;;;;;;;;;;;;;;;;;
- MOV 23H,#00H ;;;;;;;;;;B隊分數;;;;;;;;;;;
- MOV 24H,#02H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 25H,#01H
- MOV 26H,#0CH ;;;;;;;;;;;分鐘定時區;;;;;;;
- MOV 30H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 31H,#00H ;;;;;;;;;時間緩沖區;;;;;;;;;;
- MOV 32H,#02H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 33H,#01H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 34H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 35H,#00H ;;;;;;;;分數顯示緩沖區;;;;;;;
- MOV 36H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 37H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 39H,#03H ;TIAN HEIHEI
- MOV TMOD,#11H
- MOV TH0,#0D8H
- MOV TL0,#0F0H
- MOV TH1,#0D8H
- MOV TL1,#0F0H
- MOV IE,#10001111B
- MOV IP,#05H
- MOV R2,#64H
- CLR P3.6
- START:LCALL DISPT
- LCALL DISPF
- JNB P1.0,PP1 ;A隊加一分
- JNB P1.1,PP2 ;A隊加兩分
- JNB P1.2,PP3 ;A隊加三分
- JNB P1.3,PP4 ;A隊減一分
- JNB P1.4,PP55 ;B隊加一分
- JNB P1.5,PP66 ;B隊加兩分
- JNB P1.6,PP77 ;B隊加三分
- JNB P1.7,PP88 ;B隊減一分
- JB P3.0,START
- LCALL DELAY
- JB P3.0,START
- STOP1:JNB P3.0,STOP1
- LCALL DELAY
- JNB P3.0,STOP1
- CPL TR0 ;按鍵奇數次開始,偶數次暫停
- LJMP START
- PP55: LJMP PP5
- PP66: LJMP PP6
- PP77: LJMP PP7
- PP88: LJMP PP8
- PP1: LCALL DELAY
- JB P1.0,PPB
- STOP11:JNB P1.0,STOP11
- LCALL DELAY
- JNB P1.0,STOP11
- INC 22H
- MOV A,22H
- LJMP STOREA
- PP2: LCALL DELAY
- JB P1.1,PPB
- STOP22:JNB P1.1,STOP22
- LCALL DELAY
- JNB P1.1,STOP22
- MOV A,22H
- ADD A,#02
- MOV 22H,A
- LJMP STOREA
- PP3: LCALL DELAY
- JB P1.2,PPB
- STOP33:JNB P1.2,STOP33
- LCALL DELAY
- JNB P1.2,STOP33
- MOV A,22H
- ADD A,#03
- MOV 22H,A
- LJMP STOREA
- PP4: LCALL DELAY
- JB P1.3,PPB
- STOP44:JNB P1.3,STOP44
- LCALL DELAY
- JNB P1.3,STOP44
- DEC 22H
- MOV A,22H
- STOREA:MOV B,#0AH
- DIV AB
- MOV 34H,B
- MOV 35H,A
- PPB: LJMP START
- PP5: LCALL DELAY
- JB P1.4,PPC
- STOP55:JNB P1.4,STOP55
- LCALL DELAY
- JNB P1.4,STOP55
- INC 23H
- MOV A,23H
- LJMP STOREB
- PP6: LCALL DELAY
- JB P1.5,PPC
- STOP66:JNB P1.5,STOP66
- LCALL DELAY
- JNB P1.5,STOP66
- MOV A,23H
- ADD A,#02
- MOV 23H,A
- LJMP STOREB
- PP7: LCALL DELAY
- JB P1.6,PPC
- STOP77:JNB P1.6,STOP77
- LCALL DELAY
- JNB P1.6,STOP77
- MOV A,23H
- ADD A,#03
- MOV 23H,A
- LJMP STOREB
- PP8: LCALL DELAY
- JB P1.7,PPC
- STOP88:JNB P1.7,STOP88
- LCALL DELAY
- JNB P1.7,STOP88
- DEC 23H
- MOV A,23H
- STOREB:MOV B,#0AH
- DIV AB
- MOV 36H,B
- MOV 37H,A
- PPC: LJMP START
- DELAY:MOV R4,#5H
- DL00: MOV R5,#0FFH
- DL11: DJNZ R5,DL11
- DJNZ R4,DL00
- RET
- ;;;;;;;;;;;;;;;;;;時間中斷程序;;;;;;;;;;;;;;;
- TIME: PUSH ACC
- PUSH PSW
- MOV TH0,#0D8H
- MOV TL0,#0F0H
- DJNZ R2,RET0
- MOV R2,#64H
- MOV A,20H
- CLR C
- DEC A
- MOV 20H,A
- MOV A,21H
- CJNE A,#00H,PFF ;;;;;;;;;非0分跳轉;;;;;;;;;;;;;;;;;
- MOV A,20H
- CJNE A,#00H,PFF ;;;;;;;;;非0分0秒情況跳轉;;;;;;;;;;
- CLR TR0 ;;;;;;;;;比賽結束停止計時;;;;;;;;;;
- MOV 20H,#00H
- MOV 21H,#00H
- MOV 32H,#00H
- MOV 33H,#00H
- LCALL MINGYIN
- MOV 21H,26H
- MOV 30H,#00H
- MOV 31H,#00H
- MOV 32H,24H
- MOV 33H,25H
- LJMP RET0
- PFF: MOV A,20H
- CJNE A,#0FFH,OUT
- MOV 20H,#59 ;
- MOV 30H,#09H
- MOV 31H,#05H
- MOV A,21H
- DEC A
- MOV 21H,A
- OUT: MOV A,20H
- MOV B,#0AH
- DIV AB
- MOV 30H,B
- MOV 31H,A
- MOV A,21H
- MOV B,#0AH
- DIV AB
- MOV 32H,B
- MOV 33H,A
- RET0: POP PSW
- POP ACC
- RETI
- YANSHI:PUSH ACC ;定時器1中斷
- PUSH PSW
- MOV TH1,#0D8H
- MOV TL1,#0F0H
- DJNZ R2,RET1
- MOV R2,#64H
- DJNZ 39H,RET1
- MOV 39H,#03H ;TIAN HEIHEI
- MOV R2,#64H
- CLR TR1
- CLR P3.6
- RET1: POP PSW
- POP ACC
- RETI
- ;;;;;;;;;;;;;;鳴音子程序;;;;;;;;;;;;
- MINGYIN: SETB P3.6
- SETB TR1
- RETI
- ;;;;;;;時間顯示程序;;;;;;;;;;;
- DISPT: MOV R0,#30H
- MOV R3,#0F7H
- MOV A,R3
- PLAYT:MOV P2,A
- MOV A,@R0
- MOV DPTR,#DSEG1
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL DL1
- MOV P2,#0FFH
- MOV A,R3
- RR A
- JNB ACC.7,LD1
- INC R0
- MOV R3,A
- LJMP PLAYT
- LD1: RET
- ;;;;;;;;;;比分顯示程序;;;;;;;;;;;;;;
- DISPF:MOV R0,#34H
- MOV R3,#7FH
- MOV A,R3
- PLAYF:MOV P2,A
- MOV A,@R0
- MOV DPTR,#DSEG1
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL DL1
- MOV P2,#0FFH
- MOV A,R3
- RR A
- JNB ACC.3,LD1
- INC R0
- MOV R3,A
- LJMP PLAYF
- AJMP LD1
- ;;;;;;;;;;調時時間顯示程序;;;;;;;;;;
- DISPW: MOV R0,#24H
- MOV R3,#0F7H
- MOV A,R3
- PLAYW:MOV P2,A
- MOV A,@R0
- MOV DPTR,#DSEG1
- MOVC A,@A+DPTR
- MOV P0,A
- LCALL DL1
- MOV P2,#0FFH
- MOV A,R3
- RR A
- JNB ACC.1,LD1
- INC R0
- MOV R3,A
- LJMP PLAYW
- DL1: MOV R7,#05H
- DL: MOV R6,#0FFH
- DL6: DJNZ R6,DL6
- DJNZ R7,DL
- RET
- DSEG1:DB 3FH,06H,5BH,4FH,66H
- DB 6DH,7DH,07H,7FH,6FH
- ;;;;;;;;;調時子程序;;;;;;;;;;;;;
- TIAOSHI:PUSH ACC
- PUSH PSW
- JB P3.3,CHU
- LCALL DELAY
- JB P3.3,CHU
- STOPQ:JNB P3.3,STOPQ
- LCALL DELAY
- JNB P3.3,STOPQ
- IF10: LCALL DISPW
- LCALL DISPF
- JNB P1.3,DECT
- JB P1.0,WHAIT2
- LCALL DELAY
- JB P1.0,WHAIT2
- STOPE:MOV C,P1.0
- JNC STOPE
- LCALL DELAY
- MOV C,P1.0
- JNC STOPE
- INC 26H
- LJMP STORE
- DECT: MOV C,P1.3
- LCALL DELAY
- JC WHAIT2
- STOPY:MOV C,P1.3
- JNC STOPY
- LCALL DELAY
- MOV C,P1.3
- JNC STOPY
- DEC 26H
- STORE: MOV 21H,26H
- MOV 20H,#00H
- MOV A,26H
- MOV B,#0AH
- DIV AB
- MOV 24H,B
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
籃球計分器.docx
(260.56 KB, 下載次數: 247)
2018-6-21 20:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|