2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b> ?。?lt;/b></p><p>  二 〇 一 二 年 六 月</p><p><b>  摘 要</b></p><p>  近年來隨著計算機在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機的應(yīng)用正在不斷地走向深入,由于它具有功能強,體積小,功耗低,價格便宜,工作可靠,使用方便等特點,因此特別適

2、合于與控制有關(guān)的系統(tǒng),越來越廣泛地應(yīng)用于自動控制,智能化儀器,儀表,數(shù)據(jù)采集,軍工產(chǎn)品以及家用電器等各個領(lǐng)域,單片機往往是作為一個核心部件來使用,在根據(jù)具體硬件結(jié)構(gòu),以及針對具體應(yīng)用對象特點的軟件結(jié)合,以作完善。</p><p>  數(shù)子時鐘在日常生活中最常見,應(yīng)用也最廣泛。本次做的數(shù)子時鐘是以單片機(AT89C51)為核心,結(jié)合相關(guān)的元器件(時鐘芯片DS1302、LCD液晶顯示器),達到制作簡易數(shù)字時鐘的目的,

3、文章的核心主要是硬件設(shè)計和軟件編程兩個大的方面。硬件電路設(shè)計由包括中央處理單元電路、液晶顯示電路、人機接口電路等幾部分組成,軟件用匯編語言來實現(xiàn)。其硬件部分難點在于元器件的選擇、布局及焊接。</p><p>  關(guān)鍵詞:單片機AT89C51 LCD液晶顯示器 時鐘芯片DS1302</p><p><b>  Abstract</b></p><

4、p>  Recent years , the use of singlechip is moving toward deeply with the filter of computer in the society and the development of the large scale integrated circuit. Singlechip is especially equal to the system relat

5、ion to the control because of its strong funtion 、samll volume、low power consumption、inexpensive price、credibility work and its handy.it is used in the area of automata、Intelligent instrument、appearance、data acquisition

6、、production of war industry 、domestic appliance and so on.the singl</p><p>  Digital clock is the most common and the most widely used in our daily lives.The singlechip is the hardcore in the digital cl

7、ock made in this timethe digital clock can reach the purpose of facility digital clock with the correlation parts of an apparatus(Real Time Clock chip DS1302, Display-panel LCD an so on) To achieve the purpose of mak

8、ing simple digital clock.The core part of this article incluedes two aspeacts, one is hardware design,the other is software programming. The hard</p><p>  Keywords: singlechip AT89C51 real time clock c

9、hip DS1302, LCD Monitor</p><p><b>  目 錄</b></p><p><b>  引 言1</b></p><p>  第一章 硬件介紹3</p><p>  1.1AT89C51簡介3</p><p>  1.2AT89C51結(jié)

10、構(gòu)圖5</p><p>  1.3DS1302時鐘芯片簡介5</p><p>  1.4 LCD1602液晶顯示器簡介8</p><p>  1.4.1 概述8</p><p>  1.4.2 LCD16029</p><p>  第二章 硬件設(shè)計13</p><p>  2.1系統(tǒng)

11、硬件框圖13</p><p>  2.1.1框圖說明:13</p><p>  2.2電路原理圖14</p><p>  2.2.1系統(tǒng)電路說明15</p><p>  第三章 軟件設(shè)計18</p><p>  3.1程序流程圖18</p><p>  3.2軟件仿真圖19<

12、/p><p>  3.2按鍵功能子程序流程圖20</p><p><b>  總結(jié)21</b></p><p><b>  參考文獻22</b></p><p><b>  附錄23</b></p><p><b>  源程序23<

13、/b></p><p><b>  致謝49</b></p><p><b>  引 言</b></p><p>  20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越

14、來越快。 </p><p>  時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時間。忘記了要做的事情,當(dāng)事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能造成無可挽回的重大損失。所以精確的報時系統(tǒng)顯得尤為重要。</p><p>  單片機由于將cpu,內(nèi)存和一些必要的接口集成到一個芯片上,并且針對面向控制功能將結(jié)構(gòu)做了一定的優(yōu)化,所以它具備通用芯

15、片不具有的特點。目前,單片機正朝著高性能和多品種方向發(fā)展趨勢將是進一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面發(fā)展。因此,單片機被廣泛應(yīng)用于測控系統(tǒng),智能儀表儀器,機電一體化產(chǎn)品,智能接口以及單片機的多系統(tǒng)等領(lǐng)域。 它的應(yīng)用主要表現(xiàn)在以下幾個方面:</p><p>  (1)單片機在智能儀表中的應(yīng)用 </p><p>  單片機廣泛地用于各種儀器儀表

