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

下載本文檔

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

文檔簡(jiǎn)介

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

2、開(kāi)始時(shí)啟動(dòng)計(jì)時(shí),直至計(jì)時(shí)到0為止。</p><p>  為了配合計(jì)時(shí)器和計(jì)分器校正調(diào)整時(shí)間和比分,我們特定在本設(shè)計(jì)中設(shè)立了7個(gè)按鍵,用于設(shè)置,調(diào)整時(shí)間,啟動(dòng),調(diào)整分?jǐn)?shù)和暫停等功能。采用單片機(jī)控制是這個(gè)系統(tǒng)按鍵操作使用簡(jiǎn)潔,LED顯示,安裝方便。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī) ; 計(jì)時(shí) ; 計(jì)分 ; 顯示器 ; 接口</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)方案說(shuō)明3</b></p><p>  2.1 方案選擇3</p><p>  2.1.1 籃球賽計(jì)時(shí)計(jì)分器設(shè)計(jì)的現(xiàn)狀3</p

7、><p>  2.1.2系統(tǒng)總體設(shè)計(jì)方案3</p><p>  3統(tǒng)硬件電路設(shè)計(jì)8</p><p>  3.1籃球賽計(jì)時(shí)計(jì)分器電路工作過(guò)程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報(bào)警模塊18</p><p>  3.2.4時(shí)鐘電路模塊18</p><p>  3.2.5 復(fù)位電路模塊19</p><p>  3.3籃球賽計(jì)時(shí)計(jì)分電路原理圖20</p><p>  4 軟件編程及調(diào)試21</p><p>  4.1 軟件總體設(shè)計(jì)方案

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

24、來(lái)設(shè)置,并且設(shè)置方法與上面所述一眼,但一般情況下只需要按K2鍵來(lái)設(shè)置即可,因?yàn)榧訒r(shí)比賽一般只有幾分鐘而已。</p><p>  2、賽程時(shí)間啟動(dòng)/暫停設(shè)置</p><p>  當(dāng)時(shí)間設(shè)置完成后,比如設(shè)置賽程時(shí)間為15分鐘,則在LED顯示器上顯示為1500,15表示分鐘,00表示秒鐘。這時(shí),如果裁判吹響開(kāi)始的哨聲時(shí),則應(yīng)立即按下按鍵K7,表示賽程開(kāi)始,計(jì)時(shí)顯示則由1500變成1459,145

25、8……一直計(jì)時(shí)直到計(jì)為0000時(shí)表示賽程結(jié)束。按鍵K7為賽程啟動(dòng)和暫停控制。</p><p><b>  3、比分交換控制</b></p><p>  比分交換控制K4鍵完成。我們知道,因?yàn)楸确纸粨Q是在上半場(chǎng)賽程結(jié)束后進(jìn)行的,也就是說(shuō)比分交換要受賽程時(shí)間控制,只有當(dāng)上半場(chǎng)計(jì)時(shí)器指示為0000時(shí),按K4鍵,則會(huì)自動(dòng)交換甲、乙兩隊(duì)的比分。如果上半場(chǎng)賽程時(shí)間沒(méi)有到0000時(shí)

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

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

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

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

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

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

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

33、考慮到經(jīng)濟(jì)成本問(wèn)題,本次設(shè)計(jì)采用發(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 共陰極與共陽(yáng)極LED顯示器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

60、圖如圖4-1,圖4-2。</p><p><b>  圖4-1</b></p><p><b>  圖4-2</b></p><p>  4.2 軟件設(shè)計(jì)具體過(guò)程</p><p>  軟件設(shè)計(jì)部分采用模塊化程序設(shè)計(jì),用C語(yǔ)言編寫(xiě)。Keil是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C

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

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

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

64、程序模塊設(shè)計(jì)</p><p>  void display(void)</p><p><b>  {</b></p><p>  // 顯示時(shí)間分部分</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>  //秒點(diǎn)閃動(dòng)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>  // 顯示時(shí)間秒</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組的分?jǐn)?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組分?jǐn)?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組分?jǐn)?shù)的個(gè)位<

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組分?jǐn)?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組分?jǐn)?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組分?jǐn)?shù)的個(gè)位</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 按鍵控制子程序設(shè)計(jì)模塊</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)整計(jì)時(shí)器分鐘部分,可調(diào)范圍可達(dá)到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)整計(jì)時(shí)器秒鐘部分,可調(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計(jì)器</b></p><p>  alam=1;//關(guān)報(bào)警</p><p>  AorB=~A or B;//開(kāi)啟交換&l

93、t;/p><p>  minit=15; // 并將時(shí)間預(yù)設(shè)為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 中斷程序設(shè)計(jì)模塊</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ù)設(shè)計(jì)模塊</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;//開(kāi)始標(biāo)志位</p><p>  TR0=1;//開(kāi)啟計(jì)時(shí)</p><p><b>  }</b>

133、</p><p><b>  else</b></p><p><b>  {</b></p><p>  playon=0; //開(kāi)始標(biāo)志位清零,表示暫停</p><p>  TR0=0

134、 //暫時(shí)計(jì)時(shí)</p><p><b>  }</b></p><p>  EX0=1;//開(kāi)中斷</p><p><b>  }</b></p><p><b>  /*</b></p><p>  voi

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論