基于單片機的畢業(yè)論文_第1頁
基于單片機的畢業(yè)論文_第2頁
基于單片機的畢業(yè)論文_第3頁
基于單片機的畢業(yè)論文_第4頁
基于單片機的畢業(yè)論文_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、西安郵電學院 畢 業(yè) 設 計(論 文)題 目: 基于51單片機的搶答器設計 院 (系): 專 業(yè): 班 級: 學生姓名: 導師姓名: 職稱: 目 錄第一章 搶答器的概述 1.1 系統(tǒng)設計的功能 1.2 搶答器需求分析 1.3 搶答器的工作原理第二章 單片機的功能簡介 2.1 89系列單片機的概述 2.2 AT89S51的功能 TA89S51特殊功能寄存器 AT89S51單片機的內部結構第三節(jié) 硬件電路的設計3.1 總電路原理3.2 時鐘頻率電路的設計3.3 復位電路的設計3.3.1 復位電路的可靠性設計3.3.2 人工復位3.4 顯示電路的設計3.5 控制電路的實現(xiàn)3.6 發(fā)聲3.7 系統(tǒng)復位

2、第四章 軟件設計4.1 軟件任務分析4.2 顯示子程序的設計4.3 定時器T0、T1中斷服務程序的設計4.4 搶答器處理程序的設計4.5 主程序及分析第五章 元器件及焊接調試第六章 設計小結致謝參考文獻摘  要隨著科學技術的發(fā)展和普及,各種各樣的競賽越來越多,其中搶答器的作用也就顯而易見。目前很多搶答器基本上采用小規(guī)模數(shù)字集成電路設計,使用起來不夠理想。因此設計一更易于使用和區(qū)分度高的搶答器成了非常迫切的任務。現(xiàn)在單片機已進入各個領域,以其功耗小、智能化而著稱,所以若利用單片機來設計搶答器,便使以上問題得以解決.針對以上情況,本文設計出以AT89S51單片機為核心的八路搶答器。我們采

3、用了數(shù)字顯示器直接指示,自動鎖存顯示結果,并自動復位的設計思想,它能根據(jù)不同的搶答輸入信號,經(jīng)過單片機的控制處理并產(chǎn)生不同的與輸入信號相對應的輸出信號,最后通過LED數(shù)碼管顯示相應的路數(shù),即使兩組的搶答時間相差幾微秒,也可分辨出是哪組優(yōu)先按下的按鍵,它充分利用了單片機系統(tǒng)的優(yōu)點,具有結構簡單、功能強大、可靠性好、實用性強的特點。本設計是以八路搶答為基本理念。考慮到依需設定限時回答的功能,利用89S51單片機及外圍接口實現(xiàn)的搶答系統(tǒng),利用單片機的定時器/計數(shù)器定時和記數(shù)的原理,將軟、硬件有機地結合起來,使得系統(tǒng)能夠正確地進行計時,同時使數(shù)碼管能夠正確地顯示時間。用開關做鍵盤輸出,揚聲器發(fā)生提示。

4、同時系統(tǒng)能夠實現(xiàn):在搶答中,只有開始后搶答才有效,如果在開始搶答前搶答為無效;滿時后系統(tǒng)計時自動復位及主控強制復位;按鍵鎖定,在有效狀態(tài)下,按鍵無效非法。 第一章 搶答器的概述1.1 系統(tǒng)設計的功能1.基本功能:(1) 同時供8名選手比賽,分別用8個按鈕S0 S7表示。(2)設置一個系統(tǒng)清除和搶答控制開關S,該開關由主持人控制。(3)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,揚聲器發(fā)出聲響提示,并在七段數(shù)碼管上顯示選手號碼。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。2.擴展功能:(1)搶答器具有定時搶答功能,且一次搶答的時間由主持人設定(如30秒)

5、。當主持人啟動"開始"鍵后,定時器進行減計時。(2)參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。在這段(3)如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。1.2 搶答器的需求分析1、在搶答中,只有開始后搶答才有效,如果在開始搶答前搶答為無效。2、搶答限定時間和回答問題的時間可是在199s設定。3、可以顯示是哪位選手有效搶答和無效搶答,正確按鍵后有音樂提示。4、搶答時間和回答問題時間倒記時顯示,時間完后系統(tǒng)自動復位。5、按鍵鎖定,在有效狀態(tài)下,按鍵無效非法。1

6、.3 搶答的工作過程圖2-4搶答器電路表2-1 74LS148的功能真值表1、如果想調節(jié)搶答時間或答題時間,按"加一"鍵或"減一"鍵進入調節(jié)狀態(tài),此時會顯示現(xiàn)在設定的搶答時間或回答時間值,如想加一秒按一下"加1s"鍵,如果想減一秒按一下"減1s"鍵,時間LED上會顯示改變后的時間,調整范圍為099s, 0s時再減1s會跳到99,99s時再加1s會變到0s。2、主持人按"搶答開始"鍵,會有提示音,并立刻進入搶答倒計時(預設20s搶答時間),如有選手搶答,會有提示音,并會顯示其號數(shù)并立刻進入回答倒計

