基于51單片機(jī)電子鬧鐘或萬年歷的設(shè)計課程設(shè)計_第1頁
基于51單片機(jī)電子鬧鐘或萬年歷的設(shè)計課程設(shè)計_第2頁
基于51單片機(jī)電子鬧鐘或萬年歷的設(shè)計課程設(shè)計_第3頁
基于51單片機(jī)電子鬧鐘或萬年歷的設(shè)計課程設(shè)計_第4頁
基于51單片機(jī)電子鬧鐘或萬年歷的設(shè)計課程設(shè)計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計基于51單片機(jī)電子鬧鐘或萬年歷的設(shè)計目錄目錄11.項目背景31.1 項目研究的目的和意義31.2課題研究的內(nèi)容32.方案的選擇和和論證42.1 單片機(jī)型號的選擇42.2 按鍵的選擇42.3 顯示器的選擇42.4 計時部分的選擇52.5 發(fā)音部分的設(shè)計52.6電路設(shè)計最終方案53. at89c52單片機(jī)簡介63.1單片機(jī)基本特性63.2單片機(jī)內(nèi)部結(jié)構(gòu)圖63.3 單片機(jī)i/o引腳結(jié)構(gòu)63.3.1 p0口63.3.2 p1口73.3.3 p2口73.3.4 p3口73.4單片機(jī)最小系統(tǒng)板84. 數(shù)字電子鐘的設(shè)計原理和方法94.1 設(shè)計原理94.2 硬件電路的設(shè)計94.2.1 ds1302時鐘

2、芯片94.2.2 1602 液晶簡介114.2.3 蜂鳴器驅(qū)動電路124.2.4 獨(dú)立鍵盤電路135.軟件部分的設(shè)計145.1程序流程圖145.1.1 系統(tǒng)總流程圖145.1.2 ds1302時鐘程序流程圖155.1.3 lcd顯示程序流程圖165.2程序的設(shè)計175.2.1 ds1302讀寫程序175.2.2液晶顯示程序177.心得體會20參考文獻(xiàn)21附錄一 系統(tǒng)原理圖22附錄二 系統(tǒng)程序231.項目背景1.1 項目研究的目的和意義20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性

3、能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時間。忘記了要做的事情,當(dāng)事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。例如,許多火災(zāi)都是由于人們一時忘記了關(guān)閉煤氣或是忘記充電時間等造成的。而鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便。數(shù)字鐘是通過數(shù)字電路實現(xiàn)時,分,秒數(shù)字顯示的計時裝置,廣泛用于個人家庭、車站、碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?。由于?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便

4、,而且大大地擴(kuò)展了鐘表原先的報時功能,諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烤箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實的意義。1.2課題研究的內(nèi)容本論文主要研究基于單片機(jī)的萬年歷設(shè)計。當(dāng)程序執(zhí)行后,lcd顯示即時時間、年月日、星期。設(shè)置4個操作鍵:k1,時間調(diào)整鍵;k2,上調(diào)鍵;k3,下調(diào)鍵;k4,鬧鐘設(shè)置鍵本設(shè)計的主要內(nèi)容:1、了解單片機(jī)技術(shù)的發(fā)展現(xiàn)狀,熟悉萬年歷各模塊的工作原理;2、選擇適當(dāng)?shù)男酒驮骷_定系統(tǒng)電路,繪制電路原理圖,尤其是各接口電路;3、熟悉

5、單片機(jī)使用方法和c語言的編程規(guī)則,編寫出相應(yīng)模塊的應(yīng)用程序。設(shè)計目標(biāo):使基于at89c52單片機(jī)的萬年歷實現(xiàn)以下三個功能:a.具有年、月、日、星期、時、分、秒等功能;b.具備年、月、日、星期、時、分、秒校準(zhǔn)功能;2.方案的選擇和和論證2.1 單片機(jī)型號的選擇通過對多種單片機(jī)性能的分析,最終認(rèn)為at89c52是最理想的電子時鐘開發(fā)芯片。at89c51是一種帶4k字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能cmos8位微處理器,器件采用atmel高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的mcs-51指令集和輸出管腳相兼容。由于將多功能8位cpu和閃爍存儲器組合在單個芯片中,atmel的at89

