基于89c51單片機的數(shù)字搶答器課程設(shè)計_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  第1節(jié) AT89C51單片機系統(tǒng)說明…………………………………………………3</p><p>  1.1 89系列單片機的概況…………………………………………………… 3</p><p>  1.2 AT89C51單片機的內(nèi)部結(jié)構(gòu)………………………………………………5<

2、;/p><p>  1.3 各類型單片機的比較分析……………………………………………… 6</p><p>  1.4 AT89C51單片機性能………………………………………………………6</p><p>  第2節(jié) 數(shù)字搶答器總體方案的設(shè)計…………………………………………… 8</p><p>  2.1 系統(tǒng)硬件設(shè)計………………………

3、…………………………………… 8</p><p>  2.1.1 系統(tǒng)原理圖………………………………………………………8</p><p>  2.1.2 時鐘頻率電路的設(shè)計……………………………………………9</p><p>  2.1.3 復位電路的設(shè)計………………………………………………10</p><p>  2.1.4 顯示電

4、路的設(shè)計………………………………………………10</p><p>  2.1.5 鍵盤掃描電路的設(shè)計…………………………………………11</p><p>  2.1.6 發(fā)聲…………………………………………………………… 11</p><p>  2.1.7 系統(tǒng)復位……………………………………………………… 11</p><p>  

5、第3節(jié) 系統(tǒng)軟件設(shè)計 ……………………………………………………………13</p><p>  3.1 主程序系統(tǒng)結(jié)構(gòu)圖 …………………………………………… 13</p><p>  3.2 程序流程圖 …………………………………………………… 14</p><p>  3.3 系統(tǒng)程序 ……………………………………………………… 15</p>

6、<p>  第4節(jié) 結(jié)束語…………………………………………………………………… 25</p><p>  參考文獻…………………………………………………………………………… 26</p><p>  基于單片機的數(shù)字搶答器系統(tǒng)</p><p>  AT89C51單片機系統(tǒng)說明</p><p>  AT89C51單片機內(nèi)部包含了

7、作為微型計算機所必須的基本功能部件,各功能部件相互獨立的集成在同一塊芯片上。在此主要介紹AT89C51單片機的系統(tǒng)結(jié)構(gòu)及其功能。</p><p>  1.1 AT89C2051單片機的概況</p><p>  AT89C51單片機是ATMAL公司89系列單片機的一種8位Flash單片機。它最大特點是片內(nèi)含有Flash存儲器,用途十分廣泛,特別是在生產(chǎn)便攜式商品,手提式儀器等方面,有著十分

8、廣泛的應用。</p><p>  (1) 89系列單片機的特點:</p><p>  89系列單片機是以8031為內(nèi)核的產(chǎn)品,它與51系列單片機是兼容的。89系列單片機具有以下特點:</p><p>  a) 內(nèi)部含有Flash存儲器,使用戶在開發(fā)過程中十分容易修改程序縮短系統(tǒng)的開發(fā)周期??梢灾貜投啻尉幊蹋筛鶕?jù)需要對內(nèi)部程序進行更新或升級。</p>

9、<p>  b) 89系列單片機的引腳和AT80C51引腳座兼容,用89系列單片機可以代替同檔次的AT80C51單片機,不需要對外圍電路進行改動。</p><p>  表1-1 AT89C51特殊功能寄存器列表</p><p>  注:帶*號的特殊功能寄存器都是可以位尋址的寄存器</p><p>  c) 89系列單片機采用靜態(tài)時鐘方式,可以節(jié)省電能,降低

10、便攜式設(shè)備的功耗。</p><p>  (2) 89系列單片機的結(jié)構(gòu)簡介:</p><p>  89系列單片機的內(nèi)部結(jié)構(gòu)與AT80C51相近,主要有以下部件:</p><p>  1 8031CPU 2 振蕩電路 3 總線控制部件</p><p>  4 中斷控制部件 5 片內(nèi)Flash存儲器

11、 6 片內(nèi)RAM</p><p>  7 并行I/O接口 8 定時器 9 串行I/O接口</p><p>  89系列的各種型號單片機,內(nèi)部差別很大。例如,AT89C1051片內(nèi)Flash存儲器只有1KB,而AT89C52、AT89LV52和AT89S8252的片內(nèi)Flash存儲器有8KB。AT89S8252的結(jié)構(gòu)最復雜,它的內(nèi)部含有標準的串行口,還有一

