倪欽如,蔡武德
(云南師范大學(xué) 物理與電子信息學(xué)院,云南昆明,650500)
計(jì)時(shí)和計(jì)分對(duì)一場(chǎng)運(yùn)動(dòng)比賽中兩隊(duì)的勝負(fù)十分重要,因此設(shè)計(jì)一款由單片機(jī)控制的便攜式計(jì)時(shí)計(jì)分系統(tǒng)對(duì)運(yùn)動(dòng)比賽中裁判員的計(jì)時(shí)和計(jì)分有很大的幫助。由于單片機(jī)芯片上集成了大規(guī)模特定功能的器件,因此可以采用單片機(jī)實(shí)現(xiàn)不同電路的設(shè)計(jì)[1]。本文采用AT89C51單片機(jī)作為計(jì)時(shí)和計(jì)分電路的主要控制器件,以實(shí)現(xiàn)計(jì)時(shí)和計(jì)分電路的各個(gè)操作功能和顯示功能。在運(yùn)動(dòng)比賽過(guò)程中,傳統(tǒng)的計(jì)時(shí)大部分采用電子手表,計(jì)分大部分是用翻牌計(jì)分,有時(shí)也會(huì)采用在地上寫(xiě)“正”字來(lái)計(jì)分,設(shè)計(jì)一個(gè)計(jì)時(shí)和計(jì)分電路可以簡(jiǎn)化、方便比賽過(guò)程中的計(jì)時(shí)和計(jì)分。
在接通電源后,通過(guò)相應(yīng)按鍵設(shè)定一節(jié)比賽所需的時(shí)間,最高可以設(shè)定的一節(jié)比賽時(shí)長(zhǎng)為99分鐘。設(shè)定好比賽時(shí)長(zhǎng)后,按下特定按鍵,比賽剩余時(shí)間就以1s的頻率減少。在比賽過(guò)程中,甲乙兩隊(duì)任意一隊(duì)得分,可以通過(guò)對(duì)應(yīng)按鍵進(jìn)行加分,最高可以加到999分。當(dāng)一節(jié)比賽所規(guī)定的時(shí)間結(jié)束,蜂鳴器就會(huì)自動(dòng)發(fā)聲,提示比賽結(jié)束。一節(jié)比賽結(jié)束,兩隊(duì)交換場(chǎng)地,可以通過(guò)對(duì)應(yīng)按鍵實(shí)現(xiàn)交換兩隊(duì)比分的顯示位置的功能。
圖1為系統(tǒng)框圖,包含51單片機(jī)最小系統(tǒng),輸入和輸出三大部分。其中51芯片、復(fù)位電路、時(shí)鐘電路和5V電源共同組成51最小系統(tǒng)[2]。輸入電路有比賽時(shí)間的設(shè)定、比賽時(shí)間的啟動(dòng)/暫停和甲乙兩隊(duì)比分的加/減,輸出電路有比賽剩余時(shí)間的顯示、甲乙兩隊(duì)比賽得分的顯示和比賽結(jié)束的聲音提示。
圖1 系統(tǒng)框圖
系統(tǒng)電路原理圖如圖2所示。圖中左邊是三個(gè)四位一體的數(shù)碼管,其中數(shù)碼管A用于顯示比賽剩余時(shí)間,數(shù)碼管B和C用于顯示甲隊(duì)和乙隊(duì)比賽得分情況。U1為51芯片、C3和R1為復(fù)位電路,C1與C2和X1與U1的XTAL1和XTAL2構(gòu)成時(shí)鐘電路。在比賽開(kāi)始之前,按鍵ADD1、ADC1、ADD2、ADC2可以實(shí)現(xiàn)比賽時(shí)間的設(shè)定。按鍵ADD1、ADC1、ADD2、ADC2,在比賽開(kāi)始前用于比賽時(shí)長(zhǎng)的設(shè)定,在比賽開(kāi)始后用于兩隊(duì)比分加減的操作。若比賽暫停或重新開(kāi)始,可按下RUN/STOP。若一節(jié)比賽結(jié)束,兩隊(duì)交換比賽場(chǎng)地,按下EXCHANGE,可以互換兩隊(duì)比分顯示位置。U2為74HC245,用來(lái)驅(qū)動(dòng)數(shù)碼管A、B和C。LS1為比賽結(jié)束發(fā)發(fā)聲器。
圖2 電路原理圖
圖2 中,數(shù)碼管A,左起第一二位數(shù)碼管用來(lái)顯示比剩余時(shí)間的分鐘數(shù),第三四位數(shù)碼管是用來(lái)顯示比剩余時(shí)間的秒數(shù)。比賽分鐘數(shù)和秒數(shù)的設(shè)定相互獨(dú)立。在比賽開(kāi)始之前,通過(guò)按鍵ADD1和ADC1可以完成一節(jié)比賽時(shí)長(zhǎng)分鐘數(shù)的設(shè)定,通過(guò)按鍵ADD2和ADC2可以完成一節(jié)比賽時(shí)長(zhǎng)秒數(shù)的設(shè)定。其中,按一下ADD1按鍵可以增加一分鐘的比賽時(shí)長(zhǎng),按一下ADC1按鍵可以減少一分鐘的比賽時(shí)長(zhǎng),分鐘數(shù)最多可以加到99,最低可以減到00。通過(guò)按一下ADD2按鍵增加一秒的比賽時(shí)長(zhǎng),按一下ADC2按鍵減少一秒的比賽時(shí)長(zhǎng),秒數(shù)最多可以加到59,最低可以減小到00。
裁判員吹響比賽開(kāi)始的哨聲后,立即按下圖2中的RUN/STOP按鍵,比賽剩余時(shí)間就一秒一秒地減少,直至比賽結(jié)束計(jì)時(shí)顯示器上顯示00.00。
比賽過(guò)程中若有突發(fā)情況,如有隊(duì)員受傷、換人等,需暫停比賽。按RUN/STOP鍵,可實(shí)現(xiàn)時(shí)間計(jì)時(shí)暫停。
圖2中,數(shù)碼管B和C分別顯示甲隊(duì)和乙隊(duì)的比賽得分情況。正常工作狀態(tài)下,只有右邊三位數(shù)碼管接通電源。比賽得分加一,計(jì)分顯示器上就顯示001,最大值可以達(dá)到999,最小可以減小到為000。比賽進(jìn)行中,按ADD1、ADC1、ADD2、ADC2按鍵可以完成比分加減。按ADD1按鍵甲隊(duì)得分加1;按ADC1按鍵甲隊(duì)得分減1;按ADD2按鍵乙隊(duì)得分加1;按ADC2按鍵乙隊(duì)得分減1。還沒(méi)開(kāi)始比賽和比賽結(jié)束后都無(wú)法對(duì)甲乙兩隊(duì)的比賽得分進(jìn)行加減。
一節(jié)比賽結(jié)束,甲乙兩隊(duì)要交換場(chǎng)地,甲乙兩隊(duì)的比分顯示位置也要相應(yīng)地交換。上半場(chǎng)比賽中,計(jì)時(shí)器顯示屏上顯示00.00時(shí),按下圖2中的EXCHANGE按鍵,比賽時(shí)間重置為12.00,甲乙兩隊(duì)的分?jǐn)?shù)顯示位置也就自動(dòng)地交換。上半場(chǎng)的賽程剩余時(shí)間顯示不是00.00,按下交換甲乙兩隊(duì)顯示比分位置的按鍵,甲乙兩隊(duì)的得分顯示位置不會(huì)發(fā)生變化。
一節(jié)比賽剩余時(shí)間顯示為00.00時(shí),圖2中的U1的P1.7口會(huì)輸出一個(gè)低電平,LS1就會(huì)發(fā)出報(bào)警提示音,表示這節(jié)比賽結(jié)束。
在Keil uVision5軟件中新建工程,在新建的工程下創(chuàng)建各個(gè)模塊所需的(*.hex)文件。本設(shè)計(jì)的主函數(shù)如下文所示。
void main(void)
{
TMOD=0x11; //定時(shí)器0和1的工作方式均為1
TL0=0xb0;
TH0=0x3c; //定時(shí)器0初值50ms
TL1=0xb0;
TH1=0x3c; //定時(shí)器1初值50ms
minit=12; //分鐘初始值12
second=0; //秒鐘初始值0
EA=1; //打開(kāi)中斷系統(tǒng)總開(kāi)關(guān)
ET0=1; //打開(kāi)定時(shí)器T0中斷允許
ET1=1; //打開(kāi)定時(shí)器T1中斷允許
TR0=0; //關(guān)閉定時(shí)器T0中斷開(kāi)關(guān)
TR1=0; //關(guān)閉定時(shí)器T1中斷開(kāi)關(guān)
P1=0xFF; //所有I/O口默認(rèn)高電平
P3=0xFF;
while(1) //進(jìn)入while循環(huán)
{
keyscan(); //掃描按鍵函數(shù)
display(); //掃描顯示函數(shù)
} }
計(jì)時(shí)顯示模塊流程圖如圖3所示。在比賽開(kāi)始之前,通過(guò)按鍵來(lái)控制比賽時(shí)間的設(shè)定。設(shè)定好一節(jié)比賽的時(shí)長(zhǎng),按下對(duì)應(yīng)按鍵,比賽開(kāi)始,賽程時(shí)間開(kāi)始倒計(jì)時(shí)。若一節(jié)比賽時(shí)間到了,蜂鳴器就報(bào)警提示比賽結(jié)束,若比賽時(shí)間未結(jié)束,繼續(xù)顯示比賽時(shí)間。
圖3 計(jì)時(shí)顯示模塊流程圖
計(jì)分顯示模塊流程圖如圖4所示。在比賽過(guò)程中,對(duì)應(yīng)按鍵可以操控甲乙兩隊(duì)比賽得分的加/減。比賽開(kāi)始后,若甲、乙兩隊(duì)任意一隊(duì)得分,即可按下加分按鍵進(jìn)行加分,隨后甲乙兩隊(duì)的得分顯示屏上就相應(yīng)地顯示甲隊(duì)和乙隊(duì)的比賽得分情況。
圖4 計(jì)分顯示模塊流程圖
首先,用Proteus仿真軟件畫(huà)出計(jì)時(shí)計(jì)分器的電路原理圖;第二,將生成的“*.hex”文件載入到51芯片中;第三,運(yùn)行仿真操作,仿真結(jié)果如圖5所示。
圖5 仿真圖
當(dāng)仿真調(diào)試結(jié)束,可進(jìn)行電路制作。制作完成的實(shí)際電路如圖6~9所示。圖6為一節(jié)比賽的時(shí)長(zhǎng)是12分鐘,計(jì)時(shí)計(jì)分器上顯示1200。圖7為比賽時(shí)間剩余是9分鐘50秒時(shí),甲隊(duì)得分5分,乙隊(duì)得分3分。圖8為一節(jié)比賽結(jié)束,蜂鳴器自動(dòng)發(fā)聲,甲隊(duì)得分12分,乙隊(duì)得分8分。若繼續(xù)下一節(jié)比賽,要交換甲乙兩隊(duì)比賽得分的顯示位置,按下EXCHANGE按鍵,甲隊(duì)的得分12就交換到右邊的計(jì)分顯示器上,乙隊(duì)的得分8就交換在左邊的計(jì)分顯示器上,且比賽時(shí)間重置為12.00,如圖9所示。
圖6 比賽時(shí)間預(yù)設(shè)12分鐘
圖7 甲隊(duì)5分,乙隊(duì)3分
圖8 甲隊(duì)12分,乙隊(duì)8分
圖9 交換比分
經(jīng)過(guò)調(diào)試,本設(shè)計(jì)的仿真與電路制作已經(jīng)達(dá)到設(shè)計(jì)要求。它能模擬比賽過(guò)程中的計(jì)時(shí)和計(jì)分,符合各類運(yùn)動(dòng)比賽計(jì)時(shí)和計(jì)分的規(guī)則。因數(shù)碼管尺寸較小,可見(jiàn)范圍有限,無(wú)法直接在比賽中使用。但只要將數(shù)碼管的尺寸加大,即可滿足實(shí)際比賽計(jì)時(shí)和計(jì)分的需要。