基于單片機(jī)的實(shí)時(shí)時(shí)鐘系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文(C語言編程、含PCB圖)_第1頁
基于單片機(jī)的實(shí)時(shí)時(shí)鐘系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文(C語言編程、含PCB圖)_第2頁
基于單片機(jī)的實(shí)時(shí)時(shí)鐘系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文(C語言編程、含PCB圖)_第3頁
基于單片機(jī)的實(shí)時(shí)時(shí)鐘系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文(C語言編程、含PCB圖)_第4頁
基于單片機(jī)的實(shí)時(shí)時(shí)鐘系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文(C語言編程、含PCB圖)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、- 1 -畢業(yè)設(shè)計(jì)畢業(yè)設(shè)計(jì)(論論文)文)任任務(wù)書務(wù)書題目:題目: 基于基于12cr887 的實(shí)時(shí)時(shí)鐘系統(tǒng)設(shè)計(jì)的實(shí)時(shí)時(shí)鐘系統(tǒng)設(shè)計(jì)任務(wù)與要求:任務(wù)與要求:時(shí)鐘功能:該時(shí)鐘最少可以準(zhǔn)確走時(shí)幾十年,在掉電后時(shí)鐘芯片12cr887 由內(nèi)部集成鋰離子電池供電,之所以在不需要看時(shí)鐘信息時(shí)可以將主電源拔掉,當(dāng)需要看時(shí)鐘信息時(shí)插上主電源即可正常顯示。日期功能:能夠準(zhǔn)確的顯示當(dāng)前日期,具有閏年,平年日期自動(dòng)調(diào)整功能。鬧鐘功能:能夠按規(guī)定的定時(shí)時(shí)間報(bào)時(shí)。要求:1、確定單片機(jī)的 i/o 口,選擇單片機(jī)的型號(hào),選擇外圍設(shè)備,所須電源參數(shù)。2、單片機(jī)外圍 i/o 接線圖3、設(shè)計(jì)控制程序1) 、選擇 stc89c52 單片

2、機(jī)設(shè)計(jì)2) 、選擇 ds12cr887 作為時(shí)鐘源3) 、選擇 74ls273 作為地址鎖存器4) 、選擇 tda2822 作為鬧鐘功率放大器4、程序與說明畢業(yè)設(shè)計(jì)畢業(yè)設(shè)計(jì)( (論文論文) )進(jìn)度計(jì)劃表進(jìn)度計(jì)劃表日日 期期工工 作作 內(nèi)內(nèi) 容容執(zhí)執(zhí) 行行 情情 況況指指導(dǎo)導(dǎo)教教師師簽簽 字字2 0 0 9年4月2 0日2009 年 4 月 30 日認(rèn)識(shí)課題:圍繞要求掌握的內(nèi)容,查閱書籍、資料確定設(shè)計(jì)方案。方法:書店購買書籍、利用工作之余努力學(xué)習(xí)單片機(jī)編程、在網(wǎng)上申請(qǐng) ds12cr887 免費(fèi)樣品,在電子城買其他外圍元器件。- 2 -2009 年 5 月 5 日2009 年 5 月 10 日讀圖

3、:查閱 ds12cr887 時(shí)鐘芯片內(nèi)部結(jié)構(gòu)相關(guān)資料、利用所學(xué)的知識(shí)重點(diǎn)對(duì)單片機(jī)如何讀取 ds12cr887 內(nèi)部數(shù)據(jù)信息進(jìn)行分析,確定時(shí)鐘顯示電路、調(diào)時(shí)輕觸按鈕、地址鎖存器 74ls273、鬧鐘蜂鳴器、stc51 單片機(jī)的選取。2009 年 5 月 12 日2009 年 5 月 18 日基于 ds12cr887 實(shí)時(shí)日歷時(shí)鐘的硬件連接,stc51 單片機(jī)編程器的制作。并畫出原理圖及其 pcb 板準(zhǔn)備外發(fā) pcb 公司打板!2009 年 5 月 20 日2009 年 5 月 25 日編寫程序,調(diào)試程序,并用軟件仿真!將調(diào)試成功的程序下載到單片機(jī)中!2009 年 5 月 26 日時(shí)鐘制作成功,并

4、觀察走時(shí)的準(zhǔn)確性,為編寫畢業(yè)論文做準(zhǔn)備!2009 年 5 月 27 日2009 年 6 月 5 日整理編寫畢業(yè)設(shè)計(jì)論文,準(zhǔn)備答辯。指導(dǎo)教師對(duì)進(jìn)度計(jì)劃實(shí)施情況總評(píng)簽名: 年 月 日- 3 -目目 錄錄摘要摘要 第第 1 1 章章 緒論緒論 .11.1 實(shí)時(shí)時(shí)鐘研究的背景和意義.11.2 本論文研究的主要內(nèi)容.1本章小結(jié)本章小結(jié) .第第 2 2 章章 系統(tǒng)概述系統(tǒng)概述 .32.1 實(shí)時(shí)時(shí)鐘的特點(diǎn).32.2 實(shí)時(shí)時(shí)鐘芯片 ds12cr887 工作原理.32.3 實(shí)時(shí)時(shí)鐘芯片 ds12cr887 主要性能參數(shù).32.4 七段數(shù)碼管構(gòu)成的顯示電路工作原理.3第第 3 3 章章 硬件設(shè)計(jì)硬件設(shè)計(jì) .53.

