久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3265|回復: 1
收起左側

51單片機籃球計分器

[復制鏈接]
ID:257509 發表于 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;                //分,秒,計數器

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;                                //秒閃動點
//----依次點亮數碼管的位------
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;                                                //比賽進行標志位,為1時表示比賽開始,計時開啟
bit  timeover=0;                                        //比賽結束標志位,為1時表示時間已經完
bit  AorB=0;                                                //甲乙對交換位置標志位
bit  halfsecond=0;                                        //半秒標志位

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

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

//-----------顯示2組分數的百位-------



//-----------顯示2組分數的十位-----------





//-----------顯示2組分數的個位-----------


}


//=========================按鍵檢測程序================================================
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;                                        //關閉T1計數器
                                alam=1;                                        //關報警
                                   AorB=~AorB;                                //開啟交換       
                                minit=15;                                //并將時間預設為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);
                }



        }
}
       


//******************************主函數*************************************************
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;                                //開始標志位
                TR0=1;                                        //開啟計時
        }
        else
        {
                playon=0;                                //開始標志位清零,表示暫停
                TR0=0;                                        //暫時計時
        }       
        EX0=1;                                                //開中斷       
}



//*********************************中斷服務函數**************************************
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--;
           }
}


//*********************************中斷服務函數**************************************
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;
        }
}
回復

使用道具 舉報

ID:663428 發表于 2019-12-13 22:54 | 顯示全部樓層
怎么也沒個圖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人免费在线 | 黄a网站 | 国产精品不卡一区二区三区 | 自拍视频国产 | 中文字幕久久久 | 亚洲精精品 | 不卡一区二区三区四区 | 自拍偷拍第一页 | 涩涩导航| 激情婷婷成人 | 国产精品久久久久影院色老大 | 欧美综合在线观看 | 亚洲欧美日韩精品久久亚洲区 | 精品三级在线观看 | 亚洲欧美综合精品久久成人 | 亚洲图片一区二区三区 | 亚洲最色网站 | 国产精品一区视频 | 日本不卡一区二区 | 免费大黄视频 | 一级在线观看 | 99免费精品视频 | a在线免费观看视频 | 日日摸夜夜添夜夜添精品视频 | 91精品国产日韩91久久久久久 | 亚洲国产91 | 亚洲综合大片69999 | av色站| 国产精品不卡 | 美女操网站 | 99久久久久久 | 国产精品毛片久久久久久 | 一区二区福利视频 | 久久久久久天堂 | 国产日韩一区 | 亚洲精品美女视频 | 精品久久久久久久 | 一区二区视频 | 久久精彩视频 | 岛国毛片在线观看 | jdav视频在线观看免费 |