畢業(yè)設計---基于單片機的籃球計時計分器設計_第1頁
已閱讀1頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  基于單片機的籃球計時計分器設計</p><p>  摘 要:本設計是基于AT89C51單片機的籃球計時計分器,利用7段共陰LED作為顯示器件。在此設計中共接入了1個四位一體7段共陰LED顯示器,2個三位一體7段共陰LED顯示器,前者用來記錄賽程時間,其中2位用于顯示分鐘,2位用于顯示秒鐘,后者用于記錄甲乙隊的分數(shù),每隊2個LED顯示器顯示范圍可達到0~999分。賽程計時采用倒計時方式,比賽

2、開始時啟動計時,直至計時到0為止。</p><p>  為了配合計時器和計分器校正調(diào)整時間和比分,我們特定在本設計中設立了7個按鍵,用于設置,調(diào)整時間,啟動,調(diào)整分數(shù)和暫停等功能。采用單片機控制是這個系統(tǒng)按鍵操作使用簡潔,LED顯示,安裝方便。</p><p>  關(guān)鍵詞:單片機 ; 計時 ; 計分 ; 顯示器 ; 接口</p><p>  Design of B

3、asketball timing Scoring Device Based on SCM</p><p>  Abstract:The design is based on AT89C51 microcontroller timing basketball scoring device, the use of 7 as a common cathode LED display.In this design, th

4、e CPC has an access to one of four 7-segment common cathode LED display, 2 Trinity 7 common cathode LED displays, the former is used to record the race of time, of which 2 used to display the minutes, 2 seconds to displa

5、yminutes, which is used to record scores and B teams, each team two LED display shows the range of 0 to 999 points can be achie</p><p>  Key words:microcontroller ; timer ; score; display ; interface</p&

6、gt;<p><b>  目 錄</b></p><p><b>  1緒論1</b></p><p><b>  2系統(tǒng)方案說明3</b></p><p>  2.1 方案選擇3</p><p>  2.1.1 籃球賽計時計分器設計的現(xiàn)狀3</p

7、><p>  2.1.2系統(tǒng)總體設計方案3</p><p>  3統(tǒng)硬件電路設計8</p><p>  3.1籃球賽計時計分器電路工作過程8</p><p>  3.2系統(tǒng)硬件電路組成8</p><p>  3.2.1 主要器件選擇及介紹8</p><p>  3.2.2顯示模塊17&

8、lt;/p><p>  3.2.3報警模塊18</p><p>  3.2.4時鐘電路模塊18</p><p>  3.2.5 復位電路模塊19</p><p>  3.3籃球賽計時計分電路原理圖20</p><p>  4 軟件編程及調(diào)試21</p><p>  4.1 軟件總體設計方案

9、21</p><p>  4.2 軟件設計具體過程22</p><p>  4.2.1延時模塊設計23</p><p>  4.2.2 顯示時間,分數(shù)子程序模塊設計23</p><p>  4.2.3 按鍵控制子程序設計模塊27</p><p>  4.2.4 中斷程序設計模塊35</p>

10、<p>  4.2.5 主函數(shù)設計模塊37</p><p><b>  總結(jié)41</b></p><p><b>  致謝43</b></p><p><b>  參考文獻45</b></p><p><b>  1緒論</b></

11、p><p>  隨著單片機在各個領(lǐng)域的廣泛應用,許多用單片機做控制的球賽計時計分系統(tǒng)也應運而生,如用單片機控制LCD液晶顯示器計時計分器,用單片機控制LED七段顯示器計時計分器等。</p><p>  根據(jù)此次課題要求,結(jié)合本人自身學習情況,這里介紹一種籃球賽計時計分器的設計方法,即單片機直接驅(qū)動數(shù)碼管工作的電路。采用這種方法可以大幅度的節(jié)約成本,電路采用單片機作為核心元件,利用1個四位7段共

12、陰極LED數(shù)碼管和2個三位7段共陰極LED數(shù)碼管作為顯示器件。2個三位7段共陰極LED數(shù)碼管用于記錄甲、乙兩隊的分數(shù),顯示分數(shù)范圍可達0~999分,足夠賽程計分的需要,完全符合現(xiàn)實比賽的需要。1個四位7段共陰極LED數(shù)碼管用于記錄賽程時間,其中前2個用于顯示分鐘,后2個用于顯示秒鐘。比賽前,將時間設置好,比賽開始時啟動計時,直至倒計時到零蜂鳴器發(fā)出警報為止。計時范圍達到0分鐘0秒~99分鐘59秒,能滿足實際賽程計時的需要,甚至是除籃球之

13、外的其他運動,如足球。為了配合計時器調(diào)整時間和計分器校正比分,設計了7個按鍵,4個用于輸入甲、乙兩隊的分數(shù),另3個供于啟動和暫停賽程時間以及中場交換場地使用。另外,還設計了定時報警系統(tǒng),即比賽時間到時,揚聲器發(fā)出報警聲提示賽程結(jié)束。</p><p>  該系統(tǒng)具有賽程定時設置,賽程時間暫停,及時刷新甲、乙雙方的成績以及中場暫停交換場地后顯示兩隊分數(shù)的功能。設計分為軟件設計和硬件設計兩部分。主控芯片采用AT89C5