6、c52是一種高效微控制器,而且它與mcs-51兼容,且具有4k字節(jié)可編程序存儲器和1000次擦寫循環(huán),數(shù)據(jù)保留時間為10年,是最好的選擇。2.2 按鍵的選擇方案一:44矩陣式鍵盤。如果選擇此方案,那么在修改時鐘或設(shè)置鬧鈴時間時就可以直接從鍵盤輸入,方便、快捷,但程序較為復(fù)雜。 方案二:獨(dú)立式按鍵。如果設(shè)置過多按鍵,將會占用較多i/o口,而且會給布線帶來不便,因此,此方案適用于按鍵較少的情況。如果選擇此方案,由于按鍵較少,在修改時間或設(shè)置鬧鈴時間時就不能直接輸入,只能通過加或減完成,稍為麻煩一些,但其程序簡單。 由于并不需要經(jīng)常修改時間和設(shè)置鬧鈴時間,而且方案二的程序簡單,按鍵少、成本低,因此,

7、選擇方案二。2.3 顯示器的選擇方案一:采用led數(shù)碼管動態(tài)掃描,led數(shù)碼管價格適中,對于顯示數(shù)字合適,采用動態(tài)掃描法與單片機(jī)連接時,雖然占用的單片機(jī)口線少,但連線還需要花費(fèi)一點(diǎn)時間,所以也不用此種作為顯示。方案二:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,若采用在顯示數(shù)字顯得太浪費(fèi),且價格也相對較高,所以在此也不用此種作為顯示。方案三:采用1602液晶顯示屏,該液晶顯示屏的顯示功能強(qiáng)大,內(nèi)置192種字符,可顯示大量符號、數(shù)字,清晰可見,而且功率消耗小壽命長抗干擾能力強(qiáng)。所以在此設(shè)計中采用1602液晶顯示屏。2.4 計時部分的選擇方案一:直接采用單

8、片機(jī)定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大,所以不采用此方案。方案二:采用ds1302時鐘芯片實現(xiàn)時鐘,ds1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年進(jìn)行計數(shù),而且精度高,位的ram做為數(shù)據(jù)暫存區(qū),工作電壓2.5v5.5v范圍內(nèi),2.5v時耗電小于300na。所以本設(shè)計采用ds1302時鐘芯片。2.5 發(fā)音部分的設(shè)計通過三極管放大后驅(qū)動蜂鳴器工作,再通過軟件產(chǎn)生的時時間方波驅(qū)動蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。2.6電路設(shè)計最終方案綜上各方案所述,

9、對此次作品的方案選定: 采用at89c52作為主控制芯片,ds1302時鐘芯片計時,lcd1602作為顯示模塊。3. at89c52單片機(jī)簡介3.1單片機(jī)基本特性n 8 位的 cpu, 片內(nèi)有振蕩器和時鐘電路,工作頻率為024mhzn 片內(nèi)有 256字節(jié) 數(shù)據(jù)存儲器 ramn 片內(nèi)有 8k字節(jié) 程序存儲器 n rom4個8位的并行i/o口(p0、p1、p2、p3)n 1個 全雙工串行通訊口n 3個16位 定時器/計數(shù)器(t0、t1、t2)n 可處理 6個中斷源,兩級中斷優(yōu)先級3.2單片機(jī)內(nèi)部結(jié)構(gòu)圖圖3-1 單片機(jī)內(nèi)部結(jié)構(gòu)圖3.3 單片機(jī)i/o引腳結(jié)構(gòu)3.3.1 p0口p0 口是一組8 位漏極開

10、路型雙向i/o 口, 也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8 個ttl邏輯門電路,對端口p0 寫“1”時,可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8 位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在flash編程時,p0 口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要求外接上拉電阻。3.3.2 p1口p1 是一個帶內(nèi)部上拉電阻的8 位雙向i/o 口, p1 的輸出緩沖級可驅(qū)動(吸收或輸出電流)4 個ttl 邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為內(nèi)部存

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

