單片機課程設計——籃球計時計分器_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機課程設計報告</b></p><p>  籃球比賽計時計分器設計</p><p>  2009年 6月18日</p><p><b>  摘要</b></p><p>  本設計是采用AT89C52單片機為核心設計的一個用于賽場的籃球計時計分器。本設計采用定時器T

2、0中斷計時,顯示部分分為計時和計分顯示兩部分,均采用共陰極LED顯示。計時部分計時范圍寬,而且可定時設定與小時、分鐘調(diào)整;計分部分調(diào)整靈活,顯示范圍寬,足以滿足各種規(guī)模賽程需要。兩個顯示模塊均采用動態(tài)掃描方式顯示。</p><p>  在本設計中P3口(P3.0——P3.3)是計時計分顯示共用的掃描口,P0口是計時數(shù)據(jù)輸出口,P2口是計分數(shù)據(jù)輸出口,計時計分均設有顯示緩沖區(qū)(40H——43H計分顯示緩沖區(qū),30H

3、——33H計時顯示緩沖區(qū))。本設計共有K1——K5六個設置按鍵,K1是甲加分建(按一次加一分),K2是乙加分鍵(按一次加一分),K3是定時切換鍵(定時設置與計時調(diào)時切換),K4是分鐘調(diào)整鍵(計時與定時分鐘調(diào)整),K5是分數(shù)位置交換鍵(交換甲、乙兩隊比分的位置)。按鍵與P1口相接,低電平輸入有效.。報警部分由揚聲器組成,當計時時間到時,輸出低電平有效,由P1.3口輸出脈沖信號驅(qū)動揚聲器發(fā)出聲音。計時定時的原理與定時鬧鐘相同,為定時設置定時

4、分鐘計數(shù)單元,通過比較定時與計時的分計數(shù)單元判斷比賽是否結束是否報警,定時與計時共用一個顯示緩沖去,通過K3(定時切換鍵)進行顯示切換,本設計可通過定時顯示的秒位判斷定時是否有效,如果秒位顯示00說明無效(上次用過的定時),顯示11說明有效(本次定時)。定時時間到,揚聲器報警,比賽結束,按K3鍵可停止報警(否則一直報警)。</p><p>  關鍵詞:單片機 籃球計時計分器 數(shù)碼管 按鍵 報警器&

5、lt;/p><p><b>  目錄</b></p><p><b>  1 概述3</b></p><p>  1.1單片機簡介3</p><p>  1.2課程設計的意義4</p><p>  1.3任務與要求4</p><p>  2 系統(tǒng)總

6、體方案及硬件設計5</p><p>  2.1、系統(tǒng)總體方案設計5</p><p>  2.2、硬件系統(tǒng)設計5</p><p>  2.2.1單片機的選擇5</p><p>  2.2.2、時鐘電路模塊6</p><p>  2.2.3、復位電路模塊7</p><p>  2.2.4

7、、按鍵控制模塊8</p><p>  2.2.5、數(shù)碼管顯示原理8</p><p>  2.2.6、定時報警模塊9</p><p><b>  3、軟件設計10</b></p><p>  3.1、程序流程圖10</p><p>  3.2、程序分析11</p><

8、p>  4 PROTEUS軟件仿真12</p><p><b>  4.1、簡介12</b></p><p>  4.2、仿真過程12</p><p><b>  5、調(diào)試分析15</b></p><p>  6、課程設計心得體會16</p><p><

9、;b>  參考文獻:16</b></p><p>  附1、源程序代碼17</p><p>  附2、系統(tǒng)原理圖24</p><p><b>  1 概述</b></p><p><b>  1.1單片機簡介 </b></p><p>  單片機是指一

10、個集成在一塊芯片上的完整計算機系統(tǒng)。盡管他的大部分功能集成在一塊小芯片上,但是它具有一個完整計算機所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會具有外存。同時集成諸如通訊接口、定時器,實時時鐘等外圍設備。而現(xiàn)在最強大的單片機系統(tǒng)甚至可以將聲音、圖像、網(wǎng)絡、復雜的輸入輸出系統(tǒng)集成在一塊芯片上。</p><p>  單片機也被稱為微控制器(Microcontroller),是因為它最早被用在工業(yè)