16、,使儀器儀表智能化,并可以提高測量的自動化程度和精度,簡化儀器儀表的硬件結(jié)構(gòu),提高其性能價格比。 </p><p>  (2)單片機在機電一體化中的應(yīng)用 </p><p>  機電一體化是機械工業(yè)發(fā)展的方向。機電一體化產(chǎn)品是指集成機械技術(shù)、微電子技術(shù)、計算機技術(shù)于一體,具有智能化特征的機電產(chǎn)品,例如微機控制的車床、鉆床等。單片機作為產(chǎn)品中的控制器,能充分發(fā)揮它的體積小、可靠性高、功能強等優(yōu)

17、點,可大大提高機器的自動化、智能化程度。 </p><p>  (3)單片機在實時控制中的應(yīng)用 </p><p>  單片機廣泛地用于各種實時控制系統(tǒng)中。例如,在工業(yè)測控、航空航天、尖端武器、機器人等各種實時控制系統(tǒng)中,都可以用單片機作為控制器。單片機的實時數(shù)據(jù)處理能力和控制功能,可使系統(tǒng)保持在最佳工作狀態(tài),提高系統(tǒng)的工作效率和產(chǎn)品質(zhì)量。 </p><p>  (4

18、)單片機在分布式多機系統(tǒng)中的應(yīng)用</p><p>  在比較復(fù)雜的系統(tǒng)中,常采用分布式多機系統(tǒng)。多機系統(tǒng)一般由若干臺功能各異的單片機組成,各自完成特定的任務(wù),它們通過串行通信相互聯(lián)系、協(xié)調(diào)工作。單片機在這種系統(tǒng)中往往作為一個終端機,安裝在系統(tǒng)的某些節(jié)點上,對現(xiàn)場信息進行實時的測量和控制。單片機的高可靠性和強抗干擾能力,使它可以置于惡劣環(huán)境的前端工作。 </p><p>  (5)單片機在人

19、類生活中的應(yīng)用 </p><p>  自從單片機誕生以后,它就步入了人類生活,如洗衣機、電冰箱、電子玩具、收錄機等家用電器配上單片機后,提高了智能化程度,增加了功能,倍受人們喜愛。單片機將使人類生活更加方便、舒適、豐富多彩。 </p><p>  綜合所述,單片機已成為計算機發(fā)展和應(yīng)用的一個重要方面。另一方面,單片機應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計思想和設(shè)計方法。從

20、前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。</p><p>  單片機模塊中最常見的是數(shù)子時鐘,數(shù)子時鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。</p><p>  數(shù)子時鐘是

21、采用數(shù)字電路實現(xiàn)對時,分,秒,數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)子時鐘的精度,遠遠超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這

22、些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)子時鐘及擴大其應(yīng)用,有著非?,F(xiàn)實的意義。 </p><p><b>  第一章 硬件介紹</b></p><p>  1.1AT89C51簡介</p><p>  AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Re

23、ad Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。圖1-1為AT89C51單片機的管腳圖</p><p>  圖1-1單

24、片機管腳圖</p><p>  5.1.1主要管腳說明</p><p><b>  VCC:供電電壓.</b></p><p><b>  GND:接地.</b></p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入

25、。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編

26、程和校驗時,P1口作為第八位地址接收。</p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)

27、勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p>  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>

28、;  P3口也可作為AT89C51的一些特殊功能口,如下所示:</p><p>  口管腳 備選功能</p><p>  P3.0 RXD 串行輸入口</p><p>  P3.1 TXD 串行輸出口</p><p>  P3.2 /INT0 外部中斷0</p><p>  P3.3 /INT1 外部中斷1<

29、;/p><p>  P3.4 T0 記時器0外部輸入</p><p>  P3.5 T1 記時器1外部輸入</p><p>  P3.6 /WR 外部數(shù)據(jù)存儲器寫選通</p><p>  P3.7 /RD 外部數(shù)據(jù)存儲器讀選通</p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。</p>&l

30、t;p>  1.2AT89C51結(jié)構(gòu)圖</p><p>  圖1-2AT89C51結(jié)構(gòu)圖</p><p>  1.3DS1302時鐘芯片簡介</p><p>  DS1302是 DALLAS 公司推出的涓流充電時鐘芯片,內(nèi)含一個實時時鐘/日歷和31字節(jié)靜 態(tài) RAM,可以通過串行接口與單片機進行通信。實時時鐘/日歷電路提供秒、分、時、日、 星期、月、年的信息,

31、每個月的天數(shù)和閏年的天數(shù)可自動調(diào)整,時鐘操作可通過 AM/PM 標(biāo) 志位決定采用24或12小時時間格式。DS1302與單片機之間能簡單地采用同步串行的方式進 行通信,僅需三根 I/O 線:復(fù)位(RST)、I/O 數(shù)據(jù)線、串行時鐘(SCLK)。時鐘/RAM 的讀</p><p>  /寫數(shù)據(jù)以一字節(jié)或多達31字節(jié)的字符組方式通信。DS1302工作時功耗很低,保持數(shù)據(jù)和時鐘信息時,功耗小于1mW。</p>