7、時(預設20s搶答時間),不進行搶答查詢,所以只有第一個按搶答的選手有效。3、如倒計時期間,主持人想停止倒計時可以隨時按"停止"按鍵,系統(tǒng)會自動進入準備狀態(tài),等待主持人按"搶答開始"進入下次搶答計時。4、如果主持人未按"搶答開始"鍵,而有人按了搶答按鍵,犯規(guī)搶答,LED上不顯示任何結果,直到按下"停止" 鍵為止。1.4 搶答器的工作原理及流程搶答器的基本工作原理:在搶答競賽或呼叫時2,有多個信號同時或不同時送入主電路中,搶答器內部的寄存器工作,并識別、記錄第一個號碼,同時內部的定時器開始工作,記錄有關時間并產(chǎn)生超時

8、信號。在整個搶答器工作過程中,顯示電路、語音電路等還要根據(jù)現(xiàn)場的實際情況向外電路輸出相應信號。搶答器的工作流程分為、系統(tǒng)復位、正常流程、違例流程等幾部分,如圖2-2所示,下面分別予以介紹。第二章 單片機的功能簡介2.1 89系列單片機的概況MCS-51 單片機是美國INTE 公司于1980 年推出的產(chǎn)品,典型產(chǎn)品有 80 31(內部沒有程序存儲器,實際使用方面已經(jīng)被市場淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51 的5 倍,實際使用方面已經(jīng)被市場淘汰)和8751 等通用產(chǎn)品,一直到現(xiàn)在, MCS-5 1 內核系列兼容的單片機仍是應用的主流產(chǎn)品(比如目前流行的89S51、已

9、經(jīng)停產(chǎn)的89C51 等),各高校及專業(yè)學校的培訓教材仍與MCS-51 單片機作為代表進行理論基礎學習。有些文獻甚至也將8051 泛指MCS-51 系列單片機,8051 是早期的最典型的代表作,由于MCS-51 單片機影響極深遠,許多公司都推出了兼容系列單片機,就是說MCS-51 內核實際上已經(jīng)成為一個8 位單片機的標準。其他的公司的51 單片機產(chǎn)品都是和MCS-51 內核兼容的產(chǎn)品而以。同樣的一段程序,在各個單片機廠家的硬件上運行的結果都是一樣的,如ATMEL 的89C51(已經(jīng)停產(chǎn))、89S51, PHILIPS(菲利浦),和WINBOND(華邦)等,我們常說的已經(jīng)停產(chǎn)的89C51 指的是A

10、TMEL公司的 AT 89C51 單片機,同時是在原基礎上增強了許多特性,如時鐘,更優(yōu)秀的是由Flash(程序存儲器的內容至少可以改寫 1000 次)存儲器取帶了原來的 ROM(一次性寫入),AT89C51 的性能相對于8051 已經(jīng)算是非常優(yōu)越的了。不過在市場化方面,89C51 受到了PIC 單片機陣營的挑戰(zhàn),89C51 最致命的缺陷在于不支持ISP(在線更新程序)功能,必須加上ISP 功能等新功能才能更好延續(xù)MCS-51 的傳奇。89S51就是在這樣的背景下取代89C51 的,現(xiàn)在,89S51 目前已經(jīng)成為了實際應用市場上新的寵兒,作為市場占有率第一的Atmel 目前公司已經(jīng)停產(chǎn)AT89C

11、51,將用AT89S51 代替。89S51 在工藝上進行了改進,89S51 采用 0.35 新工藝,成本降低,而且將功能提升,增加了競爭力。89SXX 可以像下兼容89CXX 等51 系列芯片。市場上見到的89C51 實際都是Atmel 前期生產(chǎn)的巨量庫存而以。如果市場需要,Atmel當然也可以再恢復生產(chǎn)AT89C51。 AT89S51/LS51單片機是低功耗的、具有4KB在線課編程Flash存儲器的單片機。它與通用80C51系列單片機的指令系統(tǒng)和引腳兼容。片內的Flash可允許在線重新編程,也可使用非易失性存儲器編程。他將通用CPU和在線可編程Flash集成在一個芯片上,形成了功能強大、使用

12、靈活和具有較高性能性價比的微控制器。2.2 AT89S51的功能 2.2.1 AT89S51特殊功能寄存器特殊功能寄存器也稱專用寄存器,是具有特殊功能的所有寄存器的集合,簡稱SFR(Special Function Register)。特殊功能寄存器共含有22個不同寄存器。它們的地址分配在80HFFH中,即在RAM地址中。這些寄存器的名稱和地址見表2-2。表2-1器件選型方案的詳細清單器件名稱 規(guī)格型號 數(shù)量微處理器 AT89S51 1電阻 3WTT10K 8電容 30PF 3晶振 12MHZ 1按鈕 - 11反相器 - 37段數(shù)碼管 7SEG-MPX4CC 4 揚聲器 - 1 雖然特殊功能寄

13、存器地址在80HFFH之中,但在80HFFH的地址單元中,不是所有的單元都被特殊功能寄存器占用,未被占用的單元,其內容是不確定的,如果對這些單元進行操作,得到的是一些隨機數(shù),而寫入則無效。所以,用戶編程時不應該將數(shù)據(jù)寫入這些未確定的地址單元,它們是公司留待將來開發(fā)新產(chǎn)品時使用的表2-2 AT89S51特殊功能寄存器列表符號地址注釋*ACCE0H累加器*BF0H乘法寄存器*PSWD0H程序狀態(tài)字SP81H堆棧指針DPL82H數(shù)據(jù)存儲器指針低8位DPH83H數(shù)據(jù)存儲器指針高8位*IEA8H中斷允許控制器*IPD8H中斷優(yōu)先控制器*P080H端口0*P190H端口1*P2A0H端口2*P3B0H端口

