Ⅰ 求單片機籃球計分器程序
這么特殊的程序需要定製開發,重點是時鍾晶元、按鍵處理和數碼管顯示程序段。
Ⅱ 基於單片機的籃球計分器設計
一個單片機+lcd顯示器+按鈕 就搞定 具體hi我
Ⅲ 如何用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
}
}
Ⅳ 籃球比賽計分器的設計(51單片機) 本項目利用按鍵及LED數碼管實現兩隊籃球比賽積分器的設計。具體
會了嗎 我也想要答案
Ⅳ 求用單片機寫個籃球計分器的程序
與MCS-51單片機產品兼容 、8K位元組在系統可編程Flash存儲器、 1000次擦寫周期、 全靜態操作:0Hz~33Hz 、 三級加密程序存儲器 、 32個可編程I/O口線 、三個16位定時器/計數器 八個中斷源 、全雙工UART串列通道、 低功耗空閑和掉電模式 、掉電後中斷可喚醒 、看門狗定時器 、雙數據指針 、掉電標識符 。
功能特性描述
At89s52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統可編程Flash 存儲器。使用Atmel 公司高密度非 易失性存儲器技術製造,與工業80C51 產品指令和引腳完 全兼容。片上Flash允許程序存儲器在系統可編程,亦適於 常規編程器。在單晶元上,擁有靈巧的8 位CPU 和在系統 可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提 供高靈活、超有效的解決方案。 AT89S52具有以下標准功能: 8k位元組Flash,256位元組RAM, 32 位I/O 口線,看門狗定時器,2 個數據指針,三個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串列口, 片內晶振及時鍾電路。另外,AT89S52 可降至0Hz 靜態邏 輯操作,支持2種軟體可選擇節電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工 作。掉電保護方式下,RAM內容被保存,振盪器被凍結, 單片機一切工作停止,直到下一個中斷或硬體復位為止。8 位微控制器 8K 位元組在系統可編程 Flash AT89S52
P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏
輯電平。對P0埠寫「1」時,引腳用作高阻抗輸入。
當訪問外部程序和數據存儲器時,P0口也被作為低8位地址/數據復用。在這種模式下,
P0具有內部上拉電阻。
在flash編程時,P0口也用來接收指令位元組;在程序校驗時,輸出指令位元組。程序校驗
時,需要外部上拉電阻。
P1 口:P1 口是一個具有內部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅動4 個
TTL 邏輯電平。對P1 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入
口使用。作為輸入使用時,被外部拉低的引腳由於內部電阻的原因,將輸出電流(IIL)。
此外,P1.0和P1.2分別作定時器/計數器2的外部計數輸入(P1.0/T2)和時器/計數器2
的觸發輸入(P1.1/T2EX),具體如下表所示。
在flash編程和校驗時,P1口接收低8位地址位元組。
引腳號第二功能
P1.0 T2(定時器/計數器T2的外部計數輸入),時鍾輸出
P1.1 T2EX(定時器/計數器T2的捕捉/重載觸發信號和方向控制)
P1.5 MOSI(在系統編程用)
P1.6 MISO(在系統編程用)
P1.7 SCK(在系統編程用)
P2 口:P2 口是一個具有內部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅動4 個
TTL 邏輯電平。對P2 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入
口使用。作為輸入使用時,被外部拉低的引腳由於內部電阻的原因,將輸出電流(IIL)。
在訪問外部程序存儲器或用16位地址讀取外部數據存儲器(例如執行MOVX @DPTR)
時,P2 口送出高八位地址。在這種應用中,P2 口使用很強的內部上拉發送1。在使用
8位地址(如MOVX @RI)訪問外部數據存儲器時,P2口輸出P2鎖存器的內容。
在flash編程和校驗時,P2口也接收高8位地址位元組和一些控制信號。
P3 口:P3 口是一個具有內部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅動4 個
TTL 邏輯電平。對P3 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入
口使用。作為輸入使用時,被外部拉低的引腳由於內部電阻的原因,將輸出電流(IIL)。
P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。
在flash編程和校驗時,P3口也接收一些控制信號。
埠引腳 第二功能
P3.0 RXD(串列輸入口)
P3.1 TXD(串列輸出口)
P3.2 INTO(外中斷0)
P3.3 INT1(外中斷1)
P3.4 TO(定時/計數器0)
P3.5 T1(定時/計數器1)
P3.6 WR(外部數據存儲器寫選通)
P3.7 RD(外部數據存儲器讀選通)
此外,P3口還接收一些用於FLASH快閃記憶體編程和程序校驗的控制信號。
RST——復位輸入。當振盪器工作時,RST引腳出現兩個機器周期以上高電平將是單片機復位。
ALE/PROG——當訪問外部程存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用於鎖存地址的低8位位元組。一般情況下,ALE仍以時鍾振盪頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鍾或用於定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE脈沖。
對FLASH存儲器編程期間,該引腳還用於輸入編程脈沖(PROG)。
如有必要,可通過對特殊功能寄存器(SFR)區中的8EH單元的D0位置位,可禁止ALE操作。該位置位後,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE禁止位無效。
PSEN——程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C52由外部程序存儲器取指令(或數據)時,每個機器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。
EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態。
如EA端為高電平(接Vcc端),CPU則執行內部程序存儲器的指令。
FLASH存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。
Ⅵ 單片機設計籃球比賽計數器,要求如下
LCD1602的 你可以修改下 以前寫的 供你參考
#include "at89x51.h"
#include "lcd1602.c"
#include "timer.c"
int m=12,s=0,ss=0; // m:分 s:秒 ss:毫秒
unsigned char j=1,a,b,flag; // j:場次,a:A隊得分 ,b:B隊得分,flag: 時間開關標志位
void main()
{
LCD_Initial();//液晶初始化
init_sys();//定時器初始化
TR0=0;//定時器關
while(1)
{
GotoXY(0,0); //游標定位
LCD_Write(1,m/10+'0');//顯示fen
LCD_Write(1,m%10+'0');//顯示fen
LCD_Write(1,':');
LCD_Write(1,s/10+'0');//顯示秒
LCD_Write(1,s%10+'0');//顯示秒
LCD_Write(1,':');
LCD_Write(1,ss/1000+'0'); //精確到0.001秒
LCD_Write(1,ss/100%10+'0');//精確到0.001秒
LCD_Write(1,ss%10+'0');//精確到0.001秒
GotoXY(13,0);
if(j==1||j==2) Print("s"); //顯示第幾場
if(j==3||j==4) Print("x");//顯示第幾場
GotoXY(15,0);
LCD_Write(1,j+'0');//顯示第幾節
GotoXY(0,1);
Print("A:");//顯示隊伍名稱
LCD_Write(1,a/100+'0');//顯示隊伍分數
LCD_Write(1,a/10%10+'0');//顯示隊伍分數
LCD_Write(1,a%10+'0');//顯示隊伍分數
GotoXY(8,1);
Print("B:"); //顯示隊伍名稱
LCD_Write(1,b/100+'0'); //顯示隊伍分數
LCD_Write(1,b/10%10+'0'); //顯示隊伍分數
LCD_Write(1,b%10+'0');//顯示隊伍分數
if(P1_0==0)//給隊加分
{
a=a+1;
while(P1_0==0);//等待按鍵釋放
}
if(P1_1==0) //給a隊加1分
{
a=a+2;
while(P1_1==0);//等待按鍵釋放
}
if(P1_2==0)//給a隊加2分
{
a=a+3;
while(P1_2==0);//等待按鍵釋放
}
if(P1_3==0)//給a隊加3分
{
b=b+1;
while(P1_3==0);//等待按鍵釋放
}
if(P1_4==0)//給b隊加1分
{
b=b+2;
while(P1_4==0);//等待按鍵釋放
}
if(P1_5==0)//給b隊加3分
{
b=b+3;
while(P1_5==0);//等待按鍵釋放
}
if(P3_0==0)//時間開關控制
{
flag++;
if(flag%2==1)
{
TR0=1;
}
if(flag%2==0) TR0=0;;
if(flag==100) flag=0;
while(P3_0==0);//等待按鍵釋放
}
if(a==b&&m==0&&s==0&&ss==0)//程序自動控制加時賽 加30秒
{
s=s+30;
}
}
}
void timer0() interrupt 1 //定時中斷函數
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
ss--; //以下為12秒倒計時程序 以及場次的計算
if(ss<=0)
{
s--;
ss=10000;
if(s<=0)
{
m--;
s=59;
if(m<=0)
{
m=12;
j++;
if(j==5)
{
j=0;
TR0=0;
}
}
}
}
}
Ⅶ 單片機課程設計 籃球比賽計分器
你好!
是c語言寫代碼嗎?原理圖確定了嗎?程序什麼時間要
Ⅷ 籃球比賽計時計分器設計
1.1背景知識介紹 單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。單片機自20世紀70年代問世以來,以極其高的性價比受到人們的重視和關注,所以應用很廣,發展很快。單片機的優點是體積小、重量輕、抗干擾能力強,對環境要求不高,價格低廉,可靠性高,靈活性好,開發較為容易。例如,80C51系列單片機已有十多年的生命期,如今仍保持著上升的趨勢,就充分證明了這一點。單片機以其一系列優點,近幾年得到迅猛發展和大范圍推廣,廣泛應用於工業控制系統,數據採集系統、智能化儀器儀表,及通訊設備、日常消費類產品、玩具等。並且已經深入到工業生產的各個環節以及人民生活的各層次中,如車間流水線控制、自動化系統等、智能型家用電器等。而美國ATMEL公司開發生產了新型的8位單片機——AT89系列單片機。他不但具有一般MCS-51單片機的所有特性,而且還擁有一些獨特的優點,此次設計中所用到的AT89C51就是其中典型的代表。單片機內部也用和電腦功能類似的模塊,比如CPU,內存,並行匯流排,還有和硬碟作用相同的存儲器件,用它來做一些控制電器一類不是很復雜的工作足矣了。我們現在用的全自動滾筒洗衣機,排煙罩VCD等等的家電裡面都可以看到它的身影。 單片機是靠程序實現功能的,並且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能。一個不是很復雜的功能要是用美國50年代開發的74系列,或者60年代的CD4000系列這些純硬體的話,電路一定是一塊大PCB板。但是如果要是用美國70年代成功投放市場的系列單片機,結果就會有天壤之別。只因為單片機的通過你編寫的程序可以實現高智能,高效率,以及高可靠性。1.2 設計意義 單片機的應用是具有高度現實意義的。單片機極高的可靠性,微型性和智能性(我們只要編寫不同的程序後就能夠完成不同的控制工作),單片機已成為工業控制領域中普遍採用的智能化控制工具,已經深深地滲入到我們的日常生活當中通過此次基於單片機設計的籃球計時計分系統,我們可以更清楚詳細的了解單片機程序設計的基本指令功能、編程步驟和技巧來講述單片機編程,並對MCS-51單片機的結構和原理進行講述,以及基於單片機開發應用的相關晶元的工作原理,並且可以在將來的工作和學習中加以應用。1.3 設計目的 隨著單片機在各個領域的廣泛應用,許多用單片機做控制的球賽計時計分系統也應運而產生,如用單片機控制LCD液晶顯示器計時計分器,用單片機控制LED七段顯示器計時計分器等。本次設計用由AT89C51編程式控制制LED七段數碼管作顯示的球賽計時計分系統。該系統具有賽程定時設置,賽程時間暫停,及時刷新甲、乙雙方的成績以及賽後成績暫存等功能。它具有價格低廉,性能穩定,操作方便並且易於攜帶等特點。廣泛適合各類學校或者小型團體作為賽程計時計分。通過本次基於C51系列籃球計時計分器的設計,可以了解、熟悉有關單片機開發設計的過程,並加深對單片機的理解和應用以及掌握單片機與外圍介面的一些方法和技巧,這主要表現在以下一些方面:(1) 籃球賽計時計分系統包含了8051系列單片機的最小應用系統的構成,同時在此基礎上擴展了一些使用性強的外圍介面。(2) 可以了解到LED顯示器的結構、工作原理以及這種顯示器的介面實例與具體連接與編程方法。(3) 怎樣利用串列口來擴展顯示介面等。