5、1 stc89s52 單片機(jī)編程器電路.53.2 電源和顯示時(shí)間控制電路.53.3 按鍵調(diào)時(shí)控制電路 .53.4 鬧鐘電路.5第第 4 4 章章 片機(jī)軟件設(shè)計(jì)4.1 實(shí)時(shí)時(shí)鐘芯片 ds12cr887 編程基礎(chǔ).74.2 時(shí)間調(diào)整,鬧鐘調(diào)整,年、月、日調(diào)整卻換子程序設(shè)計(jì) .74.3 時(shí)間調(diào)整子程序設(shè)計(jì).74.4 鬧鐘定時(shí)調(diào)整子程序設(shè)計(jì).74.5 年、月、日顯示子程序設(shè)計(jì).74.6 年、月、日調(diào)整子程序設(shè)計(jì).74.7 數(shù)碼管顯示子程序設(shè)計(jì).7第第 5 5 章章 結(jié)論結(jié)論 .27謝辭謝辭參考文獻(xiàn)參考文獻(xiàn)- 4 -附錄附錄 a:基于:基于 12cr887 實(shí)時(shí)時(shí)鐘實(shí)時(shí)時(shí)鐘 pcb 板板- 5 -摘要摘

6、要隨著我國經(jīng)濟(jì)的飛速發(fā)展,城市人口日益增多,人們?cè)诿β档娜粘I钪卸忌俨涣艘粋€(gè)穩(wěn)定可靠的時(shí)鐘!當(dāng)我們?cè)诨疖囌竞蜍嚂r(shí)總是時(shí)不時(shí)盯著電子顯示屏的時(shí)間來預(yù)知車次的到來,當(dāng)我們?cè)诠S里面工作時(shí),一個(gè)工人工資的多少往往都是以時(shí)間來計(jì)算的!由此看來一個(gè)穩(wěn)定可靠的時(shí)鐘在我們的日常生活中具有很實(shí)際的意義。本課題是基于 ds12cr887 時(shí)鐘芯片為時(shí)鐘源,單片機(jī)為主控制系統(tǒng)開發(fā)的一個(gè)實(shí)時(shí)時(shí)鐘。該時(shí)鐘走時(shí)準(zhǔn)確,并且在掉電的狀態(tài)下最少也能準(zhǔn)時(shí)間工作 10年,它不但具有走時(shí)準(zhǔn)確的功能,而且還能夠準(zhǔn)確的顯示年,月,日,星期。在本設(shè)計(jì)中充分利用了單片機(jī)內(nèi)部資源,涉及到了鍵盤控制、數(shù)碼管顯示、中斷系統(tǒng)、定時(shí)/計(jì)數(shù)器、串口

7、通信等,這既是對(duì)所學(xué)知識(shí)的總結(jié)也是對(duì)自己動(dòng)手能力的最好鍛煉。通過本次設(shè)計(jì),我成功的制作出了屬于自己的產(chǎn)品,并對(duì)單片機(jī)有了更深層次的了解。通過本次設(shè)計(jì),要想真正的學(xué)好單片機(jī)就要找時(shí)間去多“玩”單片機(jī),也就是說多練習(xí),多想,按照自己的想法去開發(fā)產(chǎn)品,這樣才能真正的掌握單片機(jī)。 單片機(jī)“入門既不難,深造也是辦得到的”,只要有恒心、有決心,跟隨“連載”一步步走下去,將來就一定能在單片機(jī)世界里遨游。關(guān)鍵詞關(guān)鍵詞:實(shí)時(shí)時(shí)鐘 單片機(jī) stc89c52 ds12cr887- 6 -第第 1 1 章章 緒緒 論論1.1 實(shí)時(shí)時(shí)鐘研究的背景和意義實(shí)時(shí)時(shí)鐘研究的背景和意義 在我們的現(xiàn)實(shí)生活中可能每個(gè)人都擁有自己的時(shí)

8、鐘,因?yàn)橛辛藭r(shí)鐘我們就可以按著時(shí)間去工作,按著時(shí)間有計(jì)劃的去處理某些事情。但是有沒有人想過你的時(shí)鐘走時(shí)不準(zhǔn)的時(shí)候,你是多么的煩惱呢。因?yàn)樵谏钪写蠖鄶?shù)時(shí)鐘多是非實(shí)時(shí)的,只要把電池取下來時(shí)鐘就將停止工作,或者當(dāng)你的時(shí)鐘電池耗盡時(shí)它將也停止工作。就連人們常帶的電子手表也要定期更換電池,否則將停止工作。然而又有沒有人想過在更換電池上所話費(fèi)金錢的多少呢?我們就以電子鐘一個(gè)月更換一次電池來計(jì)算吧,換一次電池大概需要 3 元錢,一年下來將要花費(fèi) 36 元錢,十年下來將要花費(fèi) 360 元,還不算電池漲價(jià)的情況與時(shí)鐘維修的錢!而本次設(shè)計(jì)的實(shí)時(shí)時(shí)鐘不但時(shí)間是連續(xù)的,而且在掉電的情況下也能工作幾十年,并且制作成本