32、<p>  圖1-3DS1302管腳圖</p><p><b>  各引腳的功能為:</b></p><p>  Vcc1:主電源;Vcc2:備份電源。當(dāng) Vcc2>Vcc1+0.2V 時, 由 Vcc2向 DS1302供電,當(dāng) Vcc2< Vcc1時,由 Vcc1向 DS1302供電。</p><p>  SCLK:

33、串行時鐘,輸入,控制數(shù)據(jù)的輸入與輸出;</p><p>  I/O:三線接口時的雙向數(shù)據(jù)線;</p><p>  CE:輸入信號,在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩 個功能:第一,CE 開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒?。</p><p>  時時鐘以及 RAM。雖然數(shù)據(jù)分成兩種,但是對單片機的程序而言,其實是一

34、樣的,就是對特定的地址進行讀寫操作。</p><p>  圖1-4 DS1302的內(nèi)部結(jié)圖</p><p>  DS1302含充電電路,可以對作為后備電源的可充電電池充電,并可選擇充電使能和串 入的二極管數(shù)目,以調(diào)節(jié)電池充電電壓。不過對我們目前而言,最需要熟悉的是和時鐘相關(guān) 部分的功能,對于其它參數(shù)請參閱數(shù)據(jù)手冊。</p><p>  DS1302的工作原理<

35、/p><p>  DS1302工作時為了對任何數(shù)據(jù)傳送進行初始化,需要將復(fù)位腳(RST)置為高電平且 將8位地址和命令信息裝入移位寄存器。數(shù)據(jù)在時鐘(SCLK)的上升沿串行輸入,前8位指 定訪問地址,命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數(shù)據(jù),寫操作時 輸出數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+8(8位地址+8位數(shù)據(jù)),在多字節(jié)方式下為8加最多可達248的數(shù)據(jù)。</p><p&g

36、t;  DS1302的寄存器和控制命令</p><p>  對 DS1302的操作就是對其內(nèi)部寄存器的操作,DS1302內(nèi)部共有12個寄存器,其中有7 個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為 BCD 碼形式。此外,DS1302還有年份寄存器、 控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與 RAM 相關(guān)的寄存器等。時鐘突發(fā)寄存器可 一次性順序讀寫除充電寄存器以外的寄存器。</p><p> 

37、 日歷、時間寄存器及控制字如表1所示:</p><p>  表1-1:日歷、時鐘寄存器與控制字對照表</p><p>  最后一位 RD/W 為“0”時表示進行寫操作,為“1”時表示讀操作。</p><p>  DS1302內(nèi)部寄存器列表如表2所示:</p><p>  表1-2:DS14302內(nèi)部主要寄存器分布表</p>&l

38、t;p>  DS1302內(nèi)部的 RAM 分為兩類,一類是單個 RAM 單元,共31個,每個單元為一個8位 的字節(jié),其命令控制字為 COH~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方 式下的 RAM,此方式下可一次性讀寫所有的 RAM 的31個字節(jié),命令控制字為 FEH(寫)、 FFH(讀)。</p><p>  我們現(xiàn)在已經(jīng)知道了控制寄存器和 RAM 的邏輯地址,接著就需要知道如何通過外部接 口

39、來訪問這些資源。單片機是通過簡單的同步串行通訊與 DS1302通訊的,每次通訊都必須 由單片機發(fā)起,無論是讀還是寫操作,單片機都必須先向 DS1302寫入一個命令幀,這個幀 的格式如表1所示,最高位 BIT7固定為1,BIT6決定操作是針對 RAM 還是時鐘寄存器,接 著的5個 BIT 是 RAM 或時鐘寄存器在 DS1302的內(nèi)部地址,最后一個 BIT 表示這次操作是讀 操作抑或是寫操作。</p><p>  

40、物理上,DS1302的通訊接口由3個口線組成,即 RST,SCLK,I/O。其中 RST 從低電 平變成高電平啟動一次數(shù)據(jù)傳輸過程,SCLK 是時鐘線,I/O 是數(shù)據(jù)線。具體的讀寫時序參 考圖5,但是請注意,無論是哪種同步通訊類型的串行接口,都是對時鐘信號敏感的,而且 一般數(shù)據(jù)寫入有效是在上升沿,讀出有效是在下降沿(DS1302正是如此的,但是在芯片手 冊里沒有明確說明),如果不是特別確定,則把程序設(shè)計成這樣:平時 SCLK 保持低電平

41、, 在時鐘變動前設(shè)置數(shù)據(jù),在時鐘變動后讀取數(shù)據(jù),即數(shù)據(jù)操作總是在 SCLK 保持為低電平 的時候,相鄰的操作之間間隔有一個上升沿和一個下降沿。</p><p>  圖1-5 DS1302的命令字構(gòu)</p><p>  1.4 LCD1602液晶顯示器簡介</p><p><b>  1.4.1 概述</b></p><p&g