11、控制領域。單片機由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來。最早的設計理念是通過將大量外圍設備和CPU集成在一個芯片中,使計算機系統(tǒng)更小,更容易集成進復雜的而對體積要求嚴格的控制設備當中。INTEL的Z80是最早按照這種思想設計出的處理器,從此以后,單片機和專用處理器的發(fā)展便分道揚鑣。</p><p>  早期的單片機都是8位或4位的。其中最成功的是INTEL的8031,因為簡單可靠而性能不錯獲得了很大的好評。此后在

12、8031上發(fā)展出了MCS51系列單片機系統(tǒng)?;谶@一系統(tǒng)的單片機系統(tǒng)直到現(xiàn)在還在廣泛使用。隨著工業(yè)控制領域要求的提高,開始出現(xiàn)了16位單片機,但因為性價比不理想并未得到很廣泛的應用。90年代后隨著消費電子產(chǎn)品大發(fā)展,單片機技術得到了巨大的提高。隨著INTEL i960系列特別是后來的ARM系列的廣泛應用,32位單片機迅速取代16位單片機的高端地位,并且進入主流市場。而傳統(tǒng)的8位單片機的性能也得到了飛速提高,處理能力比起80年代提高了數(shù)百

13、倍。目前,高端的32位單片機主頻已經(jīng)超過300MHz,性能直追90年代中期的專用處理器,而普通的型號出廠價格跌落至1美元,最高端的型號也只有10美元。當代單片機系統(tǒng)已經(jīng)不再只在裸機環(huán)境下開發(fā)和使用,大量專用的嵌入式操作系統(tǒng)被廣泛應用在全系列的單片機上。而在作為掌上電腦和手機核心處理的高端單片機甚至可以直接使用專用的Windows和Linux操作系統(tǒng)。</p><p>  1.2課程設計的意義</p>

14、<p>  課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發(fā)展的日新日異,單片機已經(jīng)成為當今計算機應用中空前活躍的領域, 在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握單片機的開發(fā)技術是十分重要的。</p><p><b>  1.3任務與要求</b></p&g

15、t;<p>  設計一個單片機系統(tǒng)用于籃球比賽計時計分,滿足以下功能要求:</p><p> ?。?) 能記錄整個賽程的比賽時間,并能修改比賽時間。</p><p> ?。?)能隨時刷新甲、乙兩隊在整個比賽過程中的比分。</p><p>  (3)中場交換比賽場地時,能交換甲、乙兩隊比分的位置。</p><p> ?。?)比賽結

16、束時,能發(fā)出報警聲。</p><p>  2 系統(tǒng)總體方案及硬件設計</p><p>  2.1、系統(tǒng)總體方案設計</p><p>  本設計是采用AT89C52單片機為核心設計的一個用于賽場的籃球計時計分器。本設計采用定時器T0中斷計時,顯示部分分為計時和計分顯示兩部分,均采用共陰極LED顯示。單片機P3口(P3.0——P3.5)是計時計分顯示共用的掃描口,P0口

17、是計時數(shù)據(jù)輸出口,P2口是計分數(shù)據(jù)輸出口。計時部分計時范圍寬,而且可定時設定與小時、分鐘調(diào)整;計分部分調(diào)整靈活,顯示范圍寬,足以滿足各種規(guī)模賽程需要。兩個顯示模塊均采用動態(tài)掃描方式顯示。</p><p>  2.2、硬件系統(tǒng)設計</p><p>  2.2.1單片機的選擇</p><p>  AT89C52單片機是美國ATMEL公司生產(chǎn)的低功耗,高性能CMOS 8位

18、單片機,片內(nèi)含4K bytes的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度,非易失性存儲技術生產(chǎn),兼容標準8051指令系統(tǒng)及引腳。具有如下特點:40個引腳,4k Bytes Flash片內(nèi)程序存儲器,128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時鐘振蕩器.。它集

19、Flash程序存儲器,既可在線編程(ISP)也可用傳統(tǒng)方法進行編程及通用8位微處理器于單片芯片中,ATMEL公司的功能強大,低價單片機可為您提供許多高性價比的應用場合,可靈活應用于各種控制領域。 </p><p>  由于AT89C52的上述優(yōu)點,結合本設計的功能要求和降低成本,故本設計采用單片機AT89C52。</p><p>  AT89C52管腳圖</p><p&