12、據(jù)存儲器(例如執(zhí)行movx dptr 指令)時,p2 口送出高8 位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存儲器(如執(zhí)行movxri 指令)時,p2 口輸出p2鎖存器的內(nèi)容。flash編程或校驗時,p2亦接收高位地址和一些控制信號。3.3.4 p3口p3 口是一組帶有內(nèi)部上拉電阻的8 位雙向i/o 口。p3 口輸出緩沖級可驅(qū)動(吸收或輸出電流)4 個ttl邏輯門電路。對p3 口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的p3 口將用上拉電阻輸出電流(iil)。p3 口除了作為一般的i/o 口線外,更重要的用途是它的第二功能p3 口還接收一些用于flash閃速存儲器編程

13、和程序校驗的控制信號。3.4單片機(jī)最小系統(tǒng)板僅僅一個單片機(jī)是沒有辦法工作的,要想使單片機(jī)正常功能,單片機(jī)需要有電源電路、復(fù)位電路、晶振。電源電路給單片機(jī)提供電源,復(fù)位電路使得單片機(jī)具備復(fù)位功能,晶振的作用產(chǎn)生原始的時鐘頻率,這個頻率經(jīng)過頻率發(fā)生器的放大或縮小后就成了電腦中各種不同的總線頻率。單片機(jī)最小系統(tǒng)是保證單片機(jī)正常工作的最基本單位。圖3-2單片機(jī)最小系統(tǒng)板4. 數(shù)字電子鐘的設(shè)計原理和方法4.1 設(shè)計原理根據(jù)上述方案設(shè)計出系統(tǒng)整體框圖如下所示 圖4-1 系統(tǒng)原理圖為使時鐘走時與標(biāo)準(zhǔn)時間一致,校時電路是必不可少的,鍵盤模塊用來校正液晶上顯示的時間;at89c52單片機(jī)通過輸出各種電脈沖信號來

14、驅(qū)動控制各部分正常工作;而系統(tǒng)的時間數(shù)據(jù)則最終通過液晶模塊顯示出來。4.2 硬件電路的設(shè)計4.2.1 ds1302時鐘芯片ds1302是dallas公司推出的涓流充電時鐘芯片,內(nèi)含有一個實時時鐘/日歷和31字節(jié)靜態(tài)ram,通過簡單的串行接口與單片機(jī)進(jìn)行通信。圖4.5所示為ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。所以在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。dsx1和dsx2是振蕩源,外接32.768khz晶振用來為芯片提供計時脈沖。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令

15、序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進(jìn)行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電行動時,在vcc大于等于2.5v之前,rst必須保持低電平。在sclk為低電平時,才能將rst置為高電平,i/o為串行數(shù)據(jù)輸入端(雙向)。sclk始終是輸入端。圖4-2 ds1302時鐘芯片電路時鐘芯片ds1302的工作原理:(1) ds1302的控制字節(jié)ds1302控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入ds1302中,位6如果0,則表示存取日

16、歷時鐘數(shù)據(jù),為1表示存取ram數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出(2) 數(shù)據(jù)輸入輸出(i/o)在控制指令字輸入后的下一個sclk時鐘的上升沿時,數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個sclk脈沖的下降沿讀出ds1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。(3) ds1302的寄存器ds1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式?!癱h”是時鐘暫停標(biāo)志位,當(dāng)該位為1時,時鐘振蕩器停止,ds1302處于低功耗狀態(tài);

17、當(dāng)該位為0時,時鐘開始運(yùn)行?!皐p”是寫保護(hù)位,在任何的對時鐘和ram的寫操作之前,“wp”必須為0。當(dāng)“wp”為1時,寫保護(hù)位防止對任一寄存器的寫操作。此外,ds1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。ds1302與ram相關(guān)的寄存器分為兩類:一類是單個ram單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個字節(jié),命令控制字為feh(寫)、ffh(讀)。

18、4.2.2 1602 液晶簡介本設(shè)計中由于要對時間進(jìn)行顯示,所以選擇液晶顯示屏1602模塊作為輸出。1602字符型lcd通常有14條引腳線或16條引腳線的lcd,多出來的2條線是背光電源線。它可以顯示兩行,每行16個字符,采用單+5v電源供電,外圍電路配置簡單,價格便宜,具有很高的性價比。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(cgrom)已經(jīng)存儲了160個不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼.管腳功能如表4-1所示:lcd1602主要管腳介紹: rs為寄存器選擇端,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。r