14、3PCON87H電源控制及波特率選擇*SCON98H串行口控制器SBUF99H串行數(shù)據(jù)緩沖器*TCON88H定時器控制TMOD89H定時器方式選擇TL08AH定時器0低8位TL18BH定時器1低8位TH08CH定時器0低8位TH18DH定時器1高8位注:帶*號的特殊功能寄存器都是可以位尋址的寄存器2.2.2 AT89S51單片機的內部結構AT89S51單片機內部由CPU、4KB的FPEROM ,128B的RAM,兩個16位的定時/計數(shù)器T0和T1,4個8位的I/O端P0、P1、P2、P3等組成。單片微機內部最核心的部分是CPU。CPU主要功能是產(chǎn)生各種控制信號,控制存儲器、輸入/輸出端口的數(shù)據(jù)

15、傳輸、數(shù)據(jù)的算術運算、邏輯運算以及位操作處理等,CPU按其功能可分為運算器和控制器兩部分??刂破饔沙绦蛴嫈?shù)器PC、指令儲存器、指令譯碼器、實時控制與條件轉移邏輯電路等組成。它的功能是對來自存儲器中的指令進行譯碼,通過實時控制電路,在規(guī)定的時刻發(fā)出各種操作所需的內部和外部的控制信號,使各部分協(xié)調工作,完成指令所規(guī)定的操作。運算器由算術邏輯器部件ALU、累加器ACC、暫存器、程序狀態(tài)字寄存器PSW,BCD碼運算調整電路等組成。外部定時元件復位中斷電源系統(tǒng)時鐘ROMCPU定時/計數(shù)器串行I/O口并行I/O口RAM圖2-3 AT89S51單片機的內部結構圖為了提高數(shù)據(jù)處理和位操作功能,片內增加了一個通

16、用寄存器B和一些專用寄存器,還增加了位處理邏輯電路的功能3。其內部結構如圖2-3所示。 第三章 硬件電路的設計3.1 總電路原理為使硬件電路設計盡可能合理,應注意以下幾方面:(1) 盡可能采用功能強的芯片,以簡化電路,功能強的芯片可以代替若干普通芯片,隨著生產(chǎn)工藝的提高,新型芯片的的價格不斷下降,并不一定比若干普通芯片價格的總和高。(2) 留有設計余地。在設計硬件電路時,要考慮到將來修改擴展的方便。因為很少有一錘定音的電路設計,如果現(xiàn)在不留余地,將來可能要為一點小小的修改或擴展而被迫進行全面返工。(3) 程序空間,選用片內程序空間足夠大的單片機,本設計采用AT89C51單片機。(4) RAM空

17、間,AT89S51內部RAM不多,當要增強軟件數(shù)據(jù)處理功能時,往往覺得不足。如果系統(tǒng)配置了外部RAM,則建議多留一些空間。如選用8155作I/O接口,就可以增強256字節(jié)RAM.如果有大批數(shù)據(jù)需要處理,則應配置足夠的RAM,如6264,62256等。隨著軟件設計水平的提高,往往只要改變或增加軟件中的數(shù)據(jù)處理算法,就可以使系統(tǒng)功能提高很多,而系統(tǒng)的硬件不必做任何更換就使系統(tǒng)升級換代。只要在硬件電路設計初期考慮到這一點,就應該為系統(tǒng)將來升級留足夠的RAM空間,哪怕多設計一個RAM的插座,暫不插芯片也好。(5) I/O端口:在樣機研制出來后進行現(xiàn)場試用時,往往會發(fā)現(xiàn)一些被忽視的問題,而這些問題不是靠

18、單純的軟件措施來解決的。如有些新的信號需要采集,就必須增加輸入檢測端;有些物理量需要控制,就必須增加輸出端。如果在硬件電路設計就預留出一些I/O端口,雖然當時空著沒用,那么用的時候就派上用場了。P2.4為開始搶答9,P2.5為加分,P2.6為減分,P1.0-P1.7為六八搶答輸入,數(shù)碼管段選P0口,位選P2口低3位,蜂鳴器輸出為P2.7口。 3.2 時鐘頻率電路的設計時鐘電路是計算機的心臟,它控制著計算機的工作節(jié)奏。MCS-51單片機允許的時鐘頻率是因型號而異的。晶振的選擇:6MHz的晶振,其機器周期是2us。12MHz的晶振,其機器周期是1us, 也就是說在執(zhí)行同一條指令時用6MHz的晶振所