9、也才 20 來塊錢。本時(shí)鐘還具有環(huán)保、走時(shí)無噪音、低功耗等非實(shí)時(shí)時(shí)鐘不具有的功能。該實(shí)時(shí)時(shí)鐘不但可以作為家用,而且更可以在公共場(chǎng)合使用,如車站、碼頭、商場(chǎng)等場(chǎng)所。1.2 本論文研究的主要內(nèi)容本論文研究的主要內(nèi)容本文是以實(shí)時(shí)時(shí)鐘芯片 ds12cr887 和 stc89c52 單片機(jī)為主要研究對(duì)象,著重進(jìn)行 51 單片機(jī)控制系統(tǒng)的設(shè)計(jì)研究和如何讀取 ds12cr887 內(nèi)部時(shí)鐘信息的研究。主要內(nèi)容包括:1、時(shí)間顯示系統(tǒng)的設(shè)計(jì);2、調(diào)整時(shí)間系統(tǒng)的設(shè)計(jì);3、年、月、日顯示系統(tǒng)的設(shè)計(jì);4、年、月、日調(diào)整系統(tǒng)的設(shè)計(jì);5、鬧鐘定時(shí)系統(tǒng)的設(shè)計(jì);6、鬧鐘定時(shí)響應(yīng)系統(tǒng)的設(shè)計(jì);7、如何讀取 ds12cr887 內(nèi)部

10、時(shí)鐘信息; 本章小結(jié)本章小結(jié)本章介紹了基于 ds12cr887 實(shí)時(shí)時(shí)鐘在現(xiàn)實(shí)生活中的重要性,總結(jié)了本論文研究的目的、意義及要完成主要工作的任務(wù)。- 7 -第第 2 2 章章 系統(tǒng)概述系統(tǒng)概述2.1 實(shí)時(shí)時(shí)鐘的特點(diǎn)實(shí)時(shí)時(shí)鐘的特點(diǎn) 1、走時(shí)準(zhǔn)確無誤,配置靈活,設(shè)用于工廠,車站,家庭等領(lǐng)域使用。 2、價(jià)格較低,外圍設(shè)備較簡單易于制作。 3、低功耗,能夠掉電工作幾十年。 4、工作無噪音,不影響他人休息。 5、鬧鐘報(bào)時(shí)準(zhǔn)確,不會(huì)誤報(bào)錯(cuò)報(bào)。 6、外表美觀,實(shí)用,實(shí)用價(jià)值高。2.2 實(shí)時(shí)時(shí)鐘工作原理實(shí)時(shí)時(shí)鐘工作原理本時(shí)鐘在上電工作時(shí)首先顯示當(dāng)前時(shí)間時(shí)、分、秒,然后延時(shí)一段時(shí)間后顯示當(dāng)前年、月、日,并在設(shè)定

11、的鬧鈴時(shí)間鬧鐘響應(yīng)。當(dāng)用戶需要調(diào)整年、月、日、時(shí)、分、秒鬧鈴時(shí)可以按輕觸按鈕進(jìn)行調(diào)節(jié)。在掉電的情況下,顯示屏上面沒有顯示,但在時(shí)鐘芯片 ds12cr887 內(nèi)部已經(jīng)集成了可充電鋰離子電池,其內(nèi)部任然在不間斷的工作中,即時(shí)在掉電的情況下 ds12cr887 至少也能工作十年,所以當(dāng)給單片機(jī)再次供電時(shí),單片機(jī)對(duì) ds12cr887 進(jìn)行讀數(shù)據(jù),然后通過顯示屏顯示準(zhǔn)確無誤的時(shí)間!2.3 實(shí)時(shí)時(shí)鐘芯片實(shí)時(shí)時(shí)鐘芯片 ds12cr887 主要性能參數(shù)主要性能參數(shù) 1,時(shí)鐘芯片,時(shí)鐘芯片 ds12cr887,其引腳分布圖如下所示其引腳分布圖如下所示mot (1 腳) :總線時(shí)序模式選擇腳。接高電平,選擇 m

12、otorola 總線時(shí);序;接低電平或懸空,擇選擇 intel 總線時(shí)序。nc (2,3,16,20,21,22 腳):懸空腳。ad0ad7(411 腳):地址/地址數(shù)據(jù)復(fù)用總線引腳。cs(13 腳):片選腳,低電平有效。- 8 -as(14 腳):地址鎖存輸入腳。下降沿時(shí),地址被鎖存,緊接著的上升沿來時(shí)地址被清除。r/w(15 腳):讀/寫輸入腳。在選擇 motorola 總線時(shí)序模式時(shí),此引腳用于指示當(dāng)前的讀寫周期,高電平指示當(dāng)前為讀周期,低電平指示當(dāng)前為寫周期;選擇 intel 中線時(shí)序模式時(shí),此引腳為低電平有效的輸入腳,相當(dāng)于通用 ram 的寫使能信號(hào)(/we)ds(17 腳):選擇