19、/w為讀寫信號線端,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)rs和r/w共同為低電平時可以寫入指令或者顯示地址;當(dāng)rs為高電平r/w 為低電平時可以寫入數(shù)據(jù)。e為使能端,當(dāng)e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。將l1602的rs端和p2.0,r/w端和p2.1, e 端和p2.2相連,當(dāng)rs=0時,對lcd1602寫入指令;當(dāng)rs=1時,對lcd1602寫入數(shù)據(jù)。當(dāng)r/w端接高電平時芯片處于讀數(shù)據(jù)狀態(tài),反之處于寫數(shù)據(jù)狀態(tài),e端為使能信號端。當(dāng)r/w為高電平,e端也為高電平,rs為低電平時,液晶顯示屏顯示需要顯示的示數(shù)。圖4-3為1602液晶。圖4-3 1602液晶電路4.2.3 蜂鳴

20、器驅(qū)動電路發(fā)音部分是通過三極管放大驅(qū)動蜂鳴器工作,再通過軟件這時產(chǎn)生等時時間方波驅(qū)動蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。圖4-4 蜂鳴器驅(qū)動電路4.2.4 獨(dú)立鍵盤電路實現(xiàn)鍵盤控制的方法有多種,在本系統(tǒng)中,我們采用了at89c52單片機(jī)來進(jìn)行控制,因為單片機(jī)可以很好的解決鍵抖動。由若干個按鍵組成一個鍵盤,其電路結(jié)構(gòu)可分為獨(dú)立式鍵盤和矩陣式鍵盤兩種。本設(shè)計采用的是獨(dú)立式鍵盤。鍵盤的工作方式可分為編程控制方式和中斷控制方式。cpu在一個工作周期內(nèi),利用完成其他任務(wù)的空余時間,調(diào)用鍵盤掃描子程序,經(jīng)程序查詢,若無鍵操作,則返回;若有鍵操作,則進(jìn)而判斷是哪個鍵,并執(zhí)行相應(yīng)的鍵處理

21、程序。這種方式為編程掃描方式。由于單片機(jī)在正常應(yīng)用過程中,可能會經(jīng)常進(jìn)行鍵操作,因而編程控制方式使cpu經(jīng)常處于工作狀態(tài), 在進(jìn)行本次設(shè)計中,涉及到了調(diào)整時間、設(shè)置鬧鐘、上調(diào)、下調(diào)四個功能。因此采用獨(dú)立式鍵盤。如下圖所示:圖4-5獨(dú)立鍵盤電路5.軟件部分的設(shè)計5.1程序流程圖5.1.1 系統(tǒng)總流程圖系統(tǒng)總流程圖如圖5-1所示。流程圖分析:首先系統(tǒng)初始化,系統(tǒng)開始運(yùn)行,當(dāng)有設(shè)置鍵按下時進(jìn)入修改時間模式,無按鍵按下時讀取時間等數(shù)據(jù)送入液晶屏顯示;在修改時間模式下設(shè)置時間完成后再送數(shù)據(jù)到液晶屏顯示。圖5-1系統(tǒng)總流程圖5.1.2 ds1302時鐘程序流程圖時鐘流程圖如圖5-2所示。流程圖分析:ds1

22、302開始計時時,首先進(jìn)行初始化,當(dāng)有中斷信號時,讀取時鐘芯片的數(shù)據(jù)送入液晶屏顯示。這時若有設(shè)置鍵按下時,進(jìn)行時間修改,完成后將數(shù)據(jù)送入時鐘芯片;若沒有按鍵按下,則直接存入eprom,送入液晶屏顯示。圖5-2 時鐘流程圖5.1.3 lcd顯示程序流程圖顯示程序流程圖如圖5-3。流程圖分析:首先對1602顯示屏進(jìn)行初始化(初始化大約持續(xù)10ms左右),然后檢查忙信號,若bf=0,則獲得顯示ram的地址,寫入相應(yīng)的數(shù)據(jù)顯示;若bf=1,則代表模塊正在進(jìn)行內(nèi)部操作,不接受任何外部指令和數(shù)據(jù),直到bf=0為止。圖5-3 lcd顯示程序流程圖5.2程序的設(shè)計5.2.1 ds1302讀寫程序ds1302是