14、1,使用C++語言編寫軟件程序,主體分為計時顯示模塊、計分顯示模塊、定時報警、按鍵控制模塊。編程后利用visual c++軟件來進行編譯,再將生成的HEX文件裝入芯片中,采用Proteus軟件來仿真,檢驗功能是否能夠正常實現(xiàn),隨后可用Protel99畫出硬件電路圖。</p><p>  通過本次基于單片機的籃球賽計時計分器的設計,可以了解、熟悉有關(guān)單片機開發(fā)設計實例的過程,并加深對單片機的理解和應用以及掌握單片

15、機與外圍接口的一些方法和技巧。</p><p>  更好的把所學的知識運用于實踐之中,在實踐之中檢驗所學的知識,并進行不斷的總結(jié)。</p><p><b>  2系統(tǒng)方案說明</b></p><p><b>  2.1 方案選擇 </b></p><p>  2.1.1 籃球賽計時計分器設計的現(xiàn)狀&

16、lt;/p><p>  體育比賽計時計分系統(tǒng)是對體育比賽過程中所產(chǎn)生的時間,比分等數(shù)據(jù)信息進行快速采集記錄、加工處理、傳遞和利用的系統(tǒng)。根據(jù)運動項目的不同,比賽規(guī)則要求也不同,體育比賽的計時計分系統(tǒng)包括測量類、評分類、命中類、制勝類和得分類等多種類型。</p><p>  籃球比賽是根據(jù)運動隊員在規(guī)定的比賽時間里得分多少來決定勝負的,因此,籃球比賽的計時計分系統(tǒng)是一種得分類型的系統(tǒng)?;@球比賽的

17、計時計分系統(tǒng)由計時器、計分器等多種電子設備組成的,同時,根據(jù)目前高水平籃球比賽要求,完善的籃球比賽計時計分系統(tǒng)設備應能與現(xiàn)場成績處理、現(xiàn)場大屏幕、電視轉(zhuǎn)播車等多種設備相聯(lián),以便實現(xiàn)激烈的比賽現(xiàn)場感和表演娛樂等功能目標?,F(xiàn)在,根據(jù)設計要求,介紹一下設計方案。</p><p>  2.1.2系統(tǒng)總體設計方案</p><p>  根據(jù)課題要求,介紹以下兩種設計方法。一種是單片機帶外圍擴展,驅(qū)動數(shù)

18、碼管工作的電路;另一種是單片機直接驅(qū)動數(shù)碼管工作的電路,該電路成本相對較低。兩種電路都以單片機作為核心元件,利用1個四位7段共陰極LED數(shù)碼管和2個三位7段共陰極LED數(shù)碼管作為顯示器件。2個四位共陰極LED數(shù)碼管用于記錄甲、乙兩隊的分數(shù),顯示分數(shù)范圍可達0~999分,足夠賽程計分的需要。1個四位共陰極LED數(shù)碼管用于記錄賽程時間,2個用于顯示分鐘,2個用于顯示秒鐘。比賽前,將時間設置好,比賽開始時啟動計時,直至倒計時到零為止。計時范圍

19、達到0~99分鐘59秒,能滿足實際賽程計時的需要。為了配合計時器調(diào)整時間和計分器校正比分,設計了7個按鍵,4個用于輸入甲、乙兩隊的分數(shù),另3個用于啟動和暫停賽程時間及中場交換場地。另外,還設計了定時報警系統(tǒng),即比賽時間到時,揚聲器發(fā)出報警聲提示賽程結(jié)束.</p><p>  二者的不同之處在于計時電路。前一種計時電路主要由按鍵開關(guān)、單片機AT89C51、譯碼器及LED顯示器構(gòu)成。當調(diào)時開關(guān)(十位)按下時產(chǎn)生一個低

20、電平,對應調(diào)分(十位)控制端P2.0的LE輸出高電平,表示可以向CD45ll的調(diào)分位(十位)發(fā)送數(shù)據(jù),將要顯示數(shù)據(jù)的代碼經(jīng)P1.0送到CD4511的A另— 端,送完后將LE清零。調(diào)時按鍵開關(guān)每按一次,數(shù)字自動加1。直到調(diào)到需要設置的時間即可。調(diào)時(個位)的操作方法與之相同。時間設置完后,啟動定時器。如果比賽中暫停,按一下暫停鍵即可暫停計時。后一種計時電路主要由按鍵開關(guān)、單片機AT89C51及LED顯示器構(gòu)成,采用雙電源供電。單片機采用+