42、t;  液晶(Liquid Crystal)是一種高分子材料,因其特殊的物理、化學(xué)、光學(xué)特性,廣泛應(yīng)用輕薄顯示器上。</p><p>  液晶顯示器(Liquid Crystal Display,LCD)的主要原理是以電流刺激液晶分子產(chǎn)生點、線、面并配合背部燈管構(gòu)成畫面。</p><p>  各種型號的液晶通常是按照顯示字符的行數(shù)或液晶點陣的行、列數(shù)來命名。例如,1602表示每行顯示16個

43、字符,一共可以顯示兩行。這類液晶通常稱為字符型液晶,只能顯示ASCII碼字符。12232表示液晶顯示畫面由122列、32行組成,共有122*32個點來顯示各種圖形。用戶可以通過程序控制這些點中任何一個點顯示或不顯示,從而構(gòu)成各種圖形畫面。因此,12232稱為圖形型液晶。</p><p>  液晶體積小,功耗低,顯示操作簡單。但其有致命的弱點,即使用溫度范圍很窄。通用型液晶工作溫度為0到+55攝氏度,存儲溫度為-2

44、0到+60攝氏度。</p><p>  1.4.2 LCD1602 </p><p>  1 1602的外形尺寸(毫米)</p><p>  圖1-6LCD1602外形尺寸</p><p><b>  主要技術(shù)參數(shù)</b></p><p>  圖1-7LCD1602主要技術(shù)參數(shù)</p>

45、;<p><b>  接口信號說明</b></p><p>  表1-3LCD1602接口信號說明</p><p><b>  4 基本操作時序</b></p><p>  讀狀態(tài):輸入:RS=L,RW=H,E=H 輸出:D0~D7=狀態(tài)字</p>&l

46、t;p>  寫指令:輸入:RS=L,RW=L,D0~D7=指令碼,E=高脈沖 輸出:無</p><p>  讀數(shù)據(jù):輸入:RS=H,RW=H,E=H 輸出:D0~D7=數(shù)據(jù)</p><p>  寫數(shù)據(jù):輸入:RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖 輸出:無</p><p>  

47、5 RAM地址映射圖</p><p>  控制器內(nèi)部帶有80B的RAM緩沖區(qū)。對應(yīng)關(guān)系如下圖所示。</p><p>  圖1-8緩沖區(qū)對應(yīng)關(guān)系圖</p><p>  向圖中的00~0F、40~4F地址中的任意處寫入顯示數(shù)據(jù)時,液晶可立即顯示出來;當(dāng)寫入到10~27或50~67地址時,必須通過移屏指令將他們一移入可顯示區(qū)域方可正常顯示。</p><

48、p>  1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如下表所示。</p><p>  表1-4 CGROM和CGRAM中字符代碼與字符圖形對應(yīng)關(guān)系</p><p>  這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地

49、址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。</p><p><b>  狀態(tài)字說明</b></p><p><b>  表1-5狀態(tài)字說明</b></p><p>  說明:原則上每次對控制器進行讀寫操作前,都必須進行讀寫檢測,確保STA7為0。實際上,由于單片機的操作速度慢于液晶控制器的反應(yīng)速度,因此可以

50、不進行檢測,或只進行簡短的延時即可。</p><p><b>  7 指令說明 </b></p><p>  1602液晶模塊內(nèi)部的控制器共有11條控制指令。</p><p><b>  顯示模式設(shè)置</b></p><p>  表1-6顯示模塊設(shè)置</p><p>  

51、(2) 顯示開/關(guān)及光標(biāo)設(shè)置</p><p>  表1-7顯示開/關(guān)及光標(biāo)設(shè)置</p><p><b>  數(shù)據(jù)指針設(shè)置</b></p><p>  表1-8數(shù)據(jù)指針設(shè)置</p><p><b>  (4)其它設(shè)置</b></p><p><b>  表1-9其它設(shè)

52、置</b></p><p>  8.控制接口時序說明:</p><p><b>  表1-10時序參數(shù)</b></p><p><b>  第二章 硬件設(shè)計</b></p><p><b>  2.1系統(tǒng)硬件框圖</b></p><p>  

53、圖2.1系統(tǒng)硬件框圖</p><p>  2.1.1框圖說明:本設(shè)計核心部件為AT89C51單片機芯片,配合外部配件如專用日歷時鐘芯片DS1302,鍵盤,LCD1602液晶顯示器,聲光報警器,以及一些外部輔助電路,以實現(xiàn)日期、時間的顯示及定時器的功能。很具有實際意義。有廣泛的應(yīng)用性。</p><p><b>  2.2電路原理圖</b></p><

54、p><b>  圖2-2電路原理圖</b></p><p>  2.2.1系統(tǒng)電路說明:本系統(tǒng)由五個部分組成:按鍵模塊、復(fù)位電路模塊、晶振電路模塊、(注:上圖由于只要仿真,所以沒有添加復(fù)位電路和晶振電路模塊,不會影響到仿真結(jié)果)發(fā)聲模塊、時間模塊。晶振模塊負責(zé)給單片機提供時鐘周期,復(fù)位電路模塊負責(zé)上電后自動復(fù)位,或按鍵后強制復(fù)位。上電后,由單片機內(nèi)部定時器計時,同時通過動態(tài)顯示函數(shù)自動

55、將時、分、秒顯示到LCD上。同時,按鍵掃描函數(shù)一直掃描按鍵引腳狀態(tài),一旦掃描到按鍵被按下,即進入到相應(yīng)的功能函數(shù)。如果檢測到定時時間到,則驅(qū)動蜂鳴器發(fā)聲。</p><p>  單片機的晶振電路模塊如圖2-3所示:</p><p>  圖2-3晶振電路模塊</p><p>  石英晶振也連接在引腳的輸入和輸出之間,等效為一個并聯(lián)諧振回路,振蕩頻率應(yīng)該是石英晶體并聯(lián)諧振

56、頻率,晶體旁邊的兩個電容接地,實際上就是電容三點式電路的分壓電容,接地點就是分壓點。以接地點即分壓為參考點,振蕩引腳的輸入和輸出是反相的,但從并聯(lián)諧振回路即石英晶體兩端來看,形成一個正反饋以保證電路持續(xù)振蕩。</p><p><b>  復(fù)位電路如下:</b></p><p><b>  圖2-4復(fù)位電路</b></p><p

57、>  當(dāng)AT89C51單片機的復(fù)位引腳RST(全稱RESET)出現(xiàn)2個機器周期以上的高電平時,復(fù)位操作通常有兩種基本形式:上電復(fù)位和上電或開關(guān)復(fù)位。上電或開關(guān)復(fù)位要求電源接通后,單片機自動復(fù)位,并且在單片機運行期間,用開關(guān)操作也能是單片機復(fù)位。常用的上電或開關(guān)復(fù)位電路如圖所示,上電后,由于電容C3的充電和反相門的作用,使RST持續(xù)一段時間的高電平。當(dāng)單片機已在運行當(dāng)中時,按下復(fù)位開關(guān)后松開,能使RST為一段時間的高電平,從而實現(xiàn)上

58、電或開關(guān)復(fù)位的操作。</p><p><b>  發(fā)聲模塊:</b></p><p><b>  圖2.5發(fā)聲模塊</b></p><p>  喇叭由PNP三極管驅(qū)動,當(dāng)Buzzer管腳(P2_4)為高時,三極管be級沒電壓差,三極管截止;反之,三極管導(dǎo)通,有電流流經(jīng)喇叭,喇叭發(fā)聲。</p><p>

59、;<b>  按鍵模塊</b></p><p><b>  圖2-6按鍵模塊</b></p><p>  在該模塊,采用四個按鍵作為電子時鐘的控制輸入,通過按鍵來實現(xiàn)時鐘的時間設(shè)置置、定時、秒表功能。電路中將四個按鍵的一端接公共地,而單片機的P1默認為高電平,一旦按鍵被按下,則該按鍵對應(yīng)的管腳被拉低,通過軟件掃描按鍵即可知道用戶所要實現(xiàn)的功能調(diào)用

60、相應(yīng)的按鍵子程序來完成該操作。按鍵的去抖動有軟件來實現(xiàn)。</p><p><b>  第三章 軟件設(shè)計</b></p><p><b>  3.1程序流程圖</b></p><p><b>  主程序流程圖如下:</b></p><p>  圖3-1主程序流程圖</p&g

61、t;<p><b>  3.2軟件仿真圖</b></p><p><b>  圖3-2軟件仿真圖</b></p><p>  3.2按鍵功能子程序流程圖</p><p>  圖3-2按鍵功能主程序流程圖</p><p>  本次設(shè)計中,關(guān)鍵程序采用模塊化設(shè)計,這樣的好處在與程序的修改和

62、編寫,還有程序運行的穩(wěn)定性。主要模塊部分有主程序模塊,時鐘調(diào)整子程序模塊,顯示子程序模塊等。</p><p><b>  總結(jié)</b></p><p>  通過兩個月的學(xué)習(xí)和調(diào)試過程,終于完成了基于單片機的數(shù)字時鐘的工作。并且使字數(shù)子時鐘的軟件部分能夠順利運行,完成了預(yù)期的目標(biāo)。從單片機模塊數(shù)字時鐘的設(shè)計過程中也找到了一些單片機開發(fā)的規(guī)律:先了解所有元件的具體內(nèi)容,從

63、而畫出其電路圖,使數(shù)字時鐘從簡易變成多功能的方式,雖沒有做出多功能數(shù)字時鐘,卻知曉了其方法。從而讓我踏入了單片機應(yīng)用領(lǐng)域的第一步。</p><p><b>  參考文獻</b></p><p>  [1]張毅坤、陳善久、裘雪紅 《單片機微型計算機原理及應(yīng)用》西安電子科技大學(xué)出版社 1998年9月第一版</p><p>  [2]裴巖、劉利民 《

64、單片機系統(tǒng)綜合設(shè)計與實踐》 內(nèi)蒙古大學(xué)出版社</p><p>  [3]張俊謨 《單片機中級原理及應(yīng)用》 北京航空航天大學(xué)出版社 2002年8月第2版</p><p>  [4]任為民 《電子技術(shù)基礎(chǔ)課程設(shè)計》中央廣播電視大學(xué)大學(xué)出版社 1997年5月第1版</p><p>  [5]閆石 《數(shù)字電子技術(shù)基礎(chǔ)》高等教育出版社 </p><p>

65、;  [6]童詩白 《模擬電子技術(shù)基礎(chǔ)》高等教育出版社</p><p>  [7]王曉明,曾紅 《單片機教程》東北大學(xué)出版社</p><p>  [8]張毅剛等 《MCS-51單片機教程》 哈爾濱工業(yè)大學(xué)出版社</p><p>  [9]李廣弟 《單片機基礎(chǔ)》北京航空航天大學(xué)出版社</p><p>  [10]張洪潤,蘭清華 《單片機應(yīng)用教程

66、》 清華大學(xué)出版社 </p><p>  [11]John.F.Wakerly[M] DIGITAL DESIGN 北京高等出版社</p><p>  [12]Intel,Microcontroller Handbook[Z],1989</p><p>  [13]TTL Logical Advenced BiCMOS Technology Data B

67、ook.Texas Instruments</p><p><b>  1997.</b></p><p><b>  附錄</b></p><p><b>  源程序</b></p><p>  /***************************************

68、************************************* </p><p>  文件名稱:main.c</p><p>  版 本:Keil uVision4</p><p>  控 制 器: AT89C51/12MHz</p><p>  說 明:基于單片機的DS1302數(shù)字時鐘</p><

69、p>  ****************************************************************************/</p><p>  /*includes-----------------------------------------------------------------*/ </p><p>  #include <

70、;reg52.h></p><p>  #include <intrins.h></p><p>  #include <DS1302.h></p><p>  #include <LCD1602.h> </p><p>  #include <BuzzePhone.h></p>

71、;<p>  #include <Push_Button.h></p><p>  /*defines-------------------------------------------------------------------*/</p><p>  #define Time0_TH0 0xc6 //定義計數(shù)器0計數(shù)寄存器裝載的高8位值,可自

72、行修改</p><p>  #define Time0_TL0 0x0d //定義計數(shù)器0計數(shù)寄存器裝載的低8位值,可自行修改</p><p>  #define State_Clock 0 //定義空閑狀態(tài)</p><p>  #define State_AdjustWeek 1 //定義星期調(diào)整狀

73、態(tài)</p><p>  #define State_AdjustYear 2 //定義年份調(diào)整狀態(tài)</p><p>  #define State_AdjustMonth 3 //定義月份調(diào)整狀態(tài)</p><p>  #define State_AdjustDay 4 //定義日份調(diào)整狀態(tài)</

74、p><p>  #define State_AdjustHour 5 //定義時調(diào)整狀態(tài)</p><p>  #define State_AdjustMinute 6 //定義分調(diào)整狀態(tài)</p><p>  #define State_AdjustSecond 7 //定義秒調(diào)整狀態(tài)</p&g

75、t;<p>  #define State_AdjustAlarmHour 8 //定義鬧鐘時調(diào)整狀態(tài)</p><p>  #define State_AdjustAlarmMinute 9 //定義鬧鐘分調(diào)整狀態(tài)</p><p>  /*variable-------------------------------------------------

76、-----------------*/</p><p>  unsigned char data SetTime[] = {9,9,9,9,3,1,12};</p><p>  unsigned char data CurrentTime[7];</p><p>  static unsigned char Button_Value;

77、 //定義按鍵狀態(tài)值變量</p><p>  static unsigned char Function_State; //定義功能狀態(tài)變量</p><p>  static unsigned char Value_AdjustWeek; //定義星期調(diào)整變量</p><p>  static unsigned char Valu

78、e_AdjustYear; //定義年份調(diào)整變量</p><p>  static unsigned char Value_AdjustMonth; //定義月份調(diào)整變量</p><p>  static unsigned char Value_AdjustDay; //定義日份調(diào)整變量</p><p>

79、  static unsigned char Value_AdjustAlarmHour; //定義鬧鐘時調(diào)整變量</p><p>  static unsigned char Value_AdjustAlarmMinute ; //定義鬧鐘分調(diào)整變量</p><p>  static unsigned char Value_AdjustHour; //定義

80、時調(diào)整變量</p><p>  static unsigned char Value_AdjustMinute; //定義分調(diào)整變量</p><p>  static unsigned char Value_AdjustSecond; //定義秒調(diào)整變量</p><p>  static unsigned char AlarmHour =

81、0x08; //定義鬧鐘時鐘變量</p><p>  static unsigned char AlarmMinute =0x0a; //定義鬧鐘分鐘變量</p><p>  static unsigned char SweepInterval_ShowTime; //定義顯示掃描時間變量</p><p>  static un

82、signed char SweepInterval_Alarm; //定義警告掃描時間變量</p><p>  static unsigned char SweepInterval_Button; //定義按鍵掃描時間變量</p><p>  static unsigned char State_RealtimeClock; //定義警告掃描時間變量</p&g

83、t;<p>  static bit Flag_ShowTime = 0; //定義顯示掃描標(biāo)志變量</p><p>  static bit Flag_Alarm = 0; //定義警報掃描標(biāo)志變量</p><p>  static bit Flag_Button = 0;

84、 //定義按鍵掃描標(biāo)志變量</p><p>  static bit Flag_buzzer = 0; //定義蜂鳴器掃描標(biāo)志變量</p><p>  static bit Flag_ManualOperation = 0; //定義手動控制掃描標(biāo)志變量</p><p>

85、;  /**************************************************************************** </p><p>  函數(shù)名稱:Time0_Initialization(void)</p><p>  函數(shù)功能:定時器0初始化函數(shù)</p><p>  備 注:定時器工作于方式1,定時器計數(shù)寄存器

86、16位全部用于計數(shù) </p><p>  *****************************************************************************/ </p><p>  void Time0_Initialization(void)</p><p><b>  {</b></p>

87、<p>  TMOD=0x21; //T0,工作方式1</p><p>  TH0=Time0_TH0; //裝載定時器0寄存器高8位值</p><p>  TL0=Time0_TL0; //裝載定時器0寄存器低8位值</p><p>  TR0=1; //開啟T0定時器</p><p&

88、gt;  ET0=1; //允許T0定時器中斷</p><p>  EA=1; //開啟總中斷允許</p><p><b>  }</b></p><p>  /*********************************************************************

89、*******</p><p>  函數(shù)名稱:UART_Initialization()</p><p>  函數(shù)功能:串口初始化函數(shù),定時器1作為波特率時鐘發(fā)生器</p><p>  備 注:在系統(tǒng)時鐘為12MHZ時,設(shè)定串口波特率為1200bit/s或2400bit/s</p><p>  備 注:在系統(tǒng)時鐘為11.0592M

90、HZ時,設(shè)定串口波特率為9600bit/s</p><p>  ****************************************************************************/</p><p>  void UART_Initialization(void)</p><p><b>  {</b><

91、;/p><p>  SCON = 0x50; //選擇串口工作方式1,打開接收允許</p><p>  TMOD = 0x21; //定時器1工作在方式2,定時器0工作在方式1</p><p>  TH1 = 0xe6; //實現(xiàn)波特率2400(系統(tǒng)時鐘12MHZ)</p><p>  TCON = 0x40;

92、 //定時器1開始計數(shù)</p><p>  PCON = 0x80; //波特率倍頻</p><p>  RI = 0; //清接收標(biāo)志</p><p>  TI = 1; //清發(fā)送標(biāo)志</p><p>  TR1 = 1; //啟動定時器T1</p><p><

93、;b>  }</b></p><p>  /****************************************************************************</p><p>  函數(shù)名稱:UART_SendByte(unsigned char SendByte)</p><p>  入口參數(shù):unsigned

94、 char SendByte</p><p><b>  出口參數(shù):無</b></p><p>  函數(shù)功能:通過串口發(fā)送一個8位字節(jié)的數(shù)據(jù)</p><p>  備 注:16進制顯示</p><p>  ********************************************************

95、********************/</p><p>  void UART_SendByte(unsigned char SendByte)</p><p><b>  {</b></p><p>  SBUF = SendByte; //輸出字符</p><p>  while(!TI); //判斷是否發(fā)完

96、</p><p>  TI=0; //清TI</p><p><b>  }</b></p><p>  /***************************************************************************** </p><p>  函數(shù)名稱:RealtimeCl

97、ock_ShowCurrentTime(void)</p><p>  入口參數(shù):void </p><p>  出口參數(shù):void </p><p>  函數(shù)功能:實時時鐘顯示當(dāng)前時間 </p><p>  *******************************************************************

98、**********/</p><p>  void RealtimeClock_ShowCurrentTime(void)</p><p><b>  {</b></p><p>  DS1302_ReadTime(CurrentTime);</p><p>  LCD1602_DisplayTwoNumber( 2,

99、0,CurrentTime[5]);//顯示星期</p><p>  LCD1602_DisplayTwoNumber( 8,0,CurrentTime[6]);//顯示年份</p><p>  LCD1602_DisplayTwoNumber(11,0,CurrentTime[4]);//顯示月份</p><p>  LCD1602_DisplayTwoNumbe

100、r(14,0,CurrentTime[3]);//顯示日份</p><p>  LCD1602_DisplayTwoNumber( 8,1,CurrentTime[2]);//顯示時鐘</p><p>  LCD1602_DisplayTwoNumber(11,1,CurrentTime[1]);//顯示分鐘</p><p>  LCD1602_DisplayTw

101、oNumber(14,1,CurrentTime[0]);//顯示秒鐘</p><p>  LCD1602_SetCursorPosition(16,1);</p><p><b>  }</b></p><p>  /***************************************************************

102、************** </p><p>  函數(shù)名稱:KeyHandle_UpAdjust(void)</p><p>  入口參數(shù):void </p><p>  出口參數(shù):void </p><p>  函數(shù)功能:調(diào)整按鍵有效處理</p><p>  ****************************

103、*************************************************/</p><p>  void KeyHandle_UpAdjust(void)</p><p><b>  {</b></p><p>  switch(Function_State)</p><p><b>

104、  {</b></p><p>  case State_Clock: </p><p><b>  {</b></p><p>  LCD1602_SetCursorPosition(16,1);</p><p>  Flag_ManualOperation = 1;//置位手動控制標(biāo)志變量 </p

105、><p><b>  break;</b></p><p><b>  }</b></p><p>  case State_AdjustWeek: </p><p><b>  {</b></p><p>  DS1302_ReadTime(Current

106、Time);//讀取當(dāng)前時間</p><p>  Value_AdjustWeek = CurrentTime[5];</p><p>  if(Value_AdjustWeek >= 7) </p><p><b>  {</b></p><p>  Value_AdjustWeek = 7;</p>

107、<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Value_AdjustWeek++;</p><p><b>  }</b></p>&

108、lt;p>  LCD1602_DisplayTwoNumber(2,0,Value_AdjustWeek);//顯示星期</p><p>  LCD1602_SetCursorPosition(1,0);//LCD1602光標(biāo)回到星期調(diào)整位閃爍 </p><p>  SetTime[5] = Value_AdjustWeek;DS1302_SetTime(SetTime);</

109、p><p><b>  break;</b></p><p><b>  }</b></p><p>  case State_AdjustYear:</p><p><b>  {</b></p><p>  DS1302_ReadTime(Current

110、Time);//讀取當(dāng)前時間</p><p>  Value_AdjustYear = CurrentTime[6];</p><p>  if(Value_AdjustYear >= 99) </p><p><b>  {</b></p><p>  Value_AdjustYear= 99;</p>

111、;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Value_AdjustYear++;</p><p><b>  }</b></p>

112、<p>  LCD1602_DisplayTwoNumber(8,0,Value_AdjustYear);//顯示年份</p><p>  LCD1602_SetCursorPosition(5,0);//LCD1602光標(biāo)回到年份調(diào)整位閃爍</p><p>  SetTime[6] = Value_AdjustYear;DS1302_SetTime(SetTime); <

113、/p><p><b>  break;</b></p><p><b>  }</b></p><p>  case State_AdjustMonth: </p><p><b>  {</b></p><p>  DS1302_ReadTime(Cu

114、rrentTime);//讀取當(dāng)前時間</p><p>  Value_AdjustMonth = CurrentTime[4];</p><p>  if(Value_AdjustMonth >= 12) </p><p><b>  {</b></p><p>  Value_AdjustMonth = 12;

115、</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Value_AdjustMonth++;</p><p><b>  }</b>&l

116、t;/p><p>  LCD1602_DisplayTwoNumber(11,0,Value_AdjustMonth);//顯示月份</p><p>  LCD1602_SetCursorPosition(10,0);//LCD1602光標(biāo)回到月份調(diào)整位閃爍</p><p>  SetTime[4] = Value_AdjustMonth;DS1302_SetTime(

117、SetTime);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case State_AdjustDay: </p><p><b>  {</b></p><p>  DS1302_

118、ReadTime(CurrentTime);//讀取當(dāng)前時間</p><p>  Value_AdjustDay = CurrentTime[3];</p><p>  switch(State_AdjustMonth)</p><p><b>  {</b></p><p>  case 0x01:</p>

溫馨提示

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

評論

0/150

提交評論