13、motorola 總線時(shí)序模式時(shí),此引腳為數(shù)據(jù)鎖存腳;選擇 intel 總線時(shí)序模式時(shí),此引腳為讀輸入腳,低電平有效,相當(dāng)于典型的內(nèi)存的輸出使能信號(hào)(/oe)reset(18 腳):復(fù)位腳,低電平有效,復(fù)位不會(huì)影響到時(shí)鐘、日歷和ram。irq(19 腳):中斷申請(qǐng)輸出腳,低電平有效,可作為微處理器的中斷輸入。sqw(23 腳):方波信號(hào)輸出腳??赏ㄟ^設(shè)置寄存器位 sqwe 關(guān)斷此信號(hào)輸出,此信號(hào)的輸出頻率也可通過對(duì)芯片內(nèi)部的寄存器編程予以改變。vcc(24 腳):+5v 電源端。2,時(shí)鐘芯片,時(shí)鐘芯片 ds12cr887,其內(nèi)存空間如下所示其內(nèi)存空間如下所示 01314495051 127地址

14、 0x000x09 共十個(gè)寄存器,分別存放秒、秒鬧鐘、分、分鬧鐘、時(shí)、時(shí)鬧鐘、小時(shí)、時(shí)鬧鐘、星期、日、月、年和年信息,地址 0x32 為世紀(jì)信息寄存器(解決了千年問題);地址 0x0a0x0dh 共 4 個(gè)寄存器,分別為寄存器 a、b、c、d,它們用于控制和寄存某些狀態(tài)信息;其余的113 字節(jié)地址空間是留給用戶使用的普通地址空間。在所有的 128 字節(jié)中,寄存器 c 和 d 為只讀寄存器,寄存器 a 的第7 位屬于只讀位,秒字節(jié)的高階位也是只讀的,其余字節(jié)均為可直接讀寫0秒1 秒鬧鐘14 字節(jié)2 分鐘3 分鬧鐘 4 時(shí)鐘5 時(shí)鬧鐘6 星期7 日8 月9 年10 寄存器 a11 寄存器 b12

15、寄存器 c13 寄存器 d000d0e3132337f50 世紀(jì)- 9 -字節(jié)。時(shí)鐘,日歷信息可以通過讀取合適的內(nèi)存字節(jié)獲得:時(shí)鐘、日歷和鬧鐘可以寫合適的內(nèi)存字節(jié)設(shè)置和初始化。對(duì)應(yīng)時(shí)鐘、日歷和鬧鐘的 10 個(gè)寄存器字節(jié)可以是二進(jìn)制形式或者 bcd 碼形式,在寫這些寄存器時(shí),寄存器b 的 set 位必須置 1。寄存器 a 字節(jié)的內(nèi)容如下。msb lsbuip: 更新標(biāo)志位。為只讀位且不受復(fù)位操作的影響,為 1 時(shí),表示即將發(fā)生的數(shù)據(jù)更新;為 0 時(shí),表示至少 244us 不會(huì)更新數(shù)據(jù)。當(dāng) uip 為 0 時(shí),可以獲得所有時(shí)鐘、日歷、鬧鐘信息。將寄存器 b 中的 set 位置 1 可以限制任何數(shù)據(jù)

16、更新操作,并且清除 uip 位。dv2、dv1、dv0:此 3 位為 010 時(shí)將打開晶振,并開始計(jì)時(shí)。res3、res2、res1、res0:用于設(shè)置周期性中斷產(chǎn)生的時(shí)間周期和輸出方波的頻率。寄存器 b 字節(jié)的內(nèi)容如下。 msb lsbset:設(shè)置位,可讀寫,不受復(fù)位操作影響。為 0 時(shí),不處于設(shè)置狀態(tài),芯片進(jìn)行正常時(shí)間數(shù)據(jù)更新;為 1 時(shí),抑制數(shù)據(jù)更新,可以通過程序設(shè)定時(shí)間和日歷信息。pie:周期性中斷使能位,可讀寫,復(fù)位時(shí)清除此位。為 1 時(shí),允許寄存器 c 中的周期中斷標(biāo)志位 pf,驅(qū)動(dòng)/irq 引腳為低產(chǎn)生中斷信號(hào)輸出,中斷信號(hào)產(chǎn)生的周期由 rs3re0 決定。aie:鬧鐘中斷使能位

17、,可讀寫。為 1 時(shí),允許寄存器 c 中的鬧鐘中斷標(biāo)志位 af、鬧鐘發(fā)生時(shí)就會(huì)通過/irq 引腳產(chǎn)生中斷輸出。uie:數(shù)據(jù)更新結(jié)束中斷使能位,可讀寫。復(fù)位或者 set 位為 1 時(shí)清除此位。為 1 時(shí)允許寄存器 c 中的更新結(jié)束標(biāo)志 uf,更新結(jié)束時(shí)就會(huì)通過/irq 引腳產(chǎn)生中斷輸出。sqwe:方波使能位,可讀寫,復(fù)位時(shí)清除此位。為 0 時(shí),sqw 引腳保持低電平;為 1 時(shí),sqw 引腳輸出方波信號(hào),其頻率由 rs3rs0 決定。dm:數(shù)據(jù)模式位,可讀寫,不受復(fù)位操作影響。為 0 時(shí),設(shè)置時(shí)間、日歷信息為二進(jìn)制數(shù)據(jù);為 1 時(shí),設(shè)置為 bcd 碼數(shù)據(jù)。24/12:時(shí)間模式設(shè)置為,可讀寫,不受

