基于at89s51的數(shù)字秒表設(shè)計(jì)_第1頁
基于at89s51的數(shù)字秒表設(shè)計(jì)_第2頁
基于at89s51的數(shù)字秒表設(shè)計(jì)_第3頁
基于at89s51的數(shù)字秒表設(shè)計(jì)_第4頁
基于at89s51的數(shù)字秒表設(shè)計(jì)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于AT89S51的數(shù)字秒表設(shè)計(jì)摘要數(shù)字電子秒表具有顯示直觀、讀取方便、精度高等優(yōu)點(diǎn),在計(jì)時(shí)中廣泛使用。本設(shè)計(jì)用單片機(jī)組成數(shù)字電子秒表,力求結(jié)構(gòu)簡單、精度高為目標(biāo)。設(shè)計(jì)中包括硬件電路的設(shè)計(jì)和系統(tǒng)程序的設(shè)計(jì)。其硬件電路主要有主控制器,計(jì)時(shí)與顯示電路和回零、啟動(dòng)和停表電路等。主控制器采用單片機(jī)AT89S51,顯示電路采用共陰極LED數(shù)碼管顯示計(jì)時(shí)時(shí)間。文中設(shè)計(jì)了一種以單片機(jī)為控制核心的數(shù)字秒表。該數(shù)字秒表采用C語言開發(fā),通過數(shù)碼管顯示計(jì)時(shí)結(jié)果。關(guān)鍵字AT89S51;數(shù)字秒表;LED數(shù)碼管顯示ABSTRACTDIGITALELECTRONICSTOPWATCHDISPLAYINTUITIVE,READTHECONVENIENT,HIGHPRECISIONOFADVANTAGES,WIDELYUSEDINTIMETHEDESIGNOFDIGITALELECTRONICSTOPWATCHBYSINGLECHIP,ANDSTRIVETOSIMPLESTRUCTURE,HIGHPRECISIONFORTHETARGETDESIGNINCLUDINGTHEDESIGNOFTHESYSTEMHARDWARECIRCUITANDTHEDESIGNOFTHEPROGRAMTHEMAINHARDWARECIRCUITISTHEMAINCONTROLLER,TIMINGANDDISPLAYCIRCUITANDBACKTOZERO,STARTANDSTOPWATCHCIRCUIT,ETCLORDAT89S51SINGLECHIPCONTROLLER,SHOWCIRCUITOFTHECATHODELEDDIGITALPIPEDISPLAYTIMECLOCKTHISPAPERDESIGNSAWITHTHESINGLECHIPPROCESSORASTHECORETOCONTROLTHEDIGITALSTOPWATCHTHEDIGITALSTOPWATCHUSINGCLANGUAGEDEVELOPMENT,THROUGHTHEDIGITALPIPEDISPLAYTHETIMEKEYWORDSAT89S51DIGITALSTOPWATCHTHELEDDIGITALDISPLAY目錄摘要IABSTRACTII前言IV1緒論111單片機(jī)的背景112單片機(jī)的應(yīng)用領(lǐng)域22總體方案的設(shè)計(jì)421系統(tǒng)的組成模塊422工作原理43系統(tǒng)的硬件電路設(shè)計(jì)631單片機(jī)的選擇632顯示電路的選擇與設(shè)計(jì)933按鍵電路的選擇與設(shè)計(jì)1034時(shí)鐘電路的選擇與設(shè)計(jì)1135復(fù)位電路的選擇與設(shè)計(jì)144系統(tǒng)的軟件電路設(shè)計(jì)1641程序設(shè)計(jì)思想1642主程序設(shè)計(jì)1643中斷程序設(shè)計(jì)1844系統(tǒng)的程序設(shè)計(jì)21結(jié)論25參考文獻(xiàn)26致謝27附錄28前言秒表計(jì)時(shí)器是電器制造,工業(yè)自動(dòng)化控制、國防、實(shí)驗(yàn)室及科研單位理想的計(jì)時(shí)儀器,它廣泛應(yīng)用于各種繼電器、電磁開關(guān),控制器、延時(shí)器、定時(shí)器等的時(shí)間測(cè)試。自首屆現(xiàn)代奧運(yùn)會(huì)在希臘雅典舉辦以來,奧運(yùn)計(jì)時(shí)技術(shù)一直在不斷地向前發(fā)展。一百多年過去了,首屆現(xiàn)代奧運(yùn)會(huì)上計(jì)時(shí)所用的跑表如今換成了一系列高科技計(jì)時(shí)裝置,如高速數(shù)碼攝像機(jī)、電子觸摸墊、紅外光束、無線應(yīng)答器等等。鑒于當(dāng)今計(jì)時(shí)技術(shù)的快速發(fā)展,即便千分之一秒為眨眼的40倍的毫微差距,也決定著冠軍的歸屬。在現(xiàn)在的體育競(jìng)技比賽中,隨著運(yùn)動(dòng)員的水平不斷提高,差距也在不斷縮小。有些運(yùn)動(dòng)對(duì)時(shí)間精度的要求也越來越高,有時(shí)比賽冠亞軍之間的差距只有幾毫秒,因此就需要高精度的秒表來記錄成績。一、從大型鐘向小型鐘演變。二、從小型鐘向袋表過渡。三、從袋表向腕表發(fā)展。每一階段的發(fā)展都是和當(dāng)時(shí)的技術(shù)發(fā)明分不開的。1088年,當(dāng)時(shí)我國宋朝的科學(xué)家蘇頌和韓工廉等人制造了水運(yùn)儀象臺(tái),它是把渾儀、渾象和機(jī)械計(jì)時(shí)器組合起來的裝置。它以水力作為動(dòng)力來源,具有科學(xué)的擒縱機(jī)構(gòu),雖然幾十年后毀于戰(zhàn)亂,但它在世界鐘表史上具有極其重要的意義。1656年,荷蘭的科學(xué)家惠更斯應(yīng)用伽利略的理論設(shè)計(jì)了鐘擺,第二年,在他的指導(dǎo)下年輕鐘匠SCOSTER制造成功了第一個(gè)擺鐘。1675年,他又用游絲取代了原始的鐘擺,這樣就形成了以發(fā)條為動(dòng)力、以游絲為調(diào)速機(jī)構(gòu)的小型鐘,同時(shí)也為制造便于攜帶的袋表提供了條件。18世紀(jì)期間發(fā)明了各種各樣的擒縱機(jī)構(gòu),為袋表的進(jìn)一步產(chǎn)生與發(fā)展奠定了基礎(chǔ)。20世紀(jì)初,尤其是第一次世界大戰(zhàn)的爆發(fā),袋表已經(jīng)不能適應(yīng)作戰(zhàn)軍人的需要,腕表的生產(chǎn)成為大勢(shì)所趨。許多新的設(shè)計(jì)和技術(shù)也被應(yīng)用在腕表上,成為真正意義上的帶在手腕上的計(jì)時(shí)工具。緊接著的二戰(zhàn)使腕表的生產(chǎn)量大幅度增加,價(jià)格也隨之下降,使普通大眾也可以擁有它。腕表的年代到來了1998年建立超冷銫原子鐘,比微微秒又要精確10萬倍。從我國水運(yùn)儀像臺(tái)的發(fā)明到現(xiàn)在各國都在研制的原子鐘這幾百年的鐘表演變過程中,我們可以看到,各個(gè)不同時(shí)期的科學(xué)家和鐘表工匠用他們的聰明的智慧和不斷的實(shí)踐融合成了一座時(shí)間的隧道,同時(shí)也為我們勾勒了一條鐘表文化和科技發(fā)展的軌跡。1緒論11單片機(jī)的背景單片機(jī)即單片機(jī)微型計(jì)算機(jī)。用專業(yè)語言講,單片機(jī)就是在一塊硅片上集成了微處理器、存儲(chǔ)器及各種輸入輸出接口的芯片。這樣一塊芯片就具有了計(jì)算機(jī)的屬性,因?yàn)楸环Q為單片機(jī)微型計(jì)算機(jī),簡稱單片機(jī)。單片機(jī)的前身叫做單板機(jī),是將CPU芯片、存儲(chǔ)芯片、I/O接口和簡單的I/O設(shè)備等裝配在一快印刷電路板上,在配上監(jiān)控程序,就構(gòu)成一塊單板機(jī)。單片機(jī)基本用于數(shù)學(xué),后來發(fā)展為單片機(jī)?,F(xiàn)在這種單片機(jī)的使用領(lǐng)域已十分廣泛,如智能儀表、實(shí)時(shí)工控、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等。各種產(chǎn)品一旦用上了單片機(jī),就能起到是產(chǎn)品更新?lián)Q代的功效,常在產(chǎn)品名稱前冠以形容詞“智能型”?,F(xiàn)在可以說單片機(jī)是百花齊放的時(shí)期,世界上各大芯片制造公司都推出了自己的單片機(jī),從8位、16位到32位,數(shù)不勝數(shù),應(yīng)有盡有,它們各具特色,互成互補(bǔ),為單片機(jī)的應(yīng)用提供廣闊的天地。縱觀單片機(jī)的發(fā)展過程,可以預(yù)示單片機(jī)的發(fā)展趨勢(shì)。111、低功耗CMOS化MCS51系列的8031推出時(shí)的功耗達(dá)630MW,而現(xiàn)在的單片機(jī)普遍都在100MW左右,隨著對(duì)單片機(jī)功耗要求越來越低,現(xiàn)在的各個(gè)單片機(jī)制造商基本都采用了CMOS互補(bǔ)金屬氧化物半導(dǎo)體工藝。80C51就采用了HMOS即高密度金屬氧化物半導(dǎo)體工藝和CHMOS互補(bǔ)高密度金屬氧化物半導(dǎo)體工藝。CMOS雖然功耗較低,但由于其物理特征決定其工作速度不夠高,而CHMOS則具備了高速和低功耗的特點(diǎn),這些特征,更適合于在要求低功耗,電池供電的應(yīng)用場(chǎng)合。所以這種工藝將是今后一段時(shí)期單片機(jī)發(fā)展的主要途徑。112、微型單片化現(xiàn)在常規(guī)的單片機(jī)普遍都是將中央處理器CPU、隨機(jī)存取數(shù)據(jù)存儲(chǔ)RAM、只讀程序存儲(chǔ)器ROM、并行和串行通信接口,中斷系統(tǒng)、定時(shí)電路、時(shí)鐘電路集成在一塊單一的芯片上,增強(qiáng)型的單片機(jī)集成了如A/D轉(zhuǎn)換器、PMW脈寬調(diào)制電路、WDT看門狗、有些單片機(jī)將LCD液晶驅(qū)動(dòng)電路都集成在單一的芯片上,這樣單片機(jī)包含的單元電路就更多,功能就越強(qiáng)大。甚至單片機(jī)廠商還可以根據(jù)用戶的要求量身定做,制造出具有自己特色的單片機(jī)芯片。此外,現(xiàn)在的產(chǎn)品普遍要求體積小、重量輕,這就要求單片機(jī)除了功能強(qiáng)和功耗低外,還要求其體積要小?,F(xiàn)在的許多單片機(jī)都具有多種封裝形式,其中SMD表面封裝越來越受歡迎,使得由單片機(jī)構(gòu)成的系統(tǒng)正朝微型化方向發(fā)展。113、主流與多品種共存現(xiàn)在雖然單片機(jī)的品種繁多,各具特色,但仍以80C51為核心的單片機(jī)占主流,兼容其結(jié)構(gòu)和指令系統(tǒng)的有PHILIPS公司的產(chǎn)品,ATMEL公司的產(chǎn)品和中國臺(tái)灣的WINBOND系列單片機(jī)。所以C8051為核心的單片機(jī)占據(jù)了半壁江山。而MICROCHIP公司的PIC精簡指令集RISC也有著強(qiáng)勁的發(fā)展勢(shì)頭,中國臺(tái)灣的HOLTEK公司近年的單片機(jī)產(chǎn)量與日俱增,與其低價(jià)質(zhì)優(yōu)的優(yōu)勢(shì),占據(jù)一定的市場(chǎng)分額。此外還有MOTOROLA公司的產(chǎn)品,日本幾大公司的專用單片機(jī)。在一定的時(shí)期內(nèi),這種情形將得以延續(xù),將不存在某個(gè)單片機(jī)一統(tǒng)天下的壟斷局面,走的是依存互補(bǔ),相輔相成、共同發(fā)展的道路。114、大容量、高性能以往單片機(jī)內(nèi)的ROM為1KB4KB,RAM為64128B。但在需要復(fù)雜控制的場(chǎng)合,該存儲(chǔ)容量是不夠的,必須進(jìn)行外接擴(kuò)充。為了適應(yīng)這種領(lǐng)域的要求,須運(yùn)用新的工藝,使片內(nèi)存儲(chǔ)器大容量化。目前,單片機(jī)內(nèi)ROM最大可達(dá)64KB,RAM最大為2KB。另外單片機(jī)進(jìn)一步改變CPU的性能,加快指令運(yùn)算的速度和提高系統(tǒng)控制的可靠性。采用精簡指令集RISC結(jié)構(gòu)和流水線技術(shù),可以大幅度提高運(yùn)行速度。現(xiàn)指令速度最高者已達(dá)100MIPSMILLIONINSTRUCTIONPERSECONDS,即兆指令每秒,并加強(qiáng)了位處理、中斷和定時(shí)控制功能。這類單片機(jī)的運(yùn)算速度比標(biāo)準(zhǔn)的單片機(jī)高出10倍以上。由于這類單片機(jī)有極高的指令速度,可以使用軟件模擬其I/O功能,由此引入了虛擬外設(shè)的新概念。12單片機(jī)的應(yīng)用領(lǐng)域單片機(jī)改變了我們生活,縱觀我們現(xiàn)在生活的各個(gè)領(lǐng)域,從導(dǎo)彈的導(dǎo)航裝置,到飛機(jī)上各種儀表的控制,從計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,到工業(yè)自動(dòng)化過程的實(shí)時(shí)控制和數(shù)據(jù)處理,以及我們生活中廣泛使用的各種智能IC卡、電子寵物等,這些都離不開單片機(jī),單片機(jī)有著廣闊的應(yīng)用前景。目前單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒有單片機(jī)的蹤跡。單片機(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域,大致可分如下幾個(gè)范疇1、智能儀表上的應(yīng)用單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,例如精密的測(cè)量設(shè)備。2、在工業(yè)控制中的應(yīng)用用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)。例如工廠流水線的智能化管理,電梯智能化控制、各種報(bào)警系統(tǒng),與計(jì)算機(jī)聯(lián)網(wǎng)構(gòu)成二級(jí)控制系統(tǒng)等。3、在家用電器中的應(yīng)用可以這樣說,現(xiàn)在的家用電器基本上都采用了單片機(jī)控制,從電飯褒、洗衣機(jī)、電冰箱、空調(diào)機(jī)、彩電、其他音響視頻器材、再到電子秤量設(shè)備,無所不在。4、在計(jì)算機(jī)網(wǎng)絡(luò)和通信領(lǐng)域中的應(yīng)用現(xiàn)代的單片機(jī)普遍具備通信接口,可以很方便地與計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信,現(xiàn)在的通信設(shè)備基本上都實(shí)現(xiàn)了單片機(jī)智能控制,例如手機(jī),電話機(jī)、列車無線通信。5、單片機(jī)在醫(yī)用設(shè)備領(lǐng)域中的應(yīng)用單片機(jī)在醫(yī)用設(shè)備中的用途亦相當(dāng)廣泛,例如醫(yī)用呼吸機(jī),各種分析儀,監(jiān)護(hù)儀,超聲診斷設(shè)備及病床呼叫系統(tǒng)等等。6、在各種大型電器中的模塊化應(yīng)用某些專用單片機(jī)設(shè)計(jì)用于實(shí)現(xiàn)特定功能,從而在各種電路中進(jìn)行模塊化應(yīng)用,而不要求使用人員了解其內(nèi)部結(jié)構(gòu)。如音樂集成單片機(jī),在大型電路中,這種模塊化應(yīng)用極大地縮小了體積,簡化了電路,降低了損壞、錯(cuò)誤率,也方便于更換。此外,單片機(jī)在工商,金融,科研、教育,國防航空航天等領(lǐng)域都有著十分廣泛的用途。從無線電世界到單片機(jī)世界。本設(shè)計(jì)利用AT89S51單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,使其能精確計(jì)時(shí)。利用中斷系統(tǒng)使其能實(shí)現(xiàn)開始暫停的功能。P0口輸出段碼數(shù)據(jù),P20P27口作列掃描輸出,P11、P12、P13、P14、P30、P31、RST分別接七個(gè)按鈕開關(guān),分別實(shí)現(xiàn)開始、暫停、存儲(chǔ)、清除當(dāng)前數(shù)據(jù)、全部清零和查看上次時(shí)間和復(fù)位功能,顯示電路由八位共陰極數(shù)碼管組成。2總體方案的設(shè)計(jì)設(shè)計(jì)中包括硬件電路的設(shè)計(jì)和系統(tǒng)程序的設(shè)計(jì)。其硬件電路主要有主控制器,顯示電路和回零、啟動(dòng)、查看、停表電路等。主控制器采用單片機(jī)AT89S51,顯示電路采用共陰極LED數(shù)碼管顯示計(jì)時(shí)時(shí)間,七個(gè)按鍵均采用觸點(diǎn)式按鍵。21系統(tǒng)的組成模塊系統(tǒng)總電路是由控制電路,顯示電路,時(shí)鐘電路,按鍵電路和復(fù)位電路組成,只要將單片機(jī)與以上各部分電路合理的連接就組成了系統(tǒng)總電路。系統(tǒng)總電路圖如附表所示。AT89S51單片機(jī)為控制電路的核心部分,各個(gè)電路均和單片機(jī)相連接,由單片機(jī)統(tǒng)籌和協(xié)調(diào)各個(gè)電路的運(yùn)行工作。AT89S51單片機(jī)提供了XTAL1和XTAL2兩個(gè)專用引腳接晶振電路,因此只要將晶振電路接到兩個(gè)專用引腳即可為單片機(jī)提供時(shí)鐘脈沖,但在焊接晶振電路時(shí)要盡量使晶振電路靠近單片機(jī),這樣可以為單片機(jī)提供穩(wěn)定的始終脈沖。復(fù)位電路同晶振電路,單片機(jī)設(shè)有一個(gè)專用的硬件復(fù)位接口,并設(shè)置為高電平有效。按鍵電路與單片機(jī)的端口連接可以由用戶自己設(shè)定,本設(shè)計(jì)中軟件復(fù)位鍵和查看鍵分別接單片機(jī)的RST和P31,均設(shè)為高電平有效。顯示電路由八位數(shù)碼管組成,采用動(dòng)態(tài)顯示方式,因此有8位段控制端和8位位選控制端,八位段控制接P0口,P00P07分別控制數(shù)碼顯示管的A、B、C、D、E、F、G、DP顯示,AT89S51的P0口沒有集成上拉電阻,高電平的驅(qū)動(dòng)能力很弱,所以需要接上拉電阻來提高P0的高電平驅(qū)動(dòng)能力。八位位控制則由低位到高位分別接到P20P27口,當(dāng)P20P27端口任意一個(gè)端口為高電平時(shí),與其相對(duì)應(yīng)的數(shù)碼管導(dǎo)通顯示。22工作原理本設(shè)計(jì)利用AT89S51單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,使其能精確計(jì)時(shí)。利用中斷系統(tǒng)使其能實(shí)現(xiàn)開始暫停的功能。P0口輸出段碼數(shù)據(jù),口作列掃描輸出,P11、P12、P13、P14、P30、P31、RST分別接七個(gè)按鈕開關(guān),分別實(shí)現(xiàn)開始、暫停、存儲(chǔ)、清除當(dāng)前數(shù)據(jù)、全部清零和查看上次時(shí)間和復(fù)位功能,電路原理圖設(shè)計(jì)最基本的要求是正確性,其次是布局合理,最后在正確性和布局合理的前提下力求美觀。根據(jù)要求知道秒表設(shè)計(jì)主要實(shí)現(xiàn)的功能是計(jì)時(shí)和顯示。因此設(shè)置了七個(gè)按鍵和八位數(shù)碼管顯示時(shí)間,七個(gè)按鍵分別是開始,暫停、存儲(chǔ)、清除當(dāng)前數(shù)據(jù)、全部清零、復(fù)位和查看上次計(jì)時(shí)時(shí)間按鍵。利用這七個(gè)建來實(shí)現(xiàn)秒表的全部功能,而八位數(shù)碼管則能顯示最多99分59999秒的計(jì)時(shí)。計(jì)時(shí)采用定時(shí)器T0中斷完成,定時(shí)溢出中斷周期為1MS,當(dāng)一處中斷后向CPU發(fā)出溢出中斷請(qǐng)求,每發(fā)出一次中斷請(qǐng)求就對(duì)毫秒計(jì)數(shù)單元進(jìn)行加一,達(dá)到10次就對(duì)十毫秒位進(jìn)行加一,依次類推,直到99分59999秒重新復(fù)位。再看按鍵的處理。這七個(gè)鍵可以采用中斷的方法,也可以采用掃描的方法來識(shí)別。復(fù)位鍵和查看主要功能在于數(shù)值復(fù)位和查詢上次計(jì)時(shí)時(shí)間,對(duì)于時(shí)間的要求不是很嚴(yán)格。而開始和停止鍵則是用于對(duì)時(shí)間的鎖定,需要比較準(zhǔn)確的控制。因此可以對(duì)復(fù)位和查看按鍵采取掃描的方式。而對(duì)開始和停止鍵采用外部中斷的方式。3系統(tǒng)的硬件電路設(shè)計(jì)31單片機(jī)的選擇本課題在選取單片機(jī)時(shí),充分借鑒了許多成形產(chǎn)品使用單片機(jī)的經(jīng)驗(yàn),并根據(jù)自己的實(shí)際情況,選擇了ATMEL公司的AT89S51。ATMEL公司的89系列單片機(jī)以其卓越的性能、完善的兼容性、快捷便利的電擦寫操作,低廉的價(jià)格、超強(qiáng)的加密功能,完全替代87C51/62和8751/52,低電壓、低電源、低功耗,有DIP、PLCC、QFP封裝,有民用型、工業(yè)級(jí)、汽車級(jí)、軍品級(jí)等多種溫度等級(jí),是當(dāng)今世界上性能最好、價(jià)格最低、最受歡迎的八位單片機(jī)3。AT89S51為40腳雙列直插封裝的8位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的80C51相同,下面介紹一下單片機(jī)的外部結(jié)構(gòu)AT89S51單片機(jī)采用40引腳的雙列直插封裝方式。圖1為引腳排列圖,40條引腳說明如下主電源引腳VSS和VCCVSS接地VCC正常操作時(shí)為5伏電源外接晶振引腳XTAL1和XTAL2XTAL1內(nèi)部振蕩電路反相放大器的輸入端,是外接晶體的一個(gè)引腳。當(dāng)采用外部振蕩器時(shí),此引腳接地。XTAL2內(nèi)部振蕩電路反相放大器的輸出端。是外接晶體的另一端。當(dāng)采用外部振蕩器時(shí),此引腳接外部振蕩源。EA/VP31XTL928RSD76WIN045OGCND圖1單片機(jī)引腳圖控制或與其它電源復(fù)用引腳RST/VPD,ALE/,和/VPPRST/VPD當(dāng)振蕩器運(yùn)行時(shí),在此引腳上出現(xiàn)兩個(gè)機(jī)器周期的高電平(由低到高跳變),將使單片機(jī)復(fù)位在VCC掉電期間,此引腳可接上備用電源,由VPD向內(nèi)部提供備用電源,以保持內(nèi)部RAM中的數(shù)據(jù)。ALE/正常操作時(shí)為ALE功能(允許地址鎖存)提供把地址的低字節(jié)鎖存到外部鎖存器,ALE引腳以不變的頻率(振蕩器頻率的1/6)周期性地發(fā)出正脈沖信號(hào)。因此,它可用作對(duì)外輸出的時(shí)鐘,或用于定時(shí)目的。但要注意,每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖,ALE端可以驅(qū)動(dòng)(吸收或輸出電流)八個(gè)LSTTL電路。對(duì)于EPROM型單片機(jī),在EPROM編程期間,此引腳接收編程脈沖(功能)外部程序存儲(chǔ)器讀選通信號(hào)輸出端,在從外部程序存儲(chǔ)取指令(或數(shù)據(jù))期間,在每個(gè)機(jī)器周期內(nèi)兩次有效。同樣可以驅(qū)動(dòng)八LSTTL輸入。/VPP、/VPP為內(nèi)部程序存儲(chǔ)器和外部程序存儲(chǔ)器選擇端。當(dāng)/VPP為高電平時(shí),訪問內(nèi)部程序存儲(chǔ)器,當(dāng)/VPP為低電平時(shí),則訪問外部程序存儲(chǔ)器。對(duì)于EPROM型單片機(jī),在EPROM編程期間,此引腳上加21伏EPROM編程電源(VPP)。輸入/輸出引腳P00P07,P10P17,P20P27,P30P37。P0口(P00P07)是一個(gè)8位漏極開路型雙向I/O口,在訪問外部存儲(chǔ)器時(shí),它是分時(shí)傳送的低字節(jié)地址和數(shù)據(jù)總線,P0口能以吸收電流的方式驅(qū)動(dòng)八個(gè)LSTTL負(fù)載。P1口(P10P17)是一個(gè)帶有內(nèi)部提升電阻的8位準(zhǔn)雙向I/O口。能驅(qū)動(dòng)吸收或輸出電流四個(gè)LSTTL負(fù)載。P2口(P20P27)是一個(gè)帶有內(nèi)部提升電阻的8位準(zhǔn)雙向I/O口,在訪問外部存儲(chǔ)器時(shí),它輸出高8位地址。P2口可以驅(qū)動(dòng)吸收或輸出電流四個(gè)LSTTL負(fù)載。P3口(P30P37)是一個(gè)帶有內(nèi)部提升電阻的8位準(zhǔn)雙向I/O口。能驅(qū)動(dòng)吸收或輸出電流四個(gè)LSTTL負(fù)載6。AT89S51具有以下標(biāo)準(zhǔn)功能8K字節(jié)FLASH,256字節(jié)RAM,32位I/O口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S51可降至0HZ靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。CPU是單片機(jī)的核心部件。它由運(yùn)算器和控制器等部件組成2。(1)運(yùn)算器運(yùn)算器的功能是進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算。可以對(duì)半字節(jié)(4位)、單字節(jié)等數(shù)據(jù)進(jìn)行操作。例如能完成加、減、乘、除、加1、減1、BCD碼十進(jìn)制調(diào)整、比較等算術(shù)運(yùn)算和與、或、異或、求補(bǔ)、循環(huán)等邏輯操作,操作結(jié)果的狀態(tài)信息送至狀態(tài)寄存器。AT89S51運(yùn)算器還包含有一個(gè)布爾處理器,用來處理位操作。它是以進(jìn)位標(biāo)志位C為累加器的,可執(zhí)行置位、復(fù)位、取反、等于1轉(zhuǎn)移、等于0轉(zhuǎn)移、等于1轉(zhuǎn)移且清0以及進(jìn)位標(biāo)志位與其他可尋址的位之間進(jìn)行數(shù)據(jù)傳送等位操作,也能使進(jìn)位標(biāo)志位與其他可移位尋址的位之間進(jìn)行邏輯與、或操作5。(2)程序計(jì)數(shù)器PC程序計(jì)數(shù)器PC用來存放即將要執(zhí)行的指令地址,共16位,可對(duì)64K程序存儲(chǔ)器直接尋址。執(zhí)行指令時(shí),PC內(nèi)容的低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。(3)令寄存器指令寄存器中存放指令代碼。CPU執(zhí)行指令時(shí),由程序存儲(chǔ)器中讀取的指令代碼送入指令寄存器,經(jīng)譯碼后由定時(shí)與控制電路發(fā)出相應(yīng)的控制信號(hào),完成指令功能。本設(shè)計(jì)采用ATMEL的AT89S51微處理器,主要基于以下幾個(gè)因素AT89S51為51內(nèi)核,仿真調(diào)試的軟硬件資源豐富。性價(jià)比高,貨源充足。功耗低,功能強(qiáng),靈活性高。DIP40封裝,體積小,便于產(chǎn)品小型化。為EEPROM程序存儲(chǔ)介質(zhì),1000次以上擦寫周期,便于編程調(diào)試。工作電壓范圍寬27V6V,便于交直流供電。32顯示電路的選擇與設(shè)計(jì)對(duì)于數(shù)字顯示電路,通常采用液晶顯示或數(shù)碼管顯示。對(duì)于一般的段式液晶屏,需要專門的驅(qū)動(dòng)電路,而且液晶顯示作為一種被動(dòng)顯示,可視性差,不適合遠(yuǎn)距離觀看;對(duì)于具有驅(qū)動(dòng)電路和單片機(jī)接口的液晶顯示模塊字符或點(diǎn)陣,一般多采用并行接口,對(duì)單片機(jī)的接口要求較高,占用資源多;另外,AT89S51單片機(jī)本身無專門的液晶驅(qū)動(dòng)接口。而數(shù)碼管作為一種主動(dòng)顯示器件,具有亮度高、響應(yīng)速度快、防潮防濕性能好、溫度特性極性、價(jià)格便宜、易于購買等優(yōu)點(diǎn),而且有遠(yuǎn)距離視覺效果,很適合夜間或是遠(yuǎn)距離操作。因此,本設(shè)計(jì)的顯示電路采用7段數(shù)碼管作為顯示介質(zhì)。數(shù)碼管顯示可以分為靜態(tài)顯示和動(dòng)態(tài)顯示兩種。由于本設(shè)計(jì)需要采用八位數(shù)碼管顯示時(shí)間,如果靜態(tài)顯示則占用的口線多,硬件電路復(fù)雜。所以采用動(dòng)態(tài)顯示。動(dòng)態(tài)顯示是一位一位地輪流點(diǎn)亮各位數(shù)碼管,這種逐位點(diǎn)亮顯示器的方式稱為位掃描。通常各位數(shù)碼管的段選線相應(yīng)并聯(lián)在一起,由一個(gè)8位的I/O口控制;各位的公共陰極位選線由另外的I/O口線控制。動(dòng)態(tài)方式顯示時(shí),各數(shù)碼管分時(shí)輪流選通,要使其穩(wěn)定顯示必須采用掃描方式,即在某一時(shí)刻只選通一位數(shù)碼管,并送出相應(yīng)的段碼,在另一時(shí)刻選通另一位數(shù)碼管,并送出相應(yīng)的段碼,依此規(guī)律循環(huán),即可使各位數(shù)碼管顯示將要顯示的字符,雖然這些字符是在不同的時(shí)刻分別顯示,但由于人眼存在視覺暫留效應(yīng),只要每位顯示間隔足夠短就可以給人同時(shí)顯示的感覺。數(shù)碼顯示管分為共陽數(shù)碼管和共陰數(shù)碼管兩種,共陰極數(shù)碼管的8個(gè)發(fā)光二極管的陽極(二極管正端)連接在一起,通常,公共陰極接高電平(一般接電源),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為低電平時(shí),則該端所連接的字段導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻。共陰極數(shù)碼管的8個(gè)發(fā)光二極管的陰極(二極管負(fù)端)連接在一起,通常,公共陰極接低電平(一般接地),其它管腳接段驅(qū)動(dòng)電路輸出端,當(dāng)某段驅(qū)動(dòng)電路的輸出端為高電平時(shí),則該端所連接的字段導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能提供額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻。本設(shè)計(jì)采用共陰極數(shù)碼顯示管做顯示電路,數(shù)碼管引腳圖如圖2所示ABCDEFGPOM134USR056K圖2數(shù)碼管引腳圖由于采用的是共陰的數(shù)碼顯示管,所以只要數(shù)碼管的A、B、C、D、E、F、G、H引腳為高電平,那么其對(duì)應(yīng)的二極管就會(huì)發(fā)光,使數(shù)碼顯示管顯示09的編碼見表1。表1共陰極數(shù)碼顯示管字型代碼字型共陰極代碼字型共陰極代碼03FH56DH106H67DH25BH707H34FH87FH466H96FH動(dòng)態(tài)顯示電路由顯示塊、字形碼驅(qū)動(dòng)模塊、字位驅(qū)動(dòng)模塊三部分組成。圖中,8個(gè)數(shù)碼管的8段段選線分別與外接上拉電阻的單片機(jī)P0口對(duì)應(yīng)相連,而8個(gè)數(shù)碼管的位控制端則和單片機(jī)的P2口相連。單片機(jī)的P20P27口則分別對(duì)應(yīng)數(shù)碼顯示管的最低位到最高位,另外數(shù)碼管顯示是采用動(dòng)態(tài)顯示。由于數(shù)碼管是有P0口來驅(qū)動(dòng),它內(nèi)部沒有上拉電阻,作為輸出口時(shí)驅(qū)動(dòng)能力比較弱,不能點(diǎn)亮數(shù)碼顯示管,因此P0口必須接上拉電阻來提高驅(qū)動(dòng)能力。另外一位共陰數(shù)碼管的驅(qū)動(dòng)電流一般為20MA左右,如果電流太大容易造成數(shù)碼管損壞,所以也需要根據(jù)電源的電壓值來確定上拉電阻的大小。如果電阻過小,勢(shì)必會(huì)形成灌電流過大,造成單片機(jī)IO的損壞,如果電阻過大,那么對(duì)拉電流沒有太大的影響。電源供電電壓為5V,當(dāng)上拉電阻選用220電阻時(shí)灌電流為22MA。不會(huì)損壞單片機(jī)的I/O口,同時(shí)也可以為數(shù)碼顯示管起到限制電流的保護(hù)作用。33按鍵電路的選擇與設(shè)計(jì)本設(shè)計(jì)中有七個(gè)按鍵,分別實(shí)現(xiàn)開始、暫停、存儲(chǔ)、清除當(dāng)前數(shù)據(jù)、查看、全部清零復(fù)位功能。這七個(gè)鍵可以采用中斷的方法,也可以采用查詢的方法來識(shí)別。對(duì)于復(fù)位和查看鍵,主要功能在于數(shù)值復(fù)位和對(duì)上次計(jì)時(shí)時(shí)間的查看,對(duì)于時(shí)間的要求不是很嚴(yán)格,而開始和暫停鍵主要用于時(shí)間的鎖定,需要比較準(zhǔn)確的控制。因此可以考慮,對(duì)復(fù)位鍵和查看鍵采用查詢的方式,而對(duì)于開始和暫停鍵采用外部中斷。七個(gè)按鍵均采用低電平有效。當(dāng)按鍵沒有按下時(shí),單片機(jī)的I/O口直接連接電源,因此需要接上拉電阻來進(jìn)行限流,本設(shè)計(jì)中選取阻值為2K的電阻作為上拉電阻,根據(jù)計(jì)算可知此時(shí)的灌電流為25MA,查看AT89S51的資料得知次電流在安全范圍內(nèi),符合安全設(shè)計(jì)要求。按鍵電路中由于采用了外部中斷,所以需要用到P3口的第二功能。P3口引腳的第二功能如表2表2P3口引腳第二功能表P3口引腳特殊功能P30RXD(串行輸入口)P31TXD(串行輸出口)P32INT0(外部中斷0請(qǐng)求輸入端)P33INT1(外部中斷1請(qǐng)求輸入端)P34T0(定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)脈沖輸入端)P35T1(定時(shí)器/計(jì)數(shù)器1計(jì)數(shù)脈沖輸入端)P36WR片外數(shù)據(jù)存儲(chǔ)器寫選通信號(hào)輸出端P37RD(片內(nèi)數(shù)據(jù)存儲(chǔ)器讀選通信號(hào)輸出端)34時(shí)鐘電路的選擇與設(shè)計(jì)單片機(jī)的時(shí)鐘信號(hào)用來提供單片機(jī)內(nèi)各種微操作的時(shí)間基準(zhǔn),AT89S51片內(nèi)設(shè)有一個(gè)由反向放大器所構(gòu)成的振蕩電路,XTAL1和XTAL2分別為振蕩電路的輸入和輸出端,AT89S51單片機(jī)的時(shí)鐘信號(hào)通常用兩種電路形式得到內(nèi)部振蕩方式與外部振蕩方式。外部方式的時(shí)鐘很少用,若要用時(shí),只要將XTAL1接地,XTAL2接外部振蕩器就行。對(duì)外部振蕩信號(hào)無特殊要求,只要保證脈沖寬度,一般采用頻率低于12MHZ的方波信號(hào)。時(shí)鐘發(fā)生器把振蕩頻率兩分頻,產(chǎn)生一個(gè)兩相時(shí)鐘信號(hào)P1和P2供單片機(jī)使用。P1在每一個(gè)狀態(tài)S的前半部分有效,P2在每個(gè)狀態(tài)的后半部分有效。本設(shè)計(jì)采用的內(nèi)部振蕩方式,內(nèi)部振蕩方式所得的時(shí)鐘信號(hào)比較穩(wěn)定,實(shí)用電路中使用較多。本設(shè)計(jì)系統(tǒng)的時(shí)鐘電路如圖3所示。只要按照?qǐng)D3所示電路進(jìn)行設(shè)計(jì)連接就能使系統(tǒng)可靠起振并能穩(wěn)定運(yùn)行。圖中,電容器C1、C2起穩(wěn)定振蕩頻率、快速起振的作用,電容值一般為533PF。但在時(shí)鐘電路的實(shí)際應(yīng)用中一定要注意正確選擇其大小,并保證電路的對(duì)稱性,盡可能匹配,選用正牌的瓷片或云母電容,如果可能的話,溫度系數(shù)盡可能低。本設(shè)計(jì)中采用大小為30PF的電容和12MHZ的晶振8。YXTAL30PF4圖3內(nèi)部振蕩電路(4)時(shí)序AT89S51典型的指令周期(執(zhí)行一條指令的時(shí)間稱為指令周期)為一個(gè)機(jī)器周期,一個(gè)機(jī)器周期由六個(gè)狀態(tài)(十二振蕩周期)組成。每個(gè)狀態(tài)又被分成兩個(gè)時(shí)相P1和P2。所以,一個(gè)機(jī)器周期可以依次表示為S1P1,S1P2,S6P1,S6P2。圖4AT89S51時(shí)序圖4給出了AT89S51單片機(jī)的取指和執(zhí)行指令的定時(shí)關(guān)系。這些內(nèi)部時(shí)鐘信號(hào)不能從外部觀察到,所用XTAL2振蕩信號(hào)作參考。在圖中可看到,低8位地址的鎖存信號(hào)ALE在每個(gè)機(jī)器周期中兩次有效一次在S1P2與S2P1期間,另一次在S4P2與S5P1期間。對(duì)于單周期指令,當(dāng)操作碼被送入指令寄存器時(shí),便從S1P2開始執(zhí)行指令。如果是雙字節(jié)單機(jī)器周期指令,則在同一機(jī)器周期的S4期間讀入第二個(gè)字節(jié),若是單字節(jié)單機(jī)器周期指令,則在S4期間仍進(jìn)行讀,但所讀的這個(gè)字節(jié)操作碼被忽略,程序計(jì)數(shù)器也不加1,在S6P2結(jié)束時(shí)完成指令操作。圖4的A和B給出了單字節(jié)單機(jī)器周期和雙字節(jié)單機(jī)器周期指令的時(shí)序。AT89S51指令大部分在一個(gè)機(jī)器周期完成。乘(MUL)和除(DIV)指令是僅有的需要兩個(gè)以上機(jī)器周期的指令,占用4個(gè)機(jī)器周期。對(duì)于雙字節(jié)單機(jī)器周期指令,通常是在一個(gè)機(jī)器周期內(nèi)從程序存儲(chǔ)器中讀入兩個(gè)字節(jié),唯有MOVX指令例外。MOVX是訪問外部數(shù)據(jù)存儲(chǔ)器的單字節(jié)雙機(jī)器周期指令。在執(zhí)行MOVX指令期間,外部數(shù)據(jù)存儲(chǔ)器被訪問且被選通時(shí)跳過兩次取指操作。圖4中C給出了一般單字節(jié)雙機(jī)器周期指令的時(shí)序9。35復(fù)位電路的選擇與設(shè)計(jì)關(guān)于單片機(jī)的置位和復(fù)位,都是為了把電路初始化到一個(gè)確定的狀態(tài),一般來說,單片機(jī)復(fù)位電路作用是把一個(gè)例如狀態(tài)機(jī)初始化到空狀態(tài),而在單片機(jī)內(nèi)部,復(fù)位的時(shí)候單片機(jī)是把一些寄存器以及存儲(chǔ)設(shè)備裝入廠商預(yù)設(shè)的一個(gè)值,復(fù)位是一個(gè)很重要的操作方式。但單片機(jī)本身是不能自動(dòng)進(jìn)行復(fù)位的,必須配合相應(yīng)的外部電路才能實(shí)現(xiàn)。當(dāng)AT89S51單片機(jī)的復(fù)位引腳RST(全稱RESET)出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就完成了復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài),而無法執(zhí)行程序。因此要求單片機(jī)復(fù)位后能脫離復(fù)位狀態(tài)。而本系統(tǒng)選用的是12MHZ的晶振,因此一個(gè)機(jī)器周期為1S,那么復(fù)位脈沖寬度最小應(yīng)為2S。在實(shí)際應(yīng)用系統(tǒng)中,考慮到電源的穩(wěn)定時(shí)間,參數(shù)漂移,晶振穩(wěn)定時(shí)間以及復(fù)位的可靠性等因素,必須有足夠的余量。根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式上電復(fù)位、手動(dòng)復(fù)位。上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。AT89S51單片機(jī)的上電復(fù)位POR(POWERONRESET)實(shí)質(zhì)上就是上電延時(shí)復(fù)位,也就是在上電延時(shí)期間把單片機(jī)鎖定在復(fù)位狀態(tài)上。在單片機(jī)每次初始加電時(shí),首先投入工作的功能部件是復(fù)位電路。復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一個(gè)延時(shí)(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間;在電源電壓穩(wěn)定之后,再插入一個(gè)延時(shí),給予時(shí)鐘振蕩器從起振到穩(wěn)定的一個(gè)等待時(shí)間;在單片機(jī)開始進(jìn)入運(yùn)行狀態(tài)之前,還要至少推遲2個(gè)機(jī)器周期的延時(shí)。上述一系列的延時(shí),都是利用在單片機(jī)RST引腳上外接一個(gè)RC支路的充電時(shí)間而形成的。典型復(fù)位電路,其中的阻容值是原始手冊(cè)中提供的。在經(jīng)歷了一系列延時(shí)之后,單片機(jī)才開始按照時(shí)鐘源的工作頻率,進(jìn)入到正常的程序運(yùn)行狀態(tài)。在電源電壓以及振蕩器輸出信號(hào)穩(wěn)定之后,又等待了一段較長的延時(shí)才釋放RST信號(hào),使得CPU脫離復(fù)位鎖定狀態(tài);而RST信號(hào)一旦被釋放,立刻在ALE引腳上就可檢測(cè)到持續(xù)的脈沖信號(hào)8。由于標(biāo)準(zhǔn)AT89S51的復(fù)位邏輯相對(duì)簡單,復(fù)位源只有RST一個(gè)(相對(duì)新型單片機(jī)來說,復(fù)位源比較單一),因此各種原因所導(dǎo)致的復(fù)位活動(dòng)以及復(fù)位狀態(tài)的進(jìn)入,都要依靠在外接引腳RST上施加一定時(shí)間寬度的高電平信號(hào)來實(shí)現(xiàn)。標(biāo)準(zhǔn)AT89S51不僅復(fù)位源比較單一,而且還沒有設(shè)計(jì)內(nèi)部上電復(fù)位的延時(shí)功能,因此必須借助于外接阻容支路來增加延時(shí)環(huán)節(jié),其實(shí),外接電阻R還是可以省略的,理由是一些CMOS單片機(jī)芯片內(nèi)部存在一個(gè)現(xiàn)成的下拉電阻RRST。例如,AT89系列的RRST阻值約為50200K。在每次單片機(jī)斷電之后,須使延時(shí)電容C上的電荷立刻放掉,以便為隨后可能在很短的時(shí)間內(nèi)再次加電作好準(zhǔn)備。否則,在斷電后C還沒有充分放電的情況下,如果很快又加電,那么RC支路就失去了它應(yīng)有的延遲功能。手動(dòng)復(fù)位要求在電源接通的條件下,在單片機(jī)運(yùn)行期間,如果發(fā)生死機(jī),用按鈕開關(guān)操作使單片機(jī)復(fù)位。單片機(jī)要完成復(fù)位,必須向復(fù)位端輸出并持續(xù)兩個(gè)機(jī)器周期以上的高電平,從而實(shí)現(xiàn)復(fù)位操作。本設(shè)計(jì)采用上電且開關(guān)復(fù)位電路,如圖5所示上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且開關(guān)復(fù)位的操作。通常選擇C1030F,本設(shè)計(jì)采用的電容值為10F的電容和電阻為47K的電阻。4K7R1ES20UFAPPOLVSWBR下圖5單片機(jī)復(fù)位電路4系統(tǒng)的軟件電路設(shè)計(jì)41程序設(shè)計(jì)思想本設(shè)計(jì)采用了C語言編寫,C語言由于采用了助記符號(hào)來編寫程序,比用機(jī)器語言的二進(jìn)制代碼編程要方便些,在一定程度上簡化了編程過程。C語言的特點(diǎn)是用符號(hào)代替了機(jī)器指令代碼,而且助記符與指令代碼一一對(duì)應(yīng),基本保留了機(jī)器語言的靈活性。使用C語言能面向機(jī)器并較好地發(fā)揮機(jī)器的特性,得到質(zhì)量較高的程序。C語言的特點(diǎn)1面向機(jī)器的低級(jí)語言,通常是為特定的計(jì)算機(jī)或系列計(jì)算機(jī)專門設(shè)計(jì)的。2保持了機(jī)器語言的優(yōu)點(diǎn),具有直接和簡捷的特點(diǎn)。3可有效地訪問、控制計(jì)算機(jī)的各種硬件設(shè)備,如磁盤、存儲(chǔ)器、CPU、I/O端口等。4目標(biāo)代碼簡短,占用內(nèi)存少,執(zhí)行速度快,是高效的程序設(shè)計(jì)語言。5經(jīng)常與高級(jí)語言配合使用,應(yīng)用十分廣泛。在程序設(shè)計(jì)過程中,為了有效地完成任務(wù),把所要完成的任務(wù)精心的分割成若干個(gè)相互獨(dú)立但相互又仍可有聯(lián)系的任務(wù)模塊,這些任務(wù)模塊使得任務(wù)變得相對(duì)單純,對(duì)外的數(shù)據(jù)交換相對(duì)簡單,容易編寫,容易檢測(cè),容易閱讀和維護(hù)。這種程序設(shè)計(jì)思想稱為模塊化程序設(shè)計(jì)思想。模塊化結(jié)構(gòu)程序的設(shè)計(jì),可以使系統(tǒng)軟件便于調(diào)試與優(yōu)化,也使其他人更好地理解和閱讀系統(tǒng)的程序設(shè)計(jì)。因此,本醫(yī)院病床呼叫系統(tǒng)在軟件的設(shè)計(jì)上,運(yùn)用了模塊化程序的結(jié)構(gòu)對(duì)軟件進(jìn)行設(shè)計(jì),使得程序變得更加直觀易懂。程序的主要模塊有主程序、顯示程序、定時(shí)溢出中斷服務(wù)程序、外部中斷服務(wù)程序。42主程序設(shè)計(jì)本系統(tǒng)程序主要模塊由主程序、定時(shí)中斷服務(wù)程序、外部中斷0服務(wù)程序組成。其中主程序是整個(gè)程序的主體。可以對(duì)各個(gè)中斷程序進(jìn)行調(diào)用。協(xié)調(diào)各個(gè)子程序之間的聯(lián)系。系統(tǒng)(上電)復(fù)位后,進(jìn)入主程序,主程序流程圖如圖6。首先對(duì)系統(tǒng)進(jìn)行初始化,包括設(shè)置各入口地址、中斷的開啟、對(duì)各個(gè)數(shù)據(jù)緩存區(qū)清“0”、賦定時(shí)器初值,初始化完畢后,就進(jìn)入數(shù)碼管顯示程序。數(shù)碼管顯示程序?qū)︼@示緩存區(qū)內(nèi)的數(shù)值進(jìn)行調(diào)用并在數(shù)碼管上進(jìn)行動(dòng)態(tài)顯示。顯示一次就對(duì)各個(gè)按鍵進(jìn)行一次掃描,查詢復(fù)位鍵RST是否按下,當(dāng)復(fù)位鍵按下后,程序返回開始,重新對(duì)系統(tǒng)進(jìn)行初始化。當(dāng)沒有按下復(fù)位鍵時(shí),程序則掃描各個(gè)接口按鍵,若沒有按下則返回顯示程,不斷地調(diào)用顯示緩存區(qū)的數(shù)據(jù)進(jìn)行顯示。使用戶能清楚的看到當(dāng)前電子秒表所記錄的時(shí)間。當(dāng)查詢到有按鍵按下后則跳轉(zhuǎn)到另外一段顯示程序并調(diào)用最紅緩存區(qū)的數(shù)據(jù)進(jìn)行顯示,此時(shí)顯示的時(shí)間即為上一次計(jì)時(shí)的時(shí)間。與此同時(shí),在按鍵按下后單片機(jī)執(zhí)行顯示程序的同時(shí)也在對(duì)當(dāng)前按鍵進(jìn)行掃描,當(dāng)該按鍵斷開后立即跳轉(zhuǎn)回之前的顯示程序顯示當(dāng)前的計(jì)時(shí)時(shí)間。在主程序中還進(jìn)行了賦寄存區(qū)的初始值、設(shè)置定時(shí)器初值以及開啟外部中斷等操作,當(dāng)定時(shí)時(shí)間到后就轉(zhuǎn)去執(zhí)行定時(shí)中斷程序。當(dāng)外部中斷有請(qǐng)求則去執(zhí)行外部中斷服務(wù)程序。并在執(zhí)行完后返回主程序。開始數(shù)碼顯示賦初始值其他按鍵是否按下否按下RST鍵是否按下調(diào)用緩存數(shù)據(jù)進(jìn)行顯示按鍵是否抬起是否否是是否圖6主程序流程圖43中斷程序設(shè)計(jì)現(xiàn)在方案中采用了一個(gè)中斷,外部中斷INT0。CPU在響應(yīng)中斷時(shí),先處理高級(jí)中斷,在處理低級(jí)中斷,若有多個(gè)同級(jí)中斷時(shí),則按自然優(yōu)先順序處理。例如當(dāng)CPU正在處理一個(gè)中斷申請(qǐng)時(shí),有出現(xiàn)了另一個(gè)優(yōu)先級(jí)比它高的中斷請(qǐng)求,這是,CPU就暫停終止對(duì)當(dāng)前優(yōu)先級(jí)較低的中斷源的服務(wù),轉(zhuǎn)去響應(yīng)優(yōu)先級(jí)比它高的中斷請(qǐng)求,并為其服務(wù)。待服務(wù)結(jié)束,再繼續(xù)執(zhí)行原來較低級(jí)的中斷服務(wù)程序。而當(dāng)CPU為級(jí)別高的終端服務(wù)程序服務(wù)時(shí),如果級(jí)別低的中斷發(fā)出中斷請(qǐng)求,此時(shí)CPU是不會(huì)響應(yīng)的,所以為了避免開始和暫停兩個(gè)按鍵中的一個(gè)出現(xiàn)沒有響應(yīng)的情況,在進(jìn)行程序編輯時(shí)要注意對(duì)中斷的使用,避免出現(xiàn)中斷的嵌套。,合理分配中斷對(duì)本設(shè)計(jì)的實(shí)現(xiàn)是至關(guān)重要的。另外由于數(shù)字式電子秒表的最小精度位1MS,屬于高精度電子秒表。定時(shí)器T0的定時(shí)周期也為1MS,為了使電子秒表暫停鍵按下后CPU能馬上去響應(yīng)中斷程序,必須將暫停的外部中斷級(jí)別高于定時(shí)計(jì)數(shù)器的中斷級(jí)別。避免出現(xiàn)CPU執(zhí)行完定時(shí)溢出中斷程序后再響應(yīng)外部中斷程序,影響計(jì)時(shí)精度。AT89S51的自然優(yōu)先級(jí)順序排列如下外部中斷0、定時(shí)/計(jì)數(shù)器0、外部中斷1、定時(shí)/計(jì)數(shù)器1、串行口中斷。(1)外部中斷0服務(wù)程序外部中斷0服務(wù)程序結(jié)合外部停止鍵實(shí)現(xiàn)數(shù)字電子秒表的停止功能,具體流程圖如圖7。當(dāng)有按鍵按下向CPU發(fā)出外部中斷請(qǐng)求,CPU轉(zhuǎn)向外部中斷0服務(wù)程序執(zhí)行,停止定時(shí)器。另外將當(dāng)前顯示的時(shí)間進(jìn)行一次存儲(chǔ),存進(jìn)中間寄存區(qū),最后中斷返回。圖7外部中斷0服務(wù)程序流程圖(2)定時(shí)中斷服務(wù)程序當(dāng)定時(shí)/計(jì)數(shù)器T0器溢出后,向CPU發(fā)出中斷請(qǐng)求信號(hào)。CPU跳轉(zhuǎn)到定時(shí)中斷程序執(zhí)行,具體流程如圖8。定時(shí)中斷程序是一個(gè)進(jìn)位程序,主要負(fù)責(zé)對(duì)1MS的加一。1MS位沒有滿十就跳出中斷程序,返回顯示程序。當(dāng)1MS位滿十后就對(duì)1MS位清零,向10MS位加一,同時(shí)檢測(cè)10MS位是否滿十,沒有滿十就跳出中斷程序,返回顯示程序。如果滿十就向100MS位加一,依次類推,最終達(dá)到99分59999秒后歸零,從零開始再次計(jì)時(shí)。定時(shí)/計(jì)數(shù)器T0工作在方式0下,TH0和TL0組成一個(gè)13位的二進(jìn)制數(shù)計(jì)數(shù)器。單片機(jī)開機(jī)或復(fù)位時(shí),它的值為00H,當(dāng)T0啟動(dòng)后,從第一個(gè)輸入脈沖開始計(jì)時(shí),每來一個(gè)脈沖計(jì)數(shù)加一,即從0000000000000開始計(jì)數(shù)到1111111111111,再計(jì)數(shù)一個(gè)脈沖時(shí)TH0和TL0組成的13位計(jì)數(shù)器將會(huì)從13個(gè)1變成13個(gè)0,并產(chǎn)生溢出,溢出位將被送到TF0標(biāo)志位,通過溢出標(biāo)志產(chǎn)生溢出中斷請(qǐng)求。顯然,T0定時(shí)器在方式0下引起一次中斷所允許計(jì)數(shù)的最多脈沖個(gè)數(shù)為213個(gè)。但如果定時(shí)計(jì)數(shù)器如果每次都固定從0開始計(jì)數(shù),到計(jì)滿后,再向CPU發(fā)出溢出中斷請(qǐng)求信號(hào)那是毫無意義的。為了使定時(shí)計(jì)數(shù)器在規(guī)定的計(jì)數(shù)脈沖個(gè)數(shù)字之后(此時(shí)應(yīng)小于213個(gè)脈沖),向CPU發(fā)出溢出中斷請(qǐng)求,可采取預(yù)先向TH0和TL0中放入一個(gè)初值X的方法,使計(jì)數(shù)器以X值為起始值開始計(jì)數(shù),即X1,X2,直至計(jì)數(shù)器計(jì)滿,從1全變?yōu)?。設(shè)需要計(jì)數(shù)的脈沖個(gè)數(shù)為Y,則有XY213在定時(shí)方式下定時(shí)時(shí)間間隔位T(213X)振蕩周期12現(xiàn)在本設(shè)計(jì)要求1MS實(shí)現(xiàn)一次中斷,選擇定時(shí)器T0工作在方式0。所以需要根據(jù)以上條件計(jì)算出T0的初值。設(shè)T0的初值為X,則(213X)12/121061103轉(zhuǎn)換位十六進(jìn)制數(shù)X71921110000011000B即TH00E0H(取X的高8位)TL018H(取X的低5位)。由于定時(shí)1MS只是一個(gè)理想化的時(shí)間,其中并沒有考慮到中斷后單片機(jī)執(zhí)行語句所花的時(shí)間。雖然執(zhí)行語句所花的時(shí)間很短只有即微秒,但積少成多,數(shù)字秒表一秒中要溢出中斷1000次,積累起來誤差就能達(dá)到毫秒級(jí),這對(duì)于精度到達(dá)毫秒級(jí)的數(shù)字電子秒表來說是很大的誤差。所以要在后期編程時(shí)還要將單片機(jī)讀程序的時(shí)間考慮進(jìn)去,在對(duì)定時(shí)器賦初值時(shí)將單片機(jī)需要執(zhí)行的語句所花的時(shí)間加上,這樣就能使數(shù)字電子秒表的誤差達(dá)到最小。圖8定時(shí)中斷服務(wù)程序44系統(tǒng)的程序設(shè)計(jì)INCLUDEDEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINTSBITBEGINP11SBITSTOPP12SBITSAVEP13SBITCLEARP14SBITDOTP07SBITL_AP37SBITL_BP36SBITL_CP35SBITL_DP34SBITS_SAVEP31SBITS_CP30UCHARA0,A1,A2,A3,A4,A5,A6UCHARJ0,I0,S_F0UCHARCODEDIS_SEG7110XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBFUNSIGNEDCHARSTORE107VOIDDELAYUINTB/005SUCHARB0,B1FORB00B0BB0FORB10B1100B1VOIDSHOWUCHARA0,UCHARA1,UCHARFP20XFFP0DIS_SEG7A0IFF1DOT1P2A1DELAY1VOIDMAINTMOD0X01TL0655361000256TH0655361000/256ET01TR00EX01IT00EA1WHILE1SHOWA0,0XFE,0SHOWA1,0XFD,0SHOWA2,0XFB,0SHOWA3,0XF7,1SHOWA4,0XEF,0SHOW10,0XDF,0/SHOWA5,0XBF,0SHOWA6,0X7F,0IFS_SAVE0S_F1TR00J0I0IFS_C0S_F0I0SWITCHICASE0L_A1L_B1L_C1L_D1BREAKCASE1L_A0L_B1L_C1L_D1BREAKCASE2L_A1L_B0L_C1L_D1BREAKCASE3L_A0L_B0L_C1L_D1BREAKCASE4L_A1L_B1L_C0L_D1BREAKCASE5L_A0L_B1L_C0L_D1BREAKCASE6L_A1L_B0L_C0L_D1BREAKCASE7L_A0L_B0L_C0L_D1BREAKCASE8L_A1L_B1L_C1L_D0BREAKCASE9L_A0L_B1L_C1L_D0BREAKCASE10L_A1L_B0L_C1L_D0BREAKCASE11L_A0L_B0L_C1L_D0BREAKCASE12L_A1L_B1L_C0L_D0BREAKCASE13L_A0L_B1L_C0L_D0BREAKCASE14L_A1L_B0L_C0L_D0BREAKCASE15L_A0L_B0L_C0L_D0BREAKDEFAULTL_A1L_B1L_C1L_D1BREAKVOIDA_MINTERRUPT0DELAY10P00X00P20XFFIFBEGIN0ELSEIFSTOP0TR00IFS_F1A0STOREJ0A1STOREJ1A2STOREJ2A3STOREJ3A4STOREJ4A5STOREJ5A6STOREJ6JIFJ11J0IJELSEIFSAVE0STOREI1A1STOREI2A2STOREI3A3STOREI4A4STOREI5A5STOREI6A6A00A10A20A30A40A50A60IIFI11I0ELSEIFCLEAR0A00A10A20A30A40A50A60STOREI0A0STOREI1A1STOREI2A2STOREI3A3STOREI4A4STOREI5A5STOREI6A6WHILEBEGIN|STOP|SAVE|CLEARVOIDSPEALINTERRUPT1TL0655361000256TH0655361000/256A0/0001SIFA010A00A1/001SIFA110A10A2/01SIFA210A20A3/1SIFA310A30A4/10SIFA46A40A5/分IFA510A6IFA610A60結(jié)論本設(shè)計(jì)的數(shù)字電子秒表是由AT89S51單片機(jī)、共陰數(shù)碼顯示管、控制按鍵、三極管等器件構(gòu)成的,設(shè)有八位計(jì)時(shí)顯示,開始、暫停、存儲(chǔ)、清除當(dāng)前數(shù)據(jù)、查看、全部清零按鍵以及一個(gè)系統(tǒng)整機(jī)復(fù)位按鈕。計(jì)時(shí)精度能到達(dá)1MS,能調(diào)看上一次計(jì)時(shí)時(shí)間,設(shè)計(jì)精簡,使用簡

溫馨提示

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

評(píng)論

0/150

提交評(píng)論