欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機的籃球計分器Proteus仿真+代碼設計
[打印本頁]
作者:
15352536450
時間:
2018-12-25 10:03
標題:
基于51單片機的籃球計分器Proteus仿真+代碼設計
單片機自20世紀70年代問世以來,以極其高的性價比受到人們的重視和關注,所以應用很廣,發展很快。由于單片機的集成度高,功能強,通用性好,特別是它具有體積小、重量輕、能耗低、價格便宜、可靠性高、抗干擾能力強和使用方便等獨特的優點,使單片機迅速得到了推廣應用。目前已經成為測量控制應用系統中的優選機種和新電子產品的關鍵部位,許多用單片機做控制的球賽計時計分系統也應運而生,如:用單片機控制液晶顯示(LCD)計時計分器,用單片機控制LED七段顯示器計時計分器等;@球計時計分器以單片機為核心,由計時器、計分器、綜合控制器等組成。
系統采用模塊化設計,主體分為計時顯示模塊、計分顯示模塊、定時報警、按鍵控制鍵盤模塊。每個模塊的程序結構簡單、任務明確,易于編寫、調試和修改。程序可讀性好,對程序的修改可局部進行,其他部分可保持不變。編程后利用Keil C51軟件來進行編譯,再將生成的HEX文件裝入芯片中,采用Proteus軟件仿真,檢驗功能是否能夠正常實現,隨后可用Protel99畫出硬件電路圖。本設計中系統硬件電路主要由以下幾個部分組成:單片機AT89C51、計時電路、計分電路、報警電路和按鍵開關。
本次設計用由AT89C51編程控制LED七段數碼管作顯示的球賽計時計分系統。該系統具有賽程定時設置、賽程時間暫停、及時刷新甲乙雙方的成績等功能。它具有價格低廉、性能穩定、操作方便并且易于攜帶等特點,廣泛適合各類學校或者小型團體作為賽程計時計分。
籃球計分器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(20.93 KB, 下載次數: 115)
下載附件
2018-12-25 22:06 上傳
單片機源程序如下:
#include<reg51.h>
#define LEDData P0
unsigned char code LEDCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
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 led11=P3^5;
sbit alam=P1^7; //報警
sbit onoff=P3^2;
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=0x80;
else
LEDData=0x00;
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組分數的百位-------
if(AorB==1)
LEDData=LEDCode[scoreA/100];
else
LEDData=LEDCode[scoreB/100];
led8=0;
Delay5ms();
led8=1;
//-----------顯示2組分數的十位-----------
if(AorB==1)
LEDData=LEDCode[(scoreA%100)/10];
else
LEDData=LEDCode[(scoreB%100)/10];
led9=0;
Delay5ms();
led9=1;
//-----------顯示2組分數的個位-----------
if(AorB==1)
LEDData=LEDCode[scoreA%10];
else
LEDData=LEDCode[scoreB%10];
led10=0;
Delay5ms();
led10=1;
}
//=========================按鍵檢測程序================================================
void keyscan(void)
{
if(onoff==0)
{
display();
if(onoff==0)
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
TR1=0;
timeover=0;
playon=!playon; //開始標志位
TR0=playon; //開啟計時
do
display();
while(onoff==0);
}
}
if(playon==0)
{
if(add1==0)
{
display();
if(add1==0);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
if(minit<99)
minit++;
else
minit=99;
}
do
display();
while(add1==0);
}
if(dec1==0)
{
display();
if(dec1==0);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
if(minit>0)
minit--;
else
minit=0;
}
do
display();
while(dec1==0);
}
if(add2==0)
{
display();
if(add2==0);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
if(second<59)
second++;
else
second=59;
}
do
display();
while(add2==0);
}
if(dec2==0)
{
display();
if(dec2==0);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
if(second>0)
second--;
else
second=0;
}
do
display();
while(dec2==0);
}
if(exchange==0)
{
display();
if(exchange==0);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
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);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
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);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
if(AorB==0)
{
if(scoreA>0)
scoreA--;
else
scoreA=0;
}
else
{
if(scoreB>0)
scoreB--;
else
scoreB=0;
}
}
do
display();
while(dec1==0);
}
if(add2==0)
{
display();
if(add2==0);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
if(AorB==1)
{
if(scoreA<999)
scoreA++;
else
scoreA=999;
}
else
{
if(scoreB<999)
scoreB++;
else
scoreB=999;
}
}
do
display();
while(add2==0);
}
if(dec2==0)
{
display();
if(dec2==0);
{
alam=0;
Delay5ms();Delay5ms();
alam=1;
if(AorB==1)
{
if(scoreA>0)
scoreA--;
else
scoreA=0;
}
else
{
if(scoreB>0)
scoreB--;
else
scoreB=0;
}
}
do
display();
while(dec2==0);
}
}
}
//******************************主函數*************************************************
void main(void)
{
TMOD=0x11;
TL0=0xb0;
TH0=0x3c;
TL1=0xb0;
TH1=0x3c;
minit=12; //初始值為12:00
second=0;
EA=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
P1=0xFF;
P3=0xFF;
while(1)
{
keyscan();
display();
}
}
//*********************************中斷服務函數**************************************
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;
}
}
復制代碼
0.png
(41.07 KB, 下載次數: 77)
下載附件
2018-12-25 22:06 上傳
所有資料51hei提供下載:
基于51單片機的籃球計分器設計.zip
(67.99 KB, 下載次數: 346)
2018-12-25 10:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
Ranyuhang
時間:
2019-4-26 14:29
有沒有人根據樓主的資料畫個原理圖pcb啊?
作者:
榆林上校
時間:
2019-4-29 19:58
嗯,收藏了,參考備用
作者:
韓小劍
時間:
2019-5-11 14:04
LEDData=LEDCode[minit/10];這句提示錯誤,,,,warning C275: expression with possibly no effect
作者:
沙師弟的淚
時間:
2019-6-11 16:18
有沒有籃球計分器的程序流程圖啊?
作者:
mont123
時間:
2019-6-18 18:28
非常感謝,收藏了
作者:
萁哥
時間:
2019-11-28 13:08
我下載了但是在哪里看
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1