20、gt;  2.2.2、時鐘電路模塊</p><p>  MCS-51內(nèi)部有一個用于構成振蕩器的高增益反相放大器,此放大器的輸入和輸出端分別是引腳XTAL1和XTAL2,在XTAL1和XTAL2上外接時鐘源即可構成時鐘電路。有內(nèi)部和外部兩種時鐘產(chǎn)生方式。</p><p>  本設計采用的是外部方式,原理圖如圖所示:</p><p>  參數(shù)選擇:C1、C2對頻率有微調(diào)

21、作用,當外接晶振時,C1和C2通常選擇10——30pF;當外接陶瓷諧振器時,C1和C2的典型值約為40+/-10pF,在設計印刷電路板時,晶體或陶瓷諧振器和電容應盡可能安裝在單片機芯片附近,以減少寄生電容,保證振蕩器穩(wěn)定和可靠的工作。為提高穩(wěn)定性,應采用NPO電容。本設計采用的震蕩頻率是12MH</p><p>  2.2.3、復位電路模塊</p><p>  復位電路的基本功能是:系統(tǒng)上

22、電時提供復位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復位信號。為可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時才撤銷復位信號,以防電源開關或電源插頭分-合過程中引起的抖動而影響復位。 MCS-51單片機通常采用上電自動復位、按鈕電平復位、外部脈沖復位、上電+按鈕電平復位、程序運行監(jiān)視復位等方式。上電復位設利用電容充電來實現(xiàn)的,即上電瞬間RST/Vpd端的電位與Vcc相同,隨著充電電流的減少,RST/Vpd的電位下降,最后被嵌位在0V。按鈕電平復位是當按下按

23、鈕后,電源Vcc通過電阻R施加在單片機復位端RST/Vpd上,實現(xiàn)單片機復位。本設計采用的是上電+按鈕電平復位電路,是上電自動復位與按鈕電平復位電路的組合,當振蕩頻率選11.0592MH時。電容C取10uF,R取10K,Rs取1K。電路如下圖:</p><p>  2.2.4、按鍵控制模塊</p><p>  本設計采用的是用查詢方式的,也就是把按鍵接在P1口,用程序查詢方式查詢那個按鍵按

24、下,執(zhí)行相應的操作。圖如下:</p><p>  2.2.5、數(shù)碼管顯示原理</p><p>  數(shù)碼管實際上是由7個發(fā)光管組成8字形構成的,加上小數(shù)點就是8個。我們分別把他命名為A,B,C,D,E,F,G,H。 </p><p>  圖2.2 數(shù)碼管內(nèi)部結構圖</p><p>  假設我們要顯示一個數(shù)字2, 那么 A、B、G、E、D這5個段

25、的發(fā)光管亮就可以了,C、F、H不亮,同時由于接法為共陽接法,那么為低電平是亮,為高電平是滅。從高往低排列, P1.7-P1.0寫成二進制為01111110, 把他轉(zhuǎn)化為16進制則為A2H。我們可以根據(jù)硬件的接線把數(shù)碼管顯示數(shù)字編制成一個表格,見下表,以后直接調(diào)用就行了。 </p><p>  數(shù)碼管的接口有靜態(tài)接口和動態(tài)接口兩種。靜態(tài)接口為固定顯示方式,無閃爍,其電路可采用一個并行口接一個數(shù)碼管,數(shù)碼管的公共端按

26、共陽接VCC,本次課程設計由于所需數(shù)碼管較少,故可用些種方法接線。這種接法占用接口多,僅能接少量數(shù)碼管。動態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當循環(huán)顯示的頻率較高時,利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個接口完成字形碼的輸出,另一接口完成各數(shù)碼管的輪流點亮。</p><p>  本設計采用的是數(shù)碼管動態(tài)顯示。</p><p>  2.2.6、定時報警模塊</p&g

27、t;<p><b>  3、軟件設計</b></p><p><b>  3.1、程序流程圖</b></p><p>  籃球比賽中,得分可分為1分、2分、3分三種情況,但為了方便我們在這只設置加1分,得2分、3分的情況可用按2次、3次加1分得到。還設置了定是報警鍵。根據(jù)這樣的設計要求,結合數(shù)碼管的顯示以及52單片機中計數(shù)器的工作實

28、現(xiàn)方式、接口應用、中斷控制等可設計出程序流程圖如下:</p><p><b>  3.2、程序分析</b></p><p>  本設計采用AT89S52單片機中的一個16位的定時/計數(shù)器T0,分別由TH0和TL0組成,它們均是8位寄存器,在特殊功能寄存器中占地址8AH-8DH。它們用于存放定時或計數(shù)的初始值。此外,內(nèi)部還有一個8位的方式寄存器TMOD和一個8位的控制寄

