

版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- -基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 基于單片機(jī)籃球賽計(jì)時(shí)計(jì)分器設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)—籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)—籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)籃球計(jì)時(shí)計(jì)分器課程設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)-基于at89s52單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器 - 副本
- 單片機(jī)課程設(shè)計(jì)報(bào)告-籃球計(jì)時(shí)計(jì)分器
- 基于51單片機(jī)的籃球計(jì)時(shí)計(jì)分器畢業(yè)論文
- 畢業(yè)設(shè)計(jì)(論文)-基于at89c51單片機(jī)的籃球賽計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 課程設(shè)計(jì)--- 基于單片機(jī)的籃球賽計(jì)時(shí)計(jì)分器的設(shè)計(jì)
- 單片機(jī)技術(shù)課程設(shè)計(jì)報(bào)告(籃球計(jì)時(shí)計(jì)分器)
- 單片機(jī)畢業(yè)設(shè)計(jì)-籃球比賽倒計(jì)時(shí)計(jì)分器(論文+外文翻譯+程序)
- 基于單片機(jī)的籃球比賽計(jì)時(shí)計(jì)分系統(tǒng)設(shè)計(jì).pdf
- 籃球賽計(jì)時(shí)計(jì)分器畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)-籃球場(chǎng)計(jì)時(shí)計(jì)分器的設(shè)計(jì)
- 籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論