版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 單片機(jī)課程設(shè)計(jì)任務(wù)書</p><p> 設(shè)計(jì)題目 籃球比賽計(jì)分器 </p><p><b> 設(shè)計(jì)任務(wù)與要求</b></p><p><b> 基本功能:</b></p><p> 1. 應(yīng)用MCS-51單片機(jī)設(shè)計(jì)一個(gè)籃球比賽計(jì)分器;</p&g
2、t;<p> 2. 能顯示2個(gè)隊(duì)的當(dāng)前比分;根據(jù)各自得分情況進(jìn)行加1, 2,3分;</p><p> 3. 硬件設(shè)計(jì)根據(jù)設(shè)計(jì)的任務(wù)選定合適的單片機(jī),根據(jù)控制對象設(shè)計(jì)接口電路。設(shè)計(jì)的單元電路必須有工作原理,器件的作用,分析和計(jì)算過程;</p><p> 4. 軟件設(shè)計(jì)根據(jù)電路工作過程,畫出軟件流程圖,根據(jù)流程圖編寫相應(yīng)的程序,進(jìn)行調(diào)試并打印程序清單;</p>
3、<p><b> 三、主要參考文獻(xiàn)</b></p><p> [1] 單片微型計(jì)算機(jī)與接口技術(shù),李群芳、黃建編著,電子工業(yè)出版社;</p><p> [2] 單片機(jī)原理及應(yīng)用,張毅剛編著,高等教育出版社;</p><p> [3] 51系列單片機(jī)及C51程序設(shè)計(jì),王建校,楊建國等編著,科學(xué)出版社;</p>&l
4、t;p><b> 四、設(shè)計(jì)時(shí)間 </b></p><p> 2014 年 11 月 3 日 至 2014 年 11月 14 日</p><p> 指導(dǎo)教師簽名: </p><p> 年 月 日</p><p><b> 目錄<
5、/b></p><p><b> 1 概述3</b></p><p> 1.1單片機(jī)簡介3</p><p> 1.2課程設(shè)計(jì)的意義4</p><p> 1.3任務(wù)與要求4</p><p> 2 系統(tǒng)總體方案及硬件設(shè)計(jì)5</p><p> 2.1、
6、系統(tǒng)總體方案設(shè)計(jì)5</p><p> 2.2、硬件系統(tǒng)設(shè)計(jì)5</p><p> 2.2.1單片機(jī)的選擇5</p><p> 2.2.2、時(shí)鐘電路模塊6</p><p> 2.2.3、復(fù)位電路模塊7</p><p> 2.2.4、按鍵控制模塊8</p><p> 2.2.5
7、、數(shù)碼管顯示原理8</p><p> 2.2.6、定時(shí)報(bào)警模塊9</p><p><b> 3、軟件設(shè)計(jì)10</b></p><p> 3.1、程序流程圖10</p><p> 3.2、程序分析11</p><p> 4 PROTEUS軟件仿真12</p>&
8、lt;p><b> 4.1、簡介12</b></p><p> 4.2、仿真過程12</p><p><b> 5、調(diào)試分析15</b></p><p> 6、課程設(shè)計(jì)心得體會(huì)16</p><p><b> 參考文獻(xiàn):16</b></p>
9、<p> 附1、源程序代碼17</p><p> 附2、系統(tǒng)原理圖24</p><p><b> 1 概述</b></p><p><b> 1.1單片機(jī)簡介 </b></p><p> 單片機(jī)是指一個(gè)集成在一塊芯片上的完整計(jì)算機(jī)系統(tǒng)。盡管他的大部分功能集成在一塊小芯片上,
10、但是它具有一個(gè)完整計(jì)算機(jī)所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會(huì)具有外存。同時(shí)集成諸如通訊接口、定時(shí)器,實(shí)時(shí)時(shí)鐘等外圍設(shè)備。而現(xiàn)在最強(qiáng)大的單片機(jī)系統(tǒng)甚至可以將聲音、圖像、網(wǎng)絡(luò)、復(fù)雜的輸入輸出系統(tǒng)集成在一塊芯片上。</p><p> 單片機(jī)也被稱為微控制器(Microcontroller),是因?yàn)樗钤绫挥迷诠I(yè)控制領(lǐng)域。單片機(jī)由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來。最早的設(shè)計(jì)理念是通
11、過將大量外圍設(shè)備和CPU集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成進(jìn)復(fù)雜的而對體積要求嚴(yán)格的控制設(shè)備當(dāng)中。INTEL的Z80是最早按照這種思想設(shè)計(jì)出的處理器,從此以后,單片機(jī)和專用處理器的發(fā)展便分道揚(yáng)鑣。</p><p> 早期的單片機(jī)都是8位或4位的。其中最成功的是INTEL的8031,因?yàn)楹唵慰煽慷阅懿诲e(cuò)獲得了很大的好評。此后在8031上發(fā)展出了MCS51系列單片機(jī)系統(tǒng)。基于這一系統(tǒng)的單片機(jī)系統(tǒng)直到現(xiàn)
12、在還在廣泛使用。隨著工業(yè)控制領(lǐng)域要求的提高,開始出現(xiàn)了16位單片機(jī),但因?yàn)樾詢r(jià)比不理想并未得到很廣泛的應(yīng)用。90年代后隨著消費(fèi)電子產(chǎn)品大發(fā)展,單片機(jī)技術(shù)得到了巨大的提高。</p><p> 1.2課程設(shè)計(jì)的意義</p><p> 課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日
13、異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。</p><p><b> 1.3任務(wù)與要求</b></p><p> 設(shè)計(jì)一個(gè)單片機(jī)系統(tǒng)用于籃球比賽計(jì)時(shí)計(jì)分,滿足以下功能要求:</p><p> ?。?) 能記錄整個(gè)賽程的比賽時(shí)間,并能修改比賽時(shí)
14、間。</p><p> ?。?)能隨時(shí)刷新甲、乙兩隊(duì)在整個(gè)比賽過程中的比分。</p><p> ?。?)中場交換比賽場地時(shí),能交換甲、乙兩隊(duì)比分的位置。</p><p> 2 系統(tǒng)總體方案及硬件設(shè)計(jì)</p><p> 2.1、系統(tǒng)總體方案設(shè)計(jì)</p><p> 本設(shè)計(jì)是采用AT89C52單片機(jī)為核心設(shè)計(jì)的一個(gè)用于
15、賽場的籃球計(jì)時(shí)計(jì)分器。本設(shè)計(jì)采用定時(shí)器T0中斷計(jì)時(shí),顯示部分分為計(jì)時(shí)和計(jì)分顯示兩部分,均采用共陰極LED顯示。單片機(jī)P3口(P3.0——P3.5)是計(jì)時(shí)計(jì)分顯示共用的掃描口,P0口是計(jì)時(shí)數(shù)據(jù)輸出口,P2口是計(jì)分?jǐn)?shù)據(jù)輸出口。計(jì)時(shí)部分計(jì)時(shí)范圍寬,而且可定時(shí)設(shè)定與小時(shí)、分鐘調(diào)整;計(jì)分部分調(diào)整靈活,顯示范圍寬,足以滿足各種規(guī)模賽程需要。兩個(gè)顯示模塊均采用動(dòng)態(tài)掃描方式顯示。</p><p> 2.2、硬件系統(tǒng)設(shè)計(jì)<
16、/p><p> 2.2.1單片機(jī)的選擇</p><p> AT89C52單片機(jī)是美國ATMEL公司生產(chǎn)的低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4K bytes的可系統(tǒng)編程的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度,非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。具有如下特點(diǎn):40個(gè)引腳,4k Bytes Flash片內(nèi)程序存儲(chǔ)器,128 bytes的隨機(jī)存取數(shù)據(jù)存
17、儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器.。它集Flash程序存儲(chǔ)器,既可在線編程(ISP)也可用傳統(tǒng)方法進(jìn)行編程及通用8位微處理器于單片芯片中,ATMEL公司的功能強(qiáng)大,低價(jià)單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。 </p><p> 由于AT89C52
18、的上述優(yōu)點(diǎn),結(jié)合本設(shè)計(jì)的功能要求和降低成本,故本設(shè)計(jì)采用單片機(jī)AT89C52。</p><p> 圖2-1 AT89C52管腳圖</p><p> 2.2.2、時(shí)鐘電路模塊</p><p> MCS-51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,此放大器的輸入和輸出端分別是引腳XTAL1和XTAL2,在XTAL1和XTAL2上外接時(shí)鐘源即可構(gòu)成時(shí)鐘電路。有內(nèi)
19、部和外部兩種時(shí)鐘產(chǎn)生方式。</p><p> 本設(shè)計(jì)采用的是外部方式,原理圖如圖所示:</p><p><b> 圖2-2時(shí)鐘電路</b></p><p> 參數(shù)選擇:C1、C2對頻率有微調(diào)作用,當(dāng)外接晶振時(shí),C1和C2通常選擇10——30pF;當(dāng)外接陶瓷諧振器時(shí),C1和C2的典型值約為40+/-10pF,在設(shè)計(jì)印刷電路板時(shí),晶體或陶瓷諧
20、振器和電容應(yīng)盡可能安裝在單片機(jī)芯片附近,以減少寄生電容,保證振蕩器穩(wěn)定和可靠的工作。為提高穩(wěn)定性,應(yīng)采用NPO電容。本設(shè)計(jì)采用的震蕩頻率是12MH</p><p> 2.2.3、復(fù)位電路模塊</p><p> 復(fù)位電路的基本功能是:系統(tǒng)上電時(shí)提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。為可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時(shí)才撤銷復(fù)位信號,以防電源開關(guān)或電源插頭分-合過程中引起的抖動(dòng)
21、而影響復(fù)位。上電復(fù)位設(shè)利用電容充電來實(shí)現(xiàn)的,即上電瞬間RST/Vpd端的電位與Vcc相同,隨著充電電流的減少,RST/Vpd的電位下降,最后被嵌位在0V。按鈕電平復(fù)位是當(dāng)按下按鈕后,電源Vcc通過電阻R施加在單片機(jī)復(fù)位端RST/Vpd上,實(shí)現(xiàn)單片機(jī)復(fù)位。本設(shè)計(jì)采用的是上電+按鈕電平復(fù)位電路,是上電自動(dòng)復(fù)位與按鈕電平復(fù)位電路的組合,當(dāng)振蕩頻率選11.0592MH時(shí)。電容C取10uF,R取10K,Rs取1K。</p><
22、p><b> 圖2-3復(fù)位電路</b></p><p> 2.2.4、按鍵控制模塊</p><p> 本設(shè)計(jì)采用的是用查詢方式的,也就是把按鍵接在P1口,用程序查詢方式查詢那個(gè)按鍵按下,執(zhí)行相應(yīng)的操作。圖如下:</p><p><b> 圖2-4按鍵模塊</b></p><p> 2
23、.2.5、數(shù)碼管顯示原理</p><p> 數(shù)碼管實(shí)際上是由7個(gè)發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè)。我們分別把他命名為A,B,C,D,E,F,G,H。 </p><p> 圖2-5 數(shù)碼管內(nèi)部結(jié)構(gòu)圖</p><p> 假設(shè)我們要顯示一個(gè)數(shù)字2, 那么 A、B、G、E、D這5個(gè)段的發(fā)光管亮就可以了,C、F、H不亮,同時(shí)由于接法為共陽接法,那么為低電平是亮
24、,為高電平是滅。從高往低排列, P1.7-P1.0寫成二進(jìn)制為01111110, 把他轉(zhuǎn)化為16進(jìn)制則為A2H。我們可以根據(jù)硬件的接線把數(shù)碼管顯示數(shù)字編制成一個(gè)表格,見下表,以后直接調(diào)用就行了。 </p><p> 數(shù)碼管的接口有靜態(tài)接口和動(dòng)態(tài)接口兩種。靜態(tài)接口為固定顯示方式,無閃爍,其電路可采用一個(gè)并行口接一個(gè)數(shù)碼管,數(shù)碼管的公共端按共陽接VCC,本次課程設(shè)計(jì)由于所需數(shù)碼管較少,故可用些種方法接線。這種接法占
25、用接口多,僅能接少量數(shù)碼管。動(dòng)態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當(dāng)循環(huán)顯示的頻率較高時(shí),利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個(gè)接口完成字形碼的輸出。</p><p><b> 3、軟件設(shè)計(jì)</b></p><p><b> 3.1程序分析</b></p><p> 本設(shè)計(jì)采用AT89c52單片機(jī)
26、中的一個(gè)16位的定時(shí)/計(jì)數(shù)器T0,分別由TH0和TL0組成,它們均是8位寄存器,在特殊功能寄存器中占地址8AH-8DH。它們用于存放定時(shí)或計(jì)數(shù)的初始值。此外,內(nèi)部還有一個(gè)8位的方式寄存器TMOD和一個(gè)8位的控制寄存器TCON。用于選擇和控制定時(shí)/計(jì)數(shù)器的工作。</p><p> 籃球比賽計(jì)分器利用單片機(jī)的計(jì)數(shù)器進(jìn)行工作,計(jì)數(shù)器對外部脈沖的下降沿進(jìn)行加1計(jì)數(shù),直至計(jì)滿回零。作為可編程器件,單片機(jī)中的定時(shí)/計(jì)數(shù)器初
27、始化編程步驟如下:</p><p> 根據(jù)定時(shí)時(shí)間要求或計(jì)數(shù)要求計(jì)算計(jì)數(shù)器初值;</p><p> 將工作方式控制字寫入TMOD寄存器;</p><p> 將計(jì)數(shù)初值寫入THX和TLX寄存器;</p><p> 啟動(dòng)定時(shí)器/計(jì)數(shù)器,即將TRX置位。</p><p> 如果工作于中斷方式,需置位EA(中斷總開關(guān)
28、)及ET(允許定時(shí)/計(jì)數(shù)器中斷),并編寫中斷服務(wù)程序。其設(shè)計(jì)中斷子程序圖如下:</p><p><b> 圖3-1</b></p><p> 4 PROTEUS軟件仿真</p><p><b> 4.1、簡介</b></p><p> Proteus軟件是英國Labcenter elect
29、ronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。</p><p> Protues提供了豐富的資源: 仿真元器件資源:仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件,有30多個(gè)元件庫。仿真儀表資源 :示波器、邏輯分析儀、虛擬終端、SPI調(diào)試器、I2C調(diào)試器、信號發(fā)生器、模式發(fā)生器、交直流電壓表、交直流電流表。理論上同一種
30、儀器可以在一個(gè)電路中隨意的調(diào)用。Proteus還提供了一個(gè)圖形顯示功能,可以將線路上變化的信號,以圖形的方式實(shí)時(shí)地顯示出來,其作用與示波器相似,但功能更多。這些虛擬儀器儀表具有理想的參數(shù)指標(biāo)。另外Proteus還提供了比較豐富的測試信號用于電路的測試。這些測試信號包括模擬信號和數(shù)字信號。</p><p> 在Protues中進(jìn)行電路仿真時(shí),先繪制好原理圖,再調(diào)入已編譯好的目標(biāo)代碼文件:*.HEX,隨后便可在PR
31、OTEUS的原理圖中模擬的實(shí)物運(yùn)行狀態(tài)和過程,進(jìn)行觀察從而改良自己的設(shè)計(jì)方案。操作簡單,非常適合初學(xué)者進(jìn)行單片機(jī)的仿真,進(jìn)而了解其原理,增強(qiáng)實(shí)踐。</p><p><b> 4.2、仿真過程</b></p><p> 在計(jì)算機(jī)中打開PROTEUS軟件,建立新的項(xiàng)目,在元件庫中選擇相應(yīng)的元件,放在編輯窗口中,依次連線,組成仿真原理圖。</p><
32、p> 在用Protues進(jìn)行仿真之前,先要用WAVE軟件將我們編寫好的匯編程序編譯。具體方法是在WAVE中先新建一項(xiàng)目,之后輸入編寫的程序,輸入完成后保存然后執(zhí)行項(xiàng)目、編譯,在目標(biāo)文件夾內(nèi)生成編譯好的程序文件,其中*.HEX文件就是我們所需要的,在之后電路設(shè)計(jì)好后用于放入AT89S51中執(zhí)行其功能。</p><p> 檢查連接好的電路,確保無誤后,在電路連接好的PROTEUS窗口中雙擊AT89S51,在
33、彈出的對話框中選擇單片機(jī)中要輸入的程序。</p><p> 甲乙兩隊(duì)計(jì)分工作仿真狀態(tài)圖:</p><p><b> 圖4-1</b></p><p><b> 5、調(diào)試分析</b></p><p> 在仿真成功之后,便可進(jìn)行實(shí)踐了。實(shí)物和仿真還是有一定的差別的,制作實(shí)物時(shí)要考慮的方面比仿真多
34、的多。做實(shí)物時(shí),不僅要考慮到電路正確同時(shí)也要注意版面的設(shè)計(jì),不僅設(shè)計(jì)功能要求實(shí)現(xiàn),版面的美觀也是必不可少的一方面,這就要注意盡量少的接線。</p><p> 在電路板剛剛焊好后,與以前制作的單片機(jī)板連接在一起,接好電路,烤入程序后發(fā)現(xiàn)第一個(gè)數(shù)碼管的C段一直處于亮的狀態(tài),經(jīng)檢查后確定不是硬件出現(xiàn)的問題,但在仿真時(shí)能正確顯示也證明程序也是正確的,找不到問題所在讓我非常郁悶。想著原因可能程序讀入時(shí)出現(xiàn)錯(cuò)誤,試著重新將
35、程序烤入單片機(jī)中,顯示結(jié)果果然變得正常,實(shí)踐成功。</p><p> 6、課程設(shè)計(jì)心得體會(huì)</p><p> 這次課程設(shè)計(jì)歷時(shí)二個(gè)星期左右,通過這兩個(gè)星期的學(xué)習(xí),發(fā)現(xiàn)了自己的很多不足,自己知識(shí)的很多漏洞,看到了自己的實(shí)踐經(jīng)驗(yàn)還是比較缺乏,理論聯(lián)系實(shí)際的能力還急需提高。</p><p> 通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不
36、夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說不懂一些元器件的使用方法,對單片機(jī)匯編語言掌握得不好……通過這次課程設(shè)計(jì)之后,一定把以前所學(xué)過的知識(shí)重新溫故。</p>
37、;<p> 這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時(shí),在XXX、XXX、XXX老師那里我學(xué)得到很多實(shí)用的知識(shí),在次我表示感謝!同時(shí),對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!</p><p><b> 參考文獻(xiàn):</b></p><p> [1]余發(fā)山.單片機(jī)原理及應(yīng)用技術(shù).徐
38、州:中國礦業(yè)大學(xué)出版社,2003.</p><p> [2]佟云峰,等.單片機(jī)原理及其應(yīng)用.重慶:重慶大學(xué)出版社,2004,1.</p><p> [3]吳金戌,等.8051單片機(jī)實(shí)踐與應(yīng)用.北京:清華大學(xué)出版社,2001,8.</p><p> [4]劉瑞新.單片機(jī)原理及應(yīng)用教程.北京:機(jī)械工業(yè)出版社,2005.</p><p>
39、[5]聶毅.宏匯編語言程序設(shè)計(jì)教程.北京:電子工業(yè)出版社,1998.</p><p> [6]周航慈.單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù).北京:北京航空航天大學(xué)出版社,2002.</p><p><b> 源程序代碼</b></p><p> scoreDisplayBuffer equ 40h ;設(shè)置計(jì)分顯示緩沖區(qū)的
40、地址為40h-45h</p><p> ascore equ 47h ;設(shè)置甲隊(duì)的計(jì)分地址</p><p> bscore equ 49h ;設(shè)置乙隊(duì)的計(jì)分地址</p><p> akey bit p1.0
41、 ;設(shè)置甲加分鍵(按一次加一分)</p><p> bkey bit p1.1 ;設(shè)置乙加分鍵(按一次加一分)</p><p> abkey bit p1.6 ;設(shè)置分?jǐn)?shù)位置交換鍵(交換比
42、分位置)</p><p> DisplayBuffer equ 30h ;設(shè)置計(jì)、定時(shí)顯示緩沖區(qū)地址30h-35h</p><p> OneSecondCounter equ 39h ;設(shè)置1秒計(jì)數(shù)地址</p><p> Minute equ 3bh
43、 ;設(shè)置分鐘計(jì)數(shù)地址</p><p> Second equ 3ch ;設(shè)置秒計(jì)數(shù)地址</p><p> ClockMode equ 20h.0 ;設(shè)置模式(計(jì)時(shí)/定時(shí))寄存器地址</p><p> AlarmOnO
44、ff equ 20h.1 ;設(shè)置報(bào)警開啟/關(guān)閉標(biāo)志</p><p> AlarmTimeOn equ 20h.2 ;設(shè)置計(jì)時(shí)時(shí)間到標(biāo)志</p><p> DispMinute equ 22h ;設(shè)置分鐘顯示寄存器的地址</p><
45、p> DispSecond equ 23h ;設(shè)置秒顯示寄存器的地址</p><p> AlarmMinute equ 2fh ;設(shè)置定時(shí)分鐘計(jì)數(shù)地址</p><p> AlarmSetKey bit p1.2 ;定義設(shè)置定時(shí)設(shè)置切換
46、鍵</p><p> MinuteKey bit p1.5 ;定義分設(shè)置鍵</p><p> RelayOut equ p1.3 ;定義報(bào)警發(fā)聲輸出引腳</p><p> ;@@@@@@@@@@@@@@中斷入口程序@@@@@@@@@</p>
47、<p> org 00h</p><p> ajmp Reset ; 程序開始</p><p> org 0bh ;T0中斷地址</p><p> ajmp TimeInt ;調(diào)到中
48、斷服務(wù)程序</p><p> ;@@@@@@@@@@@@@@程序開始@@@@@@@@@@@</p><p> org 0020h</p><p><b> Reset:</b></p><p> mov sp,#70h ;工作狀態(tài)\地址初始化</p>&
49、lt;p> setb RelayOut</p><p> mov OneSecondCounter,#125</p><p> mov Minute,#00</p><p> mov Second,#00</p><p> mov AlarmMinute,#00</p>&l
50、t;p> mov ascore,#00</p><p> mov bscore,#00</p><p> clr AlarmOnOff</p><p> clr ClockMode</p><p> clr AlarmTimeOn</p><p> setb
51、 RelayOut</p><p> mov tmod,#00000001b</p><p> mov th0,#0E0h</p><p> mov tl0,#0C0h</p><p> mov ie, #82h ;開全局中斷</p>
52、<p> setb tr0 ;定時(shí)器T0開始工作</p><p> ;@@@@@@@@@@@@@@@以下為主程序@@@@@@@@@@@@@@@@@</p><p><b> MainLoop:</b></p><p> jnb akey,bbb1
53、 ; 如甲加分鍵按下,執(zhí)行bbb1后的語句,完成甲分?jǐn)?shù)加一</p><p> jnb bkey,bbb2 ; 如乙加分鍵按下,執(zhí)行bbb2后的語句,完成乙分?jǐn)?shù)加一</p><p> jnb abkey,bbb3 ; 如顯示交換鍵按下,執(zhí)行bbb3后的語句,交換顯示</p><p> ajmp x
54、xx ; 如果沒有分?jǐn)?shù)設(shè)置鍵按下,跳到xxx語句</p><p> bbb1: jnb akey,bbb1 ;等待按鍵釋放</p><p> mov a, ascore</p><p> add a,#1 ; 完成甲分?jǐn)?shù)加一</p><p>
55、 mov ascore,a</p><p> call ConvertoBuffer ;調(diào)用轉(zhuǎn)換到顯示緩沖區(qū)子程序</p><p> ajmp xxx ; 跳到xxx語句</p><p> bbb2: jnb bkey,bbb2 ;與bbb1的功能類似,完成乙分?jǐn)?shù)加一</p
56、><p> mov a,bscore</p><p> add a,#1</p><p> mov bscore,a</p><p> call ConvertoBuffer</p><p> ajmp xxx</p><p> bbb3: jnb ab
57、key,bbb3 ; 完成顯示交換</p><p> mov a,ascore</p><p> mov 48h,a</p><p> mov a,bscore</p><p> mov ascore,a</p><p> mov a,48h</p&g
58、t;<p> mov bscore,a</p><p> call ConvertoBuffer ;調(diào)用轉(zhuǎn)換到顯示緩沖區(qū)子程序</p><p><b> xxx:</b></p><p> jb AlarmSetKey,CheckMinuteKey ; 定時(shí)設(shè)置鍵按下了
59、嗎?沒有則檢測分鐘設(shè)置鍵</p><p> call Delay</p><p> jb AlarmSetKey,CheckMinuteKey ;延時(shí)去抖動(dòng)</p><p> setb ClockMode</p><p> call AlarmSet</p><p> Chec
60、kMinuteKey:</p><p> jb MinuteKey,CheckAlarm ;分設(shè)置鍵按下了嗎?沒有則轉(zhuǎn)去檢測小時(shí)設(shè)置鍵</p><p> mov a,Minute</p><p> add a,#1</p><p> mov Minute,a</p><p
61、> cjne a,#3ch,NotOver1 ;到60分鐘了嗎?</p><p> mov Minute,#0 ;到60分鐘則將分鐘清0</p><p><b> NotOver1:</b></p><p> jnb MinuteKey,$</p
62、><p> CheckAlarm:</p><p> jnb AlarmTimeOn,ToReturn</p><p> call AlarmProcess</p><p><b> ToReturn:</b></p><p> ajmp MainLoop
63、 ;跳回主程序</p><p> ;@@@@@@@@@@@@@定時(shí)器Timer0中斷服務(wù)程序@@@@@@@@@@@</p><p><b> TimeInt:</b></p><p> mov th0,#0E0h ;重新加載定時(shí)參數(shù)</p><p> m
64、ov tl0,#0C0h</p><p> push acc</p><p> push psw</p><p> setb rs0</p><p> clr rs1</p><p> djnz OneSecondCounter,NotoneSecond
65、 ;即夠1秒了嗎?</p><p> mov OneSecondCounter,#125 ;如夠1秒則重新設(shè)置"OneSecondCounter"計(jì)數(shù)器</p><p> call Clock ;調(diào)用將時(shí)鐘內(nèi)容加1秒的子程序</p><p> call Conv
66、ertoBuffer ;調(diào)用轉(zhuǎn)換到顯示緩沖區(qū)子程序</p><p> NotoneSecond:</p><p> call ScanDisplay ;調(diào)用掃描顯示子程序</p><p> pop psw</p><p> pop acc</p&
67、gt;<p> reti ;中斷返回</p><p> ;@@@@@@@@@@@@掃描顯示子程序@@@@@@@@@@@@@@@@@@</p><p> ScanDisplay:</p><p> MOV R1,#DisplayBuffer ;指向計(jì)(定)時(shí)顯示數(shù)據(jù)
68、首址</p><p> MOV R0,#scoreDisplayBuffer ;指向分?jǐn)?shù)顯示數(shù)據(jù)首址</p><p> MOV R4,#11111110b ;掃描控制字初值</p><p> PLAY: MOV A,R4 ;掃描字放入A</p><
69、p> MOV p3,A ;從p3口輸出</p><p> MOV A,@R1 ;取計(jì)時(shí)顯示數(shù)據(jù)到A</p><p> MOV DPTR,#TAB ;取段碼表地址</p><p> MOVC A,@A+DPTR
70、 ;查顯示數(shù)據(jù)對應(yīng)段碼</p><p> MOV P0,A ;段碼放入P0口</p><p> MOV A,@R0 ;取計(jì)分顯示數(shù)據(jù)到A</p><p> MOV DPTR,#TAB ;取段碼表地址<
71、;/p><p> MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對應(yīng)段碼</p><p> MOV P2,A ;段碼放入P2口</p><p> LCALL Delay</p><p> INC R1
72、 ;指向下一地址</p><p> INC R0</p><p> MOV A,R4 ;掃描控制字放入A</p><p> JNB ACC.4,ENDOUT ;掃到第六位時(shí)結(jié)束</p><p> RL A
73、 ;A中數(shù)據(jù)循環(huán)左移</p><p> MOV R4,A ;放回R4內(nèi)</p><p> AJMP PLAY</p><p> ENDOUT: SETB p3.7</p><p> MOV P0,#0FFH<
74、;/p><p> MOV P2,#0FFH</p><p> RET ;子程序返回</p><p> TAB: DB 3FH,06H,5BH,4FH,66H</p><p> DB 6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,
75、40H,80H,00H</p><p> ;@@@@@@@@@@@@@計(jì)時(shí)加1秒的子程序@@@@@@@@@@@@@@</p><p><b> Clock:</b></p><p> mov a,Second ;將原秒值送入a</p><p> sub a
76、,#1 ;加1秒</p><p> mov Second,a</p><p> cjne a,#00H,NotOverFlow ;夠60秒了嗎?</p><p> mov Second,#59 ;夠了則將秒值清0</p>
77、<p> mov a,Minute</p><p> sub a,#1</p><p> mov Minute,a ;分鐘加1</p><p> cjne a,#00H,NotOverFlow ;夠60分了嗎?</p><p>
78、; mov Minute,#59 ;夠了則將分值清0</p><p> NotOverFlow:</p><p> jnb AlarmOnOff,NotAlarm</p><p> mov a,Second</p><p> jnz NotAlarm
79、 ;秒為零嗎?</p><p> mov a,Minute</p><p> cjne a,AlarmMinute,NotAlarm ;計(jì)時(shí)分鐘值和定時(shí)設(shè)置分鐘值相等嗎?</p><p> setb AlarmTimeOn ;到了鬧時(shí)時(shí)間則將“鬧時(shí)時(shí)間到”標(biāo)志設(shè)
80、為1</p><p><b> NotAlarm:</b></p><p><b> ret</b></p><p> ;@@@@@@@計(jì)時(shí)定時(shí)值與計(jì)分轉(zhuǎn)換到顯示緩沖區(qū)子程序@@@@@@@@@@</p><p> ConvertoBuffer:</p><p> m
81、ov r1,#DisplayBuffer ;將計(jì)(定)時(shí)緩沖區(qū)地址賦給r1</p><p> mov R0,#scoreDisplayBuffer ;將計(jì)分緩沖區(qū)地址賦給r0</p><p> jnb akey,Convert1</p><p> jnb bkey,Convert1</
82、p><p> jb abkey,zzz1</p><p> ajmp Convert1</p><p><b> zzz1:</b></p><p> jb ClockMode,DispAlarmSet ;判斷計(jì)時(shí)模式,以決定是顯示計(jì)時(shí)時(shí)間還是定時(shí)時(shí)間</p><p&
83、gt; mov a,Second ;將計(jì)時(shí)數(shù)據(jù)轉(zhuǎn)到顯示寄存器</p><p> mov DispSecond,a</p><p> mov a,Minute</p><p> mov Dispminute,a</p><p> ajmp Convert</p&g
84、t;<p> DispAlarmSet:</p><p> jb AlarmOnOff,AlarmOn ;將定時(shí)數(shù)據(jù)轉(zhuǎn)到顯示寄存器</p><p> mov DispSecond,#00h ;秒位顯示00說明無效(上次用過的定時(shí))</p><p> ajmp Next</p><
85、p><b> AlarmOn:</b></p><p> mov DispSecond,#11 ;顯示11說明有效(本次定時(shí))</p><p><b> Next:</b></p><p> mov a,AlarmMinute</p><p> mov
86、 Dispminute,a</p><p><b> Convert:</b></p><p> mov a,DispSecond ;將計(jì)(定)時(shí)顯示寄存器中的內(nèi)容賦值給a</p><p> mov b,#10 ;令b=10</p><p> d
87、iv ab ;a/b 商(十位)放a中,余數(shù)(個(gè)位)放b中</p><p> mov @r1,b ;將b中的個(gè)位賦值給((r1))</p><p> inc r1 ;r1自加1</p><p> mov @r1,a
88、 ;將a中的十位賦值給((r1))</p><p> inc r1 ;r1自加1</p><p> mov a,DispMinute ;同上</p><p> mov b,#10</p><p> div ab</p>
89、<p> mov @r1,b</p><p> inc r1</p><p> mov @r1,a</p><p><b> Convert1:</b></p><p> mov a,bscore ;將計(jì)分顯示寄存器中的內(nèi)容賦值給a</p>
90、<p> mov b,#10 ;與計(jì)時(shí)相應(yīng)部分的類似</p><p> div ab</p><p> mov @R0,b</p><p> inc R0</p><p> mov @R0,a</p><p> inc R0<
91、;/p><p> mov @R0,a</p><p> inc R0</p><p> mov a,ascore</p><p> mov b,#10</p><p> div ab</p><p> mov @R0,b</p>
92、<p> inc R0</p><p> mov @R0,a</p><p><b> ret</b></p><p> ;@@@@@@@@@定時(shí)設(shè)置子程序@@@@@@@@@@</p><p><b> AlarmSet:</b></p><
93、;p> jnb AlarmSetKey,$</p><p> call Delay</p><p> CheckArmMinuteKey:</p><p> jb MinuteKey,AlarmSetEnd ;分設(shè)置鍵按下了嗎?沒有則轉(zhuǎn)去檢測小時(shí)設(shè)置鍵</p><p> setb
94、 AlarmOnOff</p><p> mov a,AlarmMinute</p><p> add a,#1</p><p> mov AlarmMinute,a</p><p> cjne a,#3ch,ArmNotOver1 ;到60分鐘了嗎?</p>
95、<p> mov AlarmMinute,#0</p><p> ArmNotOver1:</p><p> jnb MinuteKey,$</p><p> AlarmSetEnd:</p><p> jb AlarmSetKey,AlarmSet ;設(shè)置完畢了嗎
96、?</p><p> jnb AlarmSetKey,$</p><p> clr ClockMode ;從定時(shí)設(shè)置模式轉(zhuǎn)為計(jì)時(shí)模式</p><p><b> ret</b></p><p> ;@@@@@@@@@報(bào)警服務(wù)子程序@@@@@@@@@@@</p&
97、gt;<p> AlarmProcess:</p><p> clr RelayOut;</p><p> jb AlarmSetKey,$ ;停止報(bào)警鍵(即定時(shí)設(shè)置鍵)按下了嗎?</p><p> clr AlarmOnOff</p><p> setb
98、 RelayOut ;如停止報(bào)警鍵按下則停止報(bào)警</p><p> clr AlarmTimeOn</p><p> AlarmReturn:</p><p><b> ret</b></p><p> ;@@@@@@@@@@延時(shí)子程序@@@@@@@@@@@@@@@@@@&l
99、t;/p><p><b> Delay:</b></p><p> mov r6,#3</p><p><b> Del:</b></p><p> mov r7,#166</p><p> djnz r7,$ ;自減循環(huán)</p
100、><p> djnz r6,Del ;自減循環(huán)</p><p><b> ret</b></p><p><b> end</b></p><p><b> 附錄1 實(shí)物圖</b></p><p><b> 附錄2硬件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)—籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)—籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)籃球計(jì)時(shí)計(jì)分器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——籃球計(jì)時(shí)計(jì)分器 - 副本
- 單片機(jī)課程設(shè)計(jì)報(bào)告-籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)技術(shù)課程設(shè)計(jì)報(bào)告(籃球計(jì)時(shí)計(jì)分器)
- -基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 單片機(jī)c51籃球計(jì)時(shí)計(jì)分器課程設(shè)計(jì)
- 基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)設(shè)計(jì)
- 課程設(shè)計(jì)--- 基于單片機(jī)的籃球賽計(jì)時(shí)計(jì)分器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---籃球比賽計(jì)分計(jì)時(shí)器
- 綜合課程設(shè)計(jì)--籃球計(jì)時(shí)計(jì)分器
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)籃球計(jì)分器
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 課程設(shè)計(jì)-- 籃球賽計(jì)時(shí)計(jì)分器
- 基于單片機(jī)籃球賽計(jì)時(shí)計(jì)分器設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的籃球計(jì)時(shí)計(jì)分器畢業(yè)論文
- 籃球計(jì)時(shí)計(jì)分器設(shè)計(jì)
- 基于單片機(jī)的籃球比賽計(jì)時(shí)計(jì)分系統(tǒng)設(shè)計(jì).pdf
評論
0/150
提交評論