12、個串行的外圍接口SPI,Watchdog定時器,雙數(shù)據(jù)指針等部件,以及電源下降的中斷恢復功能。</p><p>  89系列的單片機一共有五種型號,分別為AT89C51,AT89LV51,AT89C52,AT89LV52和AT89S8252,其中AT89LV51和AT89LV52分別是AT89C51和AT89C52的低壓產(chǎn)品,最低電壓可以低2.7V,AT89C1051和AT89C2051則是抵擋的低壓產(chǎn)品,只有2

13、0根引腳。89系列單片機的型號編碼中字母的意義是:AT表示該器件是ATMEL公司的產(chǎn)品,C表示該器件是CMOS產(chǎn)品,LV表示該器件是低電壓產(chǎn)品,S表示該器件含可以下載的Flash存儲器。</p><p>  AT89C51是89系列單片機的標準型,它是與MSC-51系列單片機兼容的。在內(nèi)部含有4KB或8KB可重復編程的Flash存儲器,可進行1000次擦寫操作。全靜態(tài)工作為0-24MHZ,有3級程序鎖存器,內(nèi)部含

14、有128-256字節(jié)的RAM,有32條可編程I/O口線,2-3個16位定時/計數(shù)器,6-8個中斷源,通用的串行接口,低電壓空閑及電源下降方式。</p><p>  AT89C51是基本型,具有4KB的Flash存儲器,128字節(jié)的片內(nèi)RAM,32條可編程I/O口,兩個個16位定時/計數(shù)器,6個中斷源,3位存儲器加密,一個可編程串行接口。AT89C52在AT89C52的基礎(chǔ)上,增加了一個定時/計數(shù)器,2個中斷源,1

15、28字節(jié)的片內(nèi)RAM,4KB的Flash存儲器。</p><p>  1.2 AT89C51單片機的內(nèi)部結(jié)構(gòu)</p><p>  AT89C51單片機內(nèi)部由CPU、4KB的FPEROM ,128B的RAM,兩個16位的定時/計數(shù)器T0和T1,4個8位的I/O端P0、P1、P2、P3等組成。單片微機內(nèi)部最核心的部分是CPU。CPU主要功能是產(chǎn)生各種控制信號,控制存儲器、輸入/輸出端口的數(shù)據(jù)

16、傳輸、數(shù)據(jù)的算術(shù)運算、邏輯運算以及位操作處理等,CPU按其功能可分為運算器和控制器兩部分??刂破饔沙绦蛴嫈?shù)器PC、指令儲存器、指令譯碼器、實時控制與條件轉(zhuǎn)移邏輯電路等組成。它的功能是對來自存儲器中的指令進行譯碼,通過實時控制電路,在規(guī)定的時刻發(fā)出各種操作所需的內(nèi)部和外部的控制信號,使各部分協(xié)調(diào)工作,完成指令所規(guī)定的操作。運算器由算術(shù)邏輯器部件ALU、累加器ACC、暫存器、程序狀態(tài)字寄存器PSW,BCD碼運算調(diào)整電路等組成。</p&

17、gt;<p>  圖1-1 AT89C51單片機的內(nèi)部結(jié)構(gòu)圖</p><p>  為了提高數(shù)據(jù)處理和位操作功能,片內(nèi)增加了一個通用寄存器B和一些專用寄存器,還增加了位處理邏輯電路的功能。其內(nèi)部結(jié)構(gòu)如圖1-1所示。</p><p>  1.3 各類型單片機的比較分析</p><p>  如表1-2所示,以下各種類型的單片機內(nèi)除CPU外,還包括ROM、

18、RAM、4*8 I/O口和2個16位定時/計數(shù)器,它們都是功能很強的單片微型計算機。但由于80C51片內(nèi)為掩膜ROM,故內(nèi)部程序不能改寫,不用于實驗開發(fā)。87C51具有片內(nèi)EPROM,是真正的單片微機,但由于價格較貴,且程序改寫時要用紫外線擦除,時間較長,所以用得較少。80C31在市場上的價格很低,但片內(nèi)沒有ROM,必須在片外擴展一片EPROM,非常不便。AT89C51片內(nèi)具有可電擦除的FPEROM,可以快速、多次地編程,且價格不高,所

19、以用得非常廣泛,目前開發(fā)用的MCS—51產(chǎn)品絕大多數(shù)用89C51。</p><p>  表1-2 單片機主要性能的比較</p><p>  1.4 AT89C51單片機性能</p><p>  AT89C51是一種低功耗、高性能的含有4KB閃速可編程電擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only

20、Memory)的8位CMOS微控制器,使用高密度、非易失存儲技術(shù)制造,并且與80C51指令系統(tǒng)和引腳完成兼容。芯片上的FPEROM允許在線或采用通用的非易失存儲編程器對程序存儲器重復編程。</p><p>  (1)AT89C51的主要性能包括:AT89C51與MCS—51控制器系列產(chǎn)品兼容,片內(nèi)有4K可在線重復編程閃速電擦除存儲器(Flash Memory),存儲器可循環(huán)寫入/擦除1000次;存儲器數(shù)據(jù)保存時