18、復(fù)位操作影響。為 0 時(shí),設(shè)置為12 小時(shí)模式;為 1 時(shí),設(shè)置為 24 小時(shí)模式。dse:為 1 時(shí),會(huì)引起兩次特殊的時(shí)間更新;4 月的第一個(gè)星期日凌晨1:59:59 會(huì)直接更新到 3:00:00,10 月的最后一個(gè)星期日凌晨 1:59:59會(huì)直接更新到 1:00:00;為 0 時(shí),時(shí)間信息正常更新,此位可讀寫,不受復(fù)位操作影響。寄存器 c 字節(jié)內(nèi)容如下。 msb lsbiqrf:中斷申請(qǐng)標(biāo)志位。為 1 時(shí),/irq 引腳為低,產(chǎn)生中斷申請(qǐng)。當(dāng) uip dv2 dv1 dv0 rs3 rs2 rs1 rs0 set pie aie uie sqwe dm24/12 dse irqf pf a

19、f uf 0 0 0 0- 10 -pf、pie 為 1 時(shí)或者 af、ate 為 1 或者 uf、uie 為 1 時(shí),此位為 1,否則置 0.pf:中期中斷標(biāo)志位。為 1 時(shí),它是只讀位,和 pie 位狀態(tài)無關(guān),由復(fù)位操作或者寄存器 c 操作清除。af:鬧鐘中斷標(biāo)志位。為 1 時(shí),表示當(dāng)前時(shí)間和鬧鐘設(shè)定時(shí)間一至,由復(fù)位操作或讀寄存器 c 操作清除。uf:數(shù)據(jù)更新結(jié)束中斷標(biāo)志位。每個(gè)更新周期后此位都會(huì)置 1,當(dāng) uie位位置 1 時(shí),uf 若為 1 就會(huì)引起 irqf 置 1,將驅(qū)動(dòng)/irq 引腳為低電平,申請(qǐng)中斷。此位由復(fù)位操作或讀寄存器 c 操作清除。寄存器 d 字節(jié)的內(nèi)容如下。 msb

20、lsbvrt;ram 和時(shí)間有效位。用于指示和 vbat 引腳連接的電池狀態(tài)。此位不可寫,也不受操作為影響,正常情況下讀取時(shí)總?cè)?1,如果出現(xiàn)讀取為0 的情況,則表示電池耗盡,時(shí)間數(shù)據(jù)和 ram 中的數(shù)據(jù)就會(huì)出現(xiàn)問題。芯片 ds12cr887 的 113 字節(jié)普通 ram 空間為非易失性 ram 空間,他不專門用于某些特別功能,而是可以在未處理器程序中作為非易失性內(nèi)存空間使用。3,74ls273 其引腳分布圖如下圖所示其引腳分布圖如下圖所示 rd(1 腳):復(fù)位腳。低電平有效,當(dāng) 1 腳是低電平時(shí),輸出腳 2(1q)、5(2q)、6(3q)、9(4q)、12(5q)、15(6q)、16(7q

21、)、 19(8q)。 全部輸出 0,即全部復(fù)位。t(11 腳):鎖存控制端。上升沿觸發(fā),當(dāng) 1 腳為高電平時(shí),且 11 腳有上升沿時(shí),立即鎖存輸入腳 3(1d)、4(2d)、7(3d)、8(4d)、13(5d)、14(6d)、17(7d)、18(8d)上的電平狀態(tài),并呈現(xiàn)在輸出腳 2(1q)、5(2q)、6(3q)、9(4q)、12(5q)、15(6q)、16(7q)、 19(8q)上。4,七段數(shù)碼管構(gòu)成的顯示電路工作原理。,七段數(shù)碼管構(gòu)成的顯示電路工作原理。 本設(shè)計(jì)顯示電路部分由六個(gè)共陽極數(shù)碼構(gòu)成。其中共陽極公共端用三級(jí)管進(jìn)行驅(qū)動(dòng), 段碼由 74ls273 地址鎖存器控制,并采用數(shù)碼管總線動(dòng)

22、態(tài)掃描方 0 0 0 0 0 0 0 0- 11 -式進(jìn)行時(shí)間,年、月、日的顯示。具體硬件電路在后面的硬件設(shè)計(jì)中有提供!第第 3 章章 硬件設(shè)計(jì)硬件設(shè)計(jì)3.1 stc89c52 單片機(jī)編程器結(jié)構(gòu)單片機(jī)編程器結(jié)構(gòu)由于 stc89c52 單片機(jī)只支持串口下載,加上手中沒有現(xiàn)成的編程器,故只能自己動(dòng)手做個(gè)簡單的編程。該編程器主要由 max232 電平轉(zhuǎn)換芯片和單片機(jī)最小系統(tǒng)構(gòu)成,利用 rs-232 接口實(shí)現(xiàn)單片機(jī)和計(jì)算機(jī)通信,并由單片機(jī)專用燒錄軟件將程序?qū)懺趩纹瑱C(jī)中。由于 stc89c52 單片機(jī)在寫程序進(jìn)去時(shí),具有冷啟動(dòng)過程,所以在編程之前必去將主電源復(fù)位一次,本電路中復(fù)位按鈕為s1。其單片機(jī)燒錄