21、5V,數(shù)碼管采用+15V采用單片機直接驅(qū)動數(shù)碼管顯示。當按下秒鐘加1按鍵時,秒計時顯示加1;當按下秒鐘減1按鍵時, 秒計時顯示減1;當按下分鐘加1按鍵時,分鐘顯示加1,當按下分鐘減1按鍵時,分鐘顯示減1。時間設置完后,啟動定時器開始倒計時。如果比賽中裁判叫暫停,則只要按一下暫停鍵,即可暫停計時。根據(jù)此次設計的實驗條件及設計目的,我采用后一種方案,即單片機直接驅(qū)動數(shù)碼管工作的電路系統(tǒng)。球賽計時計分器系統(tǒng)圖如圖2-1所示</p>

22、<p><b>  圖 2-1</b></p><p>  2.2系統(tǒng)基本功能介紹</p><p>  本設計要實現(xiàn)的基本功能有:賽程時間設置,賽程時間啟/停設置,比分交換控制,比分刷新控制,計時計分顯示,賽程結(jié)束報警。以下對個功能進行介紹。</p><p><b>  1、賽程時間設置</b></p&

23、gt;<p>  在計時電路中,按鍵開關(guān)K2、K5用來設置賽程時間。比如:比賽時間上半場時間15分鐘,則通過按鍵K2鍵,使四位數(shù)碼管左邊第1位顯示“1”第2位顯示“5”即可。一般比賽時間為40分鐘,所以只需要按K2鍵使數(shù)碼管第1位顯示“4”,第2位顯示“0”即可。時間設置好后,等待比賽開始。</p><p>  當比賽結(jié)束時,如果由于一些特殊原因需要增加比賽時間,這時增加比賽時間同樣由按鍵K2、K5

24、來設置,并且設置方法與上面所述一眼,但一般情況下只需要按K2鍵來設置即可,因為加時比賽一般只有幾分鐘而已。</p><p>  2、賽程時間啟動/暫停設置</p><p>  當時間設置完成后,比如設置賽程時間為15分鐘,則在LED顯示器上顯示為1500,15表示分鐘,00表示秒鐘。這時,如果裁判吹響開始的哨聲時,則應立即按下按鍵K7,表示賽程開始,計時顯示則由1500變成1459,145

25、8……一直計時直到計為0000時表示賽程結(jié)束。按鍵K7為賽程啟動和暫??刂啤?lt;/p><p><b>  3、比分交換控制</b></p><p>  比分交換控制K4鍵完成。我們知道,因為比分交換是在上半場賽程結(jié)束后進行的,也就是說比分交換要受賽程時間控制,只有當上半場計時器指示為0000時,按K4鍵,則會自動交換甲、乙兩隊的比分。如果上半場賽程時間沒有到0000時

26、,則此時按下K4鍵,不能交換分數(shù)。如果此時按下暫停鍵K7,在按K4,也同樣可以交換兩隊比分,但在實際生活中沒有意義,故不采用。</p><p><b>  4、比分刷新控制</b></p><p>  由于在比賽中,甲、乙兩隊的比分是不斷在變化的,所以需要設置比分刷新控制裝置;此部分功能由按鍵開關(guān)K2,K3,K5,K6來完成的:</p><p>

27、;  K2鍵:完成甲隊加1分操作 K3鍵:完成甲隊減1分操作</p><p>  K5鍵:完成乙隊加1分操作 K6鍵:完成乙隊減1分操作</p><p><b>  5、計時計分顯示</b></p><p>  計時計分顯示器是采用七段共陰極LED顯示器來顯示的。其中計分是用2個三位LED顯示器。計時采用1個四位

28、LED顯示器;顯示格式為000和0000。</p><p><b>  6、賽程結(jié)束報警</b></p><p>  當比賽結(jié)束時,系統(tǒng)會由蜂鳴器自動發(fā)出報警聲,提示賽程結(jié)束。</p><p><b>  3統(tǒng)硬件電路設計</b></p><p>  3.1籃球賽計時計分器電路工作過程</p&

29、gt;<p>  整個籃球計時計分器的工作過程如下:首先在比賽之前,接通電源,系統(tǒng)自動復位,此時計時電路與計分電路中的共陰極數(shù)碼管分別顯示為0000和000;然后我們按照原理圖中的K2鍵來設置比賽時間的分鐘部分。一般比賽半場時間為20分鐘,所以只需要按下K2鍵,使數(shù)碼管分鐘部分顯示“20”,再按下K5鍵,使數(shù)碼管秒鐘部分顯示“00”即可。時間設置好時,等待賽程開始,當裁判吹響哨聲時,啟動計時,這時計時電路便開始工作,計時采