21、間可達10年;工作電壓范圍寬:Vcc可由2.7V到6V;全靜態(tài)工作可由0Hz到16MHz;程序存儲器具有3級鎖存保護;128*8位內(nèi)部RAM;32條可編程I/O線;兩個16位定時器/計數(shù)器;中斷結(jié)構(gòu)具有5個中斷源和2個中斷優(yōu)先級;可編程全雙工串行通信;空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲內(nèi)容。</p><p>  (2)FPEROM的編程:AT89C51的I/O口P0、P1、P2和P3除具有與80C51相同的一些

22、性能和用途外,在FPEROM編程時,P0口接收代碼字節(jié),并在程序檢驗時輸出代碼字節(jié),但在程序校驗時需要外部上拉負載電阻,在FPEROM編程和程序校驗期間,P1口接收低位地址字節(jié),P2口接收高位地址字節(jié)和一些控制信號,P3口也接收一些FPEROM編程和校驗用的信號,此時ALE/PROG引腳是編程脈沖輸入(PROG)端,在FPEROM編程期間,如果選擇12V編程電壓、那么EA/Vpp引腳也允許接受12V編程電壓(Vpp)。</p>

23、;<p>  數(shù)字搶答器總體方案的設(shè)計</p><p>  本設(shè)計分為硬件設(shè)計和軟件設(shè)計,這兩者相互結(jié)合,不可分離;從時間上看,硬件設(shè)計的絕大部分工作量是在最初階段,到后期往往還要做一些修改。只要技術(shù)準備充分,硬件設(shè)計的大返工是比較少的,軟件設(shè)計的任務貫徹始終,到中后期基本上都是軟件設(shè)計任務,隨著集成電路技術(shù)的飛速發(fā)展,各種功能很強的芯片不斷出現(xiàn),使硬件電路的集成度越來越高,硬件設(shè)計的工作量在整個項

24、目中的所占的比重逐漸下降。</p><p><b>  系統(tǒng)硬件設(shè)計</b></p><p>  為使硬件電路設(shè)計盡可能合理,應注意以下幾方面:</p><p>  (1) 盡可能采用功能強的芯片,以簡化電路,功能強的芯片可以代替若干普通芯片,隨著生產(chǎn)工藝的提高,新型芯片的的價格不斷下降,并不一定比若干普通芯片價格的總和高。</p>

25、<p>  (2) 留有設(shè)計余地。在設(shè)計硬件電路時,要考慮到將來修改擴展的方便。因為很少有一錘定音的電路設(shè)計,如果現(xiàn)在不留余地,將來可能要為一點小小的修改或擴展而被迫進行全面返工。</p><p>  (3) 程序空間,選用片內(nèi)程序空間足夠大的單片機,本設(shè)計采用AT89C51單片機。</p><p>  (4) I/O端口,在樣機研制出來后進行現(xiàn)場試用時,往往會發(fā)現(xiàn)一些被忽

26、視的問題,而這些問題不是靠單純的軟件措施來解決的。如有些新的信號需要采集,就必須增加輸入檢測端;有些物理量需要控制,就必須增加輸出端。如果在硬件電路設(shè)計就預留出一些I/O端口,雖然當時空著沒用,那么用的時候就派上用場了。</p><p><b>  總體原理圖</b></p><p>  如圖2-1,P1.0為開始搶答,P1.7為停止,P1.1-P1.6為六路搶答輸入

27、,數(shù)碼管段選P0口,位選P2口低3位,蜂鳴器輸出為P3.6口。P3.2為時間加1調(diào)整,P3.3為時間減1調(diào)整。</p><p>  圖2-1 系統(tǒng)原理圖</p><p><b>  時鐘頻率電路的設(shè)計</b></p><p>  單片機必須在時鐘的驅(qū)動下才能工作.在單片機內(nèi)部有一個時鐘振蕩電路,只需要外接一個振蕩源就能產(chǎn)生一定的時鐘信號送到單片

28、機內(nèi)部的各個單元,決定單片機的工作速度。</p><p>  圖2-2 外部振蕩源電路</p><p>  一般選用石英晶體振蕩器。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產(chǎn)生幅度為3V左右的正弦波時鐘信號,其振蕩頻率主要由石英晶振的頻率確定。電路中兩個電容 C1,C2的作用有兩個:一是幫助振蕩器起振;二是對振蕩器的頻率進行微調(diào)。C1,C2的典型值為30PF。</p

