版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于AT89S52單片機(jī)的籃球比賽計時計分器</p><p><b> 摘 要</b></p><p> 籃球比賽計時計分器是為了解決籃球比賽時計分與計時準(zhǔn)確方便,靈活適用的問題。此裝置利用單片機(jī)AT89S52完成了計時和計分的功能。本文詳細(xì)地介紹了系統(tǒng)硬件與軟件的設(shè)計過程,采用該裝置可根據(jù)實際情況進(jìn)行比分修改和時間的準(zhǔn)確顯示,具有低功耗,
2、可靠性,安全性以及低成本等特點。</p><p> 關(guān)鍵詞:單片機(jī),籃球賽,LCD </p><p><b> ABSTRACT</b></p><p> This time basketball scoring is deviced in order to solve the basketball game scoring exact
3、ly the problem and timing. The device is completed by using microcontroller AT89S52 for timing and scoring functions. This paper introduces the hardware and software’s designing process, </p><p> the device
4、 can be modified according to the actual situation and the time of the accurate score, and display with low power consumption, reliability, safely , low cost and so on.</p><p> Key words: Single Chip Micro
5、computer , basketball, LCD</p><p><b> 目錄</b></p><p><b> 1 緒論1</b></p><p> 1.1 背景知識介紹1</p><p> 1.2 設(shè)計內(nèi)容1</p><p> 1.3 設(shè)計任務(wù)
6、和要求2</p><p> 1.4 設(shè)計意義2</p><p> 2 系統(tǒng)總體方案設(shè)計及硬件設(shè)計介紹2</p><p> 2.1 系統(tǒng)總體方案設(shè)計2</p><p> 2.2 硬件電路設(shè)計3</p><p> 2.2.1 時鐘電路模塊5</p><p> 2.2.
7、2 復(fù)位電路模塊5</p><p> 2.2.3 顯示模塊6</p><p> 2.2.4 報警模塊7</p><p> 2.2.5 系統(tǒng)電源設(shè)計7</p><p> 2.2.6 ISP下載線接口8</p><p> 2.2.7 鍵盤接口8</p><p>
8、2.3 系統(tǒng)硬件電路總電路圖9</p><p><b> 3 軟件設(shè)計10</b></p><p> 3.1 軟件設(shè)計環(huán)境介紹10</p><p> 3.2 軟件總體設(shè)計方案10</p><p> 3.2.1 延時子函數(shù)11</p><p> 3.2.2 液晶顯示分?jǐn)?shù)
9、刷新子程序12</p><p> 3.2.3 T0中斷程序13</p><p> 3.2.4 設(shè)置時間子函數(shù)14</p><p> 4 硬件焊接與調(diào)試15</p><p> 5 Proteus仿真實驗效果16</p><p><b> 6 總結(jié)17</b></p&g
10、t;<p><b> 參考文獻(xiàn)18</b></p><p> 附錄 源程序19</p><p><b> 致 謝30</b></p><p><b> 1 緒論</b></p><p> 1.1 背景知識介紹 </p><
11、;p> 體育比賽計時計分系統(tǒng)是對體育比賽過程中所產(chǎn)生的時間、比分等數(shù)據(jù)進(jìn)行快速采集記錄,加工處理,傳遞數(shù)據(jù)的信息系統(tǒng)。根據(jù)不同運動項目的不同比賽規(guī)則要求,體育比賽的計時計分系統(tǒng)包括測量類、評分類、命中類、制勝類得分類等多種類型。</p><p> 籃球比賽是根據(jù)參賽隊在規(guī)定的比賽時間里得分多少來決定勝負(fù)的,因此,籃球比賽的計時計分系統(tǒng)是一種得分類型的系統(tǒng)?;@球比賽的計時計分系統(tǒng)由計時器、計分器等多種電子
12、設(shè)備組成,同時,根據(jù)目前高水平籃球比賽要求,完善的籃球比賽計時計分系統(tǒng)設(shè)備應(yīng)能夠與現(xiàn)場成績處理、現(xiàn)場大屏幕、電視轉(zhuǎn)播車等多種設(shè)備相聯(lián),以便實現(xiàn)高比賽現(xiàn)場感、表演娛樂觀眾等功能目標(biāo)。</p><p> 由于單片機(jī)的集成度高,功能強(qiáng),通用性好,特別是它具有體積小,重量輕,能耗低,價格便宜,可靠性高,抗干擾能力強(qiáng)和使用方便等獨特的優(yōu)點,使單片機(jī)迅速得到了推廣應(yīng)用,目前已經(jīng)成為測量控制應(yīng)用系統(tǒng)中的優(yōu)選機(jī)種和新電子產(chǎn)品的
13、關(guān)鍵部位。世界各大電氣廠家、測控技術(shù)企業(yè)、機(jī)電行業(yè),競相把單片機(jī)應(yīng)用于產(chǎn)品更新,作為實現(xiàn)數(shù)字化、智能化的核心部件。本篇設(shè)計籃球比賽計時計分器就是以單片機(jī)為核心的計時計分系統(tǒng)。</p><p><b> 1.2 設(shè)計內(nèi)容</b></p><p> 本設(shè)計是基于AT89S52單片機(jī)的籃球比賽計時計分器,利用LCD液晶顯示器作為顯示裝置。</p><
14、;p> 液晶顯示器與傳統(tǒng)的數(shù)碼管顯示器相比更節(jié)省單片機(jī)的I/O空間,減少系統(tǒng)設(shè)計的復(fù)雜程度。此外,液晶顯示具有穩(wěn)定、功耗小等特點,特別適用與手持設(shè)備,而且液晶顯示器內(nèi)部集成的有存儲芯片,能夠保持當(dāng)前數(shù)據(jù),避免了系統(tǒng)CPU頻繁刷新電路所做的無用功,進(jìn)一步減少系統(tǒng)能量的開銷和軟件設(shè)計時的復(fù)雜度。</p><p> 本系統(tǒng)由軟件設(shè)計為4節(jié)比賽,可設(shè)置單節(jié)比賽時間,分4節(jié)比賽倒計時設(shè)定??蛇m用于不同比賽時間規(guī)格
15、的比賽使用。另外本設(shè)計增加了ISP編程接口,可在硬件固化的情況下通過下載線升級內(nèi)部程序,以達(dá)到更多場合的計時計分應(yīng)用。此設(shè)計使系統(tǒng)功能更加強(qiáng)大,可以不局限于單一的一種比賽模式的應(yīng)用。</p><p> 其次,為了配合計時計分器校正調(diào)整比分,我們特定在本設(shè)計中設(shè)立了4個按鍵,通過按鍵的功能復(fù)用實現(xiàn)設(shè)置時間、調(diào)整時間、啟動、調(diào)整分?jǐn)?shù)和暫停等功能。采用單片機(jī)控制使這個系統(tǒng)按鍵操作使用簡潔,低功耗,安裝方便。</
16、p><p> 1.3 設(shè)計任務(wù)和要求</p><p> 任務(wù):設(shè)計一個適用于多種規(guī)格比賽的籃球比賽計時計分器。</p><p> 要求:1、能記錄整個賽程的比賽時間,并能隨時實現(xiàn)暫停和繼續(xù)。 </p><p> 2、能隨時刷新甲、乙兩隊在整個過程中的比分。
17、 </p><p> 3、中場交換比賽場地時,能自動交換甲、乙兩隊比分的位置。 </p><p> 4、比賽中場和結(jié)束時,能發(fā)出報警。</p><p> 5、通過液晶顯示數(shù)字指示場次。</p><p> 6、加分有誤
18、時可通過按鍵實現(xiàn)減分調(diào)整。</p><p> 7、可設(shè)置比賽時間,使系統(tǒng)能用于不同比賽規(guī)則的場合。</p><p><b> 1.4 設(shè)計意義</b></p><p> 畢業(yè)設(shè)計使我們進(jìn)一步熟悉和掌握了單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,了解了單片機(jī)應(yīng)用系統(tǒng)設(shè)計的基本方法和步驟,掌握了電子繪圖軟件Protel及仿真軟件Proteus的使用方法,
19、鍵盤和顯示器在單片機(jī)控制系統(tǒng)中的應(yīng)用以及撰寫畢業(yè)設(shè)計論文的方法。此次設(shè)計很好的將書本上的理論知識和實踐有機(jī)的聯(lián)系了起來,使我們對理論知識有了更進(jìn)一步的掌握,鍛煉了我們的動手能力,同時也讓我們懂得了理論與實際相結(jié)合的意義。為以后的工作和學(xué)習(xí)提供了寶貴的經(jīng)驗。</p><p> 2 系統(tǒng)總體方案設(shè)計及硬件設(shè)計介紹</p><p> 2.1 系統(tǒng)總體方案設(shè)計</p><p
20、><b> 圖2-1系統(tǒng)框圖</b></p><p> 籃球比賽計時計分器主要包括單片機(jī)控制系統(tǒng)、計時計分顯示模塊、定時報警、按鍵控制鍵盤模塊和供電電源模塊。通過這幾個模塊的協(xié)調(diào)工作就可以完成相應(yīng)的計時計分控制和顯示功能。模塊框圖如圖2-1所示。 </p><p> 本設(shè)計是基于AT89S52單片機(jī)的籃球計時計分器,利用1602液晶顯示器作為顯示器件。LC
21、D1602共分兩行顯示。首行的第一位用于顯示當(dāng)前比賽的節(jié)數(shù),程序初始化并設(shè)定單節(jié)比賽時間后開始顯示。第一行的其他位用于顯示比賽雙方所得分?jǐn)?shù)。分別用A和B來區(qū)別兩隊。中場時交換雙方顯示位置。賽程計時采用倒計時方式,比賽開始時啟動計時,直至計時到本節(jié)時間為零,結(jié)束本節(jié)比賽,同時紅色發(fā)光二極管報警顯示,時間刷新為下一節(jié)準(zhǔn)備,等待開始。</p><p> 2.2 硬件電路設(shè)計</p><p>
22、 系統(tǒng)控制中心單片機(jī)AT89S52簡介</p><p> AT89S52是一個低功耗、高性能8位單片機(jī),片內(nèi)含8k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強(qiáng)大的單片機(jī)
23、AT89S52可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價比的解決方案。 本設(shè)計所采用的AT89S52為DIP40封裝形式,引腳結(jié)構(gòu)如圖2-2。除8k Bytes Flash片內(nèi)程序存儲器外,還有256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,8個中斷源,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時鐘振蕩器。</p>&
24、lt;p> 圖 2-2 AT89S52單片機(jī)引腳圖</p><p> AT89S52單片機(jī)引腳說明如下:</p><p> Vcc:電源端,接+5V。 Vss:接地端。</p><p> XTAL1:接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,若使用外部TTL時鐘時,該引腳為外部時鐘的輸入端。</p><
25、;p> XTAL2:接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出,若使用外部TTL時鐘時,該引腳必須懸空。</p><p> 地址鎖存允許信號ALE:系統(tǒng)擴(kuò)展時,ALE用于控制地址鎖存器鎖存P0口輸出的低8位地址,從而實現(xiàn)數(shù)據(jù)與低位地址的復(fù)用。此外,ALE是以六分之一晶振頻率的固定頻率輸出的正脈沖,可作為外部時鐘或外部定時脈沖使用。</p><p> PSEN
26、 :PSEN是讀外部程序存儲器的選通信號,低電平有效。</p><p> 訪問程序存儲器控制信號EA:當(dāng)為高電平時,CPU執(zhí)行片內(nèi)程序存儲器指令,但當(dāng)PC中的值超過0FFFH時,將自動轉(zhuǎn)向執(zhí)行片外程序存儲器指令。當(dāng)為低電平時,CPU只執(zhí)行片外程序存儲器指令。</p><p> 復(fù)位信號RST:該信號高電平有效,在輸入端保持兩個機(jī)器周期的高電平后,就可以完成復(fù)位操作。</p>
27、<p> P0口(P0.0~P0.7):該端口為漏極開路的8位準(zhǔn)雙向I/O口,它為8位地址線和8位數(shù)據(jù)線的復(fù)用端口,使用時需接外部上拉電阻。在訪問外部程序存儲器時,它作存儲器的低8位地址線。</p><p> P1口(P1.0~P1.7):它是一個內(nèi)部帶上拉電阻的8位準(zhǔn)雙向I/O口,作為輸入口使用時,應(yīng)先向其內(nèi)部鎖存器寫1。</p><p> P2口(P2.0~P2.7
28、):它為一個內(nèi)部帶上拉電阻的8位準(zhǔn)雙向I/O口,作為輸入口時同樣需先向其內(nèi)部鎖存器寫1。在訪問外部程序存儲器時,它作存儲器的高8位地址線。</p><p> P3口(P3.0~P3.7):P3口同樣是內(nèi)部帶上拉電阻的8位準(zhǔn)雙向I/O口,P3口除了作為一般的I/O口使用之外,其還具有第二引腳功能,具體如表2-1所示。</p><p> 表2-1 P3口線的第二功能</p&g
29、t;<p> 2.2.1時鐘電路模塊</p><p> 時鐘電路在單片機(jī)系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個單片機(jī)應(yīng)用系統(tǒng)中,時鐘是保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢。根據(jù)不同需要可以采用不同頻率的晶振,這里采用12MHZ的晶振,另外有兩個30pF的電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入
30、輸出引腳。具體連接圖如圖2-3所示。</p><p> 圖2-3 晶振電路</p><p> 外接石英晶體或者陶瓷諧振器以及電容C1,C2接在單片機(jī)內(nèi)部放大器的反饋電路中構(gòu)成諧振電路。諧振器本身對外接電容C1、C2雖然沒有十分嚴(yán)格的要求,但電容容量的大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度以及溫度的穩(wěn)定性,如果使用石英晶體,推薦使用30pF,而使用陶瓷
31、諧振器建議選擇40pF。</p><p> 2.2.2 復(fù)位電路模塊</p><p> 圖 2-4 復(fù)位電路</p><p> 復(fù)位是單片機(jī)的初始化操作,其主要功能是把PC初始化為0000H,使單片機(jī)從0000H單元開始執(zhí)行程序。除進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,可以按復(fù)位鍵以重新啟動,也可以通
32、過監(jiān)視定時器來強(qiáng)迫復(fù)位。RST引腳是復(fù)位信號的輸入端。復(fù)位電路在這里采用的是上電加按鍵復(fù)位電路形式,具體連接電路如圖2-4。</p><p><b> 2.2.3顯示模塊</b></p><p> 本設(shè)計采用1602液晶顯示器顯示。第一行的第一位用數(shù)字標(biāo)識當(dāng)前比賽節(jié)數(shù),設(shè)置好比賽時間后開始顯示。本程序中設(shè)置為4節(jié)比賽,程序初始化后通過鍵盤來設(shè)置單節(jié)比賽時間。第一行
33、用A和B來區(qū)別比賽雙方,并分別在其后用三位數(shù)字標(biāo)識比賽得分。第二行顯示時間。初始化時顯示時間設(shè)置,之后顯示時間倒計時。圖2-5所示為1602的電氣連接屬性。圖2-6為Proteus仿真效果圖。表2-2為1602的引腳說明。</p><p> 圖2-5 1602液晶顯示器電氣連接圖</p><p> 圖2-6 Proteus仿真效果</p><p&g
34、t; 表2-2 1602的引腳說明</p><p> 液晶顯示偏壓信號是指用于驅(qū)動LCD上的像素點改變顏色所用的電壓,此電壓可能接近GND也可能接近Vcc,視芯片不同而有所不同。本系統(tǒng)用的1602是接近GND。</p><p> 2.2.4 報警模塊</p><p> 本設(shè)計通過P2.0口來控制紅色發(fā)光二極管顯示報警。前三節(jié)結(jié)束時紅色發(fā)光二極管閃爍
35、,按下開始鍵開始下一節(jié)比賽,同時發(fā)光二極管停止閃爍并熄滅。四節(jié)比賽結(jié)束后發(fā)光二極管由滅轉(zhuǎn)為常亮。具體連接電路圖如圖2-7所示。</p><p> 圖2-7 報警LED電氣連接圖</p><p> 2.2.5系統(tǒng)電源設(shè)計</p><p> 為51系列單片機(jī)系統(tǒng)提供的電源為穩(wěn)定的5V直流電源。本例用一個7805芯片為系統(tǒng)提供穩(wěn)定的5V直流電源。</p&
36、gt;<p> 7805穩(wěn)壓芯片能提供多種固定的輸出電壓,應(yīng)用范圍廣。其內(nèi)部含過熱保護(hù),短路保護(hù),輸出電流可達(dá)1A。雖然該芯片是固定穩(wěn)壓電路,但使用不同的外接元件,可獲得不同的電壓輸出。25℃時輸出電壓范圍為5~18V。本系統(tǒng)7805的輸入電壓為9V直流電壓。9V直流電壓可用普通干電池提供,也可以用市面上很容易買到的普通變壓器提供。7805對輸入電壓要求不高,但輸入電壓一般應(yīng)大于所需輸出電壓2V以上。</p>
37、<p> 在7805與9V電源之間用一個IN4001整流二極管來提高系統(tǒng)的安全性。IN4001能提供正向最大電流1A,最大反向峰值電壓50V,防止了電源反接或電源不穩(wěn)定給系統(tǒng)帶來的安全隱患。7805的5V調(diào)控輸出采用生產(chǎn)該芯片的公司提供的經(jīng)典電路。在輸出端5V電壓處接一個藍(lán)色發(fā)光二極管來做為電源指示燈。具體電氣連接如圖2-8所示。</p><p> 圖2-8 系統(tǒng)電源</p>
38、<p> 2.2.6 ISP下載線接口</p><p> 由于系統(tǒng)采用的單片機(jī)為AT89S52單片機(jī),為更方便系統(tǒng)的重復(fù)可用性及系統(tǒng)的維護(hù)性,本設(shè)計增加了在系統(tǒng)可編程的ISP下載線接口。只要擁有一根下載線,就能很方便快捷的對系統(tǒng)單片機(jī)進(jìn)行程序的下載及系統(tǒng)維護(hù)升級。Atmel公司的AT89系列單片機(jī)應(yīng)用非常廣泛,所以很容易就能配到下載程序的下載線,有興趣者也可以自己動手做一個單片機(jī)程序下載線。圖2-
39、9為ISP下載線接口和單片機(jī)的引腳連接屬性。</p><p> 圖2-9 ISP下載線接口</p><p> 2.2.7 鍵盤接口</p><p> 本系統(tǒng)設(shè)計除復(fù)位按鍵外共配置了4個獨立鍵盤來實現(xiàn)系統(tǒng)功能的控制。4個獨立鍵盤分別為s1、s2、s3、s4,分別連接到單片機(jī)的P0口的低四位。配合程序設(shè)計,在系統(tǒng)初始化時等待配置比賽時間,通過s2加時間和
40、s3減時間,s4鍵退出時間配置并切入到等待比賽開始狀態(tài)。這種設(shè)計使系統(tǒng)能應(yīng)用于不同比賽時間規(guī)格的各種場合當(dāng)中,使系統(tǒng)產(chǎn)品的用途更加廣泛。設(shè)置時間結(jié)束后進(jìn)入正常計時計分模式。其中s1用來控制比賽的開始和暫停,s2用來調(diào)節(jié)閃爍光標(biāo)的位置,以標(biāo)識當(dāng)前球隊處于分?jǐn)?shù)刷新模式狀態(tài)下,光標(biāo)不閃爍表明退出分?jǐn)?shù)刷新。當(dāng)處于分?jǐn)?shù)刷新模式下光標(biāo)閃爍時,s3和s4鍵分別用來加分</p><p> 和減分。如圖2-10所示。</p
41、><p> 圖2-10 鍵盤接口</p><p> 2.3 系統(tǒng)硬件電路總電路圖</p><p> 圖2-11為Protel中生成的系統(tǒng)總電路圖</p><p> 圖2-11 系統(tǒng)總電路圖</p><p><b> 3 軟件設(shè)計</b></p><p>
42、 軟件的編程設(shè)計是單片機(jī)系統(tǒng)設(shè)計的核心部分,也是能否實現(xiàn)預(yù)定功能的關(guān)鍵。單片機(jī)編程常用的語言是C語言和匯編語言,最終都要轉(zhuǎn)為Intel HEX格式或二進(jìn)制格式(Binary)文件寫入單片機(jī)芯片內(nèi)。這里我們使用的是C語言進(jìn)行編程設(shè)計。</p><p> 在設(shè)計程序之前,我們首先要對單片機(jī)應(yīng)用系統(tǒng)預(yù)完成的任務(wù)進(jìn)行深入的分析,明確系統(tǒng)的設(shè)計任務(wù)、功能要求和技術(shù)指標(biāo)。其次,要對系統(tǒng)的硬件資源和工作環(huán)境進(jìn)行分析。這是單片
43、機(jī)應(yīng)用系統(tǒng)程序設(shè)計的基礎(chǔ)和條件。</p><p> 3.1 軟件設(shè)計環(huán)境介紹</p><p> Keil是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能、結(jié)構(gòu)、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。 Keil C51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編
44、譯后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。</p><p> 3.2 軟件總體設(shè)計方案</p><p> 籃球比賽計時計分器軟件設(shè)計部分采用模塊化程序設(shè)計,程序部分由主程序、T0中斷程序、T1中斷程序、計時計分刷新顯示子程序、鍵盤掃描控制子程序、延時子程序等組成。</p
45、><p> 圖3-1為分?jǐn)?shù)刷新子程序流程,3-2為主程序流程。</p><p> 圖3-1 分?jǐn)?shù)刷新子程序</p><p> 圖3-2 主程序流程圖</p><p> 以下舉例介紹部分子程序。</p><p> 3.2.1延時子函數(shù) </p><p> vo
46、id delay(unsigned char c)//延時子函數(shù) </p><p><b> {</b></p><p> unsigned char x,y;</p><p> for(x=c;x>0;x--)</p><p> for(y=80;y>0;y--);</p><p
47、><b> }</b></p><p> 3.2.2 液晶顯示分?jǐn)?shù)刷新子程序</p><p> void writsfm(unsigned char dui,unsigned char fen)</p><p><b> {</b></p><p> unsigned char i,
48、j,k;//用3位數(shù)顯示分?jǐn)?shù) </p><p> i=fen/100;</p><p> j=fen%100/10;</p><p><b> k=fen%10;</b></p><p> if(0==f||1==f)//上下半場A,B兩隊分?jǐn)?shù)顯示 的位置不同 </p><p><b
49、> {</b></p><p> if(0==dui)</p><p><b> {</b></p><p> writcom(0x80+4);</p><p> writdata(i+0x30);</p><p> writdata(j+0x30);</p&g
50、t;<p> writdata(k+0x30);</p><p><b> }</b></p><p> if(1==dui)</p><p><b> {</b></p><p> writcom(0x80+11);</p><p> writ
51、data(i+0x30);</p><p> writdata(j+0x30);</p><p> writdata(k+0x30);</p><p><b> }}</b></p><p> if(2==f||3==f)</p><p><b> {</b>
52、</p><p> if(0==dui)</p><p><b> {</b></p><p> writcom(0x80+11);</p><p> writdata(i+0x30);</p><p> writdata(j+0x30);</p><p> w
53、ritdata(k+0x30);</p><p><b> }</b></p><p> if(1==dui)</p><p><b> {</b></p><p> writcom(0x80+4);</p><p> writdata(i+0x30);<
54、/p><p> writdata(j+0x30);</p><p> writdata(k+0x30);</p><p><b> }}}</b></p><p> 液晶顯示控制分為寫數(shù)據(jù)控制和寫命令控制,寫數(shù)據(jù)與寫命令分時操作。由于液晶寫數(shù)據(jù)和寫命令子函數(shù)中都存在延時操作,且液晶寫數(shù)據(jù)命令必須緊跟相應(yīng)的寫命令
55、子函數(shù)后執(zhí)行,所以分?jǐn)?shù)刷新顯示函數(shù)及下面的定時器中斷后的時間刷新顯示函數(shù)都應(yīng)放在中斷函數(shù)外執(zhí)行,避免正在執(zhí)行寫命令操作時發(fā)生中斷跳轉(zhuǎn),從而影響后面的寫數(shù)據(jù)操作。</p><p> 3.2.3 T0中斷程序</p><p> void tim0() interrupt 1//定時器0中斷入口 </p><p><b> {</b></
56、p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> aa++;</b></p><p> if(0==f||1==f||2==f)</p><p><b> {</b>&l
57、t;/p><p> if(aa==20)</p><p><b> {</b></p><p><b> aa=0;</b></p><p><b> miao--;</b></p><p> if(255==miao)</p>&l
58、t;p><b> {</b></p><p><b> miao=59;</b></p><p><b> fen--;</b></p><p><b> }</b></p><p> if(0==fen&&0==miao)
59、</p><p><b> {</b></p><p><b> f++;</b></p><p><b> flag=0;</b></p><p><b> fen=time;</b></p><p><b>
60、 TR0=0;</b></p><p><b> TR1=1;</b></p><p><b> }}}</b></p><p><b> if(3==f)</b></p><p><b> {</b></p><p
61、> if(20==aa)</p><p><b> {</b></p><p><b> aa=0;</b></p><p><b> miao--;</b></p><p> if(255==miao)</p><p><b>
62、; {</b></p><p><b> miao=59;</b></p><p><b> fen--;</b></p><p><b> }</b></p><p> if(0==fen&&0==miao)</p>&l
63、t;p><b> {</b></p><p> P2_0=0;//全場結(jié)束LED顯示 </p><p><b> TR0=0;</b></p><p><b> } } } }</b></p><p> 3.2.4 設(shè)置時間子函數(shù)</p><
64、;p> void settime(void)//設(shè)置時間函數(shù)入口 </p><p><b> {</b></p><p> unsigned char flag;</p><p><b> time=0;</b></p><p><b> fen=time;</b&
65、gt;</p><p> writtime();</p><p> while(!flag)</p><p><b> {</b></p><p> if(0==key3)</p><p><b> {</b></p><p> delay
66、(20);</p><p> if(0==key3)</p><p><b> {</b></p><p> while(!key3);</p><p><b> flag=1;</b></p><p><b> }}</b></p>
67、;<p> if(0==key1)</p><p><b> {</b></p><p> delay(20);</p><p> if(0==key1)</p><p><b> {</b></p><p> while(!key1);</p
68、><p><b> time++;</b></p><p><b> fen=time;</b></p><p> writtime();</p><p><b> }}</b></p><p> if(0==key2)</p>&l
69、t;p><b> {</b></p><p> delay(20);</p><p> if(0==key2)</p><p><b> {</b></p><p> while(!key2);</p><p><b> time--;</b
70、></p><p><b> fen=time;</b></p><p> writtime();</p><p><b> }}}}</b></p><p><b> 4 硬件焊接與調(diào)試</b></p><p> 對照原理圖進(jìn)行焊接工作
71、,應(yīng)先把硬件依次正確插到電路板上相應(yīng)的位置,然后再次檢查器件是否都正確,確定無誤后進(jìn)行焊接。在焊接的過程中要注意不要將相臨的兩個引腳焊接在一起,防止短路影響使用。</p><p> 硬件連接好以后,通過ISP下載線向單片機(jī)內(nèi)燒制HEX程序,觀察各部分工作情況。硬件實物如圖4-1。</p><p> 圖4-1 實物硬件圖</p><p> 5 Prot
72、eus仿真實驗效果</p><p> 圖5-1 Proteus仿真效果圖</p><p><b> 6 總結(jié)</b></p><p> 在本次畢業(yè)設(shè)計中,我通過基于典型單片機(jī)AT89S52的設(shè)計和應(yīng)用,對單片機(jī)的工作原理及功能有了更加深刻的了解,并對單片機(jī)程序語言設(shè)計有了新的、進(jìn)一步的認(rèn)識。</p><p>
73、 在本次設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,給我的感覺就是下手很難,很不順手,看似很簡單的電路,要動手把它給設(shè)計出來,是很難的一件事,主要原因是我們沒有經(jīng)常動手設(shè)計過電路。另外單片機(jī)系統(tǒng)的知識似懂非懂,而且很多知識當(dāng)時弄明白了,現(xiàn)在要用的時候又不記得,造成我用了大量的時間去查閱各種資料和程序命令,因此整個過程時間安排不合理。由于設(shè)計的計劃沒有安排好,設(shè)計的時間極為倉促,尤其是在硬件調(diào)試的過程中出現(xiàn)了很大的問題。另外資料的查找也是一大難題,
74、這就要求我們在以后的學(xué)習(xí)中,應(yīng)該注意到這一點,更重要的是我們要學(xué)會把從書本中學(xué)到的知識和實際的電路聯(lián)系起來,這不論是對我們以后的就業(yè)還是學(xué)習(xí),都會起到很大的促進(jìn)和幫助。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 余發(fā)山. 單片機(jī)原理及應(yīng)用技術(shù) [M]. 中國礦業(yè)大學(xué)出社,2003</p><p> [2] 余錫
75、存. 單片機(jī)原理及接口技術(shù)[M]. 西安:西安電子科技大學(xué)出版社,2004</p><p> [3] 劉法治.常用電子器件及典型芯片應(yīng)用技術(shù)[M] .機(jī)械工業(yè)出版社,2007</p><p> [4] 何立民.MSC--51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計[M]. 北京航空航天大學(xué)出版社,1993</p><p> [5] 劉建輝. 單片機(jī)智能控制技術(shù)[M]. 北京:國
76、防工業(yè)出版社,2007</p><p> [6] 常斗南. 可編程控制器[M]. 北京:機(jī)械工業(yè)出版社,1998</p><p> [7] 馬潮. AVR單片機(jī)嵌入式系統(tǒng)原理與應(yīng)用實踐[M]. 北京航空航天大學(xué)出版社,2009</p><p> [8] 求是科技. 單片機(jī)典型模塊設(shè)計實例導(dǎo)航[M]. 人民郵電出版社,2008</p><
77、;p> [9] 戴佳,苗龍,陳斌. 單片機(jī)應(yīng)用系統(tǒng)開發(fā)典型實例[M]. 北京:中國電力出版社,2005</p><p> [10] 沈紅衛(wèi). 基于單片機(jī)的智能系統(tǒng)設(shè)計與實現(xiàn)[M]. 北京:電子工業(yè)出版社,2005</p><p> [11] 李東生. Protel99 SE電路設(shè)計技術(shù)入門與應(yīng)用[M]. 北京:電子工業(yè)出版社,2002</p><p>&
78、lt;b> 附錄 源程序</b></p><p> /******************************************************************</p><p> 籃球比賽計時計分器 </p><p> mcu : AT89s52</p><p> 12MHZ晶振頻率
79、 </p><p> EDITED BY LIUJUNJIE 2010-04-19</p><p> *******************************************************************/</p><p> #include <AT89X52.H></p><p> voi
80、d writdata(unsigned char );//寫液晶數(shù)據(jù) </p><p> void writcom(unsigned char );//寫液晶命令 </p><p> void init(void);//初始化 </p><p> void writsfm(unsigned char,unsigned char);//寫分?jǐn)?shù)刷新 </p&
81、gt;<p> void writtime(void);//寫時間刷新 </p><p> void settime(void);//設(shè)置比賽時間 </p><p> sbit rs=P2^4;//液晶控制位定義 </p><p> sbit rw=P2^5;</p><p> sbit en=P2^6;</p
82、><p> sbit key0=P1^0;//獨立鍵盤位定義 </p><p> sbit key1=P1^1;</p><p> sbit key2=P1^2;</p><p> sbit key3=P1^3;</p><p> unsigned char time,fen,miao,aa,bb,f,numa,
83、numb,flag;</p><p> void delay(unsigned char c)//延時子數(shù) </p><p><b> {</b></p><p> unsigned char x,y;</p><p> for(x=c;x>0;x--)</p><p> for(
84、y=80;y>0;y--);</p><p><b> }</b></p><p> void main()//主函數(shù)入口 </p><p><b> {</b></p><p><b> init();</b></p><p> set
85、time();</p><p><b> while(1)</b></p><p><b> {</b></p><p> unsigned char gb,i;//定義光標(biāo)閃爍位置變量 </p><p> writcom(0x80);//顯示當(dāng)前比賽節(jié)數(shù) </p><
86、p> writdata(f+0x31);</p><p> if(2==f&&0==i)//換場地后刷新分?jǐn)?shù)顯示 </p><p><b> {</b></p><p><b> i=1;</b></p><p> writcom(0x80+2);</p>
87、<p> writdata('B');</p><p> writcom(0x80+9);</p><p> writdata('A');</p><p> writsfm(0,numa);</p><p> writsfm(1,numb);</p><p>&l
88、t;b> }</b></p><p> writtime();//液晶工作方式是寫指令與寫數(shù)據(jù)分時工作,</p><p> //所以在中斷中寫時間會影響其他顯示 </p><p> if(0==key0)//key0控制時間啟停 </p><p><b> {</b></p>
89、<p> delay(20);</p><p> if(0==key0)</p><p><b> {</b></p><p> while(!key0);</p><p><b> P2_0=1;</b></p><p><b> fla
90、g++;</b></p><p> if(2==flag)flag=0;</p><p> if(1==flag)TR0=1;</p><p> if(0==flag) TR0=0;</p><p><b> TR1=0;</b></p><p><b> }<
91、;/b></p><p><b> }</b></p><p> if(0==key1)//key1表示調(diào)整分?jǐn)?shù)的位置 </p><p><b> {</b></p><p> delay(20);</p><p> if(0==key1)</p>
92、<p><b> {</b></p><p> while(!key1);</p><p><b> gb++;</b></p><p> if(3==gb)gb=0;</p><p><b> }</b></p><p><
93、;b> }</b></p><p> switch (gb)//控制光標(biāo)閃爍的判斷 </p><p><b> {</b></p><p> case 1://標(biāo)志A隊分?jǐn)?shù)調(diào)整 </p><p> if(0==f||1==f)//表示上半場 </p><p><
94、;b> {</b></p><p> writcom(0x80+6);</p><p> writcom(0x0f);delay(60); writcom(0x0c);</p><p><b> }</b></p><p> if(2==f||3==f)//表示下半場 </p>
95、<p><b> {</b></p><p> writcom(0x80+13);</p><p> writcom(0x0f);delay(60);writcom(0x0c);</p><p><b> }</b></p><p><b> break;</b&
96、gt;</p><p> case 2://標(biāo)志B隊分?jǐn)?shù)調(diào)整 </p><p> if(0==f||1==f)</p><p><b> {</b></p><p> writcom(0x80+13);</p><p> writcom(0x0f);delay(60);writco
97、m(0x0c);</p><p><b> }</b></p><p> if(2==f||3==f)</p><p><b> {</b></p><p> writcom(0x80+6);</p><p> writcom(0x0f);delay(60);wri
98、tcom(0x0c);</p><p><b> }</b></p><p><b> break;</b></p><p> case 0:writcom(0x0c);break;//非分?jǐn)?shù)調(diào)整模式 </p><p> default:break;</p><p>
99、<b> }</b></p><p> if(1==gb)//A隊分?jǐn)?shù)調(diào)整的函數(shù)入口 </p><p><b> {</b></p><p> if(0==key2)</p><p><b> {</b></p><p> delay(20)
100、;</p><p> if(0==key2)</p><p><b> {</b></p><p> while(!key2);</p><p><b> numa++;</b></p><p><b> }</b></p>&l
101、t;p><b> }</b></p><p> if(0==key3)</p><p><b> {</b></p><p> delay(20);</p><p> if(0==key3)</p><p><b> {</b><
102、/p><p> while(!key3);</p><p><b> numa--;</b></p><p><b> }</b></p><p><b> }</b></p><p> writsfm(0,numa);//分?jǐn)?shù)刷新 </p&
103、gt;<p><b> }</b></p><p> if(2==gb)//B隊分?jǐn)?shù)調(diào)整的函數(shù)入口 </p><p><b> {</b></p><p> if(0==key2)</p><p><b> {</b></p><p&
104、gt; delay(20);</p><p> if(0==key2)</p><p><b> {</b></p><p> while(!key2);</p><p><b> numb++;</b></p><p><b> }</b>
105、</p><p><b> }</b></p><p> if(0==key3)</p><p><b> {</b></p><p> delay(20);</p><p> if(0==key3)</p><p><b> {
106、</b></p><p> while(!key3);</p><p><b> numb--;</b></p><p><b> }</b></p><p><b> }</b></p><p> writsfm(1,numb);
107、//分?jǐn)?shù)刷新 </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void init(void)//初始化子函數(shù)入口 </p><p><b&g
108、t; {</b></p><p><b> en=0;</b></p><p><b> delay(1);</b></p><p> writcom(0x38); //兩行,8位 </p><p> writcom(0x38); </p><p>
109、writcom(0x38); </p><p> writcom(0x06);//AC自增1 </p><p> writcom(0x0c);//顯示,光標(biāo) </p><p> writcom(0x01); //顯示清屏 </p><p> writcom(0x80);//DDROM起始地址設(shè)置 </p><p&
110、gt; TMOD=0x11;//設(shè)置定時器參數(shù) </p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> TH1=(65536-50000)/256;</p><p> TL1=(65536-50000)%256;</p><
111、;p> IE=0x8a;//開中斷允許 </p><p> delay(40);</p><p> writcom(0x80+2);//初始化顯示 </p><p> writdata('A');</p><p> writdata(':');</p><p> wri
112、tsfm(0,numa);</p><p> writcom(0x80+9);</p><p> writdata('B');</p><p> writdata(':');</p><p> writsfm(1,numb);</p><p> writcom(0xc0+2);
113、</p><p> writdata('T');</p><p> writdata('I');</p><p> writdata('M');</p><p> writdata('E');</p><p> writdata(':
114、39;);</p><p><b> }</b></p><p> void writdata(unsigned char c)//寫數(shù)據(jù)子函數(shù) </p><p><b> {</b></p><p><b> delay(1);</b></p><
115、p><b> en=0;</b></p><p><b> rs=1;</b></p><p><b> rw=0;</b></p><p><b> en=1;</b></p><p><b> P0=c;</b>&
116、lt;/p><p><b> en=0;</b></p><p><b> }</b></p><p> void writcom(unsigned char c)//寫命令子函數(shù) </p><p><b> {</b></p><p><b&
117、gt; delay(1);</b></p><p><b> en=0;</b></p><p><b> rs=0;</b></p><p><b> rw=0;</b></p><p><b> en=1;</b></p&g
118、t;<p><b> P0=c;</b></p><p><b> en=0;</b></p><p><b> }</b></p><p> void tim0() interrupt 1//定時器0中斷入口 </p><p><b> {
119、</b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> aa++;</b></p><p> if(0==f||1==f||2==f)</p><p><b>
120、; {</b></p><p> if(aa==20)</p><p><b> {</b></p><p><b> aa=0;</b></p><p><b> miao--;</b></p><p> if(255==mia
121、o)</p><p><b> {</b></p><p><b> miao=59;</b></p><p><b> fen--;</b></p><p><b> }</b></p><p> if(0==fen&a
122、mp;&0==miao)</p><p><b> {</b></p><p><b> f++;</b></p><p><b> flag=0;</b></p><p><b> fen=time;</b></p><
123、;p><b> TR0=0;</b></p><p><b> TR1=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
124、<p><b> if(3==f)</b></p><p><b> {</b></p><p> if(aa==20)</p><p><b> {</b></p><p><b> aa=0;</b></p>&l
125、t;p><b> miao--;</b></p><p> if(255==miao)</p><p><b> {</b></p><p><b> miao=59;</b></p><p><b> fen--;</b></p&
126、gt;<p><b> }</b></p><p> if(0==fen&&0==miao)</p><p><b> {</b></p><p> P2_0=0;//全場結(jié)束LED顯示 </p><p><b> TR0=0;</b>&
127、lt;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //定時器1中斷入口函數(shù) </p>&
128、lt;p> //控制LED的閃爍 </p><p> void time1() interrupt 3</p><p><b> {</b></p><p> TH1=(65536-50000)/256;</p><p> TL1=(65536-50000)%256;</p><p&g
129、t;<b> bb++;</b></p><p> if(10==bb)</p><p><b> {</b></p><p><b> bb=0;</b></p><p> P2_0=!P2_0;</p><p><b> }&l
130、t;/b></p><p><b> }</b></p><p> //分?jǐn)?shù)刷新函數(shù)入口 </p><p> void writsfm(unsigned char dui,unsigned char fen)</p><p><b> {</b></p><p>
131、; unsigned char i,j,k;//用3位數(shù)顯示分?jǐn)?shù) </p><p> i=fen/100;</p><p> j=fen%100/10;</p><p><b> k=fen%10;</b></p><p> if(0==f||1==f)//上下半場A,B兩隊分?jǐn)?shù)顯示 的位置不同 </p&
132、gt;<p><b> {</b></p><p> if(0==dui)</p><p><b> {</b></p><p> writcom(0x80+4);</p><p> writdata(i+0x30);</p><p> writda
133、ta(j+0x30);</p><p> writdata(k+0x30);</p><p><b> }</b></p><p> if(1==dui)</p><p><b> {</b></p><p> writcom(0x80+11);</p&g
134、t;<p> writdata(i+0x30);</p><p> writdata(j+0x30);</p><p> writdata(k+0x30);</p><p><b> }</b></p><p><b> }</b></p><p
135、> if(2==f||3==f)</p><p><b> {</b></p><p> if(0==dui)</p><p><b> {</b></p><p> writcom(0x80+11);</p><p> writdata(i+0x30);&
136、lt;/p><p> writdata(j+0x30);</p><p> writdata(k+0x30);</p><p><b> }</b></p><p> if(1==dui)</p><p><b> {</b></p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(論文)-基于at89s52單片機(jī)的籃球計時計分器設(shè)計
- 基于at89s52的籃球計時計分器畢業(yè)論文
- 基于單片機(jī)的籃球比賽計時計分系統(tǒng)設(shè)計.pdf
- 基于at89s51單片機(jī)籃球比賽計時器的設(shè)計
- 基于at89s51單片機(jī)籃球比賽計時器的設(shè)計
- 基于at89s52的足球籃球雙用計時計分器畢業(yè)論文
- -基于單片機(jī)的籃球計時計分器設(shè)計
- 單片機(jī)課程設(shè)計---籃球比賽計分計時器
- 籃球比賽計時計分系統(tǒng)
- 基于單片機(jī)的籃球計時計分器設(shè)計設(shè)計
- 單片機(jī)畢業(yè)設(shè)計-籃球比賽倒計時計分器(論文+外文翻譯+程序)
- 單片機(jī)課程設(shè)計——籃球計時計分器
- 單片機(jī)課程設(shè)計—籃球計時計分器
- 單片機(jī)課程設(shè)計——籃球計時計分器
- 基于51單片機(jī)的籃球比賽計分計時器設(shè)計畢業(yè)論文
- 單片機(jī)課程設(shè)計—籃球計時計分器
- 單片機(jī)籃球計時計分器課程設(shè)計
- 單片機(jī)外文翻譯---at89s52單片機(jī)
- 單片機(jī)外文翻譯--at89s52單片機(jī)
- 畢業(yè)設(shè)計---基于單片機(jī)的籃球計時計分器設(shè)計
評論
0/150
提交評論