29、存器TCON。用于選擇和控制定時/計數(shù)器的工作。</p><p>  籃球比賽計分器利用單片機的計數(shù)器進行工作,計數(shù)器對外部脈沖的下降沿進行加1計數(shù),直至計滿回零。作為可編程器件,單片機中的定時/計數(shù)器初始化編程步驟如下:</p><p>  根據(jù)定時時間要求或計數(shù)要求計算計數(shù)器初值;</p><p>  將工作方式控制字寫入TMOD寄存器;</p>

30、<p>  將計數(shù)初值寫入THX和TLX寄存器;</p><p>  啟動定時器/計數(shù)器,即將TRX置位。</p><p>  如果工作于中斷方式,需置位EA(中斷總開關)及ET(允許定時/計數(shù)器中斷),并編寫中斷服務程序。其設計中斷子程序圖如下:</p><p>  4 PROTEUS軟件仿真</p><p><b>

31、  4.1、簡介</b></p><p>  Proteus軟件是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。</p><p>  Protues提供了豐富的資源: 仿真元器件資源:仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件,有30多個元件庫。仿

32、真儀表資源 :示波器、邏輯分析儀、虛擬終端、SPI調(diào)試器、I2C調(diào)試器、信號發(fā)生器、模式發(fā)生器、交直流電壓表、交直流電流表。理論上同一種儀器可以在一個電路中隨意的調(diào)用。Proteus還提供了一個圖形顯示功能,可以將線路上變化的信號,以圖形的方式實時地顯示出來,其作用與示波器相似,但功能更多。這些虛擬儀器儀表具有理想的參數(shù)指標。另外Proteus還提供了比較豐富的測試信號用于電路的測試。這些測試信號包括模擬信號和數(shù)字信號。</p&g

33、t;<p>  在Protues中進行電路仿真時,先繪制好原理圖,再調(diào)入已編譯好的目標代碼文件:*.HEX,隨后便可在PROTEUS的原理圖中模擬的實物運行狀態(tài)和過程,進行觀察從而改良自己的設計方案。操作簡單,非常適合初學者進行單片機的仿真,進而了解其原理,增強實踐。</p><p><b>  4.2、仿真過程</b></p><p>  在計算機中打

34、開PROTEUS軟件,建立新的項目,在元件庫中選擇相應的元件,放在編輯窗口中,依次連線,組成仿真原理圖。</p><p>  在用Protues進行仿真之前,先要用WAVE軟件將我們編寫好的匯編程序編譯。具體方法是在WAVE中先新建一項目,之后輸入編寫的程序,輸入完成后保存然后執(zhí)行項目、編譯,在目標文件夾內(nèi)生成編譯好的程序文件,其中*.HEX文件就是我們所需要的,在之后電路設計好后用于放入AT89S51中執(zhí)行其功

35、能。</p><p>  檢查連接好的電路,確保無誤后,在電路連接好的PROTEUS窗口中雙擊AT89S51,在彈出的對話框中選擇單片機中要輸入的程序。</p><p>  用鼠標點擊仿真鍵進行仿真,在仿真過程中點擊按鍵,觀察數(shù)碼管的顯示情況,看是否符合設計的要求,若與要求不符,檢查電路是否連線正確,實在找不出錯誤所在,可以請教老師或請同學幫忙檢查,直到正確為止。</p>&

36、lt;p>  計時工作仿真狀態(tài)圖:</p><p>  甲乙兩隊計分工作仿真狀態(tài)圖:</p><p>  計時計分工作狀態(tài)圖:</p><p><b>  5、調(diào)試分析</b></p><p>  在仿真成功之后,便可進行實踐了。實物和仿真還是有一定的差別的,制作實物時要考慮的方面比仿真多的多。做實物時,不僅要考慮

37、到電路正確同時也要注意版面的設計,不僅設計功能要求實現(xiàn),版面的美觀也是必不可少的一方面,這就要注意盡量少的接線。</p><p>  在電路板剛剛焊好后,與以前制作的單片機板連接在一起,接好電路,烤入程序后發(fā)現(xiàn)第一個數(shù)碼管的C段一直處于亮的狀態(tài),經(jīng)檢查后確定不是硬件出現(xiàn)的問題,但在仿真時能正確顯示也證明程序也是正確的,找不到問題所在讓我非常郁悶。想著原因可能程序讀入時出現(xiàn)錯誤,試著重新將程序烤入單片機中,顯示結果

