導航:首頁 > 操作系統 > 51單片機籃球計分器活動總結

51單片機籃球計分器活動總結

發布時間:2023-08-10 23:23:57

⑴ 如何用c51單片機編寫一個籃球計分,計時器

#include"reg52.h"

#defineu8unsignedchar
#defineu16unsignedint


sbitUP_1=P1^1; //第一隊加分鍵
sbitDOWN_1=P1^2; //第一隊減分鍵
sbitUP_2=P1^3; //第二隊加分鍵
sbitDOWN_2=P1^4; //第二隊減分鍵
sbitChange=P1^5; //交換鍵
sbitBegin=P1^6; //開始鍵
sbitPause =P1^7; //暫停鍵

sbitBeef=P2^4; //蜂鳴器

sbitan=P2^3; //段選
sbitwei=P2^2; //位選


u8Grate_1=0; //第一隊計分
u8Grate_2=0; //第二隊計分
u8Grate_change=0; //換場標志
u8Time=99; //總時間
u16Flag=0; //計時次數

u8leddata[]={
0x3F,//"0"
0x06,//"1"
0x5B,//"2"
0x4F,//"3"
0x66,//"4"
0x6D,//"5"
0x7D,//"6"
0x07,//"7"
0x7F,//"8"
0x6F,//"9"
};


voidInitTimer1(void)
{
TMOD=0x10; //定時器1設為模式1
TH1=0xFC;
TL1=0x18;//1ms
EA=1;//開總中斷
ET1=1;//開定時器1中斷
//TR1=1;//
}

voiddelay(u8d) //延時
{
u8a,b,c;
for(c=d;c>0;c--)
for(b=17;b>0;b--)
for(a=16;a>0;a--);
}

voidbeef(u8d)//發聲
{
u8a,b,c;
for(c=d;c>0;c--)
for(b=17;b>0;b--)
for(a=16;a>0;a--)
{
Beef=~Beef;
}
}


voiddisplay(u8grate_1,u8grate_2,u8time) //顯示
{
u8w1,w2,w3,w4,w7,w8;
w1=grate_1/10; //計算第一隊分數十位
w2=grate_1%10; //計算第一隊分數個位

w3=grate_2/10; //計算第二隊分數十位
w4=grate_2%10; //計算第二隊分數個位

w7=time/10; //計算時間十位
w8=time%10; //計算時間個位


P0=0xff; //消隱,該段顯示第一隊分數十位
wei=1;
P0=0xfe; //送位碼
wei=0;
P0=0xff;
an=1;
P0=leddata[w1]; //送段碼
an=0;
delay(5);P0=0xff; //顯示第一隊分數個位
wei=1;
P0=0xfd;
wei=0;
P0=0xff;
an=1;
P0=leddata[w2];
an=0;
delay(5);P0=0xff; //顯示第二隊分數十位
wei=1;
P0=0xfb;
wei=0;
P0=0xff;
an=1;
P0=leddata[w3];
an=0;
delay(5);

P0=0xff; //顯示第二隊分數個位
wei=1;
P0=0xf7;
wei=0;
P0=0xff;
an=1;
P0=leddata[w4];
an=0;
delay(5);P0=0xff; //顯示時間十位
wei=1;
P0=0xbf;
wei=0;
P0=0xff;
an=1;
P0=leddata[w7];
an=0;
delay(5);P0=0xff; //顯示時間個位
wei=1;
P0=0x7f;
wei=0;
P0=0xff;
an=1;
P0=leddata[w8];
an=0;
delay(5);
}


voidmain()
{
InitTimer1(); //初始化定時器1
UP_1=1; //以下初始化IO口
DOWN_1=1;
UP_2=1;
DOWN_2=1;
Change=1;
Begin=1;
while(1)
{
if(UP_1==0) //如果第一隊加分鍵按下
{
ET1=0; //關閉定時器1中斷
delay(5); //稍加延時
while(UP_1==0);//等待按鍵抬起
Grate_1++; //第一隊分數加1
ET1=1; //開啟定時器1中斷
}
if(DOWN_1==0) //如果第一隊減分鍵按下
{
ET1=0;
delay(5);
while(DOWN_1==0);
Grate_1--; //第一隊分數減1
ET1=1;
}
if(UP_2==0) //如果第二隊加分鍵按下
{
ET1=0;
delay(5);
while(UP_2==0);
Grate_2++; //第二隊分數加1
ET1=1;
}
if(DOWN_2==0) //如果第二隊減分鍵按下
{
ET1=0;
delay(5);
while(DOWN_2==0);
Grate_2--; //第二隊分數減1
ET1=1;
}
if(Change==0) //如果換場鍵按下
{
ET1=0;
delay(5);
while(Change==0);
Grate_change=Grate_1;//一下三行語句完成分數交換顯示
Grate_1=Grate_2;
Grate_2=Grate_change;
ET1=1;
}
if(Begin==0) //如果開始鍵按下
{
delay(5);
while(Begin==0);
TR1=1;//開啟定時器1
}
if(Pause==0)
{
delay(5);
while(Pause==0);
TR1=0;
}
if(Time<=0) //如果時間計數到0
{
Time=99; //恢復初始時間
TR1=0; //關閉定時器1
beef(100); //發聲
}
display(Grate_1,Grate_2,Time);//顯示分數、時間
}
}
voidTimer1Interrupt(void)interrupt3 //定時器1中斷函數
{
TH1=0xFC; //重賦初值
TL1=0x18;
Flag++; //中斷次數加1
if(Flag>=1000)//1000次也就是1秒到
{
Flag=0;
Time--; //秒變數減1
}

}