30、用倒計時方式,即從20分鐘減為0分鐘表示上半場結(jié)束。上半場結(jié)束時,蜂鳴器會發(fā)出響聲,通知上半場結(jié)束,這時按下K4鍵,便完成了甲、乙兩隊的分數(shù)交換。在整個賽程中,我們還要對兩隊比分進行及時刷新,這時我們通過原理圖中的K2,K3,K5,K6鍵完成此功能,K2和K5鍵完成甲隊加分、減分,K3和K6鍵完成乙隊加分、減分。按鍵每按一下,表示加上或者減去1分。由于加分、減分我們采用中斷完成,且加、減分的中斷優(yōu)先權(quán)小于計時電路中的中斷優(yōu)先權(quán),所以不會

31、對計時電路造成影響。如果在賽程過程中,一方的教練申請暫停時,經(jīng)裁判批準,我們立即按下K7鍵,即可以暫停計時,暫停時間到時,再按下K7鍵繼續(xù)計時,直至上半</p><p>  3.2系統(tǒng)硬件電路組成</p><p>  3.2.1 主要器件選擇及介紹</p><p>  在本次畢業(yè)設計的過程中主要選取了以下一些器件:</p><p>  顯示

32、器件:7段共陰極LED顯示器</p><p>  單片機:AT89C51</p><p><b>  1.顯示器及其接口</b></p><p>  顯示器是最常用的輸出設備,其種類繁多,但在單片機系統(tǒng)設計中最常用的是發(fā)光二極管顯示器(LED)和液晶顯示器(LCD)兩種。由于這兩種顯示器結(jié)構(gòu)簡單,價格便宜,接口容易實現(xiàn),因而得到廣泛的應用。因為

33、考慮到經(jīng)濟成本問題,本次設計采用發(fā)光二極管LED。下面介紹發(fā)光二極管顯示器(LED)的結(jié)構(gòu)、工作原理及其接口電路。</p><p><b>  LED結(jié)構(gòu)與原理</b></p><p>  圖3-1為典型的數(shù)碼管。</p><p>  圖3-1 7段LED數(shù)碼管</p><p>  圖3-2 共陰極與共陽極LED顯示器

34、</p><p>  如圖3-1,LED顯示器又稱為數(shù)碼管,LED顯示器由8個發(fā)光二極管組成。中7個長條形的發(fā)光管排列成“日”字形,另一個點形的發(fā)光管在顯示器的右下角作為顯示小數(shù)點用,它能顯示各種數(shù)字及部份英文字母。LED顯示器有兩種不同的形式:一種是8個發(fā)光二極管的陽極都連在一起的,稱之為共陽極LED顯示器;另一種是8個發(fā)光二極管的陰極都連在一起的,稱之為共陰極LED顯示器。如圖3-2所示。本設計采用的是共陰極

35、數(shù)碼管顯示。</p><p>  表3-1列出了共陽極與共陰極LED顯示器顯示數(shù)字、字母與顯示代碼之間的對應關(guān)系。</p><p>  表3-1 代碼對應表</p><p>  LED顯示器顯示方式</p><p>  點亮LED顯示器有兩種方式:一是靜態(tài)顯示;二是動態(tài)顯示。在本次設計中,采用的是動態(tài)顯示。</p><p&

36、gt;  所謂靜態(tài)顯示,就是每一個顯示器都要占用單獨的具有鎖存功能的I/O接口[用于筆劃段字形代碼。這樣單片機只要把要顯示的字形代碼發(fā)送到接口電路,就不用管它了,直到要顯示新的數(shù)據(jù)時,再發(fā)送新的字形碼,因此,使用這種方法單片機中CPU的開銷小。</p><p>  這種電路的缺點是占用端口資源較多。從圖2-3可以看出,每位LED顯示器需要單獨占用8根端口線,因此,在數(shù)據(jù)較多的時候,往往不采用這種設計,而是采用動態(tài)

37、顯示方式。</p><p>  所謂動態(tài)顯示,就是將要顯示的多位LED顯示器采用一個8位的段選端口,然后采用動態(tài)掃描一位一位地輪流點亮各位顯示器。下圖2-4為4位LED顯示器動態(tài)顯示電路。在此電路中,單片機的P1口用于控制4位LED的段選碼:P2口的P2.0~~P2.3用于控制4位LED位選碼,單片機的P1口用于控制4位LED的段選碼:P2口的P2.0~~P2.3用于控制4位LED位選碼。</p>

38、<p>  圖3-3 靜態(tài)顯示圖</p><p>  圖3-4 動態(tài)顯示圖 </p><p>  由于所有的段選碼連在一起,所以同一瞬間只能顯示同一種字符。但如果要顯示不同字符,則要由位選碼來控制。(如果LED為共陰極則P2.0~~P2.3輸出為高電平,如果LED為共陽極則P2.0~~P2.3輸出為低電平。)</p><p>  例如,現(xiàn)在要顯示

39、“5678”四個數(shù)字,則首先應該將“5”的顯示代碼(共陰LED顯示器的顯示代碼為6DH,共陽LED顯示器的顯示代碼為92H)由P1.0送出,然后P2.0~~P2.3輸出相應位碼(LED為共陰則P2.0~~P2.3輸出1000, LED為共陽則P2.0~~P2.3輸出0111)時,則可以看到在數(shù)碼管1上顯示的數(shù)字為“5”。再將顯示的數(shù)字“5”延時5~10ms,以造成視覺暫留效果;同時代碼由P1.0送出。</p><p&

40、gt;  用同樣的方法將其余3個數(shù)字“678”送數(shù)碼管2,3,4顯示,于是最后則可以在4位LED顯示器上看到“5678”四個數(shù)字。為了使顯示效果更加穩(wěn)定,可以使每個數(shù)碼管所顯示的數(shù)字不斷的重復,但其中重復頻率達到了一定的程度的時候,加之人眼睛本身的視覺暫留效果的作用,便可以看到相當穩(wěn)定的“5678”四個數(shù)字。</p><p>  如表3-2,即為模擬以上的過程表(以共陰LED設置顯示代碼,共陽型與此相反)。<

41、;/p><p>  表3-2 模擬過程表</p><p>  2 .單片機AT89C51簡介</p><p>  AT89C51是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含4k bytes的可反復擦寫的Flash只讀程序存儲器和128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51指令系統(tǒng),內(nèi)置功

42、能強大的微型計算機的AT89C51提供了高性價比的解決方案。</p><p>  AT89C51具有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應不同產(chǎn)品的需求。它是一個低功耗高性能單片機,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,AT89C51可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存

43、儲器結(jié)合在一起,特別是可反復擦寫的Flash存儲器可有效地降低開發(fā)成本。</p><p>  如圖所示,圖3-5為AT89C51單片機基本構(gòu)造,其基本性能介紹如下:</p><p>  圖3-5 AT89C51引腳圖 </p><p>  AT89C51的主要特性如下表3-3所示。下面介紹各個管腳:</p><p><b

44、>  VCC:供電電壓。</b></p><p><b>  GND:接地。</b></p><p>  P0口:P0口為一個8位漏極開路雙向I/O口,每個引腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進

45、行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。</p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向

46、I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容,P2口在FLASH編程和校驗時接收高八位地址信號和控

47、制信號。</p><p>  表3-3 AT89C51主要功能描述</p><p>  P3口:P3口管腳是8個帶有內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  P3口也可作為AT89C51的一些特殊

48、功能口,如表3-4所示。</p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p>  ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,</p&

49、gt;<p>  ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p>  表

50、3-4 AT89C51特殊功能表</p><p>  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。</p><p>  /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RE

51、SET;當/EA保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p>  XTAL2:來自反向振蕩器的輸出。</p><p><b>  3.2.2顯示模塊</b></p><p>

52、;  本設計采用共陰極數(shù)碼顯示器,如圖3-6,通常,共陰極接低電平(一般接地),其它管腳接段驅(qū)動電路輸出端。當某段驅(qū)動電路的輸出端為高電平時,該端所連接的字符導通并點亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。同樣,要求段驅(qū)動電路能提供額定的段導通電流,還需根據(jù)外接電源及額定段導通電流來確定相應的限流電阻。本次設計在顯示模塊用到的是一個4位一體和2個兩位一體共陰極數(shù)碼管,共有8個代碼輸入口和8個位選輸入口,采用排阻提供上拉電流數(shù)碼

53、管,以保證有足夠大的電流點亮數(shù)碼管,采用動態(tài)驅(qū)動,使各位數(shù)碼管逐個輪流受控顯示,這就是動態(tài)驅(qū)動,由于掃描速度極快,顯示效果與靜態(tài)驅(qū)動相同。</p><p><b>  圖3-6</b></p><p><b>  3.2.3報警模塊</b></p><p><b> ?。?)報警器的分類</b><

54、;/p><p>  蜂鳴器有兩類3大品種。一類是壓電式,一類是電磁式,電磁式又有兩大品種,鐵振膜式和動圈式,二者原理一樣只是結(jié)構(gòu)不同。所有蜂鳴器都有兩種類型:純蜂鳴器和帶驅(qū)動的蜂鳴器,蜂鳴器都是用音頻信號驅(qū)動的,都是交流驅(qū)動。</p><p>  (2)報警器的工作原理</p><p>  報警器的種類很多,比如:揚聲器,蜂鳴器等,本次設計采用的是電磁式蜂鳴器作為報警器

55、。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、震動膜片以及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號通過電磁線圈,使得電磁線圈產(chǎn)生了一個磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性的振動發(fā)聲。</p><p> ?。?)蜂鳴器通過一NPN三極管進行驅(qū)動,觸發(fā)信號有基極引入。</p><p>  3.2.4時鐘電路模塊</p><p>  時鐘電路在單片機系統(tǒng)中起著

56、非常重要的作用,是保證系統(tǒng)正常工作的基礎。在一個單片機應用系統(tǒng)中,時鐘是保障系統(tǒng)正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢。為達到振蕩周期是12MHZ的要求,這里要采用12MHZ的晶振,另外有兩個22P的電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入引腳。具體連接圖如</p><p><b>  圖3-7所示:</b></