38、果然變得正常,實踐成功。</p><p>  6、課程設計心得體會</p><p>  這次課程設計歷時二個星期左右,通過這兩個星期的學習,發(fā)現(xiàn)了自己的很多不足,自己知識的很多漏洞,看到了自己的實踐經(jīng)驗還是比較缺乏,理論聯(lián)系實際的能力還急需提高。</p><p>  回顧起此次單片機課程設計,我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在接近兩星期的日子里,可以

39、說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自

40、己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說不懂一些元器件的使用方法,對單片機匯編語言掌握得不好……通過這次課程設計之后,一定把以前所學過的知識重新溫故。</p><p>  這次課程設計終于順利完成了,在設計中遇到了很多編程問題,最后在XXX、XXX、XXX老師的辛勤指導下,終于游逆而解。同時,在XXX、XXX、XXX老師那里我學得到很多實用的知識,在次我表示感謝!同時,對給過我?guī)椭?/p>

41、所有同學和各位指導老師再次表示忠心的感謝!</p><p><b>  參考文獻:</b></p><p>  [1]余發(fā)山.單片機原理及應用技術.徐州:中國礦業(yè)大學出版社,2003.</p><p>  [2]佟云峰,等.單片機原理及其應用.重慶:重慶大學出版社,2004,1.</p><p>  [3]吳金戌,等.8

42、051單片機實踐與應用.北京:清華大學出版社,2001,8.</p><p>  [4]劉瑞新.單片機原理及應用教程.北京:機械工業(yè)出版社,2005.</p><p>  [5]聶毅.宏匯編語言程序設計教程.北京:電子工業(yè)出版社,1998.</p><p>  [6]周航慈.單片機應用程序設計技術.北京:北京航空航天大學出版社,2002.</p>&l

43、t;p><b>  附1、源程序代碼</b></p><p>  scoreDisplayBuffer equ 40h ;設置計分顯示緩沖區(qū)的地址為40h-45h</p><p>  ascore equ 47h ;設置甲隊的計分地址</p><p>  

44、bscore equ 49h ;設置乙隊的計分地址</p><p>  akey bit p1.0 ;設置甲加分鍵(按一次加一分)</p><p>  bkey bit p1.1

45、 ;設置乙加分鍵(按一次加一分)</p><p>  abkey bit p1.6 ;設置分數(shù)位置交換鍵(交換比分位置)</p><p>  DisplayBuffer equ 30h ;設置計、定時顯示緩沖區(qū)地址30h-35h</p>&l

46、t;p>  OneSecondCounter equ 39h ;設置1秒計數(shù)地址</p><p>  Minute equ 3bh ;設置分鐘計數(shù)地址</p><p>  Second equ 3ch ;設置秒計數(shù)地址<

47、;/p><p>  ClockMode equ 20h.0 ;設置模式(計時/定時)寄存器地址</p><p>  AlarmOnOff equ 20h.1 ;設置報警開啟/關閉標志</p><p>  AlarmTimeOn equ 20h.2

48、 ;設置計時時間到標志</p><p>  DispMinute equ 22h ;設置分鐘顯示寄存器的地址</p><p>  DispSecond equ 23h ;設置秒顯示寄存器的地址</p><p>  AlarmMinute e

49、qu 2fh ;設置定時分鐘計數(shù)地址</p><p>  AlarmSetKey bit p1.2 ;定義設置定時設置切換鍵</p><p>  MinuteKey bit p1.5 ;定義分設置鍵</p><p>  RelayO

50、ut equ p1.3 ;定義報警發(fā)聲輸出引腳</p><p>  ;@@@@@@@@@@@@@@中斷入口程序@@@@@@@@@</p><p>  org 00h</p><p>  ajmp Reset ; 程序開始</p><p>

51、  org 0bh ;T0中斷地址</p><p>  ajmp TimeInt ;調(diào)到中斷服務程序</p><p>  ;@@@@@@@@@@@@@@程序開始@@@@@@@@@@@</p><p>  org 0020h</p>&

