找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3283|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)籃球計分器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:257509 發(fā)表于 2017-12-5 07:40 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg51.h>
#define LEDData P0

unsigned char code LEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char minit,second,count,count1;                //分,秒,計數(shù)器

sbit add1=P1^0;                                                //甲對加分,每按一次加1分   /在未開始比賽時為加時間分
sbit dec1=P1^1;                                                //甲對減分,每按一次減1分        /在未開始比賽時為減時間分
sbit exchange=P1^2;                                        //交換場地
sbit add2=P1^3;                                                //乙對加分,每按一次加1分        /在未開始比賽時為加時間秒
sbit dec2=P1^4;                                                //乙對減分,每按一次減1分        /在未開始比賽時為減時間秒
sbit secondpoint=P0^7;                                //秒閃動點
//----依次點亮數(shù)碼管的位------
sbit led1=P2^7;
sbit led2=P2^6;
sbit led3=P2^5;
sbit led4=P2^4;
sbit led5=P2^3;
sbit led6=P2^2;
sbit led7=P2^1;
sbit led8=P2^0;
sbit led9=P3^7;
sbit led10=P3^6;

sbit alam=P1^7;                                                //報警

bit  playon=0;                                                //比賽進(jìn)行標(biāo)志位,為1時表示比賽開始,計時開啟
bit  timeover=0;                                        //比賽結(jié)束標(biāo)志位,為1時表示時間已經(jīng)完
bit  AorB=0;                                                //甲乙對交換位置標(biāo)志位
bit  halfsecond=0;                                        //半秒標(biāo)志位

unsigned int scoreA;                                //甲隊得分
unsigned int scoreB;                                //乙隊得分
               

void Delay5ms(void)
{
        unsigned int i;
        for(i=100;i>0;i--);
}


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組的分?jǐn)?shù)百位-------
        if(AorB==0)
                LEDData=LEDCode[scoreA/100];
        else
                LEDData=LEDCode[scoreB/100];
        led5=0;
        Delay5ms();
        led5=1;
//---------------顯示1組分?jǐn)?shù)的十位-----------
        if(AorB==0)
                LEDData=LEDCode[(scoreA%100)/10];
        else
                LEDData=LEDCode[(scoreB%100)/10];
        led6=0;
        Delay5ms();
        led6=1;

//---------------顯示1組分?jǐn)?shù)的個位-----------
        if(AorB==0)
                LEDData=LEDCode[scoreA%10];
        else
                LEDData=LEDCode[scoreB%10];
        led7=0;
        Delay5ms();
        led7=1;

//-----------顯示2組分?jǐn)?shù)的百位-------



//-----------顯示2組分?jǐn)?shù)的十位-----------





//-----------顯示2組分?jǐn)?shù)的個位-----------


}


//=========================按鍵檢測程序================================================
void keyscan(void)
{
        if(playon==0)
        {
                if(add1==0)
                {
                        display();
                        if(add1==0);
                        {
                                if(minit<99)
                                        minit++;
                                else
                                        minit=99;
                        }
                        do
                                display();
                        while(add1==0);
                }

                if(dec1==0)
                {
                        display();
                        if(dec1==0);
                        {
                                if(minit>0)
                                        minit--;
                                else
                                        minit=0;
                        }
                        do
                                display();
                        while(dec1==0);
                }




                }

                if(exchange==0)
                {
                        display();
                        if(exchange==0);
                        {
                                TR1=0;                                        //關(guān)閉T1計數(shù)器
                                alam=1;                                        //關(guān)報警
                                   AorB=~AorB;                                //開啟交換       
                                minit=15;                                //并將時間預(yù)設(shè)為15:00
                                second=0;
                        }
                        do
                                display();
                        while(exchange==0);
                }       
        }
        else
        {
                if(add1==0)
                {
                        display();
                        if(add1==0);
                        {
                                if(AorB==0)
                                {
                                        if(scoreA<999)
                                                scoreA++;
                                        else
                                                scoreA=999;
                                }
                                else
                                {
                                        if(scoreB<999)
                                                scoreB++;
                                        else
                                                scoreB=999;
                                }
                        }
                        do
                                display();
                        while(add1==0);
                }

                if(dec1==0)
                {
                        display();
                        if(dec1==0);
                        {
                                if(AorB==0)
                                {
                                        if(scoreA>0)
                                                scoreA--;
                                        else
                                                scoreA=0;
                                }
                                else
                                {
                                        if(scoreB>0)
                                                scoreB--;
                                        else
                                                scoreB=0;
                                }
                        }
                        do
                                display();
                        while(dec1==0);
                }



        }
}
       


//******************************主函數(shù)*************************************************
void main(void)
{
        TMOD=0x11;
        TL0=0xb0;
        TH0=0x3c;
        TL1=0xb0;
        TH1=0x3c;
        minit=15;                                //初始值為15:00
        second=0;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=0;
        TR1=0;
        EX0=1;
        IT0=1;
        IT1=1;
        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;                                        //開啟計時
        }
        else
        {
                playon=0;                                //開始標(biāo)志位清零,表示暫停
                TR0=0;                                        //暫時計時
        }       
        EX0=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)
                 {
                        if(minit>0)
                        {
                                second=59;
                                minit--;
                        }
                        else
                        {
                                timeover=1;
                                playon=0;
                                TR0=0;
                                TR1=1;
                        }
                }
                else
                        second--;
           }
}


//*********************************中斷服務(wù)函數(shù)**************************************
void  time1_int(void) interrupt 3
{
        TL1=0xb0;
        TH1=0x3c;
        TR1=1;
          count1++;
        if(count1==10)
        {
                alam=0;
        }

           if(count1==20)
           {
                count1=0;
                alam=1;
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:663428 發(fā)表于 2019-12-13 22:54 | 只看該作者
怎么也沒個圖
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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