57、p><p><b>  圖3-7</b></p><p>  3.2.5 復位電路模塊</p><p>  復位是單片微機的初始化操作,其主要功能是把PC初始化為0000H,使單片微機從0000H單元開始執(zhí)行程序。除進入系統(tǒng)的正常初始化之外,當由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,可以按復位鍵以重新啟動,也可以通過監(jiān)視定時器來

58、強迫復位。RST引腳是復位信號的輸入端。復位電路在這里采用的是上電+按鈕復位電路形式,具體連接電路如圖3-8</p><p><b>  圖 3-8 </b></p><p>  3.3籃球賽計時計分電路原理圖</p><p><b>  4 軟件編程及調(diào)試</b></p><p>  在設計程序之

59、前,我們首先要對單片機應用系統(tǒng)預完成的任務進行深入的分析,明確系統(tǒng)的設計任務、功能要求和技術(shù)指標。其次,要對系統(tǒng)的硬件資源和工作環(huán)境進行分析。這是單片機應用系統(tǒng)程序設計的基礎和條件。</p><p>  4.1 軟件總體設計方案</p><p>  本次單片機課程設計軟件設計部分采用模塊化程序設計,程序部分由延時子程序,中斷程序,顯示時間分數(shù)子程序,主程序,按鍵控制子程序等組成。其程序流程

60、圖如圖4-1,圖4-2。</p><p><b>  圖4-1</b></p><p><b>  圖4-2</b></p><p>  4.2 軟件設計具體過程</p><p>  軟件設計部分采用模塊化程序設計,用C語言編寫。Keil是美國Keil Software公司出品的51系列兼容單片機C

61、語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil </p><p>  C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。</p>

62、<p>  程序部分由延時子程序,中斷程序,顯示時間分數(shù)子程序,主程序,按鍵控制子程序等組成。</p><p>  4.2.1延時模塊設計 </p><p>  void Delay5ms(void)</p><p>  { // 調(diào)用該子程序能實現(xiàn)延時功能 </p><p

63、>  unsigned int i; 設置變量i的變化范圍,能調(diào)整延時的單</p><p><b>  位時間長度</b></p><p>  for(i=100;i>0;i--);</p><p><b>  }</b></p><p>  4.2.2 顯示時間,分數(shù)子

64、程序模塊設計</p><p>  void display(void)</p><p><b>  {</b></p><p>  // 顯示時間分部分</p><p>  LED Data=LEDCode[minit/10];</p><p><b>  led1=0;</b&g

65、t;</p><p>  Delay5ms();</p><p><b>  led1=1;</b></p><p>  LEDData=LEDCode[minit%10];</p><p><b>  led2=0;</b></p><p>  Delay5ms();<

66、;/p><p><b>  led2=1;</b></p><p>  //秒點閃動if(halfsecond==1)</p><p>  LEDData=0x80;</p><p><b>  else</b></p><p>  LEDData=0x00;</p>

67、<p><b>  led2=0;</b></p><p>  Delay5ms();</p><p><b>  led2=1;</b></p><p>  secondpoint=0;</p><p><b>  // 顯示時間秒</b></p>

68、<p>  LEDData=LEDCode[second/10];</p><p><b>  led3=0;</b></p><p>  Delay5ms();</p><p><b>  led3=1;</b></p><p>  LEDData=LEDCode[second%10]

69、;</p><p><b>  led4=0;</b></p><p>  Delay5ms();</p><p><b>  led4=1;</b></p><p>  // 顯示1組的分數(shù)百位</p><p>  if(AorB==0)</p><p&

70、gt;  LEDData=LEDCode[scoreA/100];</p><p><b>  else</b></p><p>  LEDData=LEDCode[scoreB/100];</p><p><b>  led5=0;</b></p><p>  Delay5ms();</p&

71、gt;<p><b>  led5=1;</b></p><p>  // 顯示1組分數(shù)的十位</p><p>  if(AorB==0)</p><p>  LEDData=LEDCode[(scoreA%100)/10];</p><p><b>  else</b></p&

72、gt;<p>  LEDData=LEDCode[(scoreB%100)/10];</p><p><b>  led6=0;</b></p><p>  Delay5ms();</p><p><b>  led6=1;</b></p><p>  // 顯示1組分數(shù)的個位<

73、;/p><p>  if(AorB==0)</p><p>  LEDData=LEDCode[scoreA%10];</p><p><b>  Else</b></p><p>  LED Data=LEDCode[scoreB%10];</p><p><b>  led7=0;<

74、;/b></p><p>  Delay5ms();</p><p><b>  led7=1;</b></p><p>  // 顯示2組分數(shù)的百位</p><p>  if(AorB==1)</p><p>  LEDData=LEDCode[scoreA/100];</p>

75、;<p><b>  else</b></p><p>  LEDData=LEDCode[scoreB/100];</p><p><b>  led8=0;</b></p><p>  Delay5ms();</p><p><b>  led8=1;</b>

76、</p><p>  // 顯示2組分數(shù)的十位</p><p>  if(AorB==1)</p><p>  LEDData=LEDCode[(scoreA%100)/10];</p><p><b>  else</b></p><p>  LEDData=LEDCode[(scoreB%10

77、0)/10];</p><p><b>  led9=0;</b></p><p>  Delay5ms();</p><p><b>  led9=1;</b></p><p>  // 顯示2組分數(shù)的個位</p><p>  if(AorB==1)</p>