52、lt;p><b>  Reset:</b></p><p>  mov sp,#70h ;工作狀態(tài)\地址初始化</p><p>  setb RelayOut</p><p>  mov OneSecondCounter,#125</p><p>  mov

53、 Minute,#00</p><p>  mov Second,#00</p><p>  mov AlarmMinute,#00</p><p>  mov ascore,#00</p><p>  mov bscore,#00</p><p>  clr AlarmOnO

54、ff</p><p>  clr ClockMode</p><p>  clr AlarmTimeOn</p><p>  setb RelayOut</p><p>  mov tmod,#00000001b</p><p>  mov th0,#0E0h</p>

55、<p>  mov tl0,#0C0h</p><p>  mov ie, #82h ;開全局中斷</p><p>  setb tr0 ;定時器T0開始工作</p><p>  ;@@@@@@@@@@@@@@@以下為主

56、程序@@@@@@@@@@@@@@@@@</p><p><b>  MainLoop:</b></p><p>  jnb akey,bbb1 ; 如甲加分鍵按下,執(zhí)行bbb1后的語句,完成甲分數(shù)加一</p><p>  jnb bkey,bbb2 ; 如乙加分鍵按下,執(zhí)行bbb2后的語句,完

57、成乙分數(shù)加一</p><p>  jnb abkey,bbb3 ; 如顯示交換鍵按下,執(zhí)行bbb3后的語句,交換顯示</p><p>  ajmp xxx ; 如果沒有分數(shù)設置鍵按下,跳到xxx語句</p><p>  bbb1: jnb akey,bbb1 ;等待按鍵釋放</p

58、><p>  mov a, ascore</p><p>  add a,#1 ; 完成甲分數(shù)加一</p><p>  mov ascore,a</p><p>  call ConvertoBuffer ;調(diào)用轉(zhuǎn)換到顯示緩沖區(qū)子程序</p><p>  ajmp

59、 xxx ; 跳到xxx語句</p><p>  bbb2: jnb bkey,bbb2 ;與bbb1的功能類似,完成乙分數(shù)加一</p><p>  mov a,bscore</p><p>  add a,#1</p><p>  mov bscore,a<

60、;/p><p>  call ConvertoBuffer</p><p>  ajmp xxx</p><p>  bbb3: jnb abkey,bbb3 ; 完成顯示交換</p><p>  mov a,ascore</p><p>  mov 48h,a</p

61、><p>  mov a,bscore</p><p>  mov ascore,a</p><p>  mov a,48h</p><p>  mov bscore,a</p><p>  call ConvertoBuffer ;調(diào)用轉(zhuǎn)換到顯示緩沖區(qū)子程序<

62、;/p><p><b>  xxx:</b></p><p>  jb AlarmSetKey,CheckMinuteKey ; 定時設置鍵按下了嗎?沒有則檢測分鐘設置鍵</p><p>  call Delay</p><p>  jb AlarmSetKey,CheckMinuteKey

63、 ;延時去抖動</p><p>  setb ClockMode</p><p>  call AlarmSet</p><p>  CheckMinuteKey:</p><p>  jb MinuteKey,CheckAlarm ;分設置鍵按下了嗎?沒有則轉(zhuǎn)去檢測小時設置鍵</p><p

64、>  mov a,Minute</p><p>  add a,#1</p><p>  mov Minute,a</p><p>  cjne a,#3ch,NotOver1 ;到60分鐘了嗎?</p><p>  mov Minute,#0

65、 ;到60分鐘則將分鐘清0</p><p><b>  NotOver1:</b></p><p>  jnb MinuteKey,$</p><p>  CheckAlarm:</p><p>  jnb AlarmTimeOn,ToReturn</p><p>  call

66、 AlarmProcess</p><p><b>  ToReturn:</b></p><p>  ajmp MainLoop ;跳回主程序</p><p>  ;@@@@@@@@@@@@@定時器Timer0中斷服務程序@@@@@@@@@@@</p><p><b>

67、;  TimeInt:</b></p><p>  mov th0,#0E0h ;重新加載定時參數(shù)</p><p>  mov tl0,#0C0h</p><p>  push acc</p><p>  push psw</p><p>  

68、setb rs0</p><p>  clr rs1</p><p>  djnz OneSecondCounter,NotoneSecond ;即夠1秒了嗎?</p><p>  mov OneSecondCounter,#125 ;如夠1秒則重新設置"OneSecondCounter"

