仿真:proteus 7.8
程序編譯器:keil 4/keil 5
編程語言:C語言
編號C0004
電路采用單片機作為核心元件,利用兩個供陰的三位一體數(shù)碼管來顯示兩隊的分數(shù),一個四位一體數(shù)碼管顯示時間的計時。顯示分數(shù)范圍可達0~999分,足夠賽程計分的需要。四位一體數(shù)碼管中2個用于顯示分鐘,2個用于顯示秒鐘。
該系統(tǒng)具有賽程定時設置,賽程時間暫停,及時刷新甲、乙雙方的成績等功能。設計分為軟件設計和硬件設計兩部分。主控芯片采用AT89C51,使用C語言編寫軟件程序,主體分為計時顯示模塊、計分顯示模塊、定時報警、按鍵控制模塊。編程后利用Keil C51軟件來進行編譯,再將生成的HEX文件裝入芯片中,檢驗功能是否能夠正常實現(xiàn)。
講解視頻
1 設計要求:
1、能記錄整個賽程的比賽時間,并能修改時間,暫停比賽時間。
2、能隨時刷新甲、乙兩隊在整個賽程中的比分。
3、場中交換比賽場地時,能交換甲、乙兩隊比分的位置。
4、比賽時間結束時,能發(fā)出報警指令。
5、有24秒倒計時功能,可通過按鍵隨時復位24秒,如果24秒違例會啟動蜂鳴器報警,同時比賽時間暫停,處理好后按一下24秒復位鍵,比賽繼續(xù)。
二、實現(xiàn)功能:
1、一個四位一體數(shù)碼管顯示比賽時間,時間格式如:15:00,兩個三位一體數(shù)碼管顯示甲乙兩對的比分,比分格式如:008。
2、比賽時間采用倒計時方式,以一秒的頻率減時,上電時默認初值為15:00,在沒有開始比賽時,可以修改時間,比賽開始后不能修改。
3、甲乙隊比分采用三位數(shù),上電初值為000,最大值為999,滿足常理要求,未開始比賽以及比賽結束后比分無法加減,
4、比賽未開始之前,可以通過ADD1、DEC1鍵對比較時間的分鐘進調時,通過ADD2、DEC2鍵對比較時間的秒進行調時。
5、可隨時暫停/啟動比賽時間。
6、比賽進行時,可以通過ADD1、DEC1鍵對甲隊比分加、減,可以通過ADD2、DEC2對乙隊比分加、減。每按一次鍵,加/減1分。
7、當一節(jié)比賽完后,可以通過(EXCHANGE)換場鍵換場,換場后,比分交換顯示,交換后,下一節(jié)比賽開始時,相應的比分加減鍵也隨之交換。
8、當比賽結束時,發(fā)出報警。
三、作用說明:
1、調整比賽時間:插上電源后,系列默認比賽時間為15:00,甲乙隊比分默認000,此時按下ADD1鍵,可以對比賽時間分鐘加1,按下DEC1鍵,可以對比賽時間的分鐘減1,按下ADD2鍵,可以對比賽時間秒加1,按下DEC2鍵,可以對比賽時間秒減1。
2、啟動比賽:按下RUN/STOP鍵,計時開始,比賽時間以1秒的頻率倒計時。
3、暫停比賽:比賽運行的狀態(tài)下,按RUN/STOP鍵,比賽暫停,計時暫停。
4、比分加減,在比賽進行的狀態(tài)下按ADD1,DEC1鍵,可以對甲隊比分加、減1,按ADD2、DEC2鍵,可以對乙隊比分加、減1.
5、交換場地:在一節(jié)比賽時間結束后,按下EXCHANGE鍵,比賽時間重新預置為15:00,同時左右兩邊數(shù)碼管的比分交換顯示。此時按下啟動鍵可以開始新一節(jié)的比賽。
6、報警提示:在一節(jié)比賽時間倒計時到00:00時,蜂鳴器發(fā)出報警提示。
7、比賽時,24秒會以1秒的速度減,可隨時按下24秒復位鍵重置24秒。
講解視頻
包含仿真講解和代碼講解,詳情見壓縮包內
2 仿真圖:
3 原理圖:
4 程序:
顯示函數(shù)
void display(void)
{
//-----------顯示時間分--------------
LEDData=LEDCode[minit/10];
led1=0;
Delay5ms();
led1=1;
LEDData=LEDCode[minit%10];
led2=0;
Delay5ms();
led2=1;
//-------------秒點閃動------------
if(halfsecond==1)
LEDData=0x7f;
else
LEDData=0xff;
led2=0;
Delay5ms();
led2=1;
secondpoint=0;
//-----------顯示時間秒------------
LEDData=LEDCode[second/10];
led3=0;
Delay5ms();
led3=1;
LEDData=LEDCode[second%10];
led4=0;
Delay5ms();
led4=1;
//-----------顯示1組的分數(shù)百位-------
if(AorB==0)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led5=0;
Delay5ms();
led5=1;
//---------------顯示1組分數(shù)的十位-----------
if(AorB==0)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led6=0;
Delay5ms();
led6=1;
//---------------顯示1組分數(shù)的個位-----------
if(AorB==0)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led7=0;
Delay5ms();
led7=1;
//-----------顯示2組分數(shù)的百位-------
if(AorB==1)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led8=0;
Delay5ms();
led8=1;
//-----------顯示2組分數(shù)的十位-----------
if(AorB==1)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led9=0;
Delay5ms();
led9=1;
//-----------顯示2組分數(shù)的個位-----------
if(AorB==1)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led10=0;
Delay5ms();
led10=1;
//-----------顯示時間分--------------
LEDData=LEDCode[sec24/10];
led11=0;
Delay5ms();
led11=1;
LEDData=LEDCode[sec24%10];
led12=0;
Delay5ms();
led12=1;
}
main函數(shù)
//******************************主函數(shù)*************************************************
void main(void)
{
TMOD=0x11;
TL0=0xb0;
TH0=0x3c;
TL1=0xb0;
TH1=0x3c;
minit=min; //初始值為15:00
second=sec;
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
EX0=1;
IT0=1;
IT1=1;
// EX1=1;
PX0=1;
// PX1=1;
PT0=0;
P1=0xFF;
P3=0xFF;
alam=1;
while(1)
{
keyscan();
display();
}
}
void PxInt0(void) interrupt 0
{
Delay5ms();
EX0=0;
alam=1;
TR1=0;
if(timeover==1)
{
timeover=0;
}
if(playon==0)
{
playon=1; //開始標志位
TR0=1; //開啟計時
if((minit+second)==0)
{
sec24=24;
minit=min;
second=sec;
}
}
else
{
playon=0; //開始標志位清零,表示暫停
TR0=0; //暫時計時
}
EX0=1; //開中斷
}
5 報告:
8615字設計報告附贈開題報告
器件清單:
籃球計分器元件清單
1) 萬用板9*15
2) stc89C51單片機
3) 40腳IC座
4) 0.36四位一體共陽數(shù)碼管
5) 0.36三位一體共陽數(shù)碼管*2
6) 0.36兩位一體共陽數(shù)碼管
7) 10K排阻(103)
8) 2.2K電阻*13
9) 10K電阻
10) 10uF電容
11) 按鍵*7
12) 12M晶振
13) 30P電容 *2
15) 蜂鳴器
16) DC電源插座
17) 自鎖開關
18) 導線若干
19) 焊錫若干
USB電源線(電池盒+DC插頭)
6 資料清單&&網盤下載鏈接:
資料下載地址