




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、武漢理工大學(xué)單片機(jī)原理與應(yīng)用課程設(shè)計(jì)目錄目錄11.項(xiàng)目背景31.1 項(xiàng)目研究的目的和意義31.2課題研究的內(nèi)容32.方案的選擇和和論證42.1 單片機(jī)型號(hào)的選擇42.2 按鍵的選擇42.3 顯示器的選擇42.4 計(jì)時(shí)部分的選擇52.5 發(fā)音部分的設(shè)計(jì)52.6電路設(shè)計(jì)最終方案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è)計(jì)原理和方法94.1 設(shè)計(jì)原理94.2 硬件電路的設(shè)計(jì)94.2.1 ds1302時(shí)鐘芯片94
2、.2.2 1602 液晶簡介114.2.3 蜂鳴器驅(qū)動(dòng)電路124.2.4 獨(dú)立鍵盤電路135.軟件部分的設(shè)計(jì)145.1程序流程圖145.1.1 系統(tǒng)總流程圖145.1.2 ds1302時(shí)鐘程序流程圖155.1.3 lcd顯示程序流程圖165.2程序的設(shè)計(jì)175.2.1 ds1302讀寫程序175.2.2液晶顯示程序177.心得體會(huì)20參考文獻(xiàn)21附錄一 系統(tǒng)原理圖22附錄二 系統(tǒng)程序231.項(xiàng)目背景1.1 項(xiàng)目研究的目的和意義20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步
3、提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 時(shí)間對(duì)人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無傷大雅。但是,一旦重要事情,一時(shí)的耽誤可能釀成大禍。例如,許多火災(zāi)都是由于人們一時(shí)忘記了關(guān)閉煤氣或是忘記充電時(shí)間等造成的。而鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便。數(shù)字鐘是通過數(shù)字電路實(shí)現(xiàn)時(shí),分,秒數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭、車站、碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵贰S捎跀?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大
4、大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能,諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開關(guān)烤箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。1.2課題研究的內(nèi)容本論文主要研究基于單片機(jī)的萬年歷設(shè)計(jì)。當(dāng)程序執(zhí)行后,lcd顯示即時(shí)時(shí)間、年月日、星期。設(shè)置4個(gè)操作鍵:k1,時(shí)間調(diào)整鍵;k2,上調(diào)鍵;k3,下調(diào)鍵;k4,鬧鐘設(shè)置鍵本設(shè)計(jì)的主要內(nèi)容:1、了解單片機(jī)技術(shù)的發(fā)展現(xiàn)狀,熟悉萬年歷各模塊的工作原理;2、選擇適當(dāng)?shù)男酒驮骷?,確定系統(tǒng)電路,繪制電路原理圖,尤其是各接口電路;3、熟悉單片機(jī)使
5、用方法和c語言的編程規(guī)則,編寫出相應(yīng)模塊的應(yīng)用程序。設(shè)計(jì)目標(biāo):使基于at89c52單片機(jī)的萬年歷實(shí)現(xiàn)以下三個(gè)功能:a.具有年、月、日、星期、時(shí)、分、秒等功能;b.具備年、月、日、星期、時(shí)、分、秒校準(zhǔn)功能;2.方案的選擇和和論證2.1 單片機(jī)型號(hào)的選擇通過對(duì)多種單片機(jī)性能的分析,最終認(rèn)為at89c52是最理想的電子時(shí)鐘開發(fā)芯片。at89c51是一種帶4k字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓,高性能cmos8位微處理器,器件采用atmel高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的mcs-51指令集和輸出管腳相兼容。由于將多功能8位cpu和閃爍存儲(chǔ)器組合在單個(gè)芯片中,atmel的at89c52是
6、一種高效微控制器,而且它與mcs-51兼容,且具有4k字節(jié)可編程序存儲(chǔ)器和1000次擦寫循環(huán),數(shù)據(jù)保留時(shí)間為10年,是最好的選擇。2.2 按鍵的選擇方案一:44矩陣式鍵盤。如果選擇此方案,那么在修改時(shí)鐘或設(shè)置鬧鈴時(shí)間時(shí)就可以直接從鍵盤輸入,方便、快捷,但程序較為復(fù)雜。 方案二:獨(dú)立式按鍵。如果設(shè)置過多按鍵,將會(huì)占用較多i/o口,而且會(huì)給布線帶來不便,因此,此方案適用于按鍵較少的情況。如果選擇此方案,由于按鍵較少,在修改時(shí)間或設(shè)置鬧鈴時(shí)間時(shí)就不能直接輸入,只能通過加或減完成,稍為麻煩一些,但其程序簡單。 由于并不需要經(jīng)常修改時(shí)間和設(shè)置鬧鈴時(shí)間,而且方案二的程序簡單,按鍵少、成本低,因此,選擇方案
7、二。2.3 顯示器的選擇方案一:采用led數(shù)碼管動(dòng)態(tài)掃描,led數(shù)碼管價(jià)格適中,對(duì)于顯示數(shù)字合適,采用動(dòng)態(tài)掃描法與單片機(jī)連接時(shí),雖然占用的單片機(jī)口線少,但連線還需要花費(fèi)一點(diǎn)時(shí)間,所以也不用此種作為顯示。方案二:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,若采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以在此也不用此種作為顯示。方案三:采用1602液晶顯示屏,該液晶顯示屏的顯示功能強(qiáng)大,內(nèi)置192種字符,可顯示大量符號(hào)、數(shù)字,清晰可見,而且功率消耗小壽命長抗干擾能力強(qiáng)。所以在此設(shè)計(jì)中采用1602液晶顯示屏。2.4 計(jì)時(shí)部分的選擇方案一:直接采用單片機(jī)定時(shí)
8、計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大,所以不采用此方案。方案二:采用ds1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,ds1302芯片是一種高性能的時(shí)鐘芯片,可自動(dòng)對(duì)秒、分、時(shí)、日、周、月、年進(jìn)行計(jì)數(shù),而且精度高,位的ram做為數(shù)據(jù)暫存區(qū),工作電壓2.5v5.5v范圍內(nèi),2.5v時(shí)耗電小于300na。所以本設(shè)計(jì)采用ds1302時(shí)鐘芯片。2.5 發(fā)音部分的設(shè)計(jì)通過三極管放大后驅(qū)動(dòng)蜂鳴器工作,再通過軟件產(chǎn)生的時(shí)時(shí)間方波驅(qū)動(dòng)蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。2.6電路設(shè)計(jì)最終方案綜上各方案所述,對(duì)此次作
9、品的方案選定: 采用at89c52作為主控制芯片,ds1302時(shí)鐘芯片計(jì)時(shí),lcd1602作為顯示模塊。3. at89c52單片機(jī)簡介3.1單片機(jī)基本特性n 8 位的 cpu, 片內(nèi)有振蕩器和時(shí)鐘電路,工作頻率為024mhzn 片內(nèi)有 256字節(jié) 數(shù)據(jù)存儲(chǔ)器 ramn 片內(nèi)有 8k字節(jié) 程序存儲(chǔ)器 n rom4個(gè)8位的并行i/o口(p0、p1、p2、p3)n 1個(gè) 全雙工串行通訊口n 3個(gè)16位 定時(shí)器/計(jì)數(shù)器(t0、t1、t2)n 可處理 6個(gè)中斷源,兩級(jí)中斷優(yōu)先級(jí)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ù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8 個(gè)ttl邏輯門電路,對(duì)端口p0 寫“1”時(shí),可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8 位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在flash編程時(shí),p0 口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。3.3.2 p1口p1 是一個(gè)帶內(nèi)部上拉電阻的8 位雙向i/o 口, p1 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)ttl 邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電
11、阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(iil)。與at89c51 不同之處是,p1.0 和p1.1 還可分別作為定時(shí)/計(jì)數(shù)器2 的外部計(jì)數(shù)輸(p1.0/t2)和輸入(p1.1/t2ex),flash 編程和程序校驗(yàn)期間,p1 接收低8 位地址。3.3.3 p2口p2 是一個(gè)帶有內(nèi)部上拉電阻的8 位雙向i/o 口,p2 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)ttl 邏輯門電路。對(duì)端口p2 寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(iil)。在訪問外部程序存儲(chǔ)器或16 位地址的外部數(shù)據(jù)存儲(chǔ)器
12、(例如執(zhí)行movx dptr 指令)時(shí),p2 口送出高8 位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行movxri 指令)時(shí),p2 口輸出p2鎖存器的內(nèi)容。flash編程或校驗(yàn)時(shí),p2亦接收高位地址和一些控制信號(hào)。3.3.4 p3口p3 口是一組帶有內(nèi)部上拉電阻的8 位雙向i/o 口。p3 口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)ttl邏輯門電路。對(duì)p3 口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時(shí),被外部拉低的p3 口將用上拉電阻輸出電流(iil)。p3 口除了作為一般的i/o 口線外,更重要的用途是它的第二功能p3 口還接收一些用于flash閃速存儲(chǔ)器編程和程序校
13、驗(yàn)的控制信號(hào)。3.4單片機(jī)最小系統(tǒng)板僅僅一個(gè)單片機(jī)是沒有辦法工作的,要想使單片機(jī)正常功能,單片機(jī)需要有電源電路、復(fù)位電路、晶振。電源電路給單片機(jī)提供電源,復(fù)位電路使得單片機(jī)具備復(fù)位功能,晶振的作用產(chǎn)生原始的時(shí)鐘頻率,這個(gè)頻率經(jīng)過頻率發(fā)生器的放大或縮小后就成了電腦中各種不同的總線頻率。單片機(jī)最小系統(tǒng)是保證單片機(jī)正常工作的最基本單位。圖3-2單片機(jī)最小系統(tǒng)板4. 數(shù)字電子鐘的設(shè)計(jì)原理和方法4.1 設(shè)計(jì)原理根據(jù)上述方案設(shè)計(jì)出系統(tǒng)整體框圖如下所示 圖4-1 系統(tǒng)原理圖為使時(shí)鐘走時(shí)與標(biāo)準(zhǔn)時(shí)間一致,校時(shí)電路是必不可少的,鍵盤模塊用來校正液晶上顯示的時(shí)間;at89c52單片機(jī)通過輸出各種電脈沖信號(hào)來驅(qū)動(dòng)控制
14、各部分正常工作;而系統(tǒng)的時(shí)間數(shù)據(jù)則最終通過液晶模塊顯示出來。4.2 硬件電路的設(shè)計(jì)4.2.1 ds1302時(shí)鐘芯片ds1302是dallas公司推出的涓流充電時(shí)鐘芯片,內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)ram,通過簡單的串行接口與單片機(jī)進(jìn)行通信。圖4.5所示為ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。所以在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。dsx1和dsx2是振蕩源,外接32.768khz晶振用來為芯片提供計(jì)時(shí)脈沖。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入
15、移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)ds1302進(jìn)行操作。如果在傳送過程中rst置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電行動(dòng)時(shí),在vcc大于等于2.5v之前,rst必須保持低電平。在sclk為低電平時(shí),才能將rst置為高電平,i/o為串行數(shù)據(jù)輸入端(雙向)。sclk始終是輸入端。圖4-2 ds1302時(shí)鐘芯片電路時(shí)鐘芯片ds1302的工作原理:(1) ds1302的控制字節(jié)ds1302控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入ds1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)
16、據(jù),為1表示存取ram數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出(2) 數(shù)據(jù)輸入輸出(i/o)在控制指令字輸入后的下一個(gè)sclk時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)sclk脈沖的下降沿讀出ds1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。(3) ds1302的寄存器ds1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式。“ch”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,ds1302處于低功耗狀態(tài);當(dāng)該位為
17、0時(shí),時(shí)鐘開始運(yùn)行?!皐p”是寫保護(hù)位,在任何的對(duì)時(shí)鐘和ram的寫操作之前,“wp”必須為0。當(dāng)“wp”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。此外,ds1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。ds1302與ram相關(guān)的寄存器分為兩類:一類是單個(gè)ram單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個(gè)字節(jié),命令控制字為feh(寫)、ffh(讀)。4.2.
18、2 1602 液晶簡介本設(shè)計(jì)中由于要對(duì)時(shí)間進(jìn)行顯示,所以選擇液晶顯示屏1602模塊作為輸出。1602字符型lcd通常有14條引腳線或16條引腳線的lcd,多出來的2條線是背光電源線。它可以顯示兩行,每行16個(gè)字符,采用單+5v電源供電,外圍電路配置簡單,價(jià)格便宜,具有很高的性價(jià)比。1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(cgrom)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼.管腳功能如表4-1所示:lcd1602主要管腳介紹: rs為寄存器選擇端,高電平時(shí)選擇數(shù)據(jù)寄存器,低電平時(shí)選擇指令寄存器。r/w為讀
19、寫信號(hào)線端,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)rs和r/w共同為低電平時(shí)可以寫入指令或者顯示地址;當(dāng)rs為高電平r/w 為低電平時(shí)可以寫入數(shù)據(jù)。e為使能端,當(dāng)e端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。將l1602的rs端和p2.0,r/w端和p2.1, e 端和p2.2相連,當(dāng)rs=0時(shí),對(duì)lcd1602寫入指令;當(dāng)rs=1時(shí),對(duì)lcd1602寫入數(shù)據(jù)。當(dāng)r/w端接高電平時(shí)芯片處于讀數(shù)據(jù)狀態(tài),反之處于寫數(shù)據(jù)狀態(tài),e端為使能信號(hào)端。當(dāng)r/w為高電平,e端也為高電平,rs為低電平時(shí),液晶顯示屏顯示需要顯示的示數(shù)。圖4-3為1602液晶。圖4-3 1602液晶電路4.2.3 蜂鳴器驅(qū)動(dòng)電
20、路發(fā)音部分是通過三極管放大驅(qū)動(dòng)蜂鳴器工作,再通過軟件這時(shí)產(chǎn)生等時(shí)時(shí)間方波驅(qū)動(dòng)蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。圖4-4 蜂鳴器驅(qū)動(dòng)電路4.2.4 獨(dú)立鍵盤電路實(shí)現(xiàn)鍵盤控制的方法有多種,在本系統(tǒng)中,我們采用了at89c52單片機(jī)來進(jìn)行控制,因?yàn)閱纹瑱C(jī)可以很好的解決鍵抖動(dòng)。由若干個(gè)按鍵組成一個(gè)鍵盤,其電路結(jié)構(gòu)可分為獨(dú)立式鍵盤和矩陣式鍵盤兩種。本設(shè)計(jì)采用的是獨(dú)立式鍵盤。鍵盤的工作方式可分為編程控制方式和中斷控制方式。cpu在一個(gè)工作周期內(nèi),利用完成其他任務(wù)的空余時(shí)間,調(diào)用鍵盤掃描子程序,經(jīng)程序查詢,若無鍵操作,則返回;若有鍵操作,則進(jìn)而判斷是哪個(gè)鍵,并執(zhí)行相應(yīng)的鍵處理程序。這
21、種方式為編程掃描方式。由于單片機(jī)在正常應(yīng)用過程中,可能會(huì)經(jīng)常進(jìn)行鍵操作,因而編程控制方式使cpu經(jīng)常處于工作狀態(tài), 在進(jìn)行本次設(shè)計(jì)中,涉及到了調(diào)整時(shí)間、設(shè)置鬧鐘、上調(diào)、下調(diào)四個(gè)功能。因此采用獨(dú)立式鍵盤。如下圖所示:圖4-5獨(dú)立鍵盤電路5.軟件部分的設(shè)計(jì)5.1程序流程圖5.1.1 系統(tǒng)總流程圖系統(tǒng)總流程圖如圖5-1所示。流程圖分析:首先系統(tǒng)初始化,系統(tǒng)開始運(yùn)行,當(dāng)有設(shè)置鍵按下時(shí)進(jìn)入修改時(shí)間模式,無按鍵按下時(shí)讀取時(shí)間等數(shù)據(jù)送入液晶屏顯示;在修改時(shí)間模式下設(shè)置時(shí)間完成后再送數(shù)據(jù)到液晶屏顯示。圖5-1系統(tǒng)總流程圖5.1.2 ds1302時(shí)鐘程序流程圖時(shí)鐘流程圖如圖5-2所示。流程圖分析:ds1302開
22、始計(jì)時(shí)時(shí),首先進(jìn)行初始化,當(dāng)有中斷信號(hào)時(shí),讀取時(shí)鐘芯片的數(shù)據(jù)送入液晶屏顯示。這時(shí)若有設(shè)置鍵按下時(shí),進(jìn)行時(shí)間修改,完成后將數(shù)據(jù)送入時(shí)鐘芯片;若沒有按鍵按下,則直接存入eprom,送入液晶屏顯示。圖5-2 時(shí)鐘流程圖5.1.3 lcd顯示程序流程圖顯示程序流程圖如圖5-3。流程圖分析:首先對(duì)1602顯示屏進(jìn)行初始化(初始化大約持續(xù)10ms左右),然后檢查忙信號(hào),若bf=0,則獲得顯示ram的地址,寫入相應(yīng)的數(shù)據(jù)顯示;若bf=1,則代表模塊正在進(jìn)行內(nèi)部操作,不接受任何外部指令和數(shù)據(jù),直到bf=0為止。圖5-3 lcd顯示程序流程圖5.2程序的設(shè)計(jì)5.2.1 ds1302讀寫程序ds1302是spi總
23、線驅(qū)動(dòng)方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。要想與ds1302通信,首先要先了解ds1302的控制字。ds1302的控制字如圖5-4所示。圖5-4 ds1302的控制字控制字總是從最低位開始輸出。在控制字指令輸入后的下一個(gè)sclk時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個(gè)sclk脈沖的下降沿,讀出ds1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時(shí)序如圖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ù)傳輸方式連接完成以后,即可以對(duì)at89c52單片機(jī)進(jìn)行編程。在液晶屏完成顯示之前首先要對(duì)液晶進(jìn)行初始化。程序見附錄二。6.實(shí)驗(yàn)結(jié)果此電子鬧鐘設(shè)計(jì)是利用proteus仿真軟件進(jìn)行仿真,基本上實(shí)現(xiàn)了課程設(shè)計(jì)要求實(shí)現(xiàn)的功能。硬件部分設(shè)置了的三個(gè)按鍵k1、k2、k3、k4。k1鍵為調(diào)整時(shí)間功能鍵,k4為設(shè)置鬧鐘功能鍵,k2、k3分別為上調(diào)和下調(diào)鍵。當(dāng)按鍵k4第一次按下時(shí),停止計(jì)時(shí)進(jìn)入鬧鐘1的時(shí)設(shè)置,當(dāng)按鍵k4第二、第三次按下時(shí),分別進(jìn)入鬧鐘1的分設(shè)置和秒設(shè)置,當(dāng)按k4第四次按下時(shí),退出鬧鐘設(shè)置,正常顯示當(dāng)前時(shí)間。當(dāng)按下k1鍵時(shí)進(jìn)入時(shí)間
25、調(diào)整模式,k1按下第一次進(jìn)入年調(diào)整,k1按下第二次進(jìn)入月調(diào)整,k1按下第三次進(jìn)入日調(diào)整;當(dāng)k1按下第四、五、六次時(shí),分別進(jìn)入時(shí)、分、秒調(diào)整,k1按下第七次時(shí)時(shí)間調(diào)整完畢,退出時(shí)間調(diào)整功能,顯示器正常顯示時(shí)間。下面是程序運(yùn)行結(jié)果截圖圖6-1 初始時(shí)間顯示圖圖6-2 調(diào)整時(shí)間后顯示圖圖6-3 鬧鐘設(shè)置后顯示圖上圖6-1表示程序啟動(dòng)時(shí)將時(shí)間初始化為2015年01月10日00時(shí)00分00秒;之后進(jìn)行了調(diào)整,將時(shí)間調(diào)整為操作的當(dāng)前時(shí)間如圖6-2所示,2015年01月10日11時(shí)59分15秒;圖6-3表示是將鬧鐘設(shè)置為13時(shí)00分29秒。7.心得體會(huì)通過自己的不懈努力,我終于完成了畢業(yè)設(shè)計(jì)任務(wù)書上的任務(wù)要
26、求。功能上基本達(dá)標(biāo):時(shí)鐘的顯示、調(diào)時(shí)功能、鬧鈴功能。其精確度完全可以滿足日常生活顯示時(shí)間的需要;調(diào)時(shí)功能,方便快捷;校時(shí)功能保證了時(shí)鐘準(zhǔn)確和可靠性。硬件設(shè)施合乎要求,軟件設(shè)計(jì)可以配合硬件實(shí)現(xiàn)要求的功能。但是由于時(shí)間比較短,前期設(shè)計(jì)出現(xiàn)部分不足:如位選閃爍功能不能實(shí)現(xiàn)、鬧鐘的開啟與關(guān)閉、間斷蜂鳴聲等。這些只是軟件設(shè)計(jì)時(shí)相應(yīng)功能部分還不完善造成。不過經(jīng)仔細(xì)思考和程序的完善,最終將軟件設(shè)計(jì)改進(jìn),并完全可以很好實(shí)現(xiàn)所有要求的功能??梢娂夹g(shù)在不斷進(jìn)步,機(jī)械式時(shí)鐘已經(jīng)被淘汰,取而代之的是具有高度準(zhǔn)確性和直觀性且無機(jī)械裝置,具有更長的使用壽命等優(yōu)點(diǎn)的數(shù)字時(shí)鐘。數(shù)字時(shí)鐘更具人性化,更能提高人們的生活質(zhì)量,更受
27、人們歡迎。 無可否認(rèn)機(jī)械時(shí)代已經(jīng)過去,電子時(shí)代已經(jīng)到來。做為新時(shí)代的我們,更應(yīng)該提高自身能力,適應(yīng)新時(shí)代的發(fā)展。知識(shí)來自實(shí)踐,多去生活中探詢所需要的。對(duì)于上述所提到的研究課題,我們應(yīng)盡量考慮到人的因素,增強(qiáng)時(shí)鐘的實(shí)用性和操作性,為使用者提供切實(shí)的方便,營造一種舒適的生活氛圍。所以,在設(shè)計(jì)的時(shí)候,應(yīng)該從多方面、多角度去考慮問題,而且應(yīng)該進(jìn)一步提高時(shí)鐘的質(zhì)量。另外,在本次設(shè)計(jì)的過程中,我發(fā)現(xiàn)很多的問題,雖然以前沒有做過這樣的設(shè)計(jì)但通過這次設(shè)計(jì)我學(xué)會(huì)了很多東西,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺的寫好一個(gè)程序并不是一件簡單的事,比如寫一個(gè)程序
28、看其功能很少認(rèn)為編寫程序簡單,但到編程的時(shí)候才發(fā)現(xiàn)一些細(xì)微的知識(shí)或低級(jí)錯(cuò)誤經(jīng)常犯做不到最后常常失敗,所以有些東西只有學(xué)精弄懂并且要細(xì)心才行,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。從這次的課程設(shè)計(jì)中,我們真真正正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的練習(xí)的過程中才能提高,我想這就是我在這次課程設(shè)計(jì)中的最大收獲。參考文獻(xiàn)1 張友德,趙志英,涂時(shí)亮.單片微型機(jī)原理、應(yīng)用與實(shí)驗(yàn)m.上海:復(fù)旦大學(xué)出版社,2008.2 趙亮,侯國銳.單片機(jī)c語言編程與實(shí)例m.北京:人民郵電出版社,2003.3 高鵬,安濤,寇懷成.電路設(shè)計(jì)
29、與制版protel99入門與提高m.北京:人民郵電出版社,2006.4 譚浩強(qiáng).c程序設(shè)計(jì)(第三版)m.北京:清華大學(xué)出版社,2005.5 李朝青.單片機(jī)原理及接口技術(shù)m.北京:北京航空航天大學(xué)出版社,2004. 6 康光華,電子技術(shù)基礎(chǔ)模擬部分(第五版)m.北京:高等教育出版社,2005.附錄一 系統(tǒng)原理圖附錄二 系統(tǒng)程序37#include /包含單片機(jī)寄存器的頭文件#include /包含_nop_()函數(shù)定義的頭文件unsigned char code digit10=0123456789; /定義字符數(shù)組顯示數(shù)字sbit sclk=p10; /位定義1302芯片的接口,時(shí)鐘輸出端口定
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)整時(shí)間按鈕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;/分別儲(chǔ)存苗、分、小時(shí),日,月,年unsigned char settime=0;uns
31、igned char setclock=0;unsigned char clock_hour,clock_min,clock_sec;/*函數(shù)功能:延時(shí)若干微秒入口參數(shù):n*/ void delaynus(unsigned char n) unsigned char i; for(i=0;in;i+);/*函數(shù)功能:向1302寫一個(gè)字節(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;i=
32、1; /將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個(gè)數(shù)據(jù)位 /*函數(shù)功能:根據(jù)命令字,向1302寫一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):cmd,儲(chǔ)存命令字;dat,儲(chǔ)存待寫的數(shù)據(jù)*/ void writeset1302(unsigned char cmd,unsigned char dat) rst=0; /禁止數(shù)據(jù)傳遞 sclk=0; /確保寫數(shù)居前sclk被拉低 rst=1; /啟動(dòng)數(shù)據(jù)傳輸 delaynus(10); /稍微等待,使硬件做好準(zhǔn)備 write1302(cmd); /寫入命令字 write1302(dat); /寫數(shù)據(jù) sclk=1; /將時(shí)鐘電平置于高電平狀態(tài) rst=0; /禁止數(shù)據(jù)傳遞
33、/*函數(shù)功能:從1302讀一個(gè)字節(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、個(gè)字節(jié)數(shù)據(jù)入口參數(shù):cmd*/ unsigned char readset1302(unsigned char cmd) unsigned char dat; rst=0; /拉低rst sclk=0; /確保寫數(shù)居前sclk被拉低 rst=1; /啟動(dòng)數(shù)據(jù)傳輸 write1302(cmd); /寫入命令字 dat=read1302(); /讀出數(shù)據(jù) sclk=1; /將時(shí)鐘電平置于已知狀態(tài) rst=0; /禁止數(shù)據(jù)傳遞 return dat; /將讀出的數(shù)據(jù)返回/*函數(shù)功能: 1302進(jìn)行初始化設(shè)置*/ void init_ds1302(unsigned char year,unsigned
35、 char mon,unsigned char dt,unsigned char hour,unsigned char min,unsigned char sec)/* unsigned char flag; flag= readset1302(0x81);if(flag&0x80) /判斷時(shí)鐘芯片是否關(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ù)寫小時(shí)寄存器命令字,寫入小時(shí)的初始值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ù)指令 */ /如果不想每次都初始化時(shí)間,也就是掉電后還想讓時(shí)鐘繼續(xù)走時(shí)的話 就用上面的語句 /*-這是每次都初始化的語句-*/ /-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|(hour
38、%10); /根據(jù)寫小時(shí)寄存器命令字,寫入小時(shí)的初始值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ù)指令/*以下是對(duì)液晶模塊的操作程序*
39、/sbit rs=p20; /寄存器選擇位,將rs位定義為p2.0引腳sbit rw=p21; /讀寫選擇位,將rw位定義為p2.1引腳sbit e=p22; /使能信號(hào)位,將e位定義為p2.2引腳sbit bf=p07; /忙碌標(biāo)志位,將bf位定義為p0.7引腳/*函數(shù)功能:延時(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í)若干毫秒入口參數(shù):n*/ void delaynms(unsigned char
40、 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為高電平時(shí),可以讀狀態(tài) rw=1; e=1; /e=1,才允許讀寫 _nop_(); /空操作 _nop_
41、(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 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同時(shí)為低電平時(shí),可以寫入指令 rw=0; e=0; /e置低電平,寫指令時(shí),e為高脈沖, / 就是讓e從0到1發(fā)生正跳變,所以應(yīng)先置0 _n
42、op_(); _nop_(); /空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 p0=dictate; /將數(shù)據(jù)送入p0口,即寫入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 e=1; /e置高電平,寫指令 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 e=0; /當(dāng)e由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令 /*函數(shù)功能:指定字符顯示的實(shí)際地址入口參數(shù):x*/ void writeaddress(unsigned char x) writeinstructio
43、n(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í),可以寫入數(shù)據(jù) rw=0; e=0; /e置低電平,寫指令時(shí),e為高脈沖, / 就是讓e從0到1發(fā)生正跳變,所以應(yīng)先置0 p0=y; /將數(shù)據(jù)送入p0口,即將數(shù)據(jù)寫入液晶模塊 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 e=1; /e置高電平,寫數(shù)據(jù) _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 e=0; /當(dāng)e由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令 /*函數(shù)功能:對(duì)lcd的顯示模式進(jìn)行初始化設(shè)置*/void lcdinitiate(void) delaynms(15); /延時(shí)15ms,首次寫指令時(shí)應(yīng)給lcd一段較長的反應(yīng)時(shí)間 writeinstruction(0x38); /顯示模式設(shè)置:162顯示
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 店面租賃定金合同
- 農(nóng)場(chǎng)雇工人合同范例
- 單位搞衛(wèi)生合同范本
- 傳媒公司招人合同范本
- 健筇合同范本
- 2025年遼寧省建筑安全員-A證考試題庫及答案
- 中標(biāo)政府工程合同范本
- 2025浙江省建筑安全員-B證考試題庫附答案
- 公司修路施工合同范本
- 廠房拆遷合同范例工廠企業(yè)
- HDPE纏繞-B型結(jié)構(gòu)壁管施工方案
- 早期教育概論(高職學(xué)前教育專業(yè))全套教學(xué)課件
- 《AutoCAD 中文版實(shí)例教程(AutoCAD 2020) (微課版)(第 2 版)》課件 馬連志 第3、4章 基本繪圖操作、高級(jí)繪圖操作
- 幼兒教師職業(yè)道德(高職學(xué)前教育專業(yè))全套教學(xué)課件
- 汽車發(fā)動(dòng)機(jī)構(gòu)造與維修中職PPT完整全套教學(xué)課件
- 養(yǎng)老院管理-考核考評(píng)
- 蘇科版八年級(jí)生物下冊(cè)全冊(cè)完整課件
- 第四單元復(fù)習(xí)教學(xué)設(shè)計(jì) 部編版語文七年級(jí)上冊(cè)
- 人美版四年級(jí)書法下冊(cè)《第6課 豎心旁》教學(xué)設(shè)計(jì)
- 二年級(jí)綜合實(shí)踐活動(dòng)課件-我與蔬菜交朋友-全國通(41張)
- 血型與輸血檢驗(yàn)-臨床輸血(臨床檢驗(yàn)課件)
評(píng)論
0/150
提交評(píng)論