找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2754|回復(fù): 0
收起左側(cè)

基于51單片機(jī)的籃球計(jì)時(shí)器程序

[復(fù)制鏈接]
ID:993066 發(fā)表于 2021-12-16 11:13 | 顯示全部樓層 |閱讀模式
設(shè)計(jì)任務(wù):設(shè)計(jì)并仿真實(shí)現(xiàn)一個(gè)籃球比賽計(jì)時(shí)器。系統(tǒng)框圖如下圖所示。

籃球比賽計(jì)時(shí)器框圖
4.設(shè)計(jì)要求
1) 基本要求
(1)計(jì)時(shí)功能:
l  能記錄整個(gè)賽程的實(shí)際比賽時(shí)間,并能修改比賽時(shí)間,計(jì)時(shí)范圍:0~99分鐘。
l  能扣除暫停時(shí)間、節(jié)間休息時(shí)間和罰球時(shí)間。
(2)定時(shí)功能:
l  總時(shí)間分為四節(jié),每節(jié)時(shí)間到報(bào)警
l  節(jié)休時(shí)間到報(bào)警
(3)節(jié)休時(shí)間可人為預(yù)置。
2) 發(fā)揮部分
(1)語音播報(bào)“暫停時(shí)長到”、“節(jié)間休息時(shí)長到”。
5、備注
(1)設(shè)計(jì)內(nèi)容包括:系統(tǒng)方案設(shè)計(jì)、電原理圖設(shè)計(jì)、PCB版圖設(shè)計(jì)和仿真電路設(shè)計(jì);
(2)完成基本要求和仿真得90分;
(3)完成擴(kuò)展部分并仿真加10分。

由于單片機(jī)的集成度高,功能強(qiáng),通用性好,特別是它具有體積小、重量輕、能耗低、價(jià)格便宜、可靠性高、抗干擾能力強(qiáng)和使用方便等獨(dú)特的優(yōu)點(diǎn),使單片機(jī)迅速得到了推廣應(yīng)用。目前已經(jīng)成為測量控制應(yīng)用系統(tǒng)中的優(yōu)選機(jī)種和新電子產(chǎn)品的關(guān)鍵部位,許多用單片機(jī)做控制的球賽計(jì)時(shí)系統(tǒng)也應(yīng)運(yùn)而生,如:用單片機(jī)控制液晶顯示(LCD)計(jì)時(shí)計(jì)時(shí)器,用單片機(jī)控制LED七段顯示器計(jì)時(shí)計(jì)時(shí)器等;@球計(jì)時(shí)器以單片機(jī)為核心,由計(jì)時(shí)器和綜合控制器等組成。

本設(shè)計(jì)中系統(tǒng)硬件電路主要由以下幾個(gè)部分組成:單片機(jī)AT89C51、計(jì)時(shí)電路及報(bào)警電路和按鍵開關(guān)。具體由AT89C51編程控制LED七段數(shù)碼管作顯示的球賽計(jì)時(shí)系統(tǒng)。該系統(tǒng)具有記錄單節(jié)時(shí)間及24秒倒計(jì)時(shí)等功能。它具有價(jià)格低廉、性能穩(wěn)定、操作方便并且易于攜帶等特點(diǎn),廣泛適合各類學(xué);蛘咝⌒蛨F(tuán)體作為賽程計(jì)時(shí)計(jì)分。
                                                   