29、><p>  單片機在工作時,由內(nèi)部振蕩器產(chǎn)生或由外直接輸入的送至內(nèi)部控制邏輯單元的時鐘信號的周期稱為時鐘周期。其大小是時鐘信號頻率的倒數(shù),常用fosc表示。如時鐘頻率為12MHz,即fosc=12MHz,則時鐘周期為1/12µs。</p><p>  2.1.3 復位電路的設(shè)計</p><p>  單片機的第9腳RST為硬件復位端,只要將該端持續(xù)4個機器周

30、期的高電平即可實現(xiàn)復位,復位后單片機的各狀態(tài)都恢復到初始化狀態(tài),其電路圖如圖4所示:</p><p><b>  圖2-3 復位電路</b></p><p>  值得注意的是,在設(shè)計當中使用到了硬件復位和軟件復位兩種功能,由上面的硬件復位后的各狀態(tài)可知寄存器及存儲器的值都恢復到了初始值,而前面的功能介紹中提到了倒計時時間的記憶功能,該功能的實現(xiàn)的前提條件就是不能對單片

31、機進行硬件復位,所以設(shè)定了軟復位功能。軟復位實際上就是當程序執(zhí)行完畢之后,將程序指針通過一條跳轉(zhuǎn)指令讓它跳轉(zhuǎn)到程序執(zhí)行的起始地址。</p><p>  2.1.4 顯示電路的設(shè)計</p><p>  顯示功能與硬件關(guān)系極大,當硬件固定后,如何在不引起操作者誤解的前提下提供盡可能豐富的信息,全靠軟件來解決。</p><p>  2.1.5 鍵盤掃描電路的設(shè)計<

32、;/p><p>  鍵盤是人與微機系統(tǒng)打交道的主要設(shè)備。關(guān)于鍵盤硬件電路的設(shè)計方法也可以在文獻和書籍中找到,配合各種不同的硬件電路,這些書籍中一般也提供了相應的鍵盤掃描程序。站在系統(tǒng)監(jiān)控軟件設(shè)計的立場上來看,僅僅完成鍵盤掃描,讀取當前時刻的鍵盤狀態(tài)是不夠的,還有不少問題需要妥善解決,否則,人們在操作鍵盤就容易引起誤操作和操作失控現(xiàn)象。在單片機應用中鍵盤用得最多的形式是獨立鍵盤及矩陣鍵盤。</p><

33、;p><b>  圖2-4 獨立鍵盤</b></p><p>  它們各有自己的特點,其中獨立鍵盤硬件電路簡單,而且在程序設(shè)計上也不復雜,一般用在對硬件電路要求不高的簡單電路中;矩陣鍵盤與獨立鍵盤有很大區(qū)別,首先在硬件電路上它要比獨立鍵盤復雜得多,而且在程序算法上比它要煩瑣,但它在節(jié)省端口資源上有優(yōu)勢得多,因此它更適合于多按鍵電路。其次就是消除在按鍵過程中產(chǎn)生的“毛刺”現(xiàn)象。這里采用最

34、常用的方法,即延時重復掃描法,延時法的原理為:因為“毛刺”脈沖一般持續(xù)時間短,約為幾ms,而我們按鍵的時間一般遠遠大于這個時間,所以當單片機檢測到有按鍵動靜后再延時一段時間(這里我們?nèi)?0ms)后再判斷此電平是否保持原狀態(tài),如果是則為有效按鍵,否則無效。</p><p><b>  2.1.6 發(fā)聲</b></p><p>  我們知道,聲音的頻譜范圍約在幾十到幾千

35、赫茲,若能利用程序來控制單片機某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào),使喇叭發(fā)出不同的聲音。</p><p>  2.1.7 系統(tǒng)復位</p><p>  使CPU進入初始狀態(tài),從0000H地址開始執(zhí)行程序的過程叫系統(tǒng)復位。從實現(xiàn)系統(tǒng)復位的方法來看,

36、系統(tǒng)復位可分為硬件復位和軟件復位。硬件復位必須通過CPU外部的硬件電路給CPU的RESET端加上足夠時間的高電位才能實現(xiàn)。上電復位,人工按鈕復位和硬件看門狗復位均為硬件復位。硬件復位后,各專用寄存器的狀態(tài)均被初始化,且對片內(nèi)通用寄存器的內(nèi)容沒有影響。但是,硬件復位還能自動清除中斷激活標志,使中斷系統(tǒng)能夠正常工作,這樣一個事實卻容易為不少編碼人員所忽視。軟件復位就是用一系列指令來模擬硬件復位功能,最后通過轉(zhuǎn)移指令使程序從0000H地址開始