23、軟件為 stcispv31,編程器電路如下圖所示。stc89c52 單片機(jī)編程器電路如下所示:- 12 -3.2 電源和顯示控制結(jié)構(gòu)電路電源和顯示控制結(jié)構(gòu)電路 電源部分由一片 lm7805 構(gòu)成 5v 的穩(wěn)壓電源,為整個(gè)電路提供電能。 由兩片 74ls273,六個(gè)共陽極數(shù)碼管,六個(gè) npn 型三極管等元器件構(gòu)成了完整的時(shí)間、年、月、日、顯示電路。其中 u2 控制六個(gè)數(shù)碼管的段碼,u3控制三極管的基極再由三極管放大電流后驅(qū)動(dòng)數(shù)碼管的公共端!采用總線掃描方式,利用人眼視覺暫留現(xiàn)象,在程序的控制下在數(shù)碼管上面顯示出所需要的數(shù)值! 電源和顯示控制電路如下所示: - 13 -3.3 按鍵調(diào)時(shí)控制電路按鍵

24、調(diào)時(shí)控制電路 該電路主要由 stc89c52 單片機(jī)最小系統(tǒng),ds12cr887,調(diào)時(shí)按鈕 s1s3及其外為元器件所構(gòu)成。通過編寫程序讓單片機(jī)讀取 ds12cr887 里面的信息,然后由 ds12cr887 控制地址鎖存器 74ls273 進(jìn)而控制數(shù)碼管的顯示。當(dāng)按下按鈕時(shí)單片機(jī)都會(huì)由走時(shí)狀態(tài)轉(zhuǎn)到調(diào)時(shí)狀態(tài)進(jìn)入時(shí)間調(diào)整、年、月、日、鬧鐘調(diào)整狀態(tài)。當(dāng)調(diào)整結(jié)束后又回到新的走時(shí)狀態(tài)。 按鍵調(diào)時(shí)控制電路如下所示:- 14 -3.4 鬧鐘電路鬧鐘電路該電路主要由 tda2822 功率放大模塊將單片機(jī)發(fā)出的鬧鐘信號(hào)進(jìn)行放大,進(jìn)而推動(dòng)一個(gè) 3w 喇叭。供電部分與單片機(jī)共用 5v 的電源,該設(shè)計(jì)的最大特點(diǎn)就是能

25、夠清脆的聽出鬧鐘時(shí)發(fā)出的音樂曲調(diào)。鬧鐘電路如下所示:- 15 - 第第 4 章章單片機(jī)軟件設(shè)計(jì)單片機(jī)軟件設(shè)計(jì)4.1 實(shí)時(shí)時(shí)鐘芯片實(shí)時(shí)時(shí)鐘芯片 ds12cr887 編程基礎(chǔ)編程基礎(chǔ) 1,在本設(shè)計(jì)中,ds12cr887 采用 intel 總線模式進(jìn)行與單片機(jī)進(jìn)行數(shù)據(jù)讀也寫操作。當(dāng) 1 腳(mot)為低電平時(shí),ds12cr887 為 motorola 總線模式,在此不做詳述。當(dāng) 1 腳(mot)為高電平或懸空時(shí),ds12cr887 為intel 總線模式,本設(shè)計(jì)中將 1 腳(mot)懸空。在編寫程序的過程中首先應(yīng)將 ds12cr887 按 intel 總線模式初始化,在 intel 總線模式下將數(shù)據(jù)

26、寫在指定的地址,在 intel 總線模式下將指定的地址讀出數(shù)據(jù)。 2,intel 總線寫時(shí)序時(shí)序圖如下:3,intel 總線讀時(shí)序時(shí)序圖如下:- 16 - 4,根據(jù) intel 總線寫時(shí)序時(shí)序圖寫數(shù)據(jù)程序: void write_12cr887(uchar add,uchar date)/在指定地址寫入數(shù)據(jù) cs=0; ds=1; rw=1; as=1; p0=add; as=0; rw=0; p0=date; rw=1; as=1;cs=1; 5,根據(jù) intel 總線讀時(shí)序時(shí)序圖讀數(shù)據(jù)程序: uchar read_12c887(uchar add)/在指定的地址讀出數(shù)據(jù) uchar rea

27、d_data; ds=1; rw=1; as=1; cs=0; p0=add; as=0; ds=0; p0=0xff; read_data=p0;ds=1; as=1; cs=1; return(read_data);4.24.2 時(shí)間調(diào)整,鬧鐘調(diào)整,年、月、日調(diào)整切換子程序設(shè)計(jì)時(shí)間調(diào)整,鬧鐘調(diào)整,年、月、日調(diào)整切換子程序設(shè)計(jì)當(dāng)按下按鈕 sw1 時(shí),中間標(biāo)志位 i 會(huì)自動(dòng)進(jìn)行加操作。當(dāng) i 等于 1 時(shí),時(shí)間調(diào)整標(biāo)志位置 1,進(jìn)入時(shí)間調(diào)整狀態(tài)。當(dāng) i 等于 2 時(shí),鬧鐘調(diào)整標(biāo)志位置 1,進(jìn)入鬧鐘調(diào)整狀態(tài)。當(dāng)i 等于 3 時(shí),年、月、日調(diào)整標(biāo)志位置 1,進(jìn)入年、月、日調(diào)整狀態(tài)。1,時(shí)間調(diào)整,鬧