(1)設(shè)計(jì)內(nèi)容包括:系統(tǒng)方案設(shè)計(jì)、電原理圖設(shè)計(jì)、PCB版圖設(shè)計(jì)和仿真電路設(shè)計(jì);... II
(2)完成基本要求和仿真得90分;... II
摘    要... III
ABSTRACT. IV
第1章  概述... 6
1.1  選題背景、研究目的及意義... 6
1.1.1  選題背景... 6
1.2 國內(nèi)外研究現(xiàn)狀... 6
1.3  本設(shè)計(jì)主要實(shí)現(xiàn)內(nèi)容... 7
2 系統(tǒng)總體設(shè)計(jì)方案... 8
2.1單片機(jī)介紹... 8
2.2 顯示模塊... 9
3 硬件電路... 10
3.1 數(shù)碼管驅(qū)動(dòng)及顯示電路... 10
3.2 按鍵及蜂鳴器模塊... 10
第4章  軟件設(shè)計(jì)... 11
5 仿真測試... 12
5.1 PROTEUS仿真實(shí)現(xiàn)... 12
5.2仿真測試... 12
結(jié) 論... 15
參考文獻(xiàn)... 16
附錄一 硬件原理圖.. 17
附錄二 仿真原理圖.. 18
附錄三 PCB圖... 19
附錄四 程序... 20

第1章  概述
1.1 選題背景、研究目的及意義
隨著體育活動(dòng)越來越多的受到人們的重視,籃球比賽也被很多青少年所喜愛。我本人也參加過學(xué)校組織的班級間的籃球比賽,但是比賽的計(jì)分和計(jì)時(shí)的工具大多是很簡陋的比分牌,十分的不方便。而且大多由于缺少24秒的倒計(jì)時(shí),控球時(shí)間計(jì)時(shí)不是很準(zhǔn)確。我開發(fā)的這個(gè)系統(tǒng)原料簡單,按鍵功能強(qiáng)大,計(jì)時(shí)準(zhǔn)確,流動(dòng)性強(qiáng),非常適合于學(xué)校的籃球比賽等對于計(jì)時(shí)要求比較高的地方。自從1976年Intel公司推出第一批單片機(jī)以來,80年代單片機(jī)技術(shù)進(jìn)入快速發(fā)展時(shí)期,近年來,隨著大規(guī)模集成電路的發(fā)展,單片機(jī)繼續(xù)朝快速、高性能方向發(fā)展,從4位、8位單片機(jī)發(fā)展到16位、32位單片機(jī)。單片機(jī)主要用于控制,它的應(yīng)用領(lǐng)域遍及各行各業(yè),大到航天飛機(jī),小至日常生活中的冰箱、彩電,單片機(jī)都可以大顯其能。單片機(jī)將微處理器、存儲器、定時(shí)/計(jì)數(shù)器、I/O接口電路等集成在一個(gè)芯片上的大規(guī)模集成電路,本身即是一個(gè)小型化的微機(jī)系統(tǒng)。單片機(jī)技術(shù)與傳感與測量技術(shù)、信號與系統(tǒng)分析技術(shù)、電路設(shè)計(jì)技術(shù)、可編程邏輯應(yīng)用技術(shù)、微機(jī)接口技術(shù)、數(shù)據(jù)庫技術(shù)以及數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)操作系統(tǒng)、匯編語言程序設(shè)計(jì)、高級語言程序設(shè)計(jì)、軟件工程、數(shù)據(jù)網(wǎng)絡(luò)通信、數(shù)字信號處理、自動(dòng)控制、誤差分析、儀器儀表結(jié)構(gòu)設(shè)計(jì)和制造工藝等的結(jié)合,使得單片機(jī)的應(yīng)用非常廣泛。

1.3 本設(shè)計(jì)主要實(shí)現(xiàn)內(nèi)容
(1)計(jì)時(shí)功能:
   能記錄整個(gè)賽程的實(shí)際比賽時(shí)間,并能修改比賽時(shí)間,計(jì)時(shí)范圍:0~99分鐘。
   能扣除暫停時(shí)間、節(jié)間休息時(shí)間和罰球時(shí)間。
(2)定時(shí)功能:
   總時(shí)間分為四節(jié),每節(jié)時(shí)間到報(bào)警
   節(jié)休時(shí)間到報(bào)警
(3)節(jié)休時(shí)間可人為預(yù)置。

XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號要通過一個(gè)二分頻觸發(fā)器,因此對外部時(shí)鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。
復(fù)位電路: 復(fù)位電路是單片機(jī)應(yīng)用中的最基本和最重要的電路,用于處理單片機(jī)工作失靈等緊急問題。當(dāng)單片機(jī)復(fù)位端口為高電平時(shí),單片機(jī)中的代碼將不會被執(zhí)行。一開始上電時(shí),電容還未充滿電,復(fù)位端口為高電平,避免了直接上電就運(yùn)行程序?qū)е碌某绦蝈e(cuò)誤等問題。當(dāng)電容充滿電后,復(fù)位端口變?yōu)榈碗娖,程序開始運(yùn)行。單片機(jī)最小系統(tǒng)如圖2.1所示。
圖2.1 單片機(jī)最小系統(tǒng)
2.2 顯示模塊
方案一:四位共陰數(shù)碼管顯示煙霧濃度值和溫度值;
方案二:采用液晶顯示屏LCD顯示煙霧濃度值和溫度值。
本系統(tǒng)顯示采用的是四位共陰數(shù)碼管。眾所周知,單片機(jī)設(shè)計(jì)中一般采用LED數(shù)碼管或者LCD液晶顯示屏來顯示數(shù)據(jù),而LCD液晶顯示屏的特點(diǎn)比較突出,顯示的數(shù)據(jù)清晰、明了,且功耗較少。相比于LCD液晶顯示,四位數(shù)碼管的顯示能力不如LCD液晶顯示屏,但是其價(jià)格便宜,且能滿足本設(shè)計(jì)的需求。因此,本設(shè)計(jì)就采用四位共陰數(shù)碼管,下圖2.2所示的是四位共陰數(shù)碼管。
圖2.2 四位數(shù)碼管
3 硬件電路
3.1 數(shù)碼管驅(qū)動(dòng)及顯示電路
數(shù)碼管驅(qū)動(dòng)及顯示電路如圖3.1所示,通過PNP三極管S9012顯示數(shù)碼管的驅(qū)動(dòng),并利用單片機(jī)P0口實(shí)現(xiàn)數(shù)據(jù)的顯示。
圖3.1 數(shù)碼管驅(qū)動(dòng)及顯示電路
3.2 按鍵及蜂鳴器模塊
按鍵電路如圖3.2所示,由“時(shí)間分鐘加鍵”、“時(shí)間分鐘減鍵”、“時(shí)間秒加鍵”、“時(shí)間秒減鍵”、“計(jì)時(shí)開始/停止按鍵”、“24S重置按鍵”六個(gè)鍵組成。在改變分?jǐn)?shù)時(shí),按下以上的鍵就可以實(shí)現(xiàn)數(shù)值的改變。
圖3.2 按鍵及蜂鳴器模塊
第4章  軟件設(shè)計(jì)
本設(shè)計(jì)中采用的處理器是STC單片機(jī),由此可采用面向MCS-51的程序設(shè)計(jì)語言,包括ASM51匯編語言和C51高級語言,這兩種語言各有特點(diǎn)。數(shù)學(xué)運(yùn)算程序適合用C51高級語言編寫,因?yàn)橛酶呒壵Z言編寫運(yùn)算程序可提高編程效率和應(yīng)用程序的可靠性。本設(shè)計(jì)需要實(shí)現(xiàn)時(shí)間的加減以及計(jì)時(shí)提示,整體程序流程圖如圖4.1所示。
圖4.1 主程序流程圖
5 仿真測試
5.1PROTEUS仿真實(shí)現(xiàn)
首先,我們利用我們根據(jù)硬件電路原理圖,同時(shí)結(jié)合仿真特點(diǎn),利用protues8.7軟件設(shè)計(jì)了如圖5.1所示的仿真電路圖。仿真中最小系統(tǒng)的復(fù)位電路與硬件原理圖最小系統(tǒng)中復(fù)位電路有所區(qū)別,復(fù)位電路中的電容值為0.1uf,電阻值為100Ω。
圖5.1 仿真原理圖
根據(jù)第四章軟件設(shè)計(jì)的思路,結(jié)合仿真需求,我們將仿真設(shè)計(jì)的C代碼利用KEIL5編寫好,并進(jìn)行詳細(xì)地注釋。接著,我們點(diǎn)擊“create HEX file”,并再次編譯程序,這樣就會生成HEX燒錄文件。最后,我們打開仿真原理圖,并將生產(chǎn)的“HEX”文件燒錄到單片機(jī)芯片中,點(diǎn)擊開始仿真,就可以實(shí)現(xiàn)相關(guān)仿真了,我們將在下一節(jié)中具體展示仿真的結(jié)果。
5.2仿真測試
通過按下“倒計(jì)時(shí)開始/停止”按鍵,開始倒計(jì)時(shí)。具體仿真測試如圖5.2所示,從圖中可以看出,單節(jié)時(shí)間調(diào)整為12分鐘,按鍵按下后,數(shù)碼管顯示清晰、無抖動(dòng),實(shí)現(xiàn)了既定功能。
圖5.2 時(shí)間顯示
通過按下“時(shí)間分鐘加鍵”、“時(shí)間分鐘減鍵”、“時(shí)間秒加鍵”、“時(shí)間秒減鍵”四個(gè)按鍵,可以實(shí)現(xiàn)單節(jié)時(shí)間的調(diào)整。具體仿真測試如圖5.3所示,從圖中可以看出,24S時(shí)間為0,蜂鳴器響起,按鍵按下后,數(shù)碼管顯示清晰、無抖動(dòng),實(shí)現(xiàn)了既定功能。
圖5.3 時(shí)間到報(bào)警
通過按下“24S重置”按鍵,可以實(shí)現(xiàn)24S重置。具體仿真測試如圖5.4所示,從圖中可以看出,24S時(shí)間為24,按鍵按下后,數(shù)碼管顯示清晰、無抖動(dòng),實(shí)現(xiàn)了既定功能。
圖5.4 重置
結(jié) 論
結(jié)合以上設(shè)計(jì),本設(shè)計(jì)實(shí)現(xiàn)了以下功能:
(1)計(jì)時(shí)功能:
 能記錄整個(gè)賽程的實(shí)際比賽時(shí)間,并能修改比賽時(shí)間,計(jì)時(shí)范圍:0~99分鐘。
 能扣除暫停時(shí)間、節(jié)間休息時(shí)間和罰球時(shí)間。
