畢業(yè)設(shè)計(論文)基于AT89S51單片機的多功能時鐘設(shè)計_第1頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機的多功能時鐘設(shè)計_第2頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機的多功能時鐘設(shè)計_第3頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機的多功能時鐘設(shè)計_第4頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機的多功能時鐘設(shè)計_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄1 緒 論11.1 發(fā)展現(xiàn)狀、目的及意義11.2 設(shè)計內(nèi)容12 系統(tǒng)總體設(shè)計22.1 總體框架設(shè)計22.2 設(shè)計與運行環(huán)境22.3 硬件功能描述23 系統(tǒng)硬件設(shè)計33.1 主控模塊at89s5133.1.1 at89s51引腳圖33.1.2 at89s51功能33.2 實時時鐘芯片ds130253.2.1 ds1302引腳功能53.2.2 ds1302內(nèi)部結(jié)構(gòu)圖63.2.3 ds1302的數(shù)據(jù)輸入輸出63.2.4 ds1302的寄存器63.3 電源模塊的設(shè)計73.4 獨立按鍵模塊73.5 顯示模塊83.6 復位電路模塊83.7鬧鈴模塊94 系統(tǒng)軟件設(shè)計104.1 主程序設(shè)計104.2 主

2、程序流程圖104.3 讀ds1302中斷及鬧鈴檢測流程圖115 結(jié) 論12致 謝12參考文獻14附 錄15281 緒論1 緒 論1.1 發(fā)展現(xiàn)狀、目的及意義單片機自20世紀70年代問世以來,以其極高的性能價格比,受到人們的重視和關(guān)注,應用很廣、發(fā)展很快。單片機具有體積小、重量輕、抗干擾能力強、環(huán)境要求不高、價格低廉、可靠性高、靈活性好、開發(fā)較為容易。單片機是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器cpu隨機存儲器ram、只讀存儲器rom、多種i/o口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、a/d轉(zhuǎn)換器等電路)集

3、成到一塊硅片上構(gòu)成的一個小而完善的計算機系統(tǒng)。單片機在出現(xiàn)時,intel公司就給其單片機取名為嵌入式微控制器(embedded microcontroller)。單片機的最明顯的優(yōu)勢,就是可以嵌入到各種儀器、設(shè)備中。這一點是巨型機和網(wǎng)絡(luò)不可能做到的。單片機在內(nèi)部已集成了越來越多的部件,這些部件包括一般常用的電路,例如:定時器,比較器,a/d轉(zhuǎn)換器,d /a轉(zhuǎn)換器,串行通信接口,watchdog電路,lcd控制器等。 隨著半導體工藝技術(shù)的發(fā)展及系統(tǒng)設(shè)計水平的提高,單片機還會不斷產(chǎn)生新的變化和進步,最終人們可能發(fā)現(xiàn):單片機與微機系統(tǒng)之間的距離越來越小,甚至難以辨認。同時,隨著人們生活節(jié)奏的加快,時

4、鐘已經(jīng)成為人們?nèi)粘I钪械谋匦杵罚S多家用電器都帶著時鐘模塊,而人們也不再滿足于僅僅具有時間顯示功能的時鐘,對時鐘功能的要求也越來越全面,單片機以其強大的功能成為多功能電子時鐘的首選,為電子時鐘的功能擴展提供了強大的支持,實現(xiàn)一物多用,提高電子時鐘的使用價值。當然們不再滿足于電子時鐘的計時顯示功能時語音時鐘在社會生活中已經(jīng)得到了廣泛應用,本文探討的系統(tǒng)即為其中一種,給出的實現(xiàn)方案和系統(tǒng)設(shè)計過程中實現(xiàn)的單片機模擬單線總線通信方式,單片機模擬spi通信方式,有一定參考價值。此外,文中探討的系統(tǒng)也對傳統(tǒng)的語音時鐘做了擴充,增加了數(shù)字溫度計模塊。本設(shè)計詳細介紹了該系統(tǒng)的組成和基本原理,中帶你介紹了硬件

5、設(shè)計的思想和軟件設(shè)計的思路,保證在系統(tǒng)功能齊全,性能良好的前提下,最大限度的簡化電路,降低系統(tǒng)的整體成本,提高系統(tǒng)的可靠性!1.2 設(shè)計內(nèi)容基于單片機的多功能時鐘設(shè)計,主要探討了一種帶數(shù)字溫度計的語音時鐘的實現(xiàn)方案。本方案采用單片機at89s51作為控制單元,與數(shù)字溫度芯片ds18b20接口獲得溫度數(shù)據(jù),與實時時鐘芯片ds1302接口獲得時間/日歷數(shù)據(jù),通過與液晶模塊ocm12864-1接口顯示溫度,時間和日歷。按鍵中斷模塊包含四個按鍵,分別與單片機int0,int1,t0,t1引腳連接,實現(xiàn)四個外部中斷源,用以調(diào)整時間和鬧鐘,開關(guān)鬧鐘和控制語音報時。語音報時通過語音芯片isd4003-4和揚

6、聲器實現(xiàn)。2 系統(tǒng)總體設(shè)計2 系統(tǒng)總體設(shè)計2.1 總體框架設(shè)計系統(tǒng)結(jié)構(gòu)如圖2-1所示。本方案采用單片機at89s51作為控制單元,與數(shù)字溫度芯片ds18b20接口獲取溫度數(shù)據(jù),與實時時鐘芯片ds1302接口獲取時間/日歷數(shù)據(jù),通過與液晶模塊ocm12864-1接口顯示溫度、時間和日歷。圖1中的按鍵中斷模塊包含了四個按鍵,分別與單片機的int0,int1,t0,t1連接,實現(xiàn)四個外部中斷源,用以調(diào)整時間和鬧鐘,開關(guān)鬧鐘和控制語音報時。圖2-1 系統(tǒng)結(jié)構(gòu)圖2.2 設(shè)計與運行環(huán)境數(shù)字鐘的程序設(shè)計和調(diào)試均在keil uvision2環(huán)境下完成的。設(shè)計并完成的程序下載至stc89c52單片機后,即可初始

7、化時鐘芯片ds1302從而開始計時,系統(tǒng)開始正常運行。2.3 硬件功能描述(1)本設(shè)計采用ds1302實時時鐘芯片來進行計時,并將1302的數(shù)據(jù)輸入單片機進行處理,送入lcd1602液晶顯示屏進行顯示。(2)用四個電位按鍵來實現(xiàn)對電子時鐘的調(diào)試工作,當按第一下總控鍵時進入中斷程序,即時鐘的調(diào)整狀態(tài),有兩個電位按鍵分別來調(diào)整時鐘的加和減;第四個按鍵用來調(diào)整時分秒日月年,按一下調(diào)整秒,連按兩下調(diào)整分,按三下調(diào)整時,四下調(diào)整日,五下調(diào)整月,六下調(diào)整年,七下退出時間設(shè)置。(3)用一個按鍵和其他部件組成的復位電路與芯片連接來實現(xiàn)整個程序及硬件的重新復位功能。3 系統(tǒng)硬件設(shè)計3 系統(tǒng)硬件設(shè)計數(shù)字鐘的電路主

8、要有電源模塊、顯示模塊、按鍵模塊、復位電路模塊、時鐘芯片模塊、主控芯片stc89c52模塊和鬧鈴模塊等7大模塊組成。3.1 主控模塊at89s51at89s51是51系列單片機的一個型號,它是atmel公司生產(chǎn)的。at89s51是一個低電壓,高性能cmos 8位單片機,片內(nèi)含8k bytes的可反復擦寫的flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(ram),器件采用atmel公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準mcs-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和flash存儲單元,功能強大的at89s51單片機可為您提供許多較復雜系統(tǒng)控制應用場合。at89s51有40

9、個引腳,32個外部雙向輸入/輸出(i/o)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線,at89s51可以按照常規(guī)方法進行編程,但不可以在線編程(s系列的才支持在線編程)。其將通用的微處理器和flash存儲器結(jié)合在一起,特別是可反復擦寫的flash存儲器可有效地降低開發(fā)成本。at89s51有pdip、pqfp/tqfp及plcc等三種封裝形式,以適應不同產(chǎn)品的需求。3.1.1 at89s51引腳圖at89s51引腳圖如圖3-1:圖3-1 at89s51引腳圖3.1.2 at89s51功能at89s51為40 腳雙列直插封裝的8 位通用微處理器,采用

10、工業(yè)標準的c51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會聚調(diào)整時的功能控制。功能包括對會聚主ic 內(nèi)部寄存器、數(shù)據(jù)ram及外部接口等功能部件的初始化,會聚調(diào)整控制,會聚測試圖控制,紅外遙控信號ir的接收解碼及與主板cpu通信等。at89s51的主要管腳有:(1) xtal1(19 腳)和xtal2(18 腳):振蕩器輸入輸出端口,外接12mhz 晶振。rst/vpd(9 腳)為復位輸入端口,外接電阻電容組成的復位電路。vcc(40 腳)和vss(20 腳)為供電端口,分別接+5v電源的正負端;p0p3:為可編程通用i/o 腳,其功能用途由軟件定義,在本設(shè)計中,p0 端

11、口(3239 腳)被定義為n1 功能控制端口,分別與n1的相應功能管腳相連接,13 腳定義為ir輸入端,10 腳和11腳定義為i2c總線控制端口,分別連接n1的sdas(18腳)和scls(19腳)端口,12 腳、27 腳及28 腳定義為握手信號功能端口,連接主板cpu 的相應功能端,用于當前制式的檢測及會聚調(diào)整狀態(tài)進入的控制功能。(2) p0 口:p0 口是一組8 位漏極開路型雙向i/o 口, 也即地址/數(shù)據(jù)總線復用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8 個ttl邏輯門電路,對端口p0 寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8

12、位)和數(shù)據(jù)總線復用,在訪問期間激活內(nèi)部上拉電阻。在flash 編程時,p0 口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。p1 口:p1 是一個帶內(nèi)部上拉電阻的8 位雙向i/o 口, p1 的輸出緩沖級可驅(qū)動(吸收或輸出電流)4 個ttl 邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(iil)。與at89c51 不同之處是,p1.0 和p1.1 還可分別作為定時/計數(shù)器2 的外部計數(shù)輸入(p1.0/t2)和輸入(p1.1/t2ex), p2 口:p2 是一個

13、帶有內(nèi)部上拉電阻的8 位雙向i/o 口,p2 的輸出緩沖級可驅(qū)動(吸收或輸出電流)4 個ttl 邏輯門電路。對端口p2 寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(iil)。在訪問外部程序存儲器或16 位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行movx dptr 指令)時,p2 口送出高8 位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存儲器(如執(zhí)行movx ri 指令)時,p2 口輸出p2 鎖存器的內(nèi)容。flash 編程或校驗時,p2亦接收高位地址和一些控制信號。 p3 口:p3 口是一組帶有內(nèi)部上拉電阻的8 位雙

14、向i/o 口。p3 口輸出緩沖級可驅(qū)動(吸收或輸出電流)4 個ttl 邏輯門電路。對p3 口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的p3 口將用上拉電阻輸出電流(iil)。p3 口除了作為一般的i/o 口線外,更重要的用途是它的第二功能 ,p3 口還接收一些用于flash 閃速存儲器編程和程序校驗的控制信號。 (3) rst:復位輸入。當振蕩器工作時,rst引腳出現(xiàn)兩個機器周期以上高電平將使單片機復位。 (4) ale/prog:當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ale(地址鎖存允許)輸出脈沖用于鎖存地址的低8 位字節(jié)。一般情況下,ale 仍以時鐘振蕩頻率的1

15、/6 輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ale 脈沖。對flash 存儲器編程期間,該引腳還用于輸入編程脈沖(prog)。如有必要,可通過對特殊功能寄存器(sfr)區(qū)中的8eh 單元的d0 位置位,可禁止ale 操作。該位置位后,只有一條 movx 和movc指令才能將ale 激活。此外,該引腳會被微弱拉高,單片機執(zhí)行外部程序時,應設(shè)置ale 禁止位無效。 (5) psen:程序儲存允許(psen)輸出是外部程序存儲器的讀選通信號,當at89s51 由外部程序存儲器取指令(或數(shù) 據(jù))時,每個機器周期兩次psen 有效,即輸出兩

16、個脈沖。在此期間,當訪問外部數(shù)據(jù)存儲器,將跳過兩次psen信號。(6) ea/vpp:外部訪問允許。欲使cpu 僅訪問外部程序存儲器(地址為0000hffffh),ea 端必須保持低電平(接地)。需注意的是:如果加密位lb1 被編程,復位時內(nèi)部會鎖存ea端狀態(tài)。如ea端為高電平(接vcc端),cpu 則執(zhí)行內(nèi)部程序存儲器中的指令。flash 存儲器編程時,該引腳加上+12v 的編程允許電源vpp,當然這必須是該器件是使用12v 編程電壓vpp。 (7) xtal1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。 (8) xtal2:振蕩器反相放大器的輸出3.2 實時時鐘芯片ds1302ds130

17、2由美國dallas公司推出的具有涓細電流充電能力的低功耗實時時鐘電路,它可以對年、月、日、周、日、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能。ds1302 存在時鐘精度不高,易受環(huán)境影響,出現(xiàn)時鐘混亂等缺點。ds1302可以用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄。3.2.1 ds1302引腳功能ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。ds1302由vcc1或vcc2兩者中的較大者供電。當vcc2大于vcc10.2v時,vcc2給ds1302供電。當vcc2小于vcc1

18、時,ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運行時,在vcc>2.0v之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),sclk為時鐘輸

19、入端。3.2.2 ds1302內(nèi)部結(jié)構(gòu)圖ds1302內(nèi)部結(jié)構(gòu)圖如圖3-2:圖3-2 ds1302內(nèi)部結(jié)構(gòu)圖3.2.3 ds1302的數(shù)據(jù)輸入輸出在控制指令字輸入后的下一個sclk時鐘的上升沿時數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個sclk脈沖的下降沿讀出ds1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位至高位7,數(shù)據(jù)讀寫時序如圖3-3所示:圖3-3 ds1302的數(shù)據(jù)輸入輸出3.2.4 ds1302的寄存器ds1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式。其日歷、時間寄存器及其控制字見表1.1。此外,ds1302

20、還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器的內(nèi)容。 ds1302與ram相關(guān)的寄存器分為兩類,一類是單個ram單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為c0h-fdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個字節(jié),命令控制字為feh(寫)、ffh(讀)。表1.1 ds1302日歷、時間寄存器及其控制字寄存器名命令字取值范圍各位內(nèi)容寫操作讀操作76543210秒寄存器80h81h00-59ch10secsec分寄存器82

21、h83h00-59010minmin時寄存器84h85h00-12/2412/24010hrhr日寄存器86h87h00-28/29/30/310010datedate月寄存器88h89h00-1200010mmonth周寄存器8ah8bh01-0700000date年寄存器8ch8dh01-9910yearyear3.3 電源模塊的設(shè)計電源模塊采用7805進行穩(wěn)壓,保證+5v電壓的穩(wěn)定輸出,進一步提高系統(tǒng)的抗干擾能力和穩(wěn)定性。電源模塊的設(shè)計如圖3-4所示:圖3-4 電源模塊的設(shè)計3.4 獨立按鍵模塊系統(tǒng)有三個獨立按鍵,獨立按鍵s1、s2、s3分別接至單片機p3.2、p3.3、p3.4口。s1

22、用來功能選擇,其功能可以用按鍵次數(shù)n來表示:n=1:校準計時的小時位 n=2:校準計時的分鐘位n=3:校準鬧鈴的小時位 n=1:校準鬧鈴的分鐘位 n=5:退出 s2主要功能用來進行加一操作。在有功能選擇的情況下,無論選中那一種功能操作,按下s2即進行一次加一操作,在沒有功能選擇的情況下,系統(tǒng)不響應此按鍵的任何操作。 s3用來控制鬧鈴的開或者關(guān),在任意時間只要按下此鍵即可打開(或關(guān)閉)鬧鈴,在按鍵一次就可以關(guān)閉(或打開)鬧鈴。鬧鈴模塊的設(shè)計如圖3-5所示:圖3-5 鬧鈴模塊的設(shè)計3.5 顯示模塊 一個良好的顯示模塊對一個系統(tǒng)非常重要,所有操作結(jié)果和計時結(jié)果,都要通過顯示模塊來顯示出來。同時顯示模

23、塊提供了良好的人機交互平臺。常用的顯示模式有l(wèi)ed 7段數(shù)碼管顯示、點陣顯示和液晶顯示。液晶顯示屏(lcd)具有輕薄短小、低耗電量、無輻射危險,平面直角顯示以及影象穩(wěn)定不閃爍等優(yōu)勢,可視面積大,畫面效果好,分辨率高,抗干擾能力強等特點。但由于液晶其成本也偏高。在使用時,不能有靜電干擾,否則易燒壞液晶的顯示芯片。鑒于led 7段數(shù)碼管成本低,也比較容易實現(xiàn)的特點,最終確定使用共陰極數(shù)碼管來顯示。 本系統(tǒng)顯示模塊電路由一塊74hc573、一塊74hc138芯片和兩個四位一體7段數(shù)碼管組成。74hc573用來驅(qū)動數(shù)碼管,74hc573的q0q7分別接四位一體數(shù)碼管的adp。74hc138控制位選。顯

24、示模塊的設(shè)計如圖3-6所示:圖3-6 顯示模塊的設(shè)計3.6 復位電路模塊復位電路主要的功能是是整個系統(tǒng)初始化,在每次上電時系統(tǒng)自動初始化,如果在程序運行的過程中程序沒有響應或者需要進行一次初始化,這是可以通過按復位開關(guān)來實現(xiàn)需要的有效操作。復位電路模塊的設(shè)計如圖3-7所示:圖3-7 復位電路模塊的設(shè)計3.7鬧鈴模塊鬧鈴模塊由蜂鳴器和蜂鳴器的驅(qū)動組成。在有鬧鈴發(fā)生的時候,蜂鳴器的驅(qū)動電路驅(qū)動蜂鳴器發(fā)聲,產(chǎn)生鬧鈴的效果。鬧鈴模塊的設(shè)計如圖3-8所示:圖3-8 鬧鈴模塊的設(shè)計4 系統(tǒng)軟件設(shè)計4 系統(tǒng)軟件設(shè)計4.1 主程序設(shè)計包含主程序設(shè)計、語音芯片錄放音程序設(shè)計、實時時鐘程序設(shè)計、溫度芯片程序設(shè)計、

25、液晶顯示程序設(shè)計五部分。該數(shù)字電子時鐘程序設(shè)計如下:(1)在程序頭將設(shè)計中的一些io口進行分配并注釋。(2)初始化程序,對單片機的io口設(shè)置為輸入輸出等,對1302,1602的參數(shù)進行設(shè)置,如設(shè)定時鐘運行為24小時制;將一些未到時鐘設(shè)計功能的功能端口關(guān)閉等。(3)開始主程序進行程序掃描,先掃初始化字子程序初始化ds1302和lcd1602,啟動時鐘芯片進行計時,初始化1602的顯示方式,將分配好的時分秒等數(shù)字調(diào)入到顯示子程序中。>顯示子程序通過分配的空間對應口將ds1302時鐘芯片的數(shù)據(jù)顯示相應的時分秒,年月日等。>進入按鍵掃描,判斷按鍵是否有變動,若有就根據(jù)設(shè)計程序?qū)ο鄳陌存I按

26、入次數(shù)而進行實現(xiàn)相應的功能。如進入時間調(diào)整,中斷進入、退出等。>最后返回主程序頭重新依次掃描。顯示過程設(shè)有消隱,按鍵通過軟件去斗。(4)子程序部分。在主程序的調(diào)用下依據(jù)不同的子程序工能而編寫子程序,有多級嵌套。這些子程序包括顯示子程序、延時子程序、時間計數(shù)子程序、按鍵處理子程序、調(diào)時間子程序等。4.2 主程序流程圖主程序流程圖如圖4-1所示:圖4-1 主程序流程圖4.3 讀ds1302中斷及鬧鈴檢測流程圖讀ds1302中斷及鬧鈴檢測流程圖如圖4-2所示:圖4-2 讀ds1302中斷及鬧鈴檢測流程圖5 結(jié) 論5 結(jié) 論通過這次畢業(yè)設(shè)計,不僅將以前的知識來個總結(jié),而且也學到了新知識。這應該也

27、是為什么學校要讓我們做畢業(yè)設(shè)計的原因吧。出去工作了,工作對不對口還說不定,如果把兩年學習的知識忘的一干二凈了,那太對不起自己更對不起父母和老師!當我做我的畢業(yè)論文“基于ds1302數(shù)字時鐘電路的設(shè)計”的時候就感覺到以前的知識都忘的差不多了,不過慶幸的事,以前打了好基礎(chǔ),在做之前把以前的知識在認真的看一遍也差不多。不過,這次我用的方法跟以前大不相同。語音芯片isd4003-4和數(shù)字溫度芯片ds18b20這兩方面知識,我在大三的時候?qū)W過一點,但是那是一心想出去,就沒有認真的去學。做畢業(yè)論文的時候是從今年剛開始的,所以時間還是比較充足的,跟指導老師商討,確定下來題目,壓力是比較大的,語音芯片isd4

28、003-4和數(shù)字溫度芯片ds18b20這兩方面知識是從沒接觸過的,但是也考慮到時間的充足就想給自己一個機會,鍛煉自己,所以剛開始得先學習語音芯片isd4003-4和數(shù)字溫度芯片ds18b20這兩方面知識,還要弄懂,理解及其運用它們。語音芯片isd4003-4和數(shù)字溫度芯片ds18b20這兩方面知識。在遇到問題的時候能夠及時的發(fā)現(xiàn)問題并解決問題。在做的過程中也閱讀了大量相關(guān)書籍,提高總結(jié)的動手能力,和自學能力,為以后的工作打下良好的基礎(chǔ)。在做論文的過程中,論文格式是讓我很頭疼的問題,對于論文格式的問題還是請教了老師和在網(wǎng)絡(luò)搜索到方法。通過這次設(shè)計我也擺脫了單純的理論知識學習狀態(tài),和實際的設(shè)計的結(jié)

29、合鍛煉了我的綜合運用所以的專業(yè)基礎(chǔ)知識,解決實際問題的能力。通過這次畢業(yè)設(shè)計,我相信單片機的發(fā)展前景非常廣闊。致 謝致 謝在論文完成之際,我首先向關(guān)心幫助和指導我的指導老師表示衷心的感謝并致以崇高的敬意!在論文工作中,遇到了很多的問題,比如格式,比如內(nèi)容一直得到老師的親切關(guān)懷和悉心指導,使我自己在論文寫作上面有很大的進步,也感覺到老師的良苦用心,因為之前感覺自己在論文完成上的很大不足在老師的幫助下得到了很大的改進,即使是在外地實習期間老師依然在無時無刻的不在關(guān)心著我們,對我們的不定期打擾也能悉心的接受并耐心幫助,驅(qū)除了我們心中的小小罪惡感!老師以其淵博的學識、嚴謹?shù)闹螌W態(tài)度、求實的工作作風和他

30、敏捷的思維給我留下了深刻的印象,我將終生難忘再一次向他表示衷心的感謝,感謝他為學生營造的濃郁學術(shù)氛圍,以及學習、生活上的無私幫助! 值此論文完成之際,謹向指導老師致以最崇高的謝意!在學校的學習生活即將結(jié)束,回顧兩年多來的學習經(jīng)歷,面對現(xiàn)在的收獲,我感到無限欣慰。為此,我向熱心幫助過我的所有老師和同學表示由衷的感謝!特別感謝我的同學們對我的學習和生活所提供的大力支持和關(guān)心!初來乍到,幸好有他們的領(lǐng)導和幫助,我才能盡快的適應這個陌生而極具吸引力的環(huán)境,又因為他們我在其他的方面也能有所發(fā)揮,這份信任以及信任帶來的自信是什么都取代不了的,我的校園生活多姿多彩多虧了有他們!還要感謝一直關(guān)心幫助我成長的室

31、友們!她們給我?guī)淼募业臏嘏刮以谡麄€學習中有信心和力量戰(zhàn)勝困難!在我即將完成學業(yè)之際,我深深地感謝我的家人給予我的全力支持!沒有她們就沒有我的今天,以后的路我會帶著他們的祝愿和期望一直驕傲的走下去!最后,衷心地感謝在百忙之中評閱論文和參加答辯的各位專家、教授!你們的諄諄教導使我在學業(yè)上受益匪淺,你們給的建議和意見將是我在學術(shù)上得到很大的提高,畢業(yè)走進社會后我們的心中只要還留著這份老師給的無私關(guān)懷就能坦然面對社會的人情冷暖!參考文獻參考文獻1王明順,趙德平.可涓流充電的串行實時時鐘芯片ds1302及應用設(shè)計j.國外電子元器件,19972高性能、低功耗帶ram實時時鐘芯片ds1302.ps武漢力

32、源電子股份有限公 司,19993 zymcu at89s51 datasheets4黃明強.ds1302在單片機系統(tǒng)中的應用j.保定師范專科學校學報,2004,175趙海蘭,朱劍,趙祥偉.ds1302實時顯示時間的原理與應用j.電子技術(shù)術(shù),2002,(1)6鄧紅,張越編著.單片機實驗與應用設(shè)計教程m.冶金工業(yè)出版社,2004,57孫雪梅,范久臣.實時時鐘芯片在單片機系統(tǒng)中的應用j.沈陽教育學院學報,2005,7(2)附 錄附 錄附錄1 系統(tǒng)原理圖附圖1 系統(tǒng)原理圖附錄2 源程序清單#include "stm8s105c_s.h"uchar n1,n2,n3;uchar u0

33、,u1,u2,u3;uchar table="20 - - " uchar table1=" : : "uchar table2='0','1','2','3','4','5','6','7','8','9'uchar table3="montuewedthufrisatsun"uchar table4=" happy birthday " /16個字符uc

34、har table5="<<<<<to you>>>>>"#define uint unsigned int #define uchar unsigned char #define pb pb_odr#define write_second 0x80 /秒寫寄存器地址#define write_minute 0x82/分寫寄存器地址#define write_hour 0x84/時寫寄存器地址#define write_day 0x86/日寫寄存器地址#define write_month 0x88/月寫寄存器地址

35、#define write_week 0x8a/周寫寄存器地址#define write_year 0x8c/年寫寄存器地址#define write_protect 0x8e/寫保護字節(jié)寫寄存器地址#define write_chongdian 0x90 /慢充電寄存器地址#define read_second 0x81/秒讀寄存器地址#define read_minute 0x83/分讀寄存器地址#define read_hour 0x85/時讀寄存器地址#define read_day 0x87/日讀寄存器地址#define read_month 0x89/月讀寄存器地址#define

36、read_week 0x8b/周讀寄存器地址#define read_year 0x8d/年讀寄存器地址_bool rs pc_odr:1; /pc作為lcd的控制端,設(shè)置為輸入_bool rw pc_odr:2;_bool en pc_odr:3;_bool sclk pa_odr:4; /串行時鐘,輸入輸出控制_bool dio pa_odr:5; /三線接口時的數(shù)據(jù)線_bool id pa_idr:5;_bool ce pa_odr:6; /復位_bool da_od pa_ddr:5;_bool da_cr1 pa_cr1:5;_bool da_cr2 pa_cr2:5;_bool i

37、d1 pg_idr:0; /將pd6引腳設(shè)置我外部中斷的輸入引腳_bool id2 pd_idr:5;_bool id3 pg_idr:1;_bool id4 pd_idr:6;/鍵盤的輸入/shfm_key(void) uchar lshi;uchar an=0,n=0;doif(!id1)delay(6);if(!id1)while(!id1);lshi=1;an+;if(an=1)write_ds1302(write_second,0x80); /先暫停時鐘秒u2=read_ds1302(read_second );u2=(u2&0x70)>>4)*10+(u2&am

38、p;0x0f);write_sfm(6,u2); lcd_wcom(0x80+0x40+7);lcd_wcom(0x38);lcd_wcom(0x0f); /顯示功能開,有光標if(an=2)u1=read_ds1302(read_minute);u1=(u1&0x70)>>4)*10+(u1&0x0f);write_sfm(3,u1); lcd_wcom(0x80+0x40+4); /顯示分lcd_wcom(0x38);lcd_wcom(0x0f); /顯示功能開,有光標if(an=3)u0=read_ds1302(read_hour);u0=(u0&0x

39、70)>>4)*10+(u0&0x0f);write_sfm(0,u0); lcd_wcom(0x80+0x40+1); /顯示時lcd_wcom(0x38);lcd_wcom(0x0f); /顯示功能開,有光標if(an=4)n3=read_ds1302(read_day);n3=(n3&0x70)>>4)*10+(n3&0x0f);write_sfm1(8,n3); lcd_wcom(0x80+9); /顯示日lcd_wcom(0x38);lcd_wcom(0x0f); /顯示功能開,有光標if(an=5)n2=read_ds1302(rea

40、d_month);n2=(n2&0x70)>>4)*10+(n2&0x0f);write_sfm1(5,n2); lcd_wcom(0x80+6); /顯示月lcd_wcom(0x38);lcd_wcom(0x0f); /顯示功能開,有光標 if(an=6)n1=read_ds1302(read_year);n1=(n1&0x70)>>4)*10+(n1&0x0f);write_sfm1(2,n1);lcd_wcom(0x80+3); /顯示年lcd_wcom(0x38);lcd_wcom(0x0f); /顯示功能開,有光標if(an=7

41、)lshi=0;an=0;write_ds1302(write_second,0x00); /從新開啟時鐘lcd_wcom(0x38);lcd_wcom(0x0c);n=1; switch(an)case1:if(id2=0)delay(4);if(id2=0) while(!id2);_asm("nop");jia_key(write_second,read_second,6,1);_asm("nop");if(id3=0) /秒的減 delay(4);if(id3=0) while(!id3);_asm("nop");jia_ke

42、y(write_second,read_second,6,0);_asm("nop");break;case 2 :if(id2=0) /分的加delay(4);if(id2=0)while(!id2);_asm("nop");jia_key(write_minute ,read_minute,3,1);_asm("nop");if(id3=0) /分的減delay(4);if(id3=0) while(!id3);_asm("nop");jia_key(write_minute ,read_minute,3,0)

43、;_asm("nop"); break;case 3 :if(id2=0) /時的加 delay(4);if(id2=0) while(!id2);_asm("nop");hjia_key(write_hour,read_hour,0,1);_asm("nop"); if(id3=0) /小時的減 delay(4);if(id3=0) while(!id3);_asm("nop");hjia_key(write_hour,read_hour,0,0);_asm("nop"); break;cas

44、e 4: if(id2=0) /日的加 delay(4);if(id2=0) while(!id2);_asm("nop");rjia_key(write_day,read_day,8,1);_asm("nop");if (id3=0) /日的減 delay(4);if(id3=0) while(!id3);_asm("nop");rjia_key(write_day,read_day,8,0);_asm("nop");break;case 5: if(id2=0) /月的加delay(4);if(id2=0) w

45、hile(!id2);_asm("nop");yjia_key(write_month ,read_month,5,1);_asm("nop"); if(id3=0) /月的減 delay(4);if(id3=0) while(!id3);_asm("nop");yjia_key(write_month ,read_month,5,0);_asm("nop"); break;case 6:if(id2=0) /年的加 delay(4);if(id2=0) while(!id2);_asm("nop&quo

46、t;);njia_key(write_year,read_year,2,1);_asm("nop"); if(id3=0) /年的減delay(4);if(id3=0) while(!id3);_asm("nop");njia_key(write_year,read_year,2,0);_asm("nop"); break; while(lshi=1);_asm("nop");return(n);return(n); void write_ds1302(uchar addr,uchar dat)uchar i ;p

47、c_ddr |=0xff;pc_cr1 |=0xff;pc_cr2 |=0x00;ce = 0; /先復位sclk = 0; /清零,保持io口的低電平,以待數(shù)據(jù)的寫入ce = 1; /置1,開始寫數(shù)據(jù)/發(fā)送地址for(i =0;i<8;i+)dio= addr&0x01; /將一位bcd碼的數(shù)據(jù)送給io口addr=addr >>1; /右移一位sclk =1; /產(chǎn)生上升沿,發(fā)送數(shù)據(jù)sclk =0;/發(fā)送數(shù)據(jù)for(i=0;i<8;i+) dio= dat&0x01; /將一位bcd碼的地址數(shù)據(jù)送給io口dat =dat>>1;sclk=1

48、; /產(chǎn)生上升沿,發(fā)送數(shù)據(jù)delay(1);sclk=0;ce = 0;/讀操作/read_ds1302(uchar addr) uchar i;uchar k;uchar dat;da_od=0;da_cr1=0;da_cr2=0;ce=0;sclk=0;ce=1;/發(fā)送地址for(i=0;i<8;i+)sclk=0;delay(10);if(addr&0x01)dio=1;else dio=0;addr>>=1;sclk=1;delay(2);da_od=0;da_cr1=0;da_cr2=0;/讀取數(shù)據(jù)/for(k=0;k<8;k+) dat>>

49、;=1;sclk=1;delay(2);sclk=0;delay(2); if(id=0)dat&=0x7f;else dat |= 0x80 ;sclk=1;ce=0;return(dat);/io口的初始化/void gpio_init(void) pc_ddr |=0x0f;pc_cr1 |=0x0f;pc_cr2 |=0x00;pg_ddr |=0x00;pg_cr1 |=0x03;pg_cr2 |=0x00;pd_ddr |=0x1c;pd_cr1 |=0x0f;exti_cr1|=0x00;itc_spr2|=0x30;pd_cr2 |=0x40;pa_ddr |=0xff

50、;pa_cr1 |=0xff;pa_cr2 |=0x00;pb_ddr |=0xff;pb_cr1 |=0xff;pb_cr2 |=0x00;/延時函數(shù)/void delay(uint n) uint x,y; for(x=n;x>0;x-) for(y=110;y>0;y-); /1602寫命令函/void lcd_wcom(uchar com)rs=0; /選擇指令寄存器 rw=0; /選擇寫 pb=com; /把命令字送入pbdelay(5); /延時一小會兒,讓1602準備接收數(shù)據(jù) en=1; /使能線電平變化,命令送入1602的8位數(shù)據(jù)口 en=0; /1602寫數(shù)據(jù)函數(shù)

51、 /void lcd_wdat(uchar dat) rs=1; /選擇數(shù)據(jù)寄存器 rw=0; /選擇寫 pb=dat; /把要顯示的數(shù)據(jù)送入p2 delay(5); /延時一小會兒,讓1602準備接收數(shù)據(jù) en=1; /使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)?en=0; /1602初始化函數(shù)/void lcd_init(void) uchar a,k;delay(15); /等待電源穩(wěn)定lcd_wcom(0x38); /8位數(shù)據(jù),雙列,5*7字形 lcd_wcom(0x0c); /開啟顯示屏,關(guān)光標,光標不閃爍 lcd_wcom(0x06); /顯示地址遞增,即寫一個數(shù)據(jù)后顯示位置右移一

52、位 lcd_wcom(0x01); /清屏 /顯示第一行/lcd_wcom(0x80);for(a=0;a<15;a+)lcd_wdat(tablea);delay(5);/顯示第二行/lcd_wcom(0x80+0x40);for(k=0;k<8;k+) lcd_wdat(table1k);delay(5);/年月日時分秒輸入的子函數(shù)/秒分的加減子函數(shù)/輸入/void jia_key(uchar rd,uchar wd,uchar fd,uchar fen)u1=read_ds1302(wd);_asm("nop");u1=(u1&0x70)>&

53、gt;4)*10+(u1&0x0f);if(fen=1) u1+;if(u1=60) u1=0;else u1-;if(u1+1)=0) u1=59;if(u1>59) u1=59;write_ds1302(rd,(u1/10)<<4 | (u1%10);/秒write_sfm(fd,u1); lcd_wcom(0x80+0x40+fd);/顯示分lcd_wcom(0x38);lcd_wcom(0x0f);/顯示功能開,有光標/時的加減子函數(shù)/輸入/void hjia_key(uchar rd,uchar wd,uchar fd,uchar shi)u0=read_d

54、s1302(wd);u0=(u0&0x70)>>4)*10+(u0&0x0f);if(shi=1) u0+;if(u0=24)u0=0;else u0-;if(u0+1)=0) u0=23; if(u0>23) u0=23; write_ds1302(rd,(u0/10)<<4 | (u0%10); /秒_asm("nop");write_sfm(fd,u0);lcd_wcom(0x80+0x40+fd); /顯示分_asm("nop");lcd_wcom(0x38);lcd_wcom(0x0f); /顯示功能開,有光標lcd_wcom(0x80+0x40+fd);/日的加減子函數(shù)/輸入/void rjia_key(uchar rd,uchar

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論