28、鐘調(diào)整,年、月、日調(diào)整卻換子程序如下: void gongneng_quehuan()/功能卻換子程序if(sw1=0)- 17 -delay(5);if(sw1=0)while(sw1=0);display(read_12c887(seconds),read_12c887(minutes),read_12c887(hours);i+;if(i=1)flag_set_time=1;/將時(shí)間調(diào)整標(biāo)志位置 1else if(i=2)flag_set_time=0;flag_set_alarm=1;/將鬧鐘調(diào)整標(biāo)志位置 1else if(i=3)i=0;flag_set_century=1;/將年、

29、月、日調(diào)整標(biāo)志位置 14.3 時(shí)間調(diào)整子程序設(shè)計(jì)時(shí)間調(diào)整子程序設(shè)計(jì) 由于本人想向單片機(jī)更高層次編程,本設(shè)計(jì)只用三個(gè)按鈕根據(jù)不同的組合狀態(tài)進(jìn)行時(shí)間,鬧鐘,年,月,日的調(diào)整。所以程序相對(duì)來說是比較復(fù)雜的。具體時(shí)間調(diào)整過程是這樣的,首先進(jìn)行小時(shí)調(diào)整,然后進(jìn)行分鐘調(diào)整,最后進(jìn)行秒鐘調(diào)整。在小時(shí)調(diào)整過程中,如果 sw2 按鈕每按下一次時(shí)將對(duì)小時(shí)當(dāng)前值加 1 次,當(dāng)加到 24 時(shí)小時(shí)清零;如果 sw3 按鈕每被按下一次時(shí)將對(duì)小時(shí)當(dāng)前值減 1 次,當(dāng)減到 0 后再按一次 sw3 時(shí)小時(shí)賦值到 23。小時(shí)調(diào)整完畢后將所調(diào)整好的小時(shí)值寫入小時(shí)寄存器中,然后又將寫入到小時(shí)寄存器的數(shù)值從ds12cr887 中讀取出

30、來并在顯示屏上顯示出來。在分鐘調(diào)整過程中,如果sw2 按鈕每按下一次時(shí)將對(duì)分鐘當(dāng)前值加 1 次,當(dāng)加到 60 時(shí)分鐘清零,小時(shí)加 1;如果 sw3 按鈕每被按下一次時(shí)將對(duì)分鐘當(dāng)前值減 1 次,當(dāng)減到 0 后再按一次 sw3 時(shí)分鐘賦值到 59。分鐘調(diào)整完畢后將所調(diào)整好的分鐘值寫入分鐘寄存器中,然后又將寫入到分鐘寄存器的數(shù)值從 ds12cr887 中讀取出來并在顯示屏上顯示出來。在秒鐘調(diào)整過程中,如果 sw2 按鈕每按下一次時(shí)將對(duì)秒鐘當(dāng)前值加 1 次,當(dāng)加到 60 時(shí)秒鐘清零,分鐘加 1;如果 sw3 按鈕每被按下一次時(shí)將對(duì)秒鐘當(dāng)前值減 1 次,當(dāng)減到 0 后再按一次 sw3 時(shí)秒鐘賦值到 59

31、。秒鐘調(diào)整完畢后將所調(diào)整好的秒鐘值寫入秒鐘寄存器中,然后又將寫入到秒鐘寄存器的數(shù)值從 ds12cr887 中讀取出來并在顯示屏上顯示出來。當(dāng)小時(shí)、分鐘、- 18 -秒鐘都調(diào)整完畢后按下確認(rèn)鍵(sw1 和 sw2 都被按下時(shí))時(shí)間調(diào)整完成,并將當(dāng)前所調(diào)整出來的數(shù)值在顯示屏上面顯示出來,進(jìn)入時(shí)間顯示狀態(tài)。 1,時(shí)間調(diào)整子程序如下: void shijian_tiaozheng()char hours_timeset,timeset=0;if(flag_set_time=1)write_12c887(register_b,0xa6);flag_set_time=0;if(timeset=0)hour

32、s_timeset=read_12c887(hours);/讀取當(dāng)前小時(shí)的值sw2=1;sw1=1;while(sw2=0)&(sw1=0)!=1)/如果確認(rèn)鍵未按下,一直處于小時(shí)調(diào)整狀態(tài)if(sw2=0)delay(5);if(sw2=0)while(sw2=0)display(read_12c887(seconds),read_12c887(minutes),read_12c887(hours);hours_timeset+;/小時(shí)值加 1if(hours_timeset=24)hours_timeset=0;write_12c887(hours,hours_timeset);/將調(diào)整后的

33、小時(shí)的值寫入小時(shí)寄存器/led2=1;if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(read_12c887(seconds),read_12c887(minutes),read_12c887(hours);hours_timeset-;/小時(shí)值減 1if(hours_timeset=60)hours_timeset=0;write_12c887(minutes,hours_timeset);if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(read_12c887(seconds),read_12c887

34、(minutes),read_12c887(hours);- 20 -hours_timeset-;if(hours_timeset=60)hours_timeset=0;write_12c887(seconds,hours_timeset);if(sw3=0)delay(5);if(sw3=0)while(sw3=0)- 21 -display(read_12c887(seconds),read_12c887(minutes),read_12c887(hours);hours_timeset-;if(hours_timeset=24)alarmset=0;- 23 -write_12c887

35、(hours_alarm,alarmset);/將調(diào)整后的小時(shí)的值寫入小時(shí)寄存器if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(read_12c887(seconds_alarm),read_12c887(minutes_alarm),read_12c887(hours_alarm);alarmset-;/小時(shí)值減 1if(alarmset=60)alarmset=0;- 25 -write_12c887(minutes_alarm,alarmset);if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(r

36、ead_12c887(seconds_alarm),read_12c887(minutes_alarm),read_12c887(hours_alarm);alarmset-;if(alarmset=60)alarmset=0;write_12c887(seconds_alarm,alarmset);- 27 -if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(read_12c887(seconds_alarm),read_12c887(minutes_alarm),read_12c887(hours_alarm);alarmset-;if(alar

37、mset=99)century_set=0;write_12c887(year,century_set);/將調(diào)整后的年份寫入年寄存器- 31 -if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(read_12c887(day_of_month),read_12c887(month),read_12c887(year);century_set-;/年份減if(century_set12)month=1;write_12c887(month,month);if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(re

38、ad_12c887(day_of_month),read_12c887(month),read_12c887(year);month-;if(month31)century_set=1;break;case 3:if(century_set31)century_set=1;break;case 5:if(century_set31)century_set=1;break;case 7:if(century_set31)century_set=1;break;case 8:if(century_set31)century_set=1;break;case 10:if(century_set31)

39、century_set=1;break;case 12:- 36 -if(century_set31)century_set=1;break;case 4:if(century_set30)century_set=1;break;case 6:if(century_set30)century_set=1;break;case 9:if(century_set30)century_set=1;break;case 11:if(century_set30)century_set=1;break;case 2:if(flag_runnian=1)if(century_set29)century_se

40、t=1;- 37 -else if(century_set28)century_set=1;break;default: break;write_12c887(day_of_month,century_set);if(sw3=0)delay(5);if(sw3=0)while(sw3=0)display(read_12c887(day_of_month),read_12c887(month),read_12c887(year);century_set-;switch(month)case 1:if(century_set1)century_set=31;break;- 38 -case 3:i

41、f(century_set1)century_set=31;break;case 5:if(century_set1)century_set=31;break;case 7:if(century_set1)century_set=31;break;case 8:if(century_set1)century_set=31;break;case 10:if(century_set1)century_set=31;break;case 12:if(century_set1)century_set=31;break;- 39 -case 4:if(century_set1)century_set=3

42、0;break;case 6:if(century_set1)century_set=30;break;case 9:if(century_set1)century_set=30;break;case 11:if(century_set1)century_set=30;break;case 2:if(flag_runnian=1)if(century_set1)century_set=29;else if(century_set1)century_set=28;- 40 -break;default: break;write_12c887(day_of_month,century_set);d

43、isplay(read_12c887(day_of_month),read_12c887(month),read_12c887(year);centuryset=0;while(sw2&sw1)=0)display(read_12c887(day_of_month),read_12c887(month),read_12c887(year);4.6 數(shù)碼管顯示子程序設(shè)計(jì)數(shù)碼管顯示子程序設(shè)計(jì) 數(shù)碼管顯示部分主要由兩片 74ls273 地址鎖存器對(duì)數(shù)碼管進(jìn)行控制。當(dāng)控制段碼的 74ls273 鎖存端(11 腳)為 0 時(shí),將所要顯示的段碼送入 74ls273的數(shù)據(jù)輸入端口,然后將所存端(11 腳)置

44、 1,使輸入的數(shù)據(jù)鎖存住并呈現(xiàn)在輸出數(shù)據(jù)端。然后將控制位碼的 74ls273 的鎖存端(11 腳)置 0,將要所顯示的位碼送入 74ls273 的數(shù)據(jù)輸入端口,然后將鎖存端(11 腳)置 1,使輸入的數(shù)據(jù)鎖存住并呈現(xiàn)在輸出數(shù)據(jù)端。就這樣利用數(shù)碼管動(dòng)態(tài)掃描方式,所要顯示的數(shù)據(jù)通過數(shù)碼管顯示出來。 1,數(shù)碼管顯示子程序如下:void display(uchar second,uchar minute,uchar hour)- 41 -uchar seconds0,seconds1,minutes0,minutes1,hours0,hours1;seconds1=second/10; /秒鐘的十位求模 seconds0=second%10; /秒鐘的個(gè)位求余minutes1=minute/10;minutes0=minute%10;hours1=hour/10;hours0=hou

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論