⑵ 單片機籃球比賽計時器課程設計 要求 24秒到計時,計兩隊得分

籃球比賽24秒倒計時器的設計
設計製作一個籃球競賽計時系統,具有進攻方24秒倒計時功能,具體設計要求如下:
1、具有顯示 24s 倒計時功能:用兩個共陰數碼管顯示,其計時間隔為1s。 2、設置啟暫停/繼續鍵,控制兩個計時器的計數,暫停/繼續計數功能。 3、設置復位鍵:按復位鍵可隨時返回初始狀態,即進攻方計時器返回到24s。 4、計時器遞減計數到「00」時,計時器跳回「24」停止工作,並給出聲音和發光提示,即蜂鳴器發出聲響和發光二極體發光 前言
電子課程設計是電子技術學習中非常重要的一個環節,是將理論知識和實踐能力相統一的一個環節,是真正鍛煉學生能力的一個環節。
在許多領域中計時器均得到普遍應用,諸如在體育比賽,定時報警器、游戲中的倒時器,交通信號燈、紅綠燈、行人燈、交通纖毫控制機,還可以用來做為各種葯丸、葯片,膠囊在指定時間提醒用葯等等,由此可見計時器在現代社會的應用是相當普遍的。
在籃球比賽中,規定了球員的持球時間不能超過24秒,否則就違例了。本課程設計「智能籃球比賽倒計時器的設計」,可用於籃球比賽中,用於對球員持球時間24秒限制。一旦球員的持球時間超過了24秒,它自動的報警從而判定此球員的違例。
本設計主要能完成:顯示24秒倒計時功能;系統設置外部操作開關,控制計時器的直接清零、啟動和暫停/連續功能;在直接清零時,數碼管顯示器滅燈;計時器為24秒遞減計時其計時間隔為1秒;計時器遞減計時到零時,數碼顯示器不滅燈,同時發出光電報警信號等。
1.1基本原理
24秒計時器的總體參考方案框圖如圖1所示。它包括秒脈沖發生器、計數器、解碼顯示電路、報警電路和輔助時序控制電路(簡稱控制電路)等五個模塊組成。其中計數器和控制電路是系統的主要模塊。計數器完成24秒計時功能,而控制電路完成計數器的直接清零、啟動計數、暫停/連續計數、解碼顯示電路的顯示與滅燈、定時時間到報警等功能。

⑶ 基於單片機的籃球比賽計分器

這個程序 起始也就是 3個按鍵控制 +1 +2+ 3 1個按鍵控制 紅方藍方的電路 很簡單
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
// 段碼
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
// 待顯示的6位緩沖
uchar Num_Buffer[]={0,0,0,0,0,0};
// 按鍵代碼,按鍵計數
uchar Key_Code,Key_Counts1=0; Key_Counts2=0;//1 2分別是紅 藍方
// 延時
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
// 顯示函數
void Show_Counts_ON_DSY()
{
uchar i,j=0x01;
Num_Buffer[2]=Key_Counts1/100;
Num_Buffer[1]=Key_Counts1/10%10;
Num_Buffer[0]=Key_Counts1%10;
Num_Buffer[5]=Key_Counts1/100;
Num_Buffer[4]=Key_Counts1/10%10;
Num_Buffer[3]=Key_Counts1%10;
for(i=0;i<6;i++)
{
j=_cror_(j,1);
P0=0xff;
P0=DSY_CODE[Num_Buffer[i]];
P2=j;
DelayMS(1);
}
}
// 主程序
void main()
{
uchar i;
P0=0xff;
P1=0xff;
P2=0x00;
Key_Code=0xff;
while(1)
{
Show_Counts_ON_DSY();
P1=0xff;
Key_Code=P1;
//有鍵按下時,數碼管刷新顯示 30 次,該行代碼同時起到延時作用
if(Key_Code!=0xff)
for(i=0;i<30;i++) Show_Counts_ON_DSY();
switch(Key_Code)
{
case 0xfe: if(color==1)Key_Counts1++; else Key_Counts2++; //左邊加1還是右邊加1
break;
case 0xfd: Key_Counts1=Key_Counts1+2; else Key_Counts2=Key_Counts2+2;
break;
case 0xfb: Key_Counts=Key_Counts1+3; else Key_Counts2=Key_Counts2+3;

case 0xf7; color=!color;//左邊還是右邊
}
Key_Code=0xff;
}
//P1接數碼官段碼 P2接片選

閱讀全文

與51單片機籃球計分器活動總結相關的資料

熱點內容
加密的pdf怎麼提取和修改 瀏覽:483
壓縮空氣氣體流量計 瀏覽:841
高角杯如何編程 瀏覽:1009
哪個app可以下載迷失島 瀏覽:27
100以內程序員鍵盤 瀏覽:910
調試助手源碼是什麼 瀏覽:599
程序員網優 瀏覽:461
有沒有極限壓縮方法 瀏覽:79
岳陽hypermill五軸編程 瀏覽:385
超級舒服的解壓神器 瀏覽:450
超短macd源碼 瀏覽:165
群暉怎麼設置用戶訪問指定文件夾 瀏覽:555
安卓怎麼測觸摸屏 瀏覽:595
javastring原理 瀏覽:317
如何關閉手機dhcp伺服器 瀏覽:985
php免費ide 瀏覽:202
程序員詞句 瀏覽:978
伺服器如何禁止某個ip段 瀏覽:331
便簽手機文件夾 瀏覽:770
gameloft的java游戲 瀏覽:112