37、執(zhí)行。對各專用寄存器的復位操作是容易的,也沒有必要完全模擬,可根據(jù)實際需要去主程序初始化過程中完成。而對中斷激活標志的清除工作常被遺忘,因為它沒有明確的位地址可供編程。有的編程人員用020000(LJMP 0000H)作為軟件陷阱,認為直接轉(zhuǎn)向0000H地址就完成了軟件復位,就是這類錯誤的典型代表。軟件復位是使用軟件陷阱和軟件看門狗后必須進行的工作,這時程序出錯完全有可能發(fā)生在中斷子程序中,中斷激活標志已置位,它將阻止同級中斷響應。

38、由于軟件看門是高級中斷,它</p><p>  在所有的指令中,只有RETI指令能夠清除中斷激活標志。前文各處提案到的出錯處理程序ERR主要完成這一功能,其他的善后工作交由復位后的系統(tǒng)去完成。這部分程序如下:</p><p>  POWER DATA 67H ;上電標志存放單元 </p><p>  ERR: CLR

39、 EA ;關(guān)中斷</p><p>  MOV DPTR,#ERR1 ;準備返回地址</p><p>  PUSH DPL</p><p>  PUSH DPH</p><p>  RETI ;清除高級中斷激活標志</p><p>  ERR1: MOV PO

40、WER,#0AAH;重建上電標志</p><p>  CLR A ;準備復位地址</p><p>  PUSH ACC ;壓入復位地址0000H</p><p>  PUSH ACC</p><p>  RETI ;清除低級中斷激活標志,從程序0000H開始執(zhí)行。</p>&l

41、t;p>  這段程序先關(guān)中斷,以便后續(xù)處理能順利進行,然后用兩個RETI指令代替兩個LJMP指令,從而清除了兩級中斷激活標志。有相應軟件陷阱捕捉來的程序可能沒有全部激活兩個標志,這也無妨。</p><p><b>  系統(tǒng)軟件設(shè)計</b></p><p>  軟件任務分析和硬件電路設(shè)計結(jié)合進行,哪些功能由硬件完成,哪些任務由軟件完成,在硬件電路設(shè)計基本定型后,也

42、就基本上決定下來了。</p><p><b>  主程序系統(tǒng)結(jié)構(gòu)圖</b></p><p>  圖2-5 軟件系統(tǒng)結(jié)構(gòu)圖</p><p><b>  程序流程圖</b></p><p>  在本設(shè)計中包括了以下八個主要的程序:主程序;非法搶答序;搶答時間調(diào)整程序;回答時間調(diào)整程序;倒計時程序;正常搶

43、答處理程序;犯規(guī)處理程序;顯示及發(fā)聲程序。主流程圖如2-6所示:</p><p>  圖2-6 程序設(shè)計流程圖</p><p><b>  系統(tǒng)程序</b></p><p>  OK EQU 20H;搶答開始標志位</p><p>  RING EQU 22H;響鈴標志位</p><p><

44、b>  ORG 0000H</b></p><p><b>  AJMP MAIN</b></p><p><b>  ORG 0003H</b></p><p>  AJMP INT0SUB</p><p><b>  ORG 000BH</b></p

45、><p>  AJMP T0INT</p><p><b>  ORG 0013H</b></p><p>  AJMP INT1SUB</p><p><b>  ORG 001BH</b></p><p>  AJMP T1INT</p><p>&l

46、t;b>  ORG 0040H</b></p><p>  MAIN: MOV R1,#0FH; 初設(shè)搶答時間為15s</p><p>  MOV R2,#0AH; 初設(shè)答題時間為10s</p><p>  MOV TMOD,#11H; 設(shè)置未定時器/模式1</p><p>  MOV TH0,#0F0H</p>

47、;<p>  MOV TL0,#0FFH; 越高發(fā)聲頻率越高,越尖</p><p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H; 50ms為一次溢出中斷</p><p><b>  SETB EA</b></p><p><b>  SETB ET0</b&

48、gt;</p><p><b>  SETB ET1</b></p><p><b>  SETB EX0</b></p><p>  SETB EX1; 允許四個中斷,T0/T1/INT0/INT1</p><p><b>  CLR OK</b></p>&l

49、t;p><b>  CLR RING</b></p><p><b>  SETB TR1</b></p><p>  SETB TR0; 一開始就運行定時器,以開始顯示FFF.如果想重新計數(shù),重置TH1/TL1就可以了</p><p><b>  查詢程序:</b></p>&l

