1 設(shè)計(jì)任務(wù) 1.1 設(shè)計(jì)的目的和意義目前球場(chǎng)記分牌在傳統(tǒng)操作模式下,采用記分員手動(dòng)翻動(dòng)記分牌記分,工作方式單一。由于種種弊端,電子記分板已經(jīng)開始在一些大型的體育場(chǎng)流行起來,不僅發(fā)展速度迅猛并會(huì)逐漸取代傳統(tǒng)的電子記分牌。
電子記分板根據(jù)籃球比賽的特點(diǎn),采用單片機(jī)為核心控制LED數(shù)碼管,具有亮度高、可視性好、功耗小、使用壽命長(zhǎng)等優(yōu)點(diǎn);具有性能穩(wěn)定,尺寸適中,運(yùn)輸安裝方式靈活,物美價(jià)廉等特點(diǎn),特別適用于中、小型體育館和訓(xùn)練館。
1.2 設(shè)計(jì)任務(wù)與要求設(shè)計(jì)題目:籃球賽電子計(jì)時(shí)記分牌
設(shè)計(jì)要求:
- 分別設(shè)計(jì)籃球比賽用的計(jì)時(shí)牌和記分牌;
- 上下半場(chǎng)各20分鐘,要求能隨時(shí)暫停,啟動(dòng)后繼續(xù)計(jì)時(shí),一場(chǎng)比賽結(jié)束后應(yīng)可清零重新開始比賽;
- 能按照籃球計(jì)分規(guī)則計(jì)分并顯示。
2 硬件系統(tǒng)設(shè)計(jì) 2.1 總體方案設(shè)計(jì)籃球記分器的硬件電路分成主控模塊、鍵盤輸入模塊、信息提示模塊三部分進(jìn)行設(shè)計(jì),系統(tǒng)整體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
主控模塊以AT89C52為核心,完成輸入輸出信息處理、計(jì)時(shí)器中斷響應(yīng)、數(shù)值計(jì)算等,協(xié)調(diào)整個(gè)系統(tǒng)有條不紊地工作。鍵盤輸入模塊作為人機(jī)交互接口,允許用戶控制系統(tǒng)的工作狀態(tài),完成如計(jì)時(shí)計(jì)分開始/暫停、交換場(chǎng)地、計(jì)時(shí)計(jì)分清零、比賽隊(duì)伍分?jǐn)?shù)調(diào)整等功能。信息提示模塊包含4個(gè)2位8段數(shù)碼管、6個(gè)LED和一個(gè)蜂鳴器,用于實(shí)時(shí)顯示系統(tǒng)工作狀態(tài),方便用戶進(jìn)行下一步操作。
2.2 芯片選型與具體電路設(shè)計(jì) 2.2.1 單片機(jī)的選型主控模塊以AT89C52單片機(jī)作為微控制器。AT89C52單片機(jī)是一種低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元。由于它的這些優(yōu)良特性,AT89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。采用AT89C52作為微控制器,可以很好地滿足籃球記分器的系統(tǒng)要求。
2.2.2 復(fù)位和振蕩電路的設(shè)計(jì)圖2給出了AT89C52單片機(jī)的引腳分布和最小系統(tǒng)接法。
圖2 AT89C52單片機(jī)最小系統(tǒng)原理圖
復(fù)位電路可以實(shí)現(xiàn)上電復(fù)位和按鍵復(fù)位兩種復(fù)位方式:上電復(fù)位電路由電容串聯(lián)電阻構(gòu)成,由圖并結(jié)合“電容電壓不能突變”的性質(zhì),可以知道,當(dāng)系統(tǒng)一上電,RST腳將會(huì)出現(xiàn)高電平,并且這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定。典型的51單片機(jī)當(dāng)RST腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以適當(dāng)組合RC的取值就可以保證可靠的復(fù)位。按鍵復(fù)位電路則是通過按下RESET按鍵拉高RST引腳電平來實(shí)現(xiàn)的。
晶體振蕩電路由一個(gè)12MHZ石英晶振和兩個(gè)30pF的電容組成,用于產(chǎn)生穩(wěn)定的時(shí)鐘脈沖信號(hào)供單片機(jī)工作。
2.2.3 鍵盤輸入模塊的設(shè)計(jì)用戶通過鍵盤輸入模塊對(duì)系統(tǒng)進(jìn)行控制。鍵盤采用3*3矩陣式按鍵,其中按鍵“START/PAUSE”控制計(jì)時(shí)計(jì)分的開始與暫停,按鍵“EXCHANGE”用于在半場(chǎng)結(jié)束后交換雙方記分牌上的分?jǐn)?shù),按鍵“CLEAR”用于在比賽結(jié)束后清除比分,其余的按鍵“A+1”、A+2”、“A+3”、“B+1”、“B+2”、“B+3”用于給參加比賽的A、B兩隊(duì)加上相應(yīng)的分?jǐn)?shù)。3*3矩陣按鍵的6條引線分別接至AT89C52的I/O口P3_0~P3_5,在單片機(jī)內(nèi)部采用行列掃描法檢測(cè)到按鍵按下,從而執(zhí)行相應(yīng)的任務(wù)。
矩陣鍵盤的連接方式如圖3所示。
圖3 矩陣鍵盤的連接方式
2.2.4 信息提示模塊的設(shè)計(jì)信息提示模塊包含4個(gè)2位8段共陰極數(shù)碼管(圖4)、6個(gè)LED指示燈(圖5)和一個(gè)蜂鳴器。
4個(gè)數(shù)碼管分別用兩位數(shù)字顯示比賽分鐘、秒鐘和賽場(chǎng)上兩個(gè)籃板的分?jǐn)?shù)。由于單片機(jī)I/O口資源有限,為了不占用太多的接口,在此使用P0口向數(shù)碼管同時(shí)送出數(shù)據(jù)(段選信號(hào))和地址(位選信號(hào)),使用兩個(gè)74HC573鎖存器來分離數(shù)據(jù)和地址,而P2_0和P2_1口分別用于使能段選鎖存器和位選鎖存器。由于P0口的電流驅(qū)動(dòng)能力有限,所以外接了排阻RP1,從而增強(qiáng)了對(duì)數(shù)碼管的驅(qū)動(dòng)能力。
圖4 數(shù)碼管連接原理圖
LED1、LED2、LED3分別指示比賽狀態(tài)“開始”、“暫!焙汀敖Y(jié)束”;LED4用于“進(jìn)球”指示,在比賽進(jìn)行時(shí)按下任何一個(gè)加分按鍵,“進(jìn)球”指示燈會(huì)閃一下;在上半場(chǎng)比賽結(jié)束后按下“EXCHANGE”鍵,“交換場(chǎng)地”指示燈LED5會(huì)亮,同時(shí)兩個(gè)籃板的比分互換!癊RROR!”指示燈LED6用于指示用戶的操作出錯(cuò)。6個(gè)LED采用共陽極連接方式,其陰極分別接單片機(jī)P1_0~P1_5口,當(dāng)單片機(jī)某口輸出低電平時(shí),對(duì)應(yīng)的LED亮。
圖5 LED指示燈連接原理圖
蜂鳴器接在P1_6口上,在半場(chǎng)結(jié)束或比賽結(jié)束后會(huì)發(fā)出提示音。
2.3 系統(tǒng)總體電路圖6給出了系統(tǒng)硬件原理總圖。
2.4 系統(tǒng)所用元器件本系統(tǒng)所用的元器件清單如表1所示。
表1 本系統(tǒng)所用的元器件
3 軟件系統(tǒng)設(shè)計(jì) 3.1 軟件系統(tǒng)總體設(shè)計(jì)方案單片機(jī)程序采用美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語言開發(fā)系統(tǒng)Keil C編寫。與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。
Keil采用工程方式集中管理源程序,編寫單片機(jī)程序首先要建立工程,然后在工程中添加源代碼文件。在本系統(tǒng)的工程中包含6個(gè)C代碼文件,對(duì)應(yīng)功能介紹如下:
My_func.h ——自定義的頭文件。存放常用宏定義、單片機(jī)I/O位定義、數(shù)據(jù)類型定義和所有函數(shù)的聲明。在其他C文件里只需要寫一句#include "my_func.h",即可直接調(diào)用任意函數(shù),省去了重復(fù)寫定義和聲明的麻煩。
Main.c ——包含主程序main(),是整個(gè)程序執(zhí)行的入口。在main()函數(shù)里,調(diào)用init()進(jìn)行單片機(jī)的初始化,并在大循環(huán)里調(diào)用key_respond()和display()不斷掃描按鍵輸入、輸出顯示數(shù)據(jù)。同時(shí)設(shè)置定時(shí)器T0以工作方式1計(jì)時(shí),從而在中斷服務(wù)程序void Timer() interrupt 1里實(shí)現(xiàn)1s間隔的倒計(jì)時(shí)。
Key_scan.c ——包含按鍵掃描程序key_scan()。該函數(shù)采用行掃描法獲取按鍵的狀態(tài),并將對(duì)應(yīng)的鍵碼傳給Key_respond.c中的函數(shù)key_respond()。
Key_respond.c ——包含按鍵響應(yīng)函數(shù)key_respond()。該函數(shù)里決定是否對(duì)按鍵請(qǐng)求進(jìn)行響應(yīng):如果不響應(yīng),則調(diào)用宏LED_ERROR()使“ERROR!”指示燈閃動(dòng);如果響應(yīng),則調(diào)用相應(yīng)函數(shù)完成不同的操作,如比賽狀態(tài)的開始和暫停、加分、交換場(chǎng)地和分?jǐn)?shù)清零等。
Display.c ——包含數(shù)碼管顯示驅(qū)動(dòng)函數(shù)display()。在這個(gè)函數(shù)里實(shí)現(xiàn)比賽分?jǐn)?shù)設(shè)置、比分交換、計(jì)時(shí)控制等,并通過P0口送出段選信號(hào),通過P2_0和P2_1送出位選信號(hào),從而控制數(shù)碼管的動(dòng)態(tài)顯示。
My_func.c ——被調(diào)用函數(shù)的集合,包含延時(shí)函數(shù)void delay_ms(unsigned int xms)、初始化函數(shù)init()和蜂鳴器發(fā)聲函數(shù)sounder()。