23、spi總線驅(qū)動方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。要想與ds1302通信,首先要先了解ds1302的控制字。ds1302的控制字如圖5-4所示。圖5-4 ds1302的控制字控制字總是從最低位開始輸出。在控制字指令輸入后的下一個sclk時鐘的上升沿時,數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個sclk脈沖的下降沿,讀出ds1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時序如圖5-5、5-6所示。圖5-5 單字節(jié)讀圖5-6 單字節(jié)寫5.2.2液晶顯示程序1602通過d0d7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令,其模塊內(nèi)的

24、控制器有11條控制指令。當(dāng)液晶顯示屏的接口電路與單片機(jī)系統(tǒng)i/o按照并行數(shù)據(jù)傳輸方式連接完成以后,即可以對at89c52單片機(jī)進(jìn)行編程。在液晶屏完成顯示之前首先要對液晶進(jìn)行初始化。程序見附錄二。6.實驗結(jié)果此電子鬧鐘設(shè)計是利用proteus仿真軟件進(jìn)行仿真,基本上實現(xiàn)了課程設(shè)計要求實現(xiàn)的功能。硬件部分設(shè)置了的三個按鍵k1、k2、k3、k4。k1鍵為調(diào)整時間功能鍵,k4為設(shè)置鬧鐘功能鍵,k2、k3分別為上調(diào)和下調(diào)鍵。當(dāng)按鍵k4第一次按下時,停止計時進(jìn)入鬧鐘1的時設(shè)置,當(dāng)按鍵k4第二、第三次按下時,分別進(jìn)入鬧鐘1的分設(shè)置和秒設(shè)置,當(dāng)按k4第四次按下時,退出鬧鐘設(shè)置,正常顯示當(dāng)前時間。當(dāng)按下k1鍵時

25、進(jìn)入時間調(diào)整模式,k1按下第一次進(jìn)入年調(diào)整,k1按下第二次進(jìn)入月調(diào)整,k1按下第三次進(jìn)入日調(diào)整;當(dāng)k1按下第四、五、六次時,分別進(jìn)入時、分、秒調(diào)整,k1按下第七次時時間調(diào)整完畢,退出時間調(diào)整功能,顯示器正常顯示時間。下面是程序運(yùn)行結(jié)果截圖圖6-1 初始時間顯示圖圖6-2 調(diào)整時間后顯示圖圖6-3 鬧鐘設(shè)置后顯示圖上圖6-1表示程序啟動時將時間初始化為2015年01月10日00時00分00秒;之后進(jìn)行了調(diào)整,將時間調(diào)整為操作的當(dāng)前時間如圖6-2所示,2015年01月10日11時59分15秒;圖6-3表示是將鬧鐘設(shè)置為13時00分29秒。7.心得體會通過自己的不懈努力,我終于完成了畢業(yè)設(shè)計任務(wù)書上

26、的任務(wù)要求。功能上基本達(dá)標(biāo):時鐘的顯示、調(diào)時功能、鬧鈴功能。其精確度完全可以滿足日常生活顯示時間的需要;調(diào)時功能,方便快捷;校時功能保證了時鐘準(zhǔn)確和可靠性。硬件設(shè)施合乎要求,軟件設(shè)計可以配合硬件實現(xiàn)要求的功能。但是由于時間比較短,前期設(shè)計出現(xiàn)部分不足:如位選閃爍功能不能實現(xiàn)、鬧鐘的開啟與關(guān)閉、間斷蜂鳴聲等。這些只是軟件設(shè)計時相應(yīng)功能部分還不完善造成。不過經(jīng)仔細(xì)思考和程序的完善,最終將軟件設(shè)計改進(jìn),并完全可以很好實現(xiàn)所有要求的功能??梢娂夹g(shù)在不斷進(jìn)步,機(jī)械式時鐘已經(jīng)被淘汰,取而代之的是具有高度準(zhǔn)確性和直觀性且無機(jī)械裝置,具有更長的使用壽命等優(yōu)點(diǎn)的數(shù)字時鐘。數(shù)字時鐘更具人性化,更能提高人們的生活質(zhì)

