文章目錄
- 一、籃球計時器
- 1.題目要求
- 2.思路
- 3.仿真圖
- 3.1 未仿真時
- 3.2 仿真開始
- 3.3 A隊進分
- 3.4 B隊進分
- 3.5 比賽結束
- 4.仿真程序
- 4.1 主函數
- 4.2 時間顯示
- 4.3 比分顯示
- 4.4 按鍵掃描
- 二、總結
一、籃球計時器
1.題目要求
以51單片機為核心,設計并制作籃球計時器
基本功能如下:
設有比賽總時長(如10min)和24秒進攻時限的倒計時,允許在倒計時內進行投籃加分,分別有一分球、兩分球、三分球三種進球方式。每次得分之后要有一個積分欄,要記錄兩隊的比分。籃球比賽開始和結束要有標識,可以用led效果來表示。
2.思路
首先,畫個51單片機,粗略計算了一下好像引腳不是很夠用,所以這里想用74HC138來擴展IO口。
74HC138B 譯碼器可接受三位二進制加權地址輸入(A0,A1,A2)并在使能時,提供8 位低電平有效、互斥的輸出(Y0 到 Y7)。至于具體輸出高還是低,要根據下面的真值表來看(請注意實物中的E3其實是仿真圖中的E1,要看引腳編號。)不懂的小伙伴可以看下這個74HC138譯碼器
報警方式依舊選用蜂鳴器
顯示方式,這里選用6位數碼管和4位數碼管分開顯示。一個是顯示比賽時間和進攻時間。一個是顯示A隊和B對的比分。
最后是一個LED來表示比賽開始和比賽結束,打算開始就長亮,一直到比賽結束使其閃爍或者熄滅。用開關或者按鍵來切換是A隊還是B隊,4個按鍵來刷新進攻時間和增加比分(一分、兩分、三分)
3.仿真圖
3.1 未仿真時
3.2 仿真開始
比賽總時間為10分鐘,每次進攻時間為24s。24s倒計時為0,蜂鳴器會響進行提示,需要手動按下進攻時間來重置24s。
3.3 A隊進分
A隊投進3分球,記3分,當前比分3比0。
3.4 B隊進分
B隊投進2分球,記2分,當前比分3比2。
3.5 比賽結束
比賽時間歸零,蜂鳴器長鳴,燈光熄滅。這時候比分為39比34,A隊獲得此次比賽的勝利。
4.仿真程序
4.1 主函數
//主函數
void main()
{Time0_init();//定時器初始化LED=1;//比賽開始while(1){time_display();//總時間顯示和倒計時顯示score_display();//比分顯示keyscan();//按鍵掃描speak();//警報}
}
4.2 時間顯示
//總時間顯示和倒計時顯示(六位數碼管)
void time_display()
{uchar secshi,secge,minshi,minge,attge,attshi;secge=sec%10;//秒鐘個位secshi=sec/10;//秒鐘個位minge=min%10;//分鐘個位minshi=min/10;//分鐘十位attge=att%10;//倒計時個位attshi=att/10;//倒計時十位HLA=0;HLB=0;HLC=0; //第1位P0=table0[minshi];delayms(1);HLA=1;HLB=0;HLC=0; //第2位P0=table0[minge];delayms(1);HLA=0;HLB=1;HLC=0; //第3位P0=table0[secshi];delayms(1);HLA=1;HLB=1;HLC=0; //第4位P0=table0[secge];delayms(1);HLA=0;HLB=0;HLC=1; //第5位P0=table0[attshi];delayms(1);HLA=1;HLB=0;HLC=1; //第6位P0=table0[attge];delayms(1);P0=0x00; //消影
}
4.3 比分顯示
//比分顯示(4位數碼管)
void score_display()
{uchar A_scorege,A_scoreshi,B_scorege,B_scoreshi;A_scorege=A_score%10;A_scoreshi=A_score/10;B_scorege=B_score%10;B_scoreshi=B_score/10;HHA=0;HHB=0;HHC=0; //第1位P3=table0[A_scoreshi];delayms(1);HHA=1;HHB=0;HHC=0; //第2位P3=table0[A_scorege];delayms(1);HHA=0;HHB=1;HHC=0; //第3位P3=table0[B_scoreshi];delayms(1);HHA=1;HHB=1;HHC=0; //第4位P3=table0[B_scorege];delayms(1);P0=0x00;
}
4.4 按鍵掃描
//按鍵掃描
void keyscan()
{if (key_att==0){delayms(1);if(key_att==0)att=24;//重置倒計時24swhile(!key_att);}if (Change==1)//A隊{if (score_1==0)//比分加1{delayms(1);if (score_1==0)A_score+=1;while(!score_1);}if (score_2==0)//比分加2{delayms(1);if (score_2==0)A_score+=2;while(!score_2);}if (score_3==0)//比分加3{delayms(1);if (score_3==0)A_score+=3;while(!score_3);}}else//B隊{if (score_1==0)//比分加1{delayms(5);if (score_1==0)B_score+=1;while(!score_1);}if (score_2==0)//比分加2{delayms(5);if (score_2==0)B_score+=2;while(!score_2);}if (score_3==0)//比分加3{delayms(5);if (score_3==0)B_score+=3;while(!score_3);}}
}
二、總結
今天主要講了基于51單片機的籃球計時器Proteus仿真。
感謝你的觀看!