標題: 籃球賽電子計時記分牌單片機課程設(shè)計說明書下載(word格式) [打印本頁]
作者: 長通杯 時間: 2018-4-9 20:03
標題: 籃球賽電子計時記分牌單片機課程設(shè)計說明書下載(word格式)
籃球賽電子記分牌
摘要:籃球賽電子計時記分牌是根據(jù)籃球比賽特點設(shè)計的獨立的信息采集、分配、評判和顯示的系統(tǒng),能實現(xiàn)比賽時間和分數(shù)的實時、準確、快捷處理和呈現(xiàn)。本設(shè)計原理簡單,主要采用AT89C51單片機作為微控制器,集合控制器、lCD液晶顯示和報警,控制器控制記分牌的工作狀態(tài),通過lCD液晶顯示和報警來反饋信息。本設(shè)計在充分考慮了籃球比賽的實際情況基礎(chǔ)上設(shè)計,具有友好的人機交互接口,并且可以防止人為誤操作造成的不良后果,具有一定的實用性。
目錄
1緒論
1.1課題背景及研究意義
1.2設(shè)計任務(wù)與要求
1.3 單片機在體育賽事計分的應(yīng)用
1.4方案設(shè)計說明
2系統(tǒng)概述
2.1顯示模塊
2.2 按鍵控制模塊
2.3 報警模式
2.4 總體硬件組成框圖
3系統(tǒng)硬件設(shè)計
3.1 主控電路設(shè)計
3.2 LCD1602顯示模塊的硬件設(shè)計
3.2 按鍵控制模塊
3.3 蜂鳴器報警模塊的硬件設(shè)計
4 軟件控制系統(tǒng)
4.1主程序設(shè)計
4.2仿真結(jié)果
5 結(jié)論
參考文獻
附錄1:
附錄2:
1緒論1.1課題背景及研究意義目前球場記分牌在傳統(tǒng)操作模式下,采用記分員手動翻動記分牌記分,工作方式單一。由于種種弊端,電子記分板已經(jīng)開始在一些大型的體育場流行起來,不僅發(fā)展速度迅猛并會逐漸取代傳統(tǒng)的電子記分牌。電子記分板根據(jù)籃球比賽的特點,采用單片機為核心控制LED數(shù)碼管,具有亮度高、可視性好、功耗小、使用壽命長等優(yōu)點;具有性能穩(wěn)定,尺寸適中,運輸安裝方式靈活,物美價廉等特點,特別適用于小型籃球體育館和露天運動場。
1.2設(shè)計任務(wù)與要求 設(shè)計題目:籃球賽電子記分牌
設(shè)計要求:
(1)分別設(shè)計籃球比賽甲乙兩個隊的記分牌;
(2)能實現(xiàn)兩張記分牌的切換;
(3)能按照籃球賽記分規(guī)則記分并顯示;
(4)將原有的一個指示燈基礎(chǔ)上進一步改進為兩個指示燈,作分別指示。
1.3 單片機在體育賽事計分的應(yīng)用 傳統(tǒng)的籃球比賽計分是由工作人員人工翻動記分牌實現(xiàn)的,而比賽的時間則由工作人員計表控制。由于人為因素,人工操作的比賽計分板難免會出現(xiàn)誤差。而作為微型控制系統(tǒng)的單片機具有集成度高,功能強,通用性好,特別是它具有體積小,重量輕,能耗低,價格便宜,可靠性高,抗干擾能力強和使用方便等獨特的優(yōu)點,使單片機迅速得到了推廣應(yīng)用,目前已經(jīng)成為測量控制應(yīng)用系統(tǒng)中的
優(yōu)選機種和新電子產(chǎn)品的關(guān)鍵部位。]
3[因此單片機在體育比賽記分牌的應(yīng)用也成
為了一種不可避免的趨勢。
1.4方案設(shè)計說明
設(shè)計方案之前,得先分解設(shè)計任務(wù)。本次的設(shè)計任務(wù)是籃球記分牌,據(jù)常識,籃球記分牌應(yīng)有分別給兩隊加分,暫停,顯示屏既要顯示時間又要顯示分數(shù)。在進行設(shè)計之前,應(yīng)自己提出幾個問題,待問題回答之后;竟Α⒌脑O(shè)計方案就出來了。在設(shè)計之前我提出了一下幾個問題:
a:硬件部分如何控制給A對B對加分,如何控制時間與分數(shù)的顯示?場地交換的時候又是如何實現(xiàn)分數(shù)顯示交換的?應(yīng)該如何連接硬件,在硬件上設(shè)置控制端,控制端與單片機各引腳之間的連,如何選擇?
b:單片機只有一個CPU,如何實現(xiàn)即要掃描按鍵,又要顯示比分,顯示時間。數(shù)碼管工作的本質(zhì)是將要顯示的數(shù)據(jù)的字型碼送給他,如何采集到變化的分數(shù)和時間并送給數(shù)碼管。用查表嗎?
c:分數(shù)時間顯示都應(yīng)該有對應(yīng)的液晶顯示,如何控制液晶顯示,使時間和分數(shù)都顯示在相對應(yīng)的液晶顯示屏上?加分與倒計時在程序中最本質(zhì)的東西是什么,如何用程序來說明這樣的事件,各事件之間又是如何聯(lián)系的。
雖然這些問題看似很普通,似乎在設(shè)計過程中都要面對這樣的問題,何不事先就解決這些問題呢,在逐一回答這些問題的同時,該任務(wù)的設(shè)計方案已見雛形。以下就是該方案的詳細內(nèi)容以及我問題的答案。
2系統(tǒng)概述本系統(tǒng)采用單片機AT89C51為控制核心,系統(tǒng)主要包括顯示模塊、按鍵控制模塊、報警模塊等;
2.1顯示模塊 方案一:采用七段碼數(shù)碼管顯示。數(shù)碼管是指將所有發(fā)光二極管的一極接到一起形成公共極,因此數(shù)碼管有共陰共陽之分。以共陽數(shù)碼管為例,共陽數(shù)碼管在應(yīng)用時應(yīng)將公共極接到+5V,當某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮。當某一字段的陰極為高電平時,相應(yīng)字段就不亮。因此每個數(shù)碼管有9個接口。數(shù)碼管的驅(qū)動方式有靜態(tài)掃描和動態(tài)掃描兩種形式。靜態(tài)掃描編程簡單,但電路復(fù)雜;動態(tài)掃描變成復(fù)雜,而且還需要使用其他芯片。
方案二:采用1602液晶顯示。液晶的物理特性是:當通電時導(dǎo)通,排列變得有秩序,是光線容易通過,不通電時排列混亂,阻止光線通過。相比于數(shù)碼管,LCD1602不僅可以顯示的圖形符號更豐富,而且具有輕薄、無輻射等優(yōu)點。
比較以上兩種方案,系統(tǒng)設(shè)計中采用方案二。
2.2 按鍵控制模塊 方案一:采用矩陣鍵盤。矩陣鍵盤的長各分接口分別于單片機的I/O口連接,可以通過連接數(shù)量較少的I/O口,擴展出多個按鍵。但其缺點是電路更復(fù)雜,編程更麻煩。
方案二:采用獨立按鍵。每個獨立按鍵與單片機I/O連接,雖然不能節(jié)省I/O口,但電路簡單、編程容易
比較以上兩種方案,由于本系統(tǒng)只需要4個按鍵,因此選者方案二。
2.3 報警模式 報警模塊中,信號由單片機輸出經(jīng)PNP型三極管放大后進入蜂鳴器發(fā)出聲響進行比賽時間的提示功能。
2.4 總體硬件組成框圖
圖1-1 系統(tǒng)基本方框圖
3系統(tǒng)硬件設(shè)計3.1 主控電路設(shè)計AT89S51為 ATMEL 所生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,在本系統(tǒng)中,AT89S51單片機內(nèi)部的功能單元已經(jīng)能夠滿足系統(tǒng)設(shè)計需要,不需要系統(tǒng)擴展。
AT89S51具有以下的特點:
- CPU與MCS-51 兼容
- 1000寫/擦循環(huán)
- 8K字節(jié)可編程FLASH存儲器
- 全靜態(tài)工作:0--33MHz
- 三級加密程序存儲器
- 256*8位內(nèi)部RAM
- 32個可編程I/O線
- 三個16位定時器/計數(shù)器
- 8個中斷源
- 可編程串行通道
3.2 LCD1602顯示模塊的硬件設(shè)計 1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊它有若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊
圖1-2液晶顯示模塊電路
其中A代表的是甲隊記分牌、B代表乙隊記分牌
3.2 按鍵控制模塊 按鍵控制模塊采用4個獨立按鍵,K1、K2、K3、K4分別于單片機的P1^0、P1^1
P1^2、P1^3連接,每個按鍵的另一端直接與地相連接,因此是低電平有效。其中K1、K2、K3、K4表示暫停、刷新24秒、A加1分、B加1分
圖1-3按鍵控制模塊電路圖
3.3 蜂鳴器報警模塊的硬件設(shè)計 蜂鳴器報警模塊由一個蜂鳴器和一個PNP型的三極管組成,接單片機的P2^7
圖1-4報警模塊模塊電路圖
4 軟件控制系統(tǒng)4.1主程序設(shè)計本系統(tǒng)中單片機的主要功能就是利用內(nèi)部的定時器計時,并隨時接受控制模塊的信息,將比賽的得分和剩余時間顯示在1602液晶上。
程序流程圖:
圖1-5程序流程圖
4.2仿真結(jié)果1.如圖4-3所示。點擊K3表示給A加分
按下K4表示給B加分
5 結(jié)論這一次的課程設(shè)計,我的課題是《籃球賽電子計時記分牌》。由于這一系統(tǒng)包含單片機基礎(chǔ)、數(shù)碼管動態(tài)顯示、矩陣鍵盤掃描、定時器和中斷等知識體系,涉及面較廣,通過這一課程設(shè)計,可以更好地檢測和鞏固學(xué)到的知識,加深自己對電子世界的認識。
在本次的設(shè)計中,針對每一個模塊都曾有好幾個方案,在反復(fù)比較論證之后,才得出最佳方案并應(yīng)用于系統(tǒng)。在各個模塊的設(shè)計中,我除了得到了正確的結(jié)果之外,更多的是面對錯誤和失敗,而這些錯誤大多數(shù)是由于自己對該部分電路原理掌握的不夠透徹而造成的。通過查閱資料,連接、調(diào)試電路和程序,我得出了一下幾條心得體會,以后在設(shè)計過程中可以借鑒:
在Proteus里,電路狀態(tài)不正常且不易發(fā)現(xiàn)問題時,使用電流計和電壓計可直觀檢測電路動態(tài)變化,這也是Proteus里非常好用的一個功能;
附錄1:
仿真效果圖
PBC效果
三維效果圖
附錄2:
單片機源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code tab1[]="A :";
- uchar code tab2[]="B";
- uchar code tab3[]=" GAME OVER "; //比賽結(jié)束時顯示
- uchar code tab4[]=" A B "; //比賽結(jié)束時顯示
- sbit lcden=P2^2;
- sbit lcdrw=P2^1; //1602液晶的3個端口
- sbit lcdrs=P2^0;
- sbit key1=P1^0;
- sbit key2=P1^1; //四個按鍵
- sbit key3=P1^2;
- sbit key4=P1^3;
- sbit Bell=P2^7; //蜂鳴器
- uint keyflag,flag; //標志位
- uchar i,num,count;
- uchar sec,min,miao;
- uchar Ascore,Bscore; //兩隊得分
- /*******************液晶函數(shù)****************************/
- void delay(uint z) //液晶延時函數(shù)
- { uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void write_com(uchar com) //命令子函數(shù)
- { lcdrs=0; //接受指令
- P0=com; //給P0口送指令碼
- delay(5);
- lcden=1; //E變?yōu)楦唠娖?br />
- delay(5); //在此延遲期間,將指令送入
- lcden=0; //E變?yōu)榈碗娖,高脈沖結(jié)束
- }
- void write_dat(uchar date) //數(shù)據(jù)子函數(shù)data
- {
- lcdrs=1; //接受數(shù)據(jù)
- P0=date; //給P0口送數(shù)據(jù)
- delay(5);
- lcden=1; //E變?yōu)楦唠娖?br />
- delay(5); //在此延遲期間,將數(shù)據(jù)送入
- lcden=0; //E變?yōu)榈碗娖剑呙}沖結(jié)束
- }
- void write_time(uchar add,uchar date) //寫入時間函數(shù)
- {
- uchar shi,ge;
- shi=date/10;
- ge=date%10;
- write_com(0x80+add);
- write_dat(0x30+shi);
- write_dat(0x30+ge);
- }
- void write_miao(uchar add,uchar date) //寫入24秒函數(shù)
- {
- uchar shi,ge;
- shi=date/10;
- ge=date%10;
- write_com(0x80+0x40+add);
- write_dat(0x30+shi);
- write_dat(0x30+ge);
- }
- void write_Ascore(uchar add,uchar date) //寫入A隊得分函數(shù)
- {
- uchar bai,shi,ge;
- bai=date/100;
- shi=date/10%10;
- ge=date%10;
- write_com(0x80+add);
- write_dat(0x30+bai);
- write_dat(0x30+shi);
- write_dat(0x30+ge);
- }
- void write_Bscore(uchar add,uchar date) //寫入B隊得分函數(shù)
- {
- uchar bai,shi,ge;
- bai=date/100;
- shi=date/10%10;
- ge=date%10;
- write_com(0x80+0x40+add);
- write_dat(0x30+bai);
- write_dat(0x30+shi);
- write_dat(0x30+ge);
- }
- void write_score(uchar add,uchar date) //比賽結(jié)束寫入得分函數(shù)
- { uchar bai,shi,ge;
- bai=date/100;
- shi=date/10%10;
- ge=date%10;
- write_com(0x80+0x40+add);
- write_dat(0x30+bai);
- write_dat(0x30+shi);
- write_dat(0x30+ge);
- }
- void delay_Bell(uint z) //蜂鳴器延時函數(shù)
- {
- uint x,y; for(x=z;x>0;x--) for(y=255;y>0;y--);
- }
- void init() //初始化函數(shù)
- {
- Bell=1;
- keyflag=0;
- flag=0;
- min=12;
- sec=0;
- miao=25;
- Ascore=0;
- Bscore=0;
- lcdrw=0;
- lcden=0; //E的初始值為低電平,后面的程序給高電平從而滿足E為高脈沖
- write_com(0x38); //寫入顯示模式指令
- write_com(0x0e); //顯示是否打開以及光標的設(shè)置
- write_com(0x06); //地址指針的加減和整屏是否移動
- write_com(0x01); //清屏指令
- write_com(0x80+0x00); //顯示字符的初始位置
- for(num=0;num<16;num++)
- { write_dat(tab1[num]); }
- write_com(0x80+0x40); //起始地址為53,將字符調(diào)到了第二行
- for(num=0;num<2;num++)
- { write_dat(tab2[num]); }
- write_Ascore(2,Ascore);
- write_Bscore(2,Bscore);
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1; ET0=1;
- TR0=1; //開定時器
- }
- void keyscan() //按鍵函數(shù)
- { if(key1==0)
- { delay(10);
- if(key1==0)
- { keyflag++; //鍵一按下,標志位加一
- while(!key1);
- if(keyflag==1)
- { TR0=0; } //關(guān)中斷
- if(keyflag==2)
- { TR0=1; keyflag=0;
- }
- }
- }
- if(key2==0) //刷新24秒
- { delay(5);
- if(key2==0)
- { while(!key2);
- miao=25;
- }
- }
- if(key3==0)
- { delay(5);
- if(key3==0)
- { while(!key3);
- Ascore++; write_Ascore(2,Ascore);
- } //寫入A隊得分
- }
- if(key4==0)
- { delay(5);
- if(key4==0)
- {
- while(!key4);
- Bscore++; write_Bscore(2,Bscore);
- } //寫入B隊得分
- }
- }
- void main()
- {
- init();
- while(1)
- {
- keyscan();
- if(flag==0)
- {
- write_com(0x80+0x40+7); //寫入第一節(jié) FIR
- write_dat('F');
- write_dat('I');
- write_dat('R');
- }
- if(flag==1)
- {
- write_com(0x80+0x40+7); //寫入第二節(jié) SEC
- write_dat('S');
- write_dat('E');
- write_dat('C');
- }
-
- if(flag==2)
- {
- write_com(0x80+0x40+7); //寫入第三節(jié) THR
- write_dat('T');
- write_dat('H');
- write_dat('R');
- }
- if(flag==3)
- {
- write_com(0x80+0x40+7); //寫入第四節(jié) FOU
- write_dat('F');
- write_dat('O');
- write_dat('U');
- }
- if(flag==4) //比賽結(jié)束顯示”GAME OVER“和兩隊比分
- {
-
- TR0=0;
- write_com(0x80);
- for(i=0;i<16;i++)
- {
- write_dat(tab3[i]); //"GAME OVER"字符串數(shù)組
- }
- write_com(0x80+0x40); //起始地址為53,將字符調(diào)到了第二行
- for(i=0;i<16;i++)
- {
- write_dat(tab4[i]);
- }
-
- write_score(5,Ascore); //比賽結(jié)束寫入兩隊比分
- write_score(11,Bscore);
- }
- if(miao>=4&&miao<=5) //若只剩5秒,蜂鳴器響1秒
- { Bell=0; delay_Bell(510);
- Bell=1; delay_Bell(510);
- }
- }
- }
- void timer0() interrupt 1 //定時器
- {
- TH0=(65536-50000)/256;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
電子記分牌說明書.doc
(563.37 KB, 下載次數(shù): 21)
2018-4-9 20:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |