版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課 程 設(shè) 計 說 明 書題 目: 基于單片機的多功能電子鐘課 程: 單片機原理及應(yīng)用b課程設(shè)計山東建筑大學信息與電氣工程學院課程設(shè)計說明書目 錄摘 要ii1 設(shè)計目的12 設(shè)計要求23 設(shè)計內(nèi)容33.1電子時鐘的工作原理33.2 系統(tǒng)硬件電路設(shè)計及元件43.2.1 at89c51芯片43.2.2 ds1302芯片83.2.3 lcd1602液晶顯示123.3系統(tǒng)軟件電路設(shè)計153.3.1 系統(tǒng)流程圖及源代碼設(shè)計15總結(jié)與致謝18參考文獻19附錄一20摘 要單片機, 是集 cpu ,ram ,rom , 定時器,計數(shù)器和多種接口于一體的微控制器。自20 世紀 70 年代問世以來,以其極高的性能
2、價格比,受到人們的重視和關(guān)注。它體積小、重量輕、抗干擾能力強、環(huán)境要求不高、價格低廉、可靠性高、靈活性好、開發(fā)較為容易,廣泛應(yīng)用于智能生產(chǎn)和工業(yè)自動化上。本系統(tǒng)為基于ds1302的多功能電子鐘 ,以at89c51單片機 作為主控芯, 采用實時時鐘芯片ds1302,使用1602液晶作為顯示輸出。該系統(tǒng)走時精確,具有鬧鐘設(shè)置,時間模式切換,秒表以及可同時顯示時間、日期等多種功能。本文將詳細介紹at89c51單片機和ds1302 時鐘芯片的基本原理,從軟件和硬件電路的實現(xiàn)兩大方面進行分析。關(guān)鍵詞:at89c51;單片機;液晶屏;時鐘芯片;蜂鳴器341 設(shè)計目的基于51單片機設(shè)計一個能夠支持年、月、日
3、、星期、時、分、秒的電子時鐘。并且支持鬧鐘功能,及整點報時功能。在設(shè)計過程中,學習利用dxp軟件進行硬件電路設(shè)計或者利用仿真軟件進行仿真,進行單片機的軟件編程。學習芯片的選擇及方案選擇,熟悉單片機的i/o口原理;掌握lcd顯示的原理;掌握定時計數(shù)器的使用;要求設(shè)計出程序流程圖和程序。2 設(shè)計要求1設(shè)計能支持年、月、日、星期、時、分、秒的時鐘,時鐘有時間調(diào)整功能及鬧鐘功能;2時鐘具有裝卸電池時掉電保護功能,保護時間大于5分鐘;3時鐘功耗小于0.5ma/5v。4能夠提供生日提醒指示;能夠每天提供3個時間點的鬧鐘報時功能;5非易失定時鬧鈴6整點報時3 設(shè)計內(nèi)容3.1電子時鐘的工作原理本次設(shè)計時鐘電路
4、,使用了at89c51單片機芯片控制電路,單片機控制電路簡單且省去了很多復(fù)雜的線路,使得電路簡明易懂,用c語言程序來控制整個時鐘的顯示,使得編程變得更容易,這樣通過五個模塊:芯片、顯示屏、看門狗、電源、時鐘即可滿足設(shè)計要求。此設(shè)計原理圖框圖如圖3.1所示,此電路包括以下五個部分:單片機、時鐘電路、看門狗、液晶屏、電源模塊、時鐘振蕩電路。圖3.1 主電路設(shè)計框圖本設(shè)計采用c語言程序設(shè)計,使單片機控制液晶顯示年、月、日、時、分、秒,當秒計數(shù)滿60時就向分進位,分計數(shù)器計滿60后向時計數(shù)器進位,小時計數(shù)器按“23翻0”規(guī)律計數(shù)。時、分、秒的計數(shù)結(jié)果經(jīng)過數(shù)據(jù)處理可直接送顯示器顯示。當計時發(fā)生誤差的時候
5、可以用校時電路進行校正。設(shè)計采用的是時、分、秒顯示,單片機對數(shù)據(jù)進行處理同時在lcd上顯示。3.2 系統(tǒng)硬件電路設(shè)計及元件3.2.1 at89c51芯片at89c51 是美國atmel 公司生產(chǎn)的8 位flash rom 單片機。其最突出的優(yōu)點是片內(nèi)rom 為flash rom,可擦寫1000 次以上,應(yīng)用并不復(fù)雜的通用rom 寫入器就能方便的擦寫,讀取也很方便,價格低廉,具有片程序rom 二級保密系統(tǒng)。因此可靈活應(yīng)用于各種控制領(lǐng)域。at89c51 包含以下一些功能部件:(1)一個8 位cpu ;(2)一個片內(nèi)振蕩器和時鐘電路;(3)4kb flash rom ;(4)128b 內(nèi)ram;(5
6、)可尋址64kb 的外rom 和外ram 控制電路;(6)兩個16 位定時/計數(shù)器;(7)21 個特殊功能寄存器;(8)4 個8 位并行i/o 口;(9)一個可編程全雙工串行口;(10)5 個中斷源,可設(shè)置成2 個優(yōu)先級。at89c51 單片機一般采用雙列直插dip 封裝,共40 個引腳,圖3.2 為其引腳排列圖。40 個引腳大致可分為4 類:電源、時鐘、控制各i/o 引腳。圖3.2 at89c51引腳圖(1)控制線控制線共有4 根,其中3 根是復(fù)用線。所謂復(fù)用線是指具有兩種功能,正常使用時是一種功能,在某種條件下是另一種功能。1、ale/ prog 地址鎖存允許/片內(nèi)eprom 編程脈沖。(
7、1)ale 功能:用來鎖存p0 口送出的低八位地址。at89c51 在并行擴展外存儲器時,p0 口用于分時傳送低8 位地址和數(shù)據(jù)信號,且均為二進制數(shù)。當ale 信號有效時,p0 口傳送的是低8 位地址信號;ale 信號無效時,p0 口傳送的是低8 位地址信號。在ale 信號的下降沿,鎖定p0 口傳送的內(nèi)容,即低8 位地址信號。需要指出的是,當cpu 不執(zhí)行訪問外ram 指令,ale 以時鐘振蕩頻率1/6 的固定頻率輸出,因此ale 信號也可作為外部芯片clk 時鐘或其他需要。但是,當cpu 執(zhí)行movx 指令時,ale 將跳過一個ale 脈沖。(2) prog 功能:片內(nèi)eprom 的芯片,在
8、eprom 編程期間,此引腳輸入編程脈沖。2、 psen 外rom 讀選通信號。89c51 讀外rom 時,每個機器周期內(nèi)psen 兩次有效輸出。psen 可作為外rom芯片輸出允許oe 的選通信號。在讀內(nèi)rom 或讀外ram 時, psen 無效。3、rst/vpd復(fù)位/備用電源。(1)正常工作時,rst 端為復(fù)位信號輸入端,只要在該引腳上連續(xù)保持兩個機器周期以上高電平,at89c51 芯片即實現(xiàn)復(fù)位操作,復(fù)位后一切從頭開始,cpu 從0000h 開始執(zhí)行指令。(2)vpd 功能:在vcc 掉電情況下,該引腳可接上備用電源,由vpd 向片內(nèi)ram供電,以保持片內(nèi)ram 中的數(shù)據(jù)不丟失。4、e
9、a /vpp內(nèi)外rom 選擇/片內(nèi)eprom 編程電源。(1) ea 功能:正常工作時, ea 為內(nèi)外rom 選擇端。at89c51 單片機rom 尋址范圍為64kb,其中4kb 在片內(nèi),60kb 在片外。當ea 保持高電平時,先訪問內(nèi)rom,但當pc 值超過4kb 時,將自動轉(zhuǎn)向執(zhí)行外rom 中的程序。當ea 保持低電平時,則只訪問外rom,不管芯片內(nèi)有否內(nèi)rom。(2)vpp 功能:片內(nèi)有eprom 的芯片,在eprom 編程期間,此引腳用于施加編程電源。(2) i/o引腳at89c51 有p0、p1、p2、p3 4 個8 位并行i/o 端口,共32 個引腳。p0 口是一組8 位漏級開路型
10、雙向i/o 口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能以吸收電流的方式驅(qū)動8 個ttl 邏輯門電路,對端口寫1 時,又可作高阻抗輸入端用。在訪問外部程序和數(shù)據(jù)存儲器時,它是分時多路轉(zhuǎn)換的地址(低8 位)/數(shù)據(jù)總線,在訪問期間激活了內(nèi)部的上拉電阻。在flash 編程時,p0 端口接收指令字節(jié);而在驗證程序時,則輸出指令字節(jié)。驗證時,要求外接上拉電阻。p1口是帶內(nèi)部上拉電阻的雙向i/o口,向p1口寫入1時p1口被內(nèi)部上拉為高電平,可用作輸入口。當作為輸入腳時被外部信號拉低的p1口會因為內(nèi)部上拉而輸出一個電流。flash編程和程序校驗期間,p1接收低8位地址。p2口是帶內(nèi)部上拉電阻的雙向i
11、/o口,向p2口寫入1時p2口被內(nèi)部上拉為高電平可用作輸入口,當作為輸入腳時被外部拉低的p2口會因為內(nèi)部上拉而輸出電流。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行movx dptr指令)時,p2口送出高8位地址數(shù)據(jù),當使用8位尋址方式(movxri)訪問外部數(shù)據(jù)存儲器時,p2口發(fā)送p2特殊功能寄存器的內(nèi)容,在整個訪問期間不改變。flash編程和程序校驗時,p2也接收高位地址和一些控制信號。p3口是帶內(nèi)部上拉電阻的雙向i/o口,向p3口寫入1時p3口被內(nèi)部上拉為高電平可用作輸入口,當作為輸入腳時被外部拉低的p3口會因為內(nèi)部上拉而輸出電流。p3口除了作為一般的i/o口線外,更重要的
12、是它的第二功能,如表3-1所示:表3-1 p3端口的特殊功能 端口引腳兼 用 功 能 p3.0rxd 串行輸入口 p3.1txd 串行輸出口 p3.2/int0 外部中斷0 p3.3/int1 外部中斷1 p3.4t0 定時器0的外部輸入 p3.5t1 定時器1的外部輸入 p3.6/wr 外部數(shù)據(jù)存儲器寫選通 p3.7/rd 外部數(shù)據(jù)存儲器讀選通 3.2.2 ds1302芯片ds1302是美國dallas公司推出的一種高性能、低功耗的實時時鐘日歷芯片,附加31字節(jié)靜態(tài)ram,采用spi三線接口與cpu進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和ram數(shù)據(jù)。實時時鐘可提供秒、分、時
13、、日、星期、月和年,一個月小于31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達2.55.5v。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。有主電源和備份電源雙引腳,而且備份電源可由大容量電容(1f)來替代。需要強調(diào)的是,ds1302需要使用32.768khz的晶振。ds1302 包含以下一些功能部件:(1)實時時鐘,可對秒、分、時、日、周、月以及帶閏年補償?shù)哪赀M行計數(shù);(2)用于高速數(shù)據(jù)暫存的318位ram;(3)最少引腳的串行i/o;(4)2.55.5v 電壓工作范圍;(5)2.5v時耗電小于300na;(6)用于時鐘或ram數(shù)據(jù)
14、讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;(7)簡單的3線接口;(8)可選的慢速充電(至vcc1)的能力。(1) ds1302數(shù)據(jù)操作原理ds1302在任何數(shù)據(jù)傳送時必須先初始化,把rst腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在sclk的上升沿被輸入。無論是讀周期還是寫周期,開始8位指定40個寄存器中哪個被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最大可達248字節(jié)數(shù)。ds1302的內(nèi)部結(jié)構(gòu)圖如圖3.3所示。圖3.3 ds1302內(nèi)部結(jié)
15、構(gòu)圖(2) ds1302 的引腳圖及功能ds1302 的引腳圖如圖3.4所示。圖3.4 ds1302引腳圖ds1302 各引腳功能:vcc1:主電源;vcc2:備份電源。當vcc2vcc1+0.2v時,由vcc2向ds1302供電,當vcc2 vcc1時,由vcc1向ds1302供電。 sclk:串行時鐘,輸入,控制數(shù)據(jù)的輸入與輸出; i/o:三線接口時的雙向數(shù)據(jù)線; ce:輸入信號,在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個功能:第一,ce開始控制字訪問移位寄存器的控制邏輯;其次ce提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒?。引腳功能如表3-2所示:表3-2 ds1302引腳功能說明引腳號名稱功能1
16、vcc1備份電源輸入2x132.768khz晶振輸入3x232.768khz晶振輸出4gnd地5rst控制移位寄存器/復(fù)位6i/o數(shù)據(jù)輸入/輸出7sclk串行時鐘8vcc2主電源輸入(3) ds1302的控制字ds1302的控制字如表3-3所示:表3-3控制字(即地址及命令字節(jié)) 765432101rama4a3a2a1a0rd控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到ds1302中。位6:如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取ram數(shù)據(jù);位5至位1(a4a0):指示操作單元的地址;位0(最低有效位):如為0,表示要進行寫操作,為1表示進行讀操作??刂谱挚偸?/p>
17、從最低位開始輸出。在控制字指令輸入后的下一個 sclk時鐘的上升沿時,數(shù)據(jù)被寫入 ds1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個 sclk脈沖的下降沿,讀出 ds1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。(4) ds1302時序ce 輸入驅(qū)動高啟動所有的數(shù)據(jù)傳輸。ce 輸入有兩個功能。首先,ce打開控制邏輯,允許訪問的移位寄存器的地址/命令序列。其次,ce 提供了一個終止單字節(jié)或多字節(jié)數(shù)據(jù)傳輸方法。一個時鐘周期是由一個下降沿之后的上升沿序列。對于數(shù)據(jù)傳輸而言,數(shù)據(jù)必須在有效的時鐘的上升沿輸入,在時鐘的下降沿輸出。如果ce 為低,所有的i/o 引腳變?yōu)楦?/p>
18、阻抗狀態(tài),數(shù)據(jù)傳輸終止。對于數(shù)據(jù)輸入:開始的8個sclk 周期,輸入寫命令字節(jié),數(shù)據(jù)字節(jié)在后8個sclk 周期的上升沿輸入。數(shù)據(jù)輸入位0 開始。對于數(shù)據(jù)輸出:開始的8個sclk 周期,輸入一個讀命令字節(jié),數(shù)據(jù)字節(jié)在后8個sclk 周期的下降沿輸出。注意,第一個數(shù)據(jù)字節(jié)的第一個下降沿發(fā)生后,命令字的最后一位被寫入,命令字節(jié)的最后一位被寫入。當ce 仍為高時。如果還有額外的sclk 周期,ds1302 將重新發(fā)送數(shù)據(jù)字節(jié),這使ds1302 具有連續(xù)突發(fā)讀取的能力。ds1302數(shù)據(jù)讀寫時序如圖3.5所示:圖3.5 數(shù)據(jù)讀寫時序3.2.3 lcd1602液晶顯示lcd1602是一種用5x7點陣圖形來顯
19、示字符的液晶顯示器模塊,它顯示的容量為2行16個字共32個字符。它由若干個57或者511點陣字符位組成,每個點陣字符位都可以顯示一個字符。模塊采用數(shù)字式接口,能夠方便地與單片機等控制類芯片進行通信。由于其具有體積小、重量輕、顯示質(zhì)量高、功耗低等諸多優(yōu)點而被廣泛用于智能化儀器儀表的顯示器件。(1)lcd1602引腳及功能lcd1602的引腳如圖3.6所示:vss:電源地。vdd:接電源正極。vl:液晶顯示偏壓信號。rs:數(shù)據(jù)/命令選擇端(h/l)。:讀/寫選擇端(h/l)。e:使能端。當e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。d1d8:8位雙向數(shù)據(jù)線。 bla:背光源正極;blk:背光源負
20、極。圖3.6 lcd1602引腳圖lcd1602引腳功能表如下表3-4所示:表3-4 lcd1602引腳功能表編號符號引腳說明編號符號引腳說明1vss電源地9d2數(shù)據(jù)2vdd電源正極10d3數(shù)據(jù)3vl液晶顯示偏壓11d4數(shù)據(jù)4rs數(shù)據(jù)/命令選擇12d5數(shù)據(jù)5r/w讀/寫選擇13d6數(shù)據(jù)6e使能信號14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負極液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志位是不是為低電平,是低電平則表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。表3-5為 lcd1602的內(nèi)部顯示地
21、址。表3-5 lcd1602的內(nèi)部顯示地址123141516第一行80h81h82h8dh8eh8fh第二行0c0h0c1h0c2h0cdh0ceh0cfh3.3系統(tǒng)軟件電路設(shè)計3.3.1 系統(tǒng)流程圖及源代碼設(shè)計(1) 主程序流程圖設(shè)計3.7 主程序流程圖(2)子程序流程圖設(shè)計1、 ds1302 定時器中斷子程序流程圖圖3.8 ds1302中斷流程圖程序主要實現(xiàn)對ds1302寫保護、充電,對年、月、日、時、分、秒等寄存器的讀寫操作。在讀寫操作子程序中都執(zhí)行了關(guān)中斷指令,因為在串行通信時對時序要求比較高,而且在此是用i/o口軟件模擬串行時鐘脈沖,所以在通信過程中最好保證傳輸?shù)倪B續(xù)性,不要允許中斷
22、,如圖3.8所示。2、 lcd1602 流程圖程序主要實現(xiàn)對信息的顯示,包括年、月、日、時、分、秒等信息,在這里要注意它的讀寫控制指令。其流程圖如圖3.9所示。 圖3.9 lcd1602初始化流程圖總結(jié)與致謝通過這次對基于單片機的電子時鐘設(shè)計的設(shè)計與制作過程,加強了我們動手、思考和解決問題的能力。在設(shè)計過程中我們利用altium軟件進行原理圖及pcb圖的繪制,最后再利仿真軟件進行檢查,看程序是否能顯示其功能。在設(shè)計過程中讓我進一步深刻的學習各種軟件的利用以及各種軟件給我們帶來的便利。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合
23、起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多專業(yè)知識問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時,在老師的身上我們學也到很多實用的知識,在次我們表示感謝!同時,對給過我?guī)椭乃型瑢W和各位指導(dǎo)老師再次表示忠心的感謝!參考文獻1 馬潮. avr單片機嵌入式系統(tǒng)原理與應(yīng)用實踐 m.北京: 北京航空航天大學出版社,2007.2 楊欣,王玉鳳,劉湘黔
24、. 51單片機應(yīng)用從零開始 m.北京: 清華大學出版社,2008.3 陳在平. 現(xiàn)場總線及工業(yè)控制網(wǎng)絡(luò)技術(shù)m.北京: 電子工業(yè)出版社,2008.4 沈建華,楊艷琴. msp430系列16位超低功耗單片機原理與實踐m. 北北京航空航天大學出版社,2008.5 張成偉. 基于嵌入式linix的gsm/gprs無線通信模塊的設(shè)計與實現(xiàn)d. 華中科技大學6 趙亮gprs無線網(wǎng)絡(luò)在遠程數(shù)據(jù)采集中的應(yīng)用計算機工程與設(shè)計.2005. 26(9).7 馬忠梅.單片機的c語言應(yīng)用程序設(shè)計m.北京:北京航空航天大學出版社,2003. 8 胡漢才.單片機原理及其接口技術(shù)m.北京:清華大學出版社,2004.9 雷霖.
25、 現(xiàn)場總線及工業(yè)控制網(wǎng)絡(luò)技術(shù)m.北京: 電子工業(yè)出版社,2004. 10 許洪華. 現(xiàn)場總線與工業(yè)以太網(wǎng)技術(shù)m. 北京: 電子工業(yè)出版社,2007. 附錄一#include #include/*/#define uchar unsigned char #define uint unsigned int#define time (0x10000-50000)#define flag 0xef /鬧鐘標志/*/引腳連接圖sbit clk=p12;sbit dat=p13;sbit rst=p14;sbit rs=p15;sbit rw=p16;sbit e=p17;sbit p33=p33;sbi
26、t key1 = p20;sbit key2 = p21;sbit key3 = p22;sbit key4 = p23;/*/全局變量及常量定義uchar i=20,j;uchar databuf16 = ;/日期uchar timebuf16 = ;/時間 uchar alarm2,time3;uchar code day=31,28,31,30,31,30,31,31,30,31,30,31;/12個月的最大日期(非閏年) /閏年月星期表 const unsigned char weektab = (3 5) + 31,/1月 (6 5) + 29,/2月 (0 5) + 31,/3月
27、(3 5) + 30,/4月 (5 5) + 31,/5月 (1 5) + 30,/6月 (3 5) + 31,/7月 (6 5) + 31,/8月 (1 5) + 30,/9月 (4 5) + 31,/10月 (0 5) + 30,/11月 (2 5) + 31 /12月 ; /音律表uint code table1=64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217;/發(fā)聲部分的延時時間uchar code table2=0x82,1,0x81,0xf4,0xd4
28、,0xb4,0xa4,0x94,0xe2,1,0xe1,0xd4,0xb4,0xc4,0xb4,4,0;/鬧鐘中用的全局變量uchar th1,tl1;/*/延時1ms函數(shù)delay1ms(uchar time) uchar i,j; for(i=0;itime;i+) for(j=0;j250;j+); /*/lcd控制函數(shù)enable() rs=0; rw=0; e=0; delay1ms(3); e=1;/*/lcd1602寫入字符函數(shù)lcd1602_writeschr(uchar i) p0=i; rs=1; rw=0; e=0; delay1ms(2); e=1;/*/lcd1602
29、寫入字符串函數(shù)/入口函數(shù)/uchar data *address : 寫入數(shù)據(jù)首地址/ucharm:寫入字節(jié)數(shù)lcd1602_writestr(uchar *address,uchar m) uchar i,j; for(i=0;im;i+,address+) j=*address; lcd1602_writeschr(j); /*/lcd顯示void lcdshow(void) p0=0xc; /顯示器開、光標關(guān) enable(); /p0=0x80; /寫入顯示起始地址 /enable(); /lcd1602_writestr(databuf,16); /寫入日期顯示緩存 p0=0xc1;
30、 /寫入顯示起始地址 enable(); lcd1602_writestr(timebuf,16); /寫入時間顯示緩存/*/ds1302寫入子程序void ds1302_write(uchar temp) uchar i; clk=0; /將ds1320時鐘脈沖拉低 _nop_();/延時一指令周期 rst=1; /rst置高電平 _nop_();/延時一指令周期 for(i=0;i=1; /右移一位 clk=0; /拉低時鐘脈沖 /*/ds1302讀取子程序uchar ds1302_read() uchar i,j=0; for(i=0;i=1; /右移一位 _nop_(); /延時一指令
31、周期 clk=0; /拉低時鐘脈沖 _nop_(); /延時一指令周期 if(dat) /判斷接收該位數(shù)據(jù)是否為1 j|=0x80;/該位置1 _nop_(); /延時一指令周期 clk=1; /拉高時鐘脈沖 return(j); /返回數(shù)值/*/部分顯示數(shù)據(jù)初始化timestart() timebuf0=timebuf8=timebuf9=timebuf10=0x20; /不顯示字符 timebuf2=timebuf5=:; /時間分隔顯示 ds1302_write(0xc1); alarm0=ds1302_read(); rst=0; ds1302_write(0xc3); alarm1=
32、ds1302_read(); rst=0; ds1302_write(0xc5); databuf0=ds1302_read(); rst=0;/*/讀取時間readtime() uchar i,m,n; for(m=0,i=0,n=0x85;i7;i+=3,n-=2,m+) /連續(xù)讀取時,分,秒 ds1302_write(n); /寫入讀取寄存器指令 timem=ds1302_read(); /讀取數(shù)據(jù) rst=0; /將rst電平拉低,停止傳輸 timebufi=timem/16+0x30; /將兩位數(shù)據(jù)的十位轉(zhuǎn)為字符格式 timebufi+1=timem%16+0x30;/將兩位數(shù)據(jù)的個
33、位轉(zhuǎn)為字符格式 /*/功能選擇超時定時器time0() interrupt 1 using 1 i-; if(i=0) if(j!=0) j-; i=20; th0=time/256,tl0=time%256; /*/產(chǎn)生鬧鈴音調(diào)intime1() interrupt 3 th1=th1,tl1=tl1; p32=!p32;/*/鬧鐘顯示void alarmshow(void) uchar i,j,a,b,n; et1=1; for(j=0;j=4; if(a=0) tr1=0; goto d1; a=(-a)1)/2; th1=th1=table1a/256,tl1=tl1=table1a%
34、256; tr1=1;d1: do b-; for(n=0;n0xc5) i=0xc2; else if(key2 = 1) year=(databuf4&0xf)*10+(databuf5&0xf); /將字符格式的年份轉(zhuǎn)換為數(shù)值格式 month=(databuf7&0xf)*10+(databuf8&0xf); /將字符格式的月份轉(zhuǎn)換為數(shù)值格式 day=(databuf10&0xf)*10+(databuf11&0xf); /將字符格式的日數(shù)轉(zhuǎn)換為數(shù)值格式 if(i=0x85) /設(shè)置年份 year+; if(year99) year=0; if(year%4)!=0) if(month=
35、2&day=29) day=28; else if(i=0x88) /設(shè)置月份 month+; if(month12) month=1; if(daydaymonth-1) day=daymonth-1; if(month=2&(year%4)=0) /計算是否閏年 day=29; else if(i=0x8b) /設(shè)置日期 day+; if(daydaymonth-1) if(month=2&(year%4)=0) /計算是否閏年 if(day29) day=1; if(month!=2) day=1; else if(i=0xc2) /設(shè)置小時 n=(timebuf0&0xf)*10+(t
36、imebuf1&0xf); n+; if(n23) n=0; timebuf0=n/10+0x30; timebuf1=n%10+0x30; else /設(shè)置分鐘 n=(timebuf3&0xf)*10+(timebuf4&0xf); n+; if(n59) n=0; timebuf3=n/10+0x30; timebuf4=n%10+0x30; databuf4=year/10+0x30; /將數(shù)值格式的日期轉(zhuǎn)換為字符形式 databuf5=year%10+0x30; databuf7=month/10+0x30; databuf8=month%10+0x30; databuf10=day/
37、10+0x30; databuf11=day%10+0x30; lcdshow(); else if(key3 = 1) /按保存退出鍵后,向ds1302寫入設(shè)置后的日期時間 ds1302_write(0x8c); ds1302_write(databuf4&0xf)*16+(databuf5&0xf); rst=0; ds1302_write(0x8a); ds1302_write(setweek(); rst=0; for(i=7,n=0x88;i11;i+=3,n-=2) ds1302_write(n); ds1302_write(databufi&0xf)*16+(databufi+1
38、&0xf); rst=0; for(i=0;i7;i+=3,n-=2) ds1302_write(n); ds1302_write(timebufi&0xf)*16+(timebufi+1&0xf); rst=0; tr0=0; return; else tr0=0; return; if(j=0) tr0=0; return; /*/設(shè)置鬧鐘void setalarm(void) uchar i,n; for(i=1;i0xc5) i=0xc2; else if(key2 = 1) if(i=0xc2) n=(timebuf0&0xf)*10+(timebuf1&0xf); n+; if(n23) n=0; timebuf0=n/10+0x30; timebuf1=n%10+0x30; else n=(timebuf3&0xf)*10+(timebuf4&0xf); n+; if(n59) n=0; timebuf3=n/10+0x30; timebuf4=n%10+0x30; lcdshow(); else if(key3 = 1) ds1302_write(0xc0); ds1302_write(timebuf0&0xf)*16+(t
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安班長述職報告范文(7篇)
- 中班第一學期個人計劃范文
- 護理服務(wù)心得體會
- 中學秋季開學典禮校長致辭(13篇)
- 以感恩為題演講稿合集7篇
- 洋蔥幼兒課件教學課件
- 搜索命令大全
- 實習員工勞動合同-文書模板
- 影響居民健康主要危險因素評估
- 大班誠信課件教學課件
- 專職消防員及消防文員報名登記表
- 概率論與數(shù)理統(tǒng)計(天津大學)知到章節(jié)答案智慧樹2023年
- 企業(yè)財務(wù)會計(高教版)教案:第六章 固定資產(chǎn)
- 中學生必需把握的3500個常用漢字
- 職業(yè)技術(shù)學院校企合作考核評價指標體系
- 人身保險學課程標準
- 人教版高中美術(shù) 《傳承與創(chuàng)新-中國近現(xiàn)代美術(shù)》課件
- 集成電路封裝材料-熱界面材料
- 各地大學生村官考試試題
- Q-SY 08365-2021 氣瓶使用安全管理規(guī)范
- 銷售技巧之導(dǎo)購六式
評論
0/150
提交評論