27、量,更受人們歡迎。 無可否認(rèn)機(jī)械時代已經(jīng)過去,電子時代已經(jīng)到來。做為新時代的我們,更應(yīng)該提高自身能力,適應(yīng)新時代的發(fā)展。知識來自實踐,多去生活中探詢所需要的。對于上述所提到的研究課題,我們應(yīng)盡量考慮到人的因素,增強(qiáng)時鐘的實用性和操作性,為使用者提供切實的方便,營造一種舒適的生活氛圍。所以,在設(shè)計的時候,應(yīng)該從多方面、多角度去考慮問題,而且應(yīng)該進(jìn)一步提高時鐘的質(zhì)量。另外,在本次設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,雖然以前沒有做過這樣的設(shè)計但通過這次設(shè)計我學(xué)會了很多東西,單片機(jī)課程設(shè)計重點(diǎn)就在于軟件算法的設(shè)計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個程序并不是一件簡單的事,比如寫

28、一個程序看其功能很少認(rèn)為編寫程序簡單,但到編程的時候才發(fā)現(xiàn)一些細(xì)微的知識或低級錯誤經(jīng)常犯做不到最后常常失敗,所以有些東西只有學(xué)精弄懂并且要細(xì)心才行,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。從這次的課程設(shè)計中,我們真真正正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實際,把我們所學(xué)的理論知識用到實際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的練習(xí)的過程中才能提高,我想這就是我在這次課程設(shè)計中的最大收獲。參考文獻(xiàn)1 張友德,趙志英,涂時亮.單片微型機(jī)原理、應(yīng)用與實驗m.上海:復(fù)旦大學(xué)出版社,2008.2 趙亮,侯國銳.單片機(jī)c語言編程與實例m.北京:人民郵電出版社,2003.3 高鵬,安濤,寇懷成.

29、電路設(shè)計與制版protel99入門與提高m.北京:人民郵電出版社,2006.4 譚浩強(qiáng).c程序設(shè)計(第三版)m.北京:清華大學(xué)出版社,2005.5 李朝青.單片機(jī)原理及接口技術(shù)m.北京:北京航空航天大學(xué)出版社,2004. 6 康光華,電子技術(shù)基礎(chǔ)模擬部分(第五版)m.北京:高等教育出版社,2005.附錄一 系統(tǒng)原理圖附錄二 系統(tǒng)程序#include /包含單片機(jī)寄存器的頭文件#include /包含_nop_()函數(shù)定義的頭文件unsigned char code digit10=0123456789; /定義字符數(shù)組顯示數(shù)字sbit sclk=p10; /位定義1302芯片的接口,時鐘輸出端

30、口定義在p1.0引腳sbit data=p11; /位定義1302芯片的接口,數(shù)據(jù)輸出端定義在p1.1引腳sbit rst=p12; /位定義1302芯片的接口,復(fù)位端口定義在p1.2引腳sbit k1=p32; /定義按鍵1觸發(fā)中斷0,調(diào)整時間按鈕sbit k4=p33; /定義按鍵1觸發(fā)中斷1,設(shè)置鬧鐘按鈕sbit k2=p14; /定義按鍵2,+sbit k3=p15; /定義按鍵3,-sbit beep=p36; /蜂鳴器unsigned char miao,fen,shi,tian,yue,nian;/分別儲存苗、分、小時,日,月,年unsigned char settime=0;u

31、nsigned char setclock=0;unsigned char clock_hour,clock_min,clock_sec;/*函數(shù)功能:延時若干微秒入口參數(shù):n*/ void delaynus(unsigned char n) unsigned char i; for(i=0;in;i+);/*函數(shù)功能:向1302寫一個字節(jié)數(shù)據(jù)入口參數(shù):x*/ void write1302(unsigned char dat) unsigned char i; sclk=0; /拉低sclk,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備 delaynus(10); /稍微等待,使硬件做好準(zhǔn)備 for(i=0;

32、i=1; /將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個數(shù)據(jù)位 /*函數(shù)功能:根據(jù)命令字,向1302寫一個字節(jié)數(shù)據(jù)入口參數(shù):cmd,儲存命令字;dat,儲存待寫的數(shù)據(jù)*/ void writeset1302(unsigned char cmd,unsigned char dat) rst=0; /禁止數(shù)據(jù)傳遞 sclk=0; /確保寫數(shù)居前sclk被拉低 rst=1; /啟動數(shù)據(jù)傳輸 delaynus(10); /稍微等待,使硬件做好準(zhǔn)備 write1302(cmd); /寫入命令字 write1302(dat); /寫數(shù)據(jù) sclk=1; /將時鐘電平置于高電平狀態(tài) rst=0; /禁止數(shù)據(jù)傳

33、遞 /*函數(shù)功能:從1302讀一個字節(jié)數(shù)據(jù)入口參數(shù):x*/ unsigned char read1302(void) unsigned char i,dat;delaynus(10); /稍微等待,使硬件做好準(zhǔn)備for(i=0;i=1; if(data=1) /如果讀出的數(shù)據(jù)是1 dat|=0x80; /將1取出,寫在dat的最高位 sclk=1; /將sclk置于高電平,為下降沿讀出 delaynus(10); /稍微等待 sclk=0; /拉低sclk,形成脈沖下降沿 delaynus(10); /稍微等待 return dat; /將讀出的數(shù)據(jù)返回 /*函數(shù)功能:根據(jù)命令字,從1302讀

34、取一個字節(jié)數(shù)據(jù)入口參數(shù):cmd*/ unsigned char readset1302(unsigned char cmd) unsigned char dat; rst=0; /拉低rst sclk=0; /確保寫數(shù)居前sclk被拉低 rst=1; /啟動數(shù)據(jù)傳輸 write1302(cmd); /寫入命令字 dat=read1302(); /讀出數(shù)據(jù) sclk=1; /將時鐘電平置于已知狀態(tài) rst=0; /禁止數(shù)據(jù)傳遞 return dat; /將讀出的數(shù)據(jù)返回/*函數(shù)功能: 1302進(jìn)行初始化設(shè)置*/ void init_ds1302(unsigned char year,unsign

35、ed char mon,unsigned char dt,unsigned char hour,unsigned char min,unsigned char sec)/* unsigned char flag; flag= readset1302(0x81);if(flag&0x80) /判斷時鐘芯片是否關(guān)閉 writeset1302(0x8e,0x00); /根據(jù)寫狀態(tài)寄存器命令字,寫入不保護(hù)指令 writeset1302(0x80,(55/10)4|(55%10); /根據(jù)寫秒寄存器命令字,寫入秒的初始值writeset1302(0x82,(59/10)4|(59%10); /根據(jù)寫分寄

36、存器命令字,寫入分的初始值writeset1302(0x84,(23/10)4|(23%10); /根據(jù)寫小時寄存器命令字,寫入小時的初始值writeset1302(0x86,(18/10)4|(18%10); /根據(jù)寫日寄存器命令字,寫入日的初始值writeset1302(0x88,(6/10)4|(6%10); /根據(jù)寫月寄存器命令字,寫入月的初始值writeset1302(0x8c,(14/10)4|(9%10); /根據(jù)寫年寄存器命令字,寫入年的初始值writeset1302(0x90,0xa5); /打開充電功能 選擇2k電阻充電方式writeset1302(0x8e,0x80);

37、/根據(jù)寫狀態(tài)寄存器命令字,寫入保護(hù)指令 */ /如果不想每次都初始化時間,也就是掉電后還想讓時鐘繼續(xù)走時的話 就用上面的語句 /*-這是每次都初始化的語句-*/ /-2015-01-7 tue 22:36:55 - writeset1302(0x8e,0x00); /根據(jù)寫狀態(tài)寄存器命令字,寫入不保護(hù)指令 writeset1302(0x80,(sec/10)4|(sec%10); /根據(jù)寫秒寄存器命令字,寫入秒的初始值writeset1302(0x82,(min/10)4|(min%10); /根據(jù)寫分寄存器命令字,寫入分的初始值writeset1302(0x84,(hour/10)4|(ho

38、ur%10); /根據(jù)寫小時寄存器命令字,寫入小時的初始值writeset1302(0x86,(dt/10)4|(dt%10); /根據(jù)寫日寄存器命令字,寫入日的初始值writeset1302(0x88,(mon/10)4|(mon%10); /根據(jù)寫月寄存器命令字,寫入月的初始writeset1302(0x8c,(year/10)4|(year%10); /根據(jù)寫年寄存器命令字,寫入年的初始值writeset1302(0x90,0xa5); /打開充電功能 選擇2k電阻充電方式writeset1302(0x8e,0x80); /根據(jù)寫狀態(tài)寄存器命令字,寫入保護(hù)指令/*以下是對液晶模塊的操作程

39、序*/sbit rs=p20; /寄存器選擇位,將rs位定義為p2.0引腳sbit rw=p21; /讀寫選擇位,將rw位定義為p2.1引腳sbit e=p22; /使能信號位,將e位定義為p2.2引腳sbit bf=p07; /忙碌標(biāo)志位,將bf位定義為p0.7引腳/*函數(shù)功能:延時1ms(3j+2)*i=(333+2)10=1010(微秒),可以認(rèn)為是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函數(shù)功能:延時若干毫秒入口參數(shù):n*/ void delaynms(unsigned ch

40、ar n) unsigned char i;for(i=0;in;i+) delay1ms(); /*蜂鳴器程序*/void beep()unsigned char t;for(t=0;t200;t+)beep=1;delaynus(500);beep=0;delaynus(500);/*函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙*/bit busytest(void) bit result; rs=0; /根據(jù)規(guī)定,rs為低電平,rw為高電平時,可以讀狀態(tài) rw=1; e=1; /e=1,才允許讀寫 _nop_(); /空操作 _no

41、p_(); _nop_(); _nop_(); /空操作四個機(jī)器周期,給硬件反應(yīng)時間 result=bf; /將忙碌標(biāo)志電平賦給result e=0; /將e恢復(fù)低電平 return result; /*函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):dictate*/void writeinstruction (unsigned char dictate) while(busytest()=1); /如果忙就等待 rs=0; /根據(jù)規(guī)定,rs和r/w同時為低電平時,可以寫入指令 rw=0; e=0; /e置低電平,寫指令時,e為高脈沖, / 就是讓e從0到1發(fā)生正跳變,所以應(yīng)先置0

42、_nop_(); _nop_(); /空操作兩個機(jī)器周期,給硬件反應(yīng)時間 p0=dictate; /將數(shù)據(jù)送入p0口,即寫入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個機(jī)器周期,給硬件反應(yīng)時間 e=1; /e置高電平,寫指令 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個機(jī)器周期,給硬件反應(yīng)時間 e=0; /當(dāng)e由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 /*函數(shù)功能:指定字符顯示的實際地址入口參數(shù):x*/ void writeaddress(unsigned char x) writeinstruct

43、ion(x|0x80); /顯示位置的確定方法規(guī)定為80h+地址碼x /*函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ascii碼)寫入液晶模塊入口參數(shù):y(為字符常量)*/ void writedata(unsigned char y) while(busytest()=1); rs=1; /rs為高電平,rw為低電平時,可以寫入數(shù)據(jù) rw=0; e=0; /e置低電平,寫指令時,e為高脈沖, / 就是讓e從0到1發(fā)生正跳變,所以應(yīng)先置0 p0=y; /將數(shù)據(jù)送入p0口,即將數(shù)據(jù)寫入液晶模塊 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個機(jī)器周期,給硬件反應(yīng)時間 e=1; /e置高電平,寫數(shù)據(jù) _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個機(jī)器周期,給硬件反應(yīng)時間 e=0; /當(dāng)e由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 /*函數(shù)功能:對lcd的顯示模式進(jìn)行初始化設(shè)置*/void lcdinitiate(void) delaynms(15); /延時15ms,首次寫指令時應(yīng)給lcd一段較長的反應(yīng)時間 writeinstruction(0x38); /顯示模式設(shè)置:162顯示

溫馨提示

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

評論

0/150

提交評論