標(biāo)題: 51單片機(jī)籃球計(jì)分器 [打印本頁(yè)]

作者: yq520rs@    時(shí)間: 2017-12-5 07:40
標(biāo)題: 51單片機(jī)籃球計(jì)分器
#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;                //分,秒,計(jì)數(shù)器

sbit add1=P1^0;                                                //甲對(duì)加分,每按一次加1分   /在未開始比賽時(shí)為加時(shí)間分
sbit dec1=P1^1;                                                //甲對(duì)減分,每按一次減1分        /在未開始比賽時(shí)為減時(shí)間分
sbit exchange=P1^2;                                        //交換場(chǎng)地
sbit add2=P1^3;                                                //乙對(duì)加分,每按一次加1分        /在未開始比賽時(shí)為加時(shí)間秒
sbit dec2=P1^4;                                                //乙對(duì)減分,每按一次減1分        /在未開始比賽時(shí)為減時(shí)間秒
sbit secondpoint=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 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;                                                //報(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;                                                //甲乙對(duì)交換位置標(biāo)志位
bit  halfsecond=0;                                        //半秒標(biāo)志位

unsigned int scoreA;                                //甲隊(duì)得分
unsigned int scoreB;                                //乙隊(duì)得分
               

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;
//-----------顯示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ù)的個(gè)位-----------
        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ù)的個(gè)位-----------


}


//=========================按鍵檢測(cè)程序================================================
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計(jì)數(shù)器
                                alam=1;                                        //關(guān)報(bào)警
                                   AorB=~AorB;                                //開啟交換       
                                minit=15;                                //并將時(shí)間預(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;                                        //開啟計(jì)時(shí)
        }
        else
        {
                playon=0;                                //開始標(biāo)志位清零,表示暫停
                TR0=0;                                        //暫時(shí)計(jì)時(shí)
        }       
        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;
        }
}
作者: 得意    時(shí)間: 2019-12-13 22:54
怎么也沒個(gè)圖




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1