69、;計數(shù)器</p><p>  call Clock ;調(diào)用將時鐘內(nèi)容加1秒的子程序</p><p>  call ConvertoBuffer ;調(diào)用轉(zhuǎn)換到顯示緩沖區(qū)子程序</p><p>  NotoneSecond:</p><p>  call S

70、canDisplay ;調(diào)用掃描顯示子程序</p><p>  pop psw</p><p>  pop acc</p><p>  reti ;中斷返回</p><p>  ;@@@@@@@@@@@@掃描顯示子程序@@@@@@@@@@

71、@@@@@@@@</p><p>  ScanDisplay:</p><p>  MOV R1,#DisplayBuffer ;指向計(定)時顯示數(shù)據(jù)首址</p><p>  MOV R0,#scoreDisplayBuffer ;指向分數(shù)顯示數(shù)據(jù)首址</p><p>  MOV R4

72、,#11111110b ;掃描控制字初值</p><p>  PLAY: MOV A,R4 ;掃描字放入A</p><p>  MOV p3,A ;從p3口輸出</p><p>  MOV A,@R1 ;取計

73、時顯示數(shù)據(jù)到A</p><p>  MOV DPTR,#TAB ;取段碼表地址</p><p>  MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應段碼</p><p>  MOV P0,A ;段碼放入P0口</p><p&g

74、t;  MOV A,@R0 ;取計分顯示數(shù)據(jù)到A</p><p>  MOV DPTR,#TAB ;取段碼表地址</p><p>  MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應段碼</p><p>  MOV P2,A

75、 ;段碼放入P2口</p><p>  LCALL Delay</p><p>  INC R1 ;指向下一地址</p><p>  INC R0</p><p>  MOV A,R4 ;

76、掃描控制字放入A</p><p>  JNB ACC.4,ENDOUT ;掃到第六位時結束</p><p>  RL A ;A中數(shù)據(jù)循環(huán)左移</p><p>  MOV R4,A ;放回R4內(nèi)</p>&

77、lt;p>  AJMP PLAY</p><p>  ENDOUT: SETB p3.7</p><p>  MOV P0,#0FFH</p><p>  MOV P2,#0FFH</p><p>  RET ;子程序返回</p&

78、gt;<p>  TAB: DB 3FH,06H,5BH,4FH,66H</p><p>  DB 6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,40H,80H,00H</p><p>  ;@@@@@@@@@@@@@計時加1秒的子程序@@@@@@@@@@@@@@</p><p><b>  Cloc

79、k:</b></p><p>  mov a,Second ;將原秒值送入a</p><p>  sub a,#1 ;加1秒</p><p>  mov Second,a</p><p>  cjne a,#

80、00H,NotOverFlow ;夠60秒了嗎?</p><p>  mov Second,#59 ;夠了則將秒值清0</p><p>  mov a,Minute</p><p>  sub a,#1</p><p>  mov Minute,a

81、 ;分鐘加1</p><p>  cjne a,#00H,NotOverFlow ;夠60分了嗎?</p><p>  mov Minute,#59 ;夠了則將分值清0</p><p>  NotOverFlow:</p><p>

82、  jnb AlarmOnOff,NotAlarm</p><p>  mov a,Second</p><p>  jnz NotAlarm ;秒為零嗎?</p><p>  mov a,Minute</p><p>  cjne a,AlarmMinu

83、te,NotAlarm ;計時分鐘值和定時設置分鐘值相等嗎?</p><p>  setb AlarmTimeOn ;到了鬧時時間則將“鬧時時間到”標志設為1</p><p><b>  NotAlarm:</b></p><p><b>  ret</b></p>

84、;<p>  ;@@@@@@@計時定時值與計分轉(zhuǎn)換到顯示緩沖區(qū)子程序@@@@@@@@@@</p><p>  ConvertoBuffer:</p><p>  mov r1,#DisplayBuffer ;將計(定)時緩沖區(qū)地址賦給r1</p><p>  mov R0,#scoreDisplayBuffer

85、 ;將計分緩沖區(qū)地址賦給r0</p><p>  jnb akey,Convert1</p><p>  jnb bkey,Convert1</p><p>  jb abkey,zzz1</p><p>  ajmp Convert1</p><p><b>  