(2)定時(shí)功能:
 總時(shí)間分為四節(jié),每節(jié)時(shí)間到報(bào)警
 節(jié)休時(shí)間到報(bào)警
(3)節(jié)休時(shí)間可人為預(yù)置。

附錄四 程序
#include<reg52.h>
#define LEDData P0
unsigned char codeLEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
intminit,second,count,count1;         //分,秒,計(jì)數(shù)器
char min=15,sec=0;
sbit add1=P1^0;                    //甲對加分,每按一次加1分   /在未開始比賽時(shí)為加時(shí)間分
sbit dec1=P1^1;                    //甲對減分,每按一次減1分  /在未開始比賽時(shí)為減時(shí)間分
sbit add2=P1^3;                    //乙對加分,每按一次加1分  /在未開始比賽時(shí)為加時(shí)間秒
sbit dec2=P1^4;                    //乙對減分,每按一次減1分  /在未開始比賽時(shí)為減時(shí)間秒
sbit p24_sec=P1^5;
sbitsecondpoint=P0^7;             //秒閃動(dòng)點(diǎn)
//----依次點(diǎn)亮數(shù)碼管的位------
sbit led1=P2^7;
sbit led2=P2^6;
sbit led3=P2^5;
sbit led4=P2^4;
sbit led11=P3^5;
sbit led12=P3^4;
sbit alam=P1^7;                    //報(bào)警
bit  playon=0;                     //比賽進(jìn)行標(biāo)志位,為1時(shí)表示比賽開始,計(jì)時(shí)開啟
bit  timeover=0;                //比賽結(jié)束標(biāo)志位,為1時(shí)表示時(shí)間已經(jīng)完
bit  AorB=0;                    //甲乙對交換位置標(biāo)志位
bit  halfsecond=0;                 //半秒標(biāo)志位
char sec24=24;      
void Delay5ms(void)
{
    unsigned int i;
    for(i=100;i>0;i--);
}
void display(void)
{
//-----------顯示時(shí)間分--------------
    LEDData=LEDCode[minit/10];
    led1=0;
    Delay5ms();
    led1=1;
    LEDData=LEDCode[minit%10];
    led2=0;
    Delay5ms();
    led2=1;
//-------------秒點(diǎn)閃動(dòng)------------
    if(halfsecond==1)
       LEDData=0x7f;
    else
       LEDData=0xff;
    led2=0;
    Delay5ms();
    led2=1;
    secondpoint=0;
//-----------顯示時(shí)間秒------------
    LEDData=LEDCode[second/10];
    led3=0;
    Delay5ms();
    led3=1;
    LEDData=LEDCode[second%10];
    led4=0;
    Delay5ms();
    led4=1;
//-----------顯示時(shí)間分--------------
    LEDData=LEDCode[sec24/10];
    led11=0;
    Delay5ms();
    led11=1;
    LEDData=LEDCode[sec24%10];
    led12=0;
    Delay5ms();
    led12=1;
}
//=========================按鍵檢測程序================================================
void keyscan(void)
{
    if(playon==0)
    {
       if(add1==0)
       {
           display();
           if(add1==0);
           {
              if(minit<99)
                  minit++;
              else
                  minit=99;
                  min=minit;
           }
           do
              display();
           while(add1==0);
           
       }
       if(dec1==0)
       {
           display();
           if(dec1==0);
           {
              if(minit>0)
                  minit--;
              else
                  minit=0;
                  min=minit;
           }
           do
              display();
           while(dec1==0);
           
       }
       if(add2==0)
       {
           display();
           if(add2==0);
           {
              if(second<59)
                  second++;
              else
                  second=59;
                  sec=second;
           }
           do
              display();
           while(add2==0);
           
       }
       if(dec2==0)
       {
           display();
           if(dec2==0);
           {
              if(second>0)
                  second--;
              else
                  second=0;  
                  sec=second;
           }
           do
              display();
           while(dec2==0);
           
       }
    }
    else
    {
       if(p24_sec==0)
       {
           display();
           if(p24_sec==0)
           {
              sec24=24;
              TR0=1;
              alam=1;
              while(p24_sec==0) display();
           }
       }
    }
}
//******************************主函數(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;            //開始標(biāo)志位
       TR0=1;               //開啟計(jì)時(shí)
      
       if((minit+second)==0)
       {
           sec24=24;
           minit=min;        
           second=sec;
       }
    }
    else
    {
       playon=0;            //開始標(biāo)志位清零,表示暫停
       TR0=0;               //暫時(shí)計(jì)時(shí)
    }   
    EX0=1;                   //開中斷   
}
/*
void PxInt1(void)interrupt 2
{
    Delay5ms();
    EX1=0;                   //關(guān)中斷
    if(timeover==1)             //比賽結(jié)束標(biāo)志,必須一節(jié)結(jié)束后才可以交換,中途不能交換場地
    {
       TR1=0;               //關(guān)閉T1計(jì)數(shù)器
       alam=1;                  //關(guān)報(bào)警
       AorB=~AorB;              //開啟交換
       minit=15;            //并將時(shí)間預(yù)設(shè)為15:00
       second=0;
    }
    EX1=1;                   //開中斷
}
*/
//*********************************中斷服務(wù)函數(shù)**************************************
void  time0_int(void) interrupt 1
{
    TL0=0xb0;
    TH0=0x3c;
    TR0=1;
    count++;
    if(count==10)
    {
       halfsecond=0;
    }
    if(count==20)
    {
       count=0;
       halfsecond=1;
//     if(second>0)
       {
           second--;
           if(second<0)
           {
              if(minit>0)
              {
                  second=59;
                  minit--;
              }
              else
              {
                  second=0;
                  timeover=1;
                  playon=0;
                  TR0=0;
                  TR1=1;
              }
           
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表