19、用的時間是12MHz晶振的兩倍。為了提高整個系統(tǒng)的性能我選擇了12MHz的晶振。振蕩方式的選擇:內部振蕩方式,MCS-51內部都有一個反相放大器,XTAL1、XTAL2分別為反相放大器輸入和輸出端,外接定時反饋元件以后就組成振蕩器,產(chǎn)生時鐘送至單片機內部的各個部件。這樣就構成了內部振蕩方式外部振蕩方式是把已有的時鐘信號引入單片機內。這種方式適合用來使單片機的時鐘與外部信號一致。在我的這個設計中沒有也無需與外部時鐘信號一致,所以我選擇了內部振蕩方式,由于單片機內部有一個高增益反相放大器,當外接晶振后,就構成了自激振蕩器并產(chǎn)生振蕩時鐘脈沖。晶振我選擇了12MHz,相對于6MHz的晶振,整個系統(tǒng)的運

20、行速度更快了。電容器C1、C2起穩(wěn)定振蕩頻率、快速起振的作用,電容值我選擇了30pF。內部振蕩方式所得的時鐘信號穩(wěn)定性高。 圖3-2時鐘電路的設計單片機必須在時鐘的驅動下才能工作.在單片機內部有一個時鐘振蕩電路,只需要外接一個振蕩源就能產(chǎn)生一定的時鐘信號送到單片機內部的各個單元,決定單片機的工作速度。一般選用石英晶體振蕩器。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產(chǎn)生幅度為3V左右的正弦波時鐘信號,其振蕩頻率主要由石英晶振的頻率確定。電路中兩個電容 C1,C2的作用有兩個:一是幫助振蕩器起振;二是對振蕩器的頻率進行微調。C1,C2的典型值為30PF。單片機在工作時,由內部振蕩

21、器產(chǎn)生或由外直接輸入的送至內部控制邏輯單元的時鐘信號的周期稱為時鐘周期。其大小是時鐘信號頻率的倒數(shù),常用fosc表示。如時鐘頻率為12MHz,即fosc=12MHz,則時鐘周期為1/12µs。3.3 復位電路的設計 復位電路的可靠性設計計算機在啟動運行是都需要復位,使中央處理器CPU和系統(tǒng)中的其它部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。MCS-51的復位輸入引腳RST為MCS-51提供了初始化的手段,可以使程序從指定處開始執(zhí)行,在MCS-51的時鐘電路工作后,只要RST引腳上出現(xiàn)超過兩個機器周期以上的高電平時,即可產(chǎn)生復位的操作。只要 RST保持高電平,則MCS-51循環(huán)