86、zzz1:</b></p><p>  jb ClockMode,DispAlarmSet ;判斷計時模式,以決定是顯示計時時間還是定時時間</p><p>  mov a,Second ;將計時數(shù)據(jù)轉(zhuǎn)到顯示寄存器</p><p>  mov DispSecond,a</p><

87、;p>  mov a,Minute</p><p>  mov Dispminute,a</p><p>  ajmp Convert</p><p>  DispAlarmSet:</p><p>  jb AlarmOnOff,AlarmOn ;將定時數(shù)據(jù)轉(zhuǎn)到顯示寄存器</p>

88、<p>  mov DispSecond,#00h ;秒位顯示00說明無效(上次用過的定時)</p><p>  ajmp Next</p><p><b>  AlarmOn:</b></p><p>  mov DispSecond,#11 ;顯示11說明有效(本次定時)<

89、/p><p><b>  Next:</b></p><p>  mov a,AlarmMinute</p><p>  mov Dispminute,a</p><p><b>  Convert:</b></p><p>  mov a,DispSec

90、ond ;將計(定)時顯示寄存器中的內(nèi)容賦值給a</p><p>  mov b,#10 ;令b=10</p><p>  div ab ;a/b 商(十位)放a中,余數(shù)(個位)放b中</p><p>  mov @r1,b ;將b中的

91、個位賦值給((r1))</p><p>  inc r1 ;r1自加1</p><p>  mov @r1,a ;將a中的十位賦值給((r1))</p><p>  inc r1 ;r1自加1</p><p>  

92、mov a,DispMinute ;同上</p><p>  mov b,#10</p><p>  div ab</p><p>  mov @r1,b</p><p>  inc r1</p><p>  mov @r1,a</p>&

93、lt;p><b>  Convert1:</b></p><p>  mov a,bscore ;將計分顯示寄存器中的內(nèi)容賦值給a</p><p>  mov b,#10 ;與計時相應部分的類似</p><p>  div ab</p><p>  mov

94、 @R0,b</p><p>  inc R0</p><p>  mov @R0,a</p><p>  inc R0</p><p>  mov @R0,a</p><p>  inc R0</p><p>  mov a,ascore&l

95、t;/p><p>  mov b,#10</p><p>  div ab</p><p>  mov @R0,b</p><p>  inc R0</p><p>  mov @R0,a</p><p><b>  ret</b><

96、;/p><p>  ;@@@@@@@@@定時設置子程序@@@@@@@@@@</p><p><b>  AlarmSet:</b></p><p>  jnb AlarmSetKey,$</p><p>  call Delay</p><p>  CheckArmMinuteK

97、ey:</p><p>  jb MinuteKey,AlarmSetEnd ;分設置鍵按下了嗎?沒有則轉(zhuǎn)去檢測小時設置鍵</p><p>  setb AlarmOnOff</p><p>  mov a,AlarmMinute</p><p>  add a,#1</p>&

98、lt;p>  mov AlarmMinute,a</p><p>  cjne a,#3ch,ArmNotOver1 ;到60分鐘了嗎?</p><p>  mov AlarmMinute,#0</p><p>  ArmNotOver1:</p><p>  jnb Minu

99、teKey,$</p><p>  AlarmSetEnd:</p><p>  jb AlarmSetKey,AlarmSet ;設置完畢了嗎?</p><p>  jnb AlarmSetKey,$</p><p>  clr ClockMode ;從定時

100、設置模式轉(zhuǎn)為計時模式</p><p><b>  ret</b></p><p>  ;@@@@@@@@@報警服務子程序@@@@@@@@@@@</p><p>  AlarmProcess:</p><p>  clr RelayOut;</p><p>  jb Ala

101、rmSetKey,$ ;停止報警鍵(即定時設置鍵)按下了嗎?</p><p>  clr AlarmOnOff</p><p>  setb RelayOut ;如停止報警鍵按下則停止報警</p><p>  clr AlarmTimeOn</p><p>  Ala

102、rmReturn:</p><p><b>  ret</b></p><p>  ;@@@@@@@@@@延時子程序@@@@@@@@@@@@@@@@@@</p><p><b>  Delay:</b></p><p>  mov r6,#3</p><p><b

103、>  Del:</b></p><p>  mov r7,#166</p><p>  djnz r7,$ ;自減循環(huán)</p><p>  djnz r6,Del ;自減循環(huán)</p><p><b>  ret</b></p><p&

溫馨提示

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

評論

0/150

提交評論