78、<p>  LED Data=LEDCode[scoreA%10];</p><p><b>  else</b></p><p>  LEDData=LEDCode[scoreB%10];</p><p><b>  led10=0;</b></p><p>  Delay5ms();&

79、lt;/p><p><b>  led10=1;</b></p><p><b>  }</b></p><p>  4.2.3 按鍵控制子程序設計模塊</p><p>  void keyscan(void)</p><p><b>  {</b><

80、/p><p>  if(playon==0) </p><p><b>  {</b></p><p>  if(add1==0) //該段為調(diào)整計時器分鐘部分,可調(diào)范圍可達到0~~99</p><p><b>  {</b></

81、p><p>  display(); </p><p>  if(add1==0);</p><p><b>  {</b></p><p>  if(minit<99)</p><p><b>  minit++;</b><

82、/p><p><b>  else</b></p><p><b>  minit=99;</b></p><p><b>  }</b></p><p><b>  do</b></p><p>  display();</p&

83、gt;<p>  while(add1==0);</p><p><b>  }</b></p><p>  if(dec1==0)</p><p><b>  {</b></p><p>  display();</p><p>  if(dec1==0);&

84、lt;/p><p><b>  {</b></p><p>  if(minit>0)</p><p><b>  minit--;</b></p><p><b>  else</b></p><p><b>  minit=0;</

85、b></p><p><b>  }</b></p><p><b>  do</b></p><p>  display();</p><p>  while(dec1==0);</p><p><b>  }</b></p>&l

86、t;p>  if(add2==0) //該段為調(diào)整計時器秒鐘部分,可調(diào)范圍為0~~59</p><p><b>  {</b></p><p>  display();</p><p>  if(add2==0);</p><p><b>  {</b></p>

87、<p>  if(second<59) </p><p><b>  second++;</b></p><p><b>  else</b></p><p>  second=59;</p><p><b>  }</b></p>