50、t;p>  START: MOV R5,#0BH</p><p>  MOV R4,#0BH</p><p>  MOV R3,#0BH</p><p>  ACALL DISPLAY; 未開始搶答時候顯示FFF</p><p>  JB P1.0,NEXT</p><p>  ACALL DELAY<

51、;/p><p>  JB P1.0,NEXT;去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢</p><p>  ACALL BARK;按鍵發(fā)聲</p><p><b>  MOV A,R1</b></p><p>  MOV R6,A; 送R1->R6,因為R1中保存了搶答時間<

52、/p><p>  SETB OK; 搶答標志位,用于COUNT只程序中判斷是否查詢搶答</p><p>  MOV R3,0AH; 搶答只顯示計時,滅號數(shù)</p><p>  AJMP COUNT;進入倒計時程序,"查詢有效搶答的程序"在COUNT里面</p><p>  NEXT: JNB P1.1,FALSE1<

53、/p><p>  JNB P1.2,FALSE2</p><p>  JNB P1.3,FALSE3</p><p>  JNB P1.4,FALSE4</p><p>  JNB P1.5,FALSE5</p><p>  JNB P1.6,FALSE6</p><p>  AJMP START&

54、lt;/p><p><b>  非法搶答處理程序:</b></p><p>  FALSE1: ACALL BARK; 按鍵發(fā)聲</p><p>  MOV R3,#01H</p><p>  AJMP ERROR</p><p>  FALSE2: ACALL BARK</p><

55、;p>  MOV R3,#02H</p><p>  AJMP ERROR</p><p>  FALSE3: ACALL BARK</p><p>  MOV R3,#03H</p><p>  AJMP ERROR</p><p>  FALSE4: ACALL BARK</p><p&g

56、t;  MOV R3,#04H</p><p>  AJMP ERROR</p><p>  FALSE5: ACALL BARK</p><p>  MOV R3,#05H</p><p>  AJMP ERROR</p><p>  FALSE6: ACALL BARK</p><p>  

57、MOV R3,#06H</p><p>  AJMP ERROR</p><p>  INT0(搶答時間R1調(diào)整程序):</p><p>  INT0SUB:MOV A,R1</p><p>  MOV B,#0AH</p><p><b>  DIV AB</b></p><

58、p><b>  MOV R5,A</b></p><p><b>  MOV R4,B</b></p><p>  MOV R3,#0AH</p><p>  ACALL DISPLAY;先在兩個時間LED上顯示R1</p><p>  JNB P3.2,INC0; P3.2為+1s鍵,如按下

59、跳到INCO</p><p>  JNB P3.3,DEC0; P3.3為-1s鍵,如按下跳到DECO</p><p>  JNB P1.7,BACK0; P1.7為確定鍵,如按下跳到BACKO</p><p>  AJMP INT0SUB</p><p>  INC0: MOV A,R1</p><p>  CJ

60、NE A,#63H,ADD0; 如果不是99,R2加1,如果加到99了,R1就置0,重新加起</p><p>  MOV R1,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  ADD0: INC R1</p><p>  ACALL DELA

61、Y1</p><p>  AJMP INT0SUB</p><p>  DEC0: MOV A,R1</p><p>  JZ SETR1;如果R1為0, R1就置99,</p><p><b>  DEC R1</b></p><p>  ACALL DELAY1</p>&l

62、t;p>  AJMP INT0SUB</p><p>  SETR1: MOV R1,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  BACK0: RETI</p><p>  INT1(回答時間R2調(diào)整程序):</p>

63、<p>  INT1SUB:MOV A,R2</p><p>  MOV B,#0AH</p><p><b>  DIV AB</b></p><p><b>  MOV R5,A</b></p><p><b>  MOV R4,B</b></p>

64、<p>  MOV R3,#0AH</p><p>  ACALL DISPLAY</p><p>  JNB P3.2,INC1</p><p>  JNB P3.3,DEC1</p><p>  JNB P1.7,BACK1</p><p>  AJMP INT1SUB</p><p&

65、gt;  INC1: MOV A,R2</p><p>  CJNE A,#63H,ADD1</p><p>  MOV R2,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  ADD1: INC R2</p><p&g

66、t;  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  DEC1: MOV A,R2</p><p><b>  JZ SETR2</b></p><p><b>  DEC R2</b></p><p>  ACALL DEL

67、AY1</p><p>  AJMP INT1SUB</p><p>  SETR2: MOV R2,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  BACK1: RETI</p><p>  倒計時程序(搶答倒計時和

68、回答倒計時都跳到該程序):</p><p>  COUNT: MOV R0,#00H; 重置定時器中斷次數(shù)</p><p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H; 重置定時器</p><p>  RECOUNT: MOV A,R6; R6保存了倒計時的時間,之前先將搶答時間或回答時間給R6</

