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