88、<p><b>  do</b></p><p>  display();</p><p>  while(add2==0);</p><p><b>  }</b></p><p>  if(dec2==0)</p><p><b>  {</b&

89、gt;</p><p>  display();</p><p>  if(dec2==0);</p><p><b>  {</b></p><p>  if(second>0)</p><p><b>  second--;</b></p><p

90、><b>  else</b></p><p><b>  second=0;</b></p><p><b>  }</b></p><p><b>  do</b></p><p>  display();</p><p>

91、;  while(dec2==0);</p><p><b>  }</b></p><p>  if(exchange==0)</p><p><b>  {</b></p><p>  display();</p><p>  if(exchange==0);</p

92、><p><b>  {</b></p><p><b>  TR1=0</b></p><p><b>  //關(guān)閉T1計器</b></p><p>  alam=1;//關(guān)報警</p><p>  AorB=~A or B;//開啟交換&l

93、t;/p><p>  minit=15; // 并將時間預設為15:00</p><p><b>  second=0;</b></p><p><b>  }</b></p><p><b>  do</b

94、></p><p>  display();</p><p>  while(exchange==0);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p&g

95、t;<p><b>  {</b></p><p>  if(add1==0)</p><p><b>  {</b></p><p>  display();</p><p>  if(add1==0);</p><p><b>  {</b&

96、gt;</p><p>  if(AorB==0)</p><p><b>  {</b></p><p>  if(scoreA<999)</p><p><b>  scoreA++;</b></p><p><b>  else</b><

97、;/p><p>  scoreA=999;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(scoreB<999)</p><p

98、><b>  scoreB++;</b></p><p><b>  else</b></p><p>  scoreB=999;</p><p><b>  }</b></p><p><b>  }</b></p><p>

99、;<b>  do</b></p><p>  display();</p><p>  while(add1==0);</p><p><b>  }</b></p><p>  if(dec1==0)</p><p><b>  {</b></

100、p><p>  display();</p><p>  if(dec1==0);</p><p><b>  {</b></p><p>  if(AorB==0)</p><p><b>  {</b></p><p>  if(scoreA>0

101、)</p><p><b>  scoreA--;</b></p><p><b>  else</b></p><p><b>  scoreA=0;</b></p><p><b>  }</b></p><p><b&g

102、t;  else</b></p><p><b>  {</b></p><p>  if(scoreB>0)</p><p><b>  scoreB--;</b></p><p><b>  else</b></p><p><

103、;b>  scoreB=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  do</b></p><p>  display();</p><p>  while(d

104、ec1==0);</p><p><b>  }</b></p><p>  if(add2==0)</p><p><b>  {</b></p><p>  display();</p><p>  if(add2==0);</p><p><

105、;b>  {</b></p><p>  if(AorB==1)</p><p><b>  {</b></p><p>  if(scoreA<999)</p><p><b>  scoreA++;</b></p><p><b>  e

106、lse</b></p><p>  scoreA=999;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(scoreB<999)&

107、lt;/p><p><b>  scoreB++;</b></p><p><b>  else</b></p><p>  scoreB=999;</p><p><b>  }</b></p><p><b>  }</b><

108、/p><p><b>  do</b></p><p>  display();</p><p>  while(add2==0);</p><p><b>  }</b></p><p>  if(dec2==0)</p><p><b>  

109、{</b></p><p>  display();</p><p>  if(dec2==0);</p><p><b>  {</b></p><p>  if(AorB==1)</p><p><b>  {</b></p><p>

110、  if(scoreA>0)</p><p><b>  scoreA--;</b></p><p><b>  else</b></p><p><b>  scoreA=0;</b></p><p><b>  }</b></p>

111、<p><b>  Else</b></p><p><b>  {</b></p><p>  if(scoreB>0)</p><p><b>  scoreB--;</b></p><p><b>  else</b></p&g

112、t;<p><b>  scoreB=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  do</b></p><p>  display();</p>&l

113、t;p>  while(dec2==0);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.2.4 中斷程序設計模塊</p><p>  void

114、time0_int(void) interrupt 1 </p><p><b>  {</b></p><p><b>  TL0=0xb0;</b></p><p><b>  TH0=0x3c;</b></p><p><b>  TR0=1;</b>

115、;</p><p><b>  count++;</b></p><p>  if(count==10)</p><p><b>  {</b></p><p>  halfsecond=0;</p><p><b>  }</b></p>

116、<p>  if(count==20)</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  halfsecond=1;</p><p>  if(second==0)</p><p><b>

117、  {</b></p><p>  if(minit>0)</p><p><b>  {</b></p><p>  second=59;</p><p><b>  minit--;</b></p><p><b>  }</b>&

118、lt;/p><p><b>  else</b></p><p><b>  {</b></p><p>  timeover=1;</p><p><b>  playon=0;</b></p><p><b>  TR0=0;</b>

119、;</p><p><b>  TR1=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  second-

120、-;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void time1_int(void) interrupt 3</p><p><b>  {</b></p><p>&l

121、t;b>  TL1=0xb0;</b></p><p><b>  TH1=0x3c;</b></p><p><b>  TR1=1;</b></p><p><b>  count1++;</b></p><p>  if(count1==10)</

122、p><p><b>  {</b></p><p><b>  alam=0;</b></p><p><b>  }</b></p><p>  if(count1==20)</p><p><b>  {</b></p>

123、<p><b>  count1=0;</b></p><p><b>  alam=1;</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  4.2.5 主函數(shù)設計模塊</p&

124、gt;<p>  void main(void)</p><p><b>  {</b></p><p>  TMOD=0x11;</p><p><b>  TL0=0xb0;</b></p><p><b>  TH0=0x3c;</b></p>

125、<p><b>  TL1=0xb0;</b></p><p><b>  TH1=0x3c;</b></p><p>  minit=15; //初始值為15:00</p><p><b>  second=0;</b></p><p

126、><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p><b>  ET1=1;</b></p><p><b>  TR0=0;</b></p><p><b>  TR1=0;</b&g

127、t;</p><p><b>  EX0=1;</b></p><p><b>  IT0=1;</b></p><p><b>  IT1=1;</b></p><p><b>  //EX1=1;</b></p><p><

128、;b>  PX0=1;</b></p><p><b>  //PX1=1;</b></p><p><b>  PT0=0;</b></p><p><b>  P1=0xFF;</b></p><p><b>  P3=0xFF;</b&g

129、t;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan();</p><p>  display();</p><p><b>  }</b></p>&

130、lt;p><b>  }</b></p><p>  void PxInt0(void) interrupt 0</p><p><b>  {</b></p><p>  Delay5ms();</p><p><b>  EX0=0;</b></p>&

131、lt;p><b>  alam=1;</b></p><p><b>  TR1=0;</b></p><p>  if(timeover==1)</p><p><b>  {</b></p><p>  timeover=0;</p><p>

132、<b>  }</b></p><p>  if(playon==0)</p><p><b>  {</b></p><p>  playon=1;//開始標志位</p><p>  TR0=1;//開啟計時</p><p><b>  }</b>

133、</p><p><b>  else</b></p><p><b>  {</b></p><p>  playon=0; //開始標志位清零,表示暫停</p><p>  TR0=0

134、 //暫時計時</p><p><b>  }</b></p><p>  EX0=1;//開中斷</p><p><b>  }</b></p><p><b>  /*</b></p><p>  voi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論