22、復位。只有當RST由高電平變低電平以后,MCS-51才從0000H地址開始執(zhí)行程序。本系統(tǒng)采用按鍵復位方式的復位電路。MCS-51單片機有一個復位引腳RST,它是施密特觸發(fā)輸入,當振蕩器起振后,該引腳上出現(xiàn)2個機器周期(即24個時鐘周期)以上的高電平。使器件復位,只要RST保持高電平,MCS-51保持復位狀態(tài)。此時ALE、/PSEN、P0、P1、P2、P3口都輸出高電平。RST變?yōu)榈碗娖胶?,退出復位,CPU從初始狀態(tài)開始工作。復位以后內部寄存器的初始狀態(tài)為(SP=07,P0、P1、P2、P3為0FFH外,其它寄存器都為0。在RST復位端接一個電容至VccHE 一個電阻至Vss,就能實現(xiàn)上電自動

23、復位,對于CMOS單片機只要接一個電容至Vcc即可。如圖,在加電瞬間,電容通過電阻充電,就在RST端出現(xiàn)一定時間的高電平,只要高電平時間足夠長,就可以使MCS-51有效地復位。RST端在加電時應保持的高電平時間包括Vcc的上升時間和振蕩器起振時間,Vcc上升時間若為10ms,振蕩器起振時間和頻率有關。10MHz時間約為1ms,1MHz時約為10ms,所以一般為了可靠地復位,RST在上電時應保持20ms以上的高電平。圖2.5中,RC時間常數(shù)越大,上電時RST端保持高電平的時間越長。當振蕩頻率為12MHZ時,典型值為C=10uF,R=8.2k. 圖3-3上電復位電路人工復位除上電自動復位以外,常常

24、需要人工復位,將一個按鈕開關并聯(lián)于上電自動復位電路,按一下開關就RST端出現(xiàn)一段時間的高電平,即使器件復位。如圖所示圖3-4上電和開關復位而我們在這次的畢業(yè)設計中運用的人工復位電路. 其中電平復位是通過RST端經(jīng)電阻和電源Vcc接通而實現(xiàn)的,按鍵手動電平復位電路如圖。當時鐘頻率選用12MHz時,C選取10uF,R選擇1000歐。3.4 顯示電路的設計顯示功能與硬件關系極大,當硬件固定后,如何在不引起操作者誤解的前提下提供盡可能豐富的信息,全靠軟件來解決。 顯示模塊在系統(tǒng)硬件中的安排操作者主要設計從顯示設備上獲取微機系統(tǒng)的信息的,因此,操作者每操作一下,顯示設備商都應該有一定的反應。這說明,顯示

25、模塊與操作有關,即監(jiān)控程序是需要調用顯示模塊。不同的操作需要顯示不同的內容,這又說明各執(zhí)行模塊對顯示模塊的驅動方式是不同的。另一方面,在操作者沒有進行操作時,顯示內容也是變化的,如顯示現(xiàn)場各物理量的變化情況。這時顯示模塊不是由操作者通過命令鍵來驅動,而是由各類自動執(zhí)行的功能模塊來驅動。自動執(zhí)行的各類模塊在安排在各種中斷子程序中,這就是說,各種中斷子程序也要調用顯示模塊。如果監(jiān)控安排在中斷子程序中,兩者的要求就統(tǒng)一了,問題比較好解決,如果監(jiān)控程序安排在主程序中,在監(jiān)控程序調用顯示模塊的過程中發(fā)生了中斷,中斷子程序也調用顯示模塊,這時就容易出問題。一種比較妥善的辦法是只讓一處調用顯示模塊,其他各處

26、均不得直接調用顯示模塊,但有權申請顯示。這就要設置一個顯示申請標志,當某模塊需要顯示時,將申請標志置位,同時設定有關顯示內容(或指針)。由于一處調用顯示模塊,故不會發(fā)生沖突。為了使顯示模塊能及時反應系統(tǒng)需要,應將顯示模塊安排在一個重復執(zhí)行的循環(huán)(如監(jiān)控循環(huán)或時鐘中斷子程序)中。當監(jiān)控程序(鍵盤解釋程序)安排在時鐘中斷子程序中時,處理比較方便,只要在監(jiān)控程序的匯合處調用顯示模塊就可以了。這里將顯示功能集中到一起,作為一個功能模塊,就要求它的功能全面,能根據(jù)系統(tǒng)軟件提供的信息自動完成顯示內容的查找,變換和輸出驅動。這樣設計使得各功能模塊都不必考慮顯示問題,只要給出一個簡單的信息(如顯示格式編碼)甚

27、至不用再提供額外信息,直接利用當前狀態(tài)變量和軟件標志就可以完成所需的顯示要求。如果編寫這樣一個集中顯示模塊有困難,也可以將顯示模塊編小一些,只完成顯示緩沖區(qū)的內容輸出到顯示器件上的工作。這時各功能模塊在提出顯示申請時,還需要將顯示內容按需要的格式送入顯示緩沖區(qū)中。這樣分而治之比較容易編程,但要小心出現(xiàn)顯示混亂。例如后臺程序需要調用顯示,將有關信息送入到現(xiàn)實緩沖區(qū)進行顯示;中斷返回后,后臺程序繼續(xù)送完后半部分顯示內容,但前半部分內容已經(jīng)變了,這樣就出現(xiàn)了顯示錯誤。解決的辦法是,在申請顯示前,先檢查是否已經(jīng)有顯示申請,如果有,就不再申請,等待下次機會;如果沒有,則先申請標志位,再將顯示內容送入顯示

28、緩沖區(qū)。這時就不必擔心其他前臺模塊來打擾了,就可以得到一次完整的顯示機會。在這里我們使用的是七段數(shù)碼管顯示,通常在顯示6上我們采用的方法一般包括兩種:一種是靜態(tài)顯示,一種是動態(tài)顯示。其中靜態(tài)顯示的特點是顯示穩(wěn)定不閃爍,程序編寫簡單,但占用端口資源多;動態(tài)顯示的特點是顯示穩(wěn)定性沒靜態(tài)好,程序編寫復雜,但是相對靜態(tài)顯示而言占用端口資源少。在本設計中根據(jù)實際情況采用的是動態(tài)顯示方法。并通過查表法,將其在數(shù)碼管上顯示出來,其中P0口為字型碼輸入端,P2口低3位為字選段輸入端。在這里我們通過查表將字型碼送給7段數(shù)碼管顯示的數(shù)字,數(shù)碼管顯示原理如下: MOV A,R5 MOVC A,A+DPTR ;查字型

29、碼 MOV P2,#01H ;送位選碼 MOV P0,A ;送字型碼ACALL DELAY ;調延時,去閃爍在七段數(shù)碼管顯示中可分為共陽極和共陰極兩種類型極。以共陰為例,要想a段亮,向a段送1就是,返之送0,共陽剛好相反。3.5 掃描電路的實現(xiàn)鍵盤是人與微機系統(tǒng)打交道的主要設備。關于鍵盤硬件電路的設計方法也可以在文獻和書籍中找到,配合各種不同的硬件電路,這些書籍中一般也提供了相應的鍵盤掃描程序。站在系統(tǒng)監(jiān)控軟件設計的立場上來看,僅僅完成鍵盤掃描,讀取當前時刻的鍵盤狀態(tài)是不夠的,還有不少問題需要妥善解決,否則,人們在操作鍵盤就容易引起誤操作和操作失控現(xiàn)象。在單片機應用中鍵盤用得最多的形式是獨立鍵

30、盤及矩陣鍵盤。 它們各有自己的特點,其中獨立鍵盤硬件電路簡單,而且在程序設計上也不復雜,一般用在對硬件電路要求不高的簡單電路中;矩陣鍵盤與獨立鍵盤有很大區(qū)別,首先在硬件電路上它要比獨立鍵盤復雜得多,而且在程序算法上比它要煩瑣,但它在節(jié)省端口資源上有優(yōu)勢得多,因此它更適合于多按鍵電路。其次就是消除在按鍵過程中產(chǎn)生的“毛刺” 現(xiàn)象。這里采用最常用的方法,即延時重復掃描法,延時法的原理為:因為“毛刺”脈沖一般持續(xù)時間短,約為幾ms,而我們按鍵的時間一般遠遠大于這個時間,所以當單片機檢測到有按鍵動靜后再延時一段時間(這里我們取10ms)后再判斷此電平是否保持原狀態(tài),如果是則為有效按鍵,否則無效。 按鈕

31、輸入的硬件處理按鈕的觸點在閉合和斷開時均會產(chǎn)生抖動,這是觸點的邏輯電平是不穩(wěn)定的,如不妥善處理,將會引起按鍵命令的錯誤執(zhí)行或重復執(zhí)行?,F(xiàn)在一般均用軟件延時的方法來避開抖動階段,這一延時過程一般大于5ms,例如取10-20ms。如果監(jiān)控程序中的讀鍵操作安排在主程序(后臺程序)或鍵盤中斷(外部中斷)子程序中,則該延時子程序便可直接插入讀鍵過程中。如果讀鍵過程安排在定時中斷子程序中,就可省去專門的延時子程序,利用兩次定時中斷的時間間隔來完成抖動處理。3.6 發(fā)聲我們知道,聲音的頻譜范圍約在幾十到幾千赫茲7,若能利用程序來控制單片機某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接

32、上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調,使喇叭發(fā)出不同的聲音。3.7 系統(tǒng)復位使CPU進入初始狀態(tài),從0000H地址開始執(zhí)行程序的過程叫系統(tǒng)復位。從實現(xiàn)系統(tǒng)復位的方法來看,系統(tǒng)復位可分為硬件復位和軟件復位。硬件復位必須通過CPU外部的硬件電路給CPU的RESET端加上足夠時間的高電位才能實現(xiàn)。上電復位,人工按鈕復位和硬件看門狗復位均為硬件復位。硬件復位后,各專用寄存器的狀態(tài)均被初始化,且對片內通用寄存器的內容沒有影響。但是,硬件復位還能自動清除中斷激活標志,使中斷系統(tǒng)能夠正常工作,這樣一個事實卻容易為不少編碼人員所忽視。軟件

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

34、所有的指令中,只有RETI指令能夠清除中斷激活標志。前文各處提案到的出錯處理程序ERR主要完成這一功能,其他的善后工作交由復位后的系統(tǒng)去完成。有復位時系統(tǒng)的歷史狀況,可將復位分為“冷啟動”和“熱啟動”。 “冷啟動”時,系統(tǒng)的狀態(tài)全部無效,進行徹底的初始化操作;而“熱啟動”時,對系統(tǒng)的當前狀態(tài)進行修復和有選擇的初始化。系統(tǒng)初次上電投入運行時,必須是“冷啟動”,以后由抗干擾措施引起的復位操作一般均為“熱啟動”初次上電投入運行時,必須是“冷啟動”,以后由抗干擾措施引起的復位操作一般均為“熱啟動”。復位關中斷,設定堆棧上電標志冷啟自檢全面初始化熱啟動恢復被破壞的信息部分初始化建立上電標志開始運轉為了使

35、系統(tǒng)能正確決定采用何種啟動方式,常用上電標志來區(qū)分,如圖3-6所示。圖3-6 系統(tǒng)復位策略圖第四章 軟件設計4.1 軟件任務分析軟件任務分析和硬件電路設計結合進行,哪些功能由硬件完成,哪些任務由軟件完成,在硬件電路設計基本定型后,也就基本上決定下來了。軟件任務分析環(huán)節(jié)是為軟件設計做一個總體規(guī)劃。從軟件的功能來看可分為兩大類:一類是執(zhí)行軟件,它能完成各種實質性的功能,如測量,計算,顯示,打印8,輸出控制和通信等,另一類是監(jiān)控軟件,它是專門用來協(xié)調各執(zhí)行模塊和操作者的關系,在系統(tǒng)軟件中充當組織調度角色的軟件。這兩類軟件的設計方法各有特色,執(zhí)行軟件的設計偏重算法效率,與硬件關系密切,千變萬化。軟件任

36、務分析時,應將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進行功能定義和接口定義(輸入輸出定義)。在各執(zhí)行模塊進行定義時,將要牽扯到的數(shù)據(jù)結構和數(shù)據(jù)類型問題也一并規(guī)劃好。各執(zhí)行模塊規(guī)劃好后,就可以監(jiān)控程序了。首先根據(jù)系統(tǒng)功能和鍵盤設置選擇一種最適合的監(jiān)控程序結構。相對來講,執(zhí)行模塊任務明確單純,比較容易編程,而監(jiān)控程序較易出問題。這如同當一名操作工人比較容易,而當一個廠長就比較難了。軟件任務分析的另一個內容是如何安排監(jiān)控軟件和各執(zhí)行模塊。整個系統(tǒng)軟件可分為后臺程序(背景程序)和前臺程序。后臺程序指主程序及其調用的子程序,這類程序對實時性要求不是太高,延誤幾十ms甚至幾百ms也沒關系,故通常將監(jiān)控程序

37、(鍵盤解釋程序),顯示程序和打印程序等與操作者打交道的程序放在后臺程序中執(zhí)行;而前臺程序安排一些實時性要求較高的內容,如定時系 統(tǒng)和外部中斷(如掉電中斷)。也可以將全部程序均安排在前臺,后臺程序為“使系統(tǒng)進入睡眠狀態(tài)”,以利于系統(tǒng)節(jié)電和抗干擾。4.2 顯示子程序的設計顯示子程序,及部分注解如下:DISPLAY:MOV DPTR,#DAT1;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出,MOV A,R3MOVC A,A+DPTRMOV P2,#0feHMOV P0,AACALL DELAYMOV DPTR,#DAT2MOV A,R5MOVC A,A+DPTRMOV P2,#0f

38、dHMOV P0,AACALL DELAYMOV A,R4MOVC A,A+DPTRMOV P2,#0fbHMOV P0,AACALL DELAYRETDAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H  ;"滅","1","2","3","4","5","6","7","8","9","滅","F

39、"DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H第一個為零,其他與上相同,因為十位如果為零顯示熄滅4.3 定時器T0、T1中斷服務程序的設計=TO溢出中斷(響鈴程序)=T0INT:  MOV TH0,#0ECHMOV TL0,#0FFHJNB RING,OUT;CPL P3.6;RING標志位為1時候P3.6口不斷取反使喇叭發(fā)出一定頻率的聲音OUT:    RETI T1溢出中斷(計時程序):T1INT:  MOV TH1,#3CHMOV TL1,#0B0HIN

40、C R0RETIEND4.4 搶答器處理程序的設計搶答器處理程序:TRUE1: ACALL BARK;按鍵發(fā)聲MOV A,R2MOV R6,A;搶答時間R2送R6MOV R3,#01HCLR OK;因為答題的計時不再查詢搶答,所以就鎖了搶答AJMP COUNTTRUE2:ACALL BARK;MOV A,R2MOV R6,AMOV R3,#02HCLR OKAJMP COUNTTRUE3:ACALL BARK;MOV A,R2MOV R6,AMOV R3,#03HCLR OKAJMP COUNTTRUE4:ACALL BARK;MOV A,R2MOV R6,AMOV R3,#04HCLR OK

41、AJMP COUNTTRUE5:  ACALL BARK;MOV A,R2MOV R6,AMOV R3,#05HCLR OKAJMP COUNTTRUE6:  ACALL BARK;MOV A,R2MOV R6,AMOV R3,#06HCLR OKAJMP COUNTTRUE7:  ACALL BARK;MOV A,R2MOV R6,AMOV R3,#07HCLR OKAJMP COUNTTRUE8:  ACALL BARK;MOV A,R2MOV R6,AMOV R3,#08HCLR OKAJMP COUNT4.5 程序及分析單片機控制8路搶答器程序O

42、K EQU 20H;搶答開始標志位 RING EQU 22H;響鈴標志位 ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP T0INT ORG 0013H AJMP INT1SUB ORG 001BH AJMP T1INT ORG 0040HMAIN:   MOV R1,#30;初設搶答時間為30s        MOV

43、R2,#60;初設答題時間為60s        MOV TMOD,#11H;設置未定時器/模式1        MOV TH0,#0F0H        MOV TL0,#0FFH;越高發(fā)聲頻率越高,越尖        MOV TH1,#3CH      &

44、#160; MOV TL1,#0B0H;50ms為一次溢出中斷        SETB EA        SETB ET0        SETB ET1 SETB EX0 SETB EX1;允許四個中斷,T0/T1/INT0/INT1        CLR OK CLR RING

45、60;        SETB TR1         SETB TR0;一開始就運行定時器,以開始顯示FFF.如果想重新計數(shù),重置TH1/TL1就可以了;=查詢程序=START:   MOV R5,#0BH         MOV R4,#0BH         MO

46、V R3,#0BH ACALL DISPLAY;未開始搶答時候顯示FFF         JB P3.0,NEXT;ddddddd         ACALL DELAY         JB P3.0,NEXT;去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢     

47、;    ACALL BARK;按鍵發(fā)聲         MOV A,R1  MOV R6,A;送R1->R6,因為R1中保存了搶答時間     SETB OK;搶答標志位,用于COUNT只程序中判斷是否查詢搶答     MOV R3,#0AH;搶答只顯示計時,滅號數(shù)        AJMP COUNT;進入倒計時程序,&

48、quot;查詢有效搶答的程序"在COUNT里面NEXT:   JNB P1.0,FALSE1    JNB P1.1,FALSE2    JNB P1.2,FALSE3    JNB P1.3,FALSE4    JNB P1.4,FALSE5    JNB P1.5,FALSE6    JNB P1.6,TZ1    JNB P1.7,TZ2 &

49、#160;  AJMP START TZ1:JMP FALSE7TZ2:JMP FALSE8;=非法搶答處理程序=FALSE1: ACALL BARK;按鍵發(fā)聲MOV R3,#01H    AJMP ERRORFALSE2: ACALL BARKMOV R3,#02H    AJMP ERRORFALSE3: ACALL BARKMOV R3,#03H    AJMP ERRORFALSE4: ACALL BARKMOV R3,#04H    AJMP E

50、RRORFALSE5: ACALL BARKMOV R3,#05H    AJMP ERRORFALSE6: ACALL BARKMOV R3,#06H    AJMP ERRORFALSE7: ACALL BARKMOV R3,#07H    AJMP ERRORFALSE8: ACALL BARKMOV R3,#08H    AJMP ERROR;=INT0(搶答時間R1調整程序)=INT0SUB:MOV A,R1     

51、;   MOV B,#0AH         DIV AB         MOV R5,A         MOV R4,B         MOV R3,#0AH        

52、; ACALL DISPLAY;先在兩個時間LED上顯示R1         JNB P3.4,INC0;P3.4為+1s鍵,如按下跳到INCO         JNB P3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO         JNB P3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO    AJMP

53、 INT0SUBINC0:   MOV A,R1CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。        MOV R1,#00H        ACALL DELAY1AJMP INT0SUBADD0:   INC R1        ACALL DELAY1   &

54、#160;    AJMP INT0SUBDEC0:   MOV A,R1    JZ SETR1;如果R1為0, R1就置99,    DEC R1    ACALL DELAY1    AJMP INT0SUBSETR1:  MOV R1,#63H        ACALL DELAY1     

55、;   AJMP INT0SUBBACK0:  RETI ;=INT1(回答時間R2調整程序)=INT1SUB:MOV A,R2        MOV B,#0AH    DIV ABMOV R5,A    MOV R4,B    MOV R3,#0AH    ACALL DISPLAY    JNB P3.4,INC1  &#

56、160; JNB P3.5,DEC1    JNB P3.1,BACK1    AJMP INT1SUBINC1:   MOV A,R2    CJNE A,#63H,ADD1        MOV R2,#00H        ACALL DELAY1AJMP INT1SUBADD1:   INC R2  

57、      ACALL DELAY1        AJMP INT1SUBDEC1:   MOV A,R2    JZ SETR2    DEC R2    ACALL DELAY1    AJMP INT1SUBSETR2:  MOV R2,#63H      &#

58、160; ACALL DELAY1        AJMP INT1SUBBACK1:  RETI ;=倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=COUNT:  MOV R0,#00H;重置定時器中斷次數(shù)        MOV TH1,#3CH        MOV TL1,#0B0H;重置定時器RECOUNT:MOV A,R6;R6保存了倒計時的時間,之前先

59、將搶答時間或回答時間給R6        MOV B,#0AH    DIV AB;除十分出個位/十位    MOV 30H,A;十位存于(30H)    MOV 31H,B;個位存于(31H)    MOV R5,30H;取十位    MOV R4,31H;取個位    MOV A,R6    SUBB A,#07H

60、    JNC LARGER;大于5s跳到LARGER,小于等于5s會提醒    MOV A,R0        CJNE A,#0AH,FULL;1s中0.5s向下運行    CLR RING     AJMP CHECKFULL:   CJNE A,#14H,CHECK;下面是1s的情況,響并顯示號數(shù)并清R0,重新計     

61、0;  SETB RING        MOV A,R6    JZ QUIT;計時完畢    MOV R0,#00H    DEC R6;一秒標志減1    AJMP CHECKLARGER: MOV A,R0        CJNE A,#14H,CHECK;如果1s向下運行,否者跳到查"停/顯示"&#

62、160;   DEC R6;計時一秒R6自動減1    MOV R0,#00HCHECK: JNB P3.1,QUIT;如按下停止鍵退出       ACALL DISPLAY   JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用)   AJMP RECOUNTACCOUT:JNB P1.0,TRUE1   JNB P1.1,TRUE2   JNB P1.

63、2,TRUE3   JNB P1.3,TRUE4   JNB P1.4,TRUE5   JNB P1.5,TRUE6   JNB P1.6,TZ3   JNB P1.7,TZ4   AJMP RECOUNT TZ3:JMP TRUE7 TZ4:JMP TRUE8    QUIT:  CLR OK;如果按下了"停止鍵"執(zhí)行的程序   CLR RING   AJ

64、MP START;=正常搶答處理程序=TRUE1: ACALL BARK;按鍵發(fā)聲       MOV A,R2   MOV R6,A;搶答時間R2送R6   MOV R3,#01H   CLR OK;因為答題的計時不再查詢搶答,所以就鎖了搶答   AJMP COUNTTRUE2:ACALL BARK;      MOV A,R2  MOV R6,A  MOV R3,#02H 

65、 CLR OK  AJMP COUNTTRUE3:ACALL BARK;      MOV A,R2  MOV R6,A  MOV R3,#03H  CLR OK  AJMP COUNTTRUE4:ACALL BARK;      MOV A,R2    MOV R6,A    MOV R3,#04H    CLR OK   

66、AJMP COUNTTRUE5:  ACALL BARK;        MOV A,R2    MOV R6,A    MOV R3,#05H    CLR OK    AJMP COUNTTRUE6:  ACALL BARK;        MOV A,R2    MOV R6,A&#

67、160;   MOV R3,#06H    CLR OK    AJMP COUNTTRUE7:  ACALL BARK;        MOV A,R2    MOV R6,A    MOV R3,#07H    CLR OK    AJMP COUNTTRUE8:  ACALL BARK; &#

68、160;      MOV A,R2    MOV R6,A    MOV R3,#08H    CLR OK    AJMP COUNT;=犯規(guī)搶答程序=ERROR:  MOV R0,#00H        MOV TH1,#3CH        MOV TL1,#0B0H     

溫馨提示

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

評論

0/150

提交評論