69、p><p>  MOV B,#0AH</p><p>  DIV AB; 除十分出個位/十位</p><p>  MOV 30H,A; 十位存于(30H)</p><p>  MOV 31H,B; 個位存于(31H)</p><p>  MOV R5,30H; 取十位</p><p&

70、gt;  MOV R4,31H; 取個位</p><p><b>  MOV A,R6</b></p><p>  SUBB A,#07H</p><p>  JNC LARGER;大于5s跳到LARGER,小于等于5s會提醒</p><p><b>  MOV A,R0</b></p>

71、;<p>  CJNE A,#0AH,FULL;1s中0.5s向下運行</p><p><b>  CLR RING</b></p><p>  AJMP CHECK</p><p>  FULL: CJNE A,#14H,CHECK; 下面系1s的情況,響并顯示號數(shù)并清R0,重新計時</p><p>

72、;<b>  SETB RING</b></p><p><b>  MOV A,R6</b></p><p>  JZ QUIT; 計時完畢</p><p>  MOV R0,#00H</p><p>  DEC R6; 一秒標志減1</p><p>  AJMP

73、 CHECK</p><p>  LARGER: MOV A,R0</p><p>  CJNE A,#14H,CHECK; 如果1s向下運行,否者跳到查"停/顯示"</p><p>  DEC R6; 計時一秒R6自動減1</p><p>  MOV R0,#00H</p><p&

74、gt;  CHECK: JNB P1.7,QUIT; 如按下停止鍵退出</p><p>  ACALL DISPLAY</p><p>  JB OK,ACCOUT; 如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用)</p><p>  AJMP RECOUNT</p><p>  ACCOUT: JN

75、B P1.1,TRUE1</p><p>  JNB P1.2,TRUE2</p><p>  JNB P1.3,TRUE3</p><p>  JNB P1.4,TRUE4</p><p>  JNB P1.5,TRUE5</p><p>  JNB P1.6,TRUE6</p><p>  

76、AJMP RECOUNT</p><p>  QUIT: CLR OK; 如果按下了"停止鍵"執(zhí)行的程序</p><p><b>  CLR RING</b></p><p>  AJMP START</p><p><b>  正常搶答處理程序:</b></p>

77、<p>  TRUE1: ACALL BARK; 按鍵發(fā)聲</p><p><b>  MOV A,R2</b></p><p>  MOV R6,A; 搶答時間R2送R6</p><p>  MOV R3,#01H</p><p>  CLR OK; 因為答題的計時不再查詢搶答,所以就鎖了搶答<

78、/p><p>  AJMP COUNT</p><p>  TRUE2:ACALL BARK;</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#02H</p><p

79、><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE3:ACALL BARK;</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><

80、p>  MOV R3,#03H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE4:ACALL BARK;</p><p><b>  MOV A,R2</b></p><p><b> 

81、 MOV R6,A</b></p><p>  MOV R3,#04H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE5: ACALL BARK;</p><p><b>  MOV A,R2<

82、/b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#05H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE6: ACALL BARK;</p&

83、gt;<p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#06H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p>

84、<p><b>  犯規(guī)搶答程序:</b></p><p>  ERROR: MOV R0,#00H</p><p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p>  MOV 34H,R3; 犯規(guī)號數(shù)暫存與(34H)</p><p>  

85、HERE: MOV A,R0</p><p>  CJNE A,#0AH,FLASH; 0.5s向下運行->滅并停響</p><p><b>  CLR RING</b></p><p>  MOV R3,#0AH</p><p>  MOV R4,#0AH</p><p>  MOV

86、 R5,#0AH; 三燈全滅</p><p>  AJMP CHECK1</p><p>  FLASH: CJNE A,#14H,CHECK1; 下面系1s的情況,響并顯示號數(shù)并清R0,重新計</p><p><b>  SETB RING</b></p><p>  MOV R0,#00H</p>

87、<p>  MOV R3,34H; 取回號數(shù)</p><p>  MOV R5,#0BH</p><p>  MOV R4,#0BH; 顯示FF和號數(shù)</p><p>  AJMP CHECK1</p><p>  CHECK1: JNB P1.7,QUIT1</p><p>  ACALL DIS

88、PLAY</p><p><b>  AJMP HERE</b></p><p>  QUIT1: CLR RING</p><p><b>  CLR OK</b></p><p>  AJMP START</p><p><b>  顯示程序:</b&g

89、t;</p><p>  入口參數(shù):R5,R4,R3存入的分別為第一,二,三為數(shù)碼所顯示的位碼</p><p><b>  出口參數(shù):無</b></p><p>  DISPLAY:MOV DPTR,#DAT1; 查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出</p><p><b>  MO

90、V A,R5</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#01H</p><p><b>  MOV P0,A</b></p><p>  ACALL DELAY</p><p>  MOV DPTR,#DAT2</p>

91、<p><b>  MOV A,R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#02H</p><p><b>  MOV P0,A</b></p><p>  ACALL DELAY</p><p><b&

92、gt;  MOV A,R3</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#04H</p><p><b>  MOV P0,A</b></p><p>  ACALL DELAY</p><p><b>  RET</b&

93、gt;</p><p>  DAT1:DB 00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H</p><p>  ;"滅","1","2","3","4","5","6","7",&qu

94、ot;8","9","滅","F"</p><p>  DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H</p><p>  ;第一個為零,其他與上相同,因為十位如果為零顯示熄滅</p><p>  加減時間延時(起到不會按下就加N個數(shù)

95、):</p><p>  DELAY1: MOV 35H,#08H</p><p>  LOOP0: ACALL DISPLAY</p><p>  DJNZ 35H,LOOP0</p><p><b>  RET</b></p><p>  延時(顯示和去抖動用到):</p>&

96、lt;p>  DELAY: MOV 32H,#12H</p><p>  LOOP: MOV 33H,#0AFH</p><p>  LOOP1: DJNZ 33H,LOOP1</p><p>  DJNZ 32H,LOOP</p><p><b>  RET</b></p><p>

97、;<b>  發(fā)聲程序:</b></p><p>  BARK: SETB RING</p><p>  ACALL DELAY1</p><p>  ACALL DELAY1</p><p>  CLR RING; 按鍵發(fā)聲</p><p><b>  RET</b>

98、;</p><p>  TO溢出中斷(響鈴程序):</p><p>  T0INT:MOV TH0,#0ECH</p><p>  MOV TL0,#0FFH</p><p>  JNB RING,OUT</p><p>  CPL P3.6 ; RING標志位為1時候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音&l

99、t;/p><p><b>  OUT:RETI</b></p><p>  T1溢出中斷(計時程序):</p><p>  T1INT: MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p><b>  INC R0</b></p>

100、;<p><b>  RETI</b></p><p><b>  END</b></p><p><b>  第4節(jié) 結(jié)束語</b></p><p>  通過這次學習,讓我深深的了解了單片機這個偉大的系統(tǒng),它的功能是如此強大,利用它就可以做出各種各樣的設(shè)備來,比如電子鐘、交通燈控制系統(tǒng)

101、,溫度控制系統(tǒng)等等,自從學了單片機我對電腦也刮目相看了,電腦跟單片機聯(lián)系在一起就是非常棒了。</p><p>  下面說說我在做個系統(tǒng)的時候遇到的問題:</p><p>  自己對單片機的程度設(shè)計還不是非常得心應手,應該努力惡補一下。</p><p>  對電路不熟悉,對電路的不熟悉在設(shè)計過程中成為了我的絆腳石。</p><p>  編程時不

102、夠仔細,往往一個小錯誤就導致了功能不能實現(xiàn)。</p><p>  除了遇到的問題一一解決之外,我還學到了非常多的東西,我發(fā)現(xiàn)單片機的是非常強大啊,什么事情都能做,我還在設(shè)計之余學習了單片機的目前發(fā)展規(guī)律和市場,希望以后自己在這方面做做文章。</p><p>  在讀書的時候老師就給我們看過他做的電子鐘,那時我就傻掉了,單片機也能做這個東西?但是等老師慢慢的說出步驟后,我也就是覺得不怎么奇怪

103、了,老師能做,我也能做,所以我認真開始跟著老師學習,最終在短學期做了個系統(tǒng),通過這次短學期我學習到很多很多東西。</p><p><b>  參考文獻</b></p><p>  [1] 胡漢才 單片機原理及其接口技術(shù)(第2版) 清華大學出版社 2004</p><p>  [2] 冀振燕 LJML系統(tǒng)分析設(shè)計與應用案例 人民郵電出版社 20

104、03</p><p>  [3] 王文峰 數(shù)碼顯示六路搶答器的設(shè)計 井岡山師范學院學報 2000年05期 20-21</p><p>  [4] 陳越等 ISD全系列單片語音錄放電路設(shè)計與應用 電子工業(yè)出版社 2005</p><p>  [5] 楊曉輝、張彤、姜俊海、智能搶答器的設(shè)計與制作 長春大學學報 2000年06期 24-25</p><

溫馨提示

  • 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

提交評論