畢業(yè)設(shè)計(論文)基于AT89S51單片機(jī)的簡易萬年歷的設(shè)計_第1頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機(jī)的簡易萬年歷的設(shè)計_第2頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機(jī)的簡易萬年歷的設(shè)計_第3頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機(jī)的簡易萬年歷的設(shè)計_第4頁
畢業(yè)設(shè)計(論文)基于AT89S51單片機(jī)的簡易萬年歷的設(shè)計_第5頁
免費預(yù)覽已結(jié)束,剩余31頁可下載查看

下載本文檔

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

文檔簡介

1、畢業(yè)設(shè)計報告畢業(yè)設(shè)計報告 設(shè)計題目:設(shè)計題目: 簡易萬年歷的設(shè)計簡易萬年歷的設(shè)計 設(shè)計作者: 專業(yè)班級/學(xué)號: 合作者 1: 專業(yè)班級/學(xué)號: 合作者 2: 專業(yè)班級/學(xué)號: 指導(dǎo)教師: 設(shè)計時間: 2011-5-20 摘要摘要 二十一世紀(jì)的今天,最具代表性的計時產(chǎn)品就是電子萬年歷,它是近代世界鐘 表業(yè)界的第三次革命。 電子萬年歷是單片機(jī)系統(tǒng)的簡單應(yīng)用。本設(shè)計是采用單片機(jī) at89s51 作為系統(tǒng)的 核心,由主控模塊、時控模塊、顯示模塊和鍵盤接口模塊共 4 個模塊組成。主控芯片 使用低電壓、高性能 cmos 8 位微處理器 at89s51 單片機(jī)。采用具有涓細(xì)電流充電 功能的低功耗實時時鐘芯片

2、 ds1302 和通過 2 個 4 位 8 段數(shù)碼管顯示。 關(guān)鍵詞:at89s51、數(shù)碼管、萬年歷 目錄目錄 摘要.1 引言.4 第一章 總體要求.5 1.1 設(shè)計任務(wù)及要求.5 1.1.1 設(shè)計任務(wù).5 1.1.2 設(shè)計要求.5 1.2 系統(tǒng)總體設(shè)計.5 1.2.1 控制方面的方案選擇.5 1.2.2 顯示部份的方案選擇.6 1.2.3 系統(tǒng)結(jié)構(gòu)框圖設(shè)計及說明.6 第二章 系統(tǒng)硬件設(shè)計 .6 2.1 晶體振蕩器電路.6 2.2 串口通信電路.7 2.3 復(fù)位電路.7 2.4 時鐘電路.7 2.5 按鍵部分.8 2.6 at89s51 引腳在本設(shè)計中的作用說明.8 第三章 系統(tǒng)軟件設(shè)計 .9

3、3.1 公歷與星期的換算方法.9 3.2 設(shè)計流程圖及說明.10 3.3 源程序的編寫.11 3.3.1 中斷程序.11 3.3.2 延時程序.12 3.3.3 讀取部分?jǐn)?shù)據(jù).12 3.3.4 數(shù)碼管顯示程序.14 3.3.5 按鍵程序.15 第四章安裝與調(diào)試.17 4.1 硬件的安裝調(diào)試.17 4.2 軟件調(diào)試.17 4.3 測試結(jié)果分析與結(jié)論.18 4.3.1 測試結(jié)果分析.18 4.3.2 測試結(jié)論.18 總結(jié).18 致謝.19 參考文獻(xiàn).20 附錄.21 引言引言 電子萬年歷是一種應(yīng)用非常廣泛的日常計時工具,數(shù)字顯示的日歷鐘已經(jīng)越來越 流行,特別是適合在家庭居室、辦公室、大廳、會議室、

4、車站和廣場等使用,壁掛式 led 數(shù)字顯示的日歷鐘顯示清晰直觀、走時準(zhǔn)確、可以進(jìn)行夜視,并且還可以擴(kuò)展出 多種功能。它是生活和工作中最常見的一種電子裝置,核心部分是電子鐘。除了專用 的時鐘、計時顯示牌外,許多應(yīng)用系統(tǒng)常常需要帶有實時時鐘顯示,如各種智能化儀 器儀表、工業(yè)過程控制系統(tǒng)以及家用電器等。 本設(shè)計主要采用 at89s51 單片機(jī)作為主控核心,由 ds1302 時鐘芯片提供時鐘、 數(shù)碼管動態(tài)掃描顯示屏顯示。at89s51 單片機(jī)是由 atmel 公司推出的,功耗小,電壓 可選用 46v 電壓供電;ds1302 時鐘芯片是美國 dallas 公司推出的具有涓細(xì)電流 充電功能的低功耗實時時鐘

5、芯片,它可以對年、月、日、星期、時、分、秒進(jìn)行計時, 還具有閏年補償?shù)榷喾N功能,而且 ds1302 的使用壽命長,誤差??;數(shù)字顯示是采用的 8 位數(shù)碼管來顯示,可以同時顯示年、月、日、星期、時、分、秒等信息。 第一章第一章 總體要求總體要求 1.1 設(shè)計任務(wù)及要求設(shè)計任務(wù)及要求 1.1.1 設(shè)計任務(wù)設(shè)計任務(wù) (1) 設(shè)計一以單片機(jī)為核心控制的萬年歷,具有多項顯示和控制功能; (2)了解單片機(jī)版工作原理及整個萬年歷的程序編寫。 1.1.2 設(shè)計要求設(shè)計要求 (1)能用八段數(shù)碼管實時顯示當(dāng)前年、月、日、星期、時、分、秒; (2)斷電有實時時鐘; (3)可以對界面進(jìn)行切換,對時間進(jìn)行加的操作; 1.

6、2 系統(tǒng)總體設(shè)計系統(tǒng)總體設(shè)計 1.2.1 控制方面的方案控制方面的方案選擇選擇 方案一:可采用 altera 公司的 flex10k 系列 pld 器件。設(shè)計起來結(jié)構(gòu)清晰, 各個模塊,從硬件上設(shè)計起來相對簡單,控制與顯示的模塊間的連接也會比較方便。 但是考慮到本設(shè)計的特點,eda 在功能擴(kuò)展上比較受局限,而且 eda 占用的資源也 相對多一些。從成本上來講,用可編程邏輯器件來設(shè)計也沒有什么優(yōu)勢。 方案二: 16 位單片機(jī)有豐富的中斷源和時基。它的準(zhǔn)確度相當(dāng)高,并且 c 語言 和匯編兼容的編程環(huán)境也很方便來實現(xiàn)一些遞歸調(diào)用。i/o 口功能也比較強(qiáng)大,方便使 用。用 16 位單片機(jī)做控制器最有特色

7、的就是它的可編程音頻處理,可完成語音的錄制 播放和識別。這些都方便對設(shè)計進(jìn)行擴(kuò)展,使設(shè)計更加完善。成本也相對低一些。但 是,在控制與顯示的結(jié)合上有些復(fù)雜,顯示模組資源相對有限,而且單片機(jī)的穩(wěn)定性 不是很高,而且就需要完成萬年歷這個不太復(fù)雜的設(shè)計可以不必用 16 位單片機(jī)來完成, 采用 51 單片機(jī)既能夠?qū)崿F(xiàn)既定功能,成本也不高。綜合考慮最后選擇用 51 單片機(jī)來 作為中心控制器件。 硬件控制電路主要用了 at89s51 芯片處理器、四位八段數(shù)碼管顯示等。根據(jù)各自 芯片的功能互相連接成電子萬年歷的控制電路。軟件控制程序主要有主控程序、電子 萬年歷的時間控制程序、時間顯示及星期顯示程序等組成。主控

8、程序中對整個程序進(jìn) 行控制,進(jìn)行了初始化程序及計數(shù)器、還有鍵盤功能程序、以及顯示程序等工作,時 間控制程序是電子萬年歷中比較重要的部分。時間控制程序體現(xiàn)了年、月、日、時、 分、秒及星期的計算方法。時間控制程序主要是定時器 0 計時中斷程序每隔 10ms 中斷 一次當(dāng)作一個計數(shù),每中斷一次則計數(shù)加 1,當(dāng)計數(shù) 100 次時,則表示 1 秒到了,秒變 量加 1,同理再判斷是否 1 分鐘到了,再判斷是否 1 小時到了,再判斷是否 1 天到了, 再判斷是否 1 月到了,再判斷是否 1 年到了,若計數(shù)到了則相關(guān)變量清除 0。先給出一 般年份的每月天數(shù)。如果是閏年,第二個月天數(shù)不為 28 天,而是 29

9、天。再用公式 sv1 +(y1/4(y1/100+(y1/400+ d 計算當(dāng)前顯示日期是星期幾, 當(dāng)調(diào)節(jié)日期時,星期自動的調(diào)整過來。閏年的判斷規(guī)則為,如果該年份是 4 或 100 的 整數(shù)倍或者是 400 的整數(shù)倍,則為閏年;否則為非閏年。在我們的這個設(shè)計中由于只 涉及 100 年范圍內(nèi),所以判斷是否閏年就只需要用該年份除 4 來判斷就行了。 1.2.2 顯示部份的方案選擇顯示部份的方案選擇 方案一:液晶顯示方式;液晶顯示效果出眾,但是在顯示時,屏幕會有明顯的閃 爍。而且存儲空間有限,大大影響了電子萬年歷的性能。 方案二:相比液晶顯示,采用八段數(shù)碼管既經(jīng)濟(jì)實惠,在效果上也顯示的比較穩(wěn) 定,操

10、作比較液晶顯示來說雖然略顯繁瑣,但總體也可以做到比較人性化。 所以,兩者比較下,最后選擇 led 數(shù)碼管做顯示部分。 1.2.3 系統(tǒng)結(jié)構(gòu)框圖設(shè)計及說明系統(tǒng)結(jié)構(gòu)框圖設(shè)計及說明 圖 1-2-3 為電子萬年歷的系統(tǒng)方框圖,本系統(tǒng)由主控制器 at89s51、時鐘電路、 鍵掃描電路、顯示電路等組成的。 圖 1-2-3 電子萬年歷電路系統(tǒng)構(gòu)成框圖 第二章第二章 系統(tǒng)硬件設(shè)計系統(tǒng)硬件設(shè)計 2.1 晶體振蕩器電路晶體振蕩器電路 晶體振蕩器電路給數(shù)字鐘提供一個頻率穩(wěn)定準(zhǔn)確的 32768hz 的方波信號,可保證 數(shù)字鐘的走時準(zhǔn)確及穩(wěn)定。不管是指針式的電子鐘還是數(shù)字顯示的電子鐘都使用了晶 體蕩器電路。 時鐘控制

11、主控模塊 at89s51 芯片 鍵盤接口模塊 顯示模塊 2.2 串口通信電路串口通信電路 max232 芯片是美信公司專門為電腦的 rs-232 標(biāo)準(zhǔn)串口設(shè)計的單電源電平轉(zhuǎn)換芯 片,使用+5v 單電源供電。本設(shè)計中采用 max232cpe 來做串口通信,連接電腦將程 序從電腦上燒寫進(jìn)系統(tǒng)版。 2.3 復(fù)位電路復(fù)位電路 設(shè)計中復(fù)位電路當(dāng)系統(tǒng)與電腦連接時將程序指針指向 0000h,就是將程序從頭開 始運行,這個電路是防止程序亂碼時進(jìn)行按鍵復(fù)位,恢復(fù)系統(tǒng)正常運作。電阻給電容 充電,電容的電壓緩慢上升直到 vcc,沒到 vcc 時芯片復(fù)位腳近似低電平,于是芯 片復(fù)位,接近 vcc 時芯片復(fù)位腳接近高電

12、平,于是芯片停止復(fù)位,復(fù)位完成。 2.4 時鐘電路時鐘電路 內(nèi)部時鐘電路是指在 xtal1 和 xtal2 引腳上外接定時元件,內(nèi)部振蕩電路就產(chǎn) 生自激振蕩。定時元件通常石英晶體和電容組成的并聯(lián)諧振回路,晶體振蕩器選擇 32768khz,電容采用 30pf。如圖 2-4; 圖 2-4 ds1302 的時鐘電路 ds1302 是美國 dallas 公司推出的一種高性能、低功耗的實時時鐘芯片,附加 31 字節(jié)靜態(tài) ram,采用 spi 三線接口與 cpu 進(jìn)行同步通信,并可采用突發(fā)方式一次 傳送多個字節(jié)的時鐘信號和 ram 數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和 年,一個月小與 31 天時

13、可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達(dá) 2.55.5v。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供 了對后背電源進(jìn)行涓細(xì)電流充電的能力。ds1302 用于數(shù)據(jù)記錄,特別是對某些具有特 殊意義的數(shù)據(jù)點的記錄上,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄,因此廣泛應(yīng)用 于測量系統(tǒng)中。vcc1:主電源;vcc2:備份電源。當(dāng) vcc2vcc1+0.2v 時,由 vcc2 向 ds1302 供電,當(dāng) vcc2 vcc1 時,由 vcc1 向 ds1302 供電。sclk:串行時鐘,輸 入; i/o:三線接口時的雙向數(shù)據(jù)線;ce:輸入信號,在讀、寫數(shù)據(jù)期間,必須為高。 該引腳有兩

14、個功能:第一,ce 開始控制字訪問移位寄存器的控制邏輯;其次,ce 提 供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?2.5 按鍵部分按鍵部分 本設(shè)計總的用了五個按扭開關(guān)作為鍵盤,其中一個是復(fù)位鍵,還有四個按鍵,四 個中的其中一個是調(diào)整時間增加的鍵,其它三個是切換年、月、日及時、分、秒的顯 示狀態(tài)并在所切換的顯示狀態(tài)下配合加這個鍵調(diào)整時間。 2.6 at89s51 引腳在本設(shè)計中的作用說明引腳在本設(shè)計中的作用說明 圖 2-6 at89s51 最小系統(tǒng)控制電路 40 個引腳中, 4 組 8 位共 32 個 i/o 口,正電源和地線兩根,外置石英振蕩器的 時鐘線兩根,現(xiàn)在對這些引腳的功能加以說明: (1)

15、pin9:reset/vpd復(fù)位信號復(fù)用腳,當(dāng) at89s51 通電,時鐘電路開始工作,在 reset 引腳上出現(xiàn) 24 個時鐘周期以上的高電平,系統(tǒng)開始復(fù)位。而 reset 由高電平 下降為低電平后,系統(tǒng)即從 0000h 地址單元開始執(zhí)行程序。 (2)pin29:pesn 當(dāng)訪問外部程序存儲器時,此腳輸出負(fù)脈沖選通信號,外部程序 存儲器則把指令數(shù)據(jù)放到 p0 口上,由 cpu 讀入并執(zhí)行。 (3)pin30:ale/prog 地址鎖存允許信號端。單片機(jī)上電后,ale 引腳不斷向外輸 出正脈沖信號, ale 信號可以用作對外輸出時鐘或定時信號。 (4)pin31:ea/vpp程序存儲器的內(nèi)外部

16、選通線,內(nèi)置有 4kb 的程序存儲器,當(dāng) ea 為高電平并且程序地址小于 4kb 時,讀取內(nèi)部程序存儲器指令數(shù)據(jù),而超過 4kb 地址 則讀取外部指令數(shù)據(jù)。如 ea 為低電平,則不管地址大小,一律讀取外部程序存儲器 指令。 第三章第三章 系統(tǒng)軟件設(shè)計系統(tǒng)軟件設(shè)計 軟件控制程序主要有主控程序、電子萬年歷的時間控制程序組成。主控程序中對 整個程序進(jìn)行控制,進(jìn)行了初始化程序及計數(shù)器、還有鍵盤功能程序、以及顯示程序 和時間控制程序是電子萬年歷中比較重要的部分。時間控制程序體現(xiàn)了年、月、日、 時、分、秒及星期的計算方法。時間控制程序主要是定時器 0 計時中斷程序每隔 10ms 中斷一次當(dāng)作一個計數(shù),每中

17、斷一次則計數(shù)加 1,當(dāng)計數(shù) 100 次時,則表示 1 秒到了, 秒變量加 1,同理再判斷是否 1 分鐘到了,再判斷是否 1 小時到了,再判斷是否 1 天到 了,再判斷是否 1 月到了,再判斷是否 1 年到了,若計數(shù)到了則相關(guān)變量清除 0。先給 出一般年份的每月天數(shù)。如果是閏年,第二個月天數(shù)不為 28 天,而是 29 天。閏年的 判斷規(guī)則為,如果該年份是 4 或 100 的整數(shù)倍或者是 400 的整數(shù)倍,則為閏年;否則 為非閏年。 3.1 公歷與星期的換算方法公歷與星期的換算方法 在現(xiàn)行公歷中,歷年的長度 365 天(平年)或者 366 天(閏年)都不是七的整數(shù)倍,所 以日期與星期之間沒有明顯的

18、對應(yīng)關(guān)系。一般情況下,不看日歷牌就無法知道某月某 日是星期幾。不過,它們之間還是有一定規(guī)律可循的,只要經(jīng)過簡單計算,或者查找 表格,就可以知道與任何日期相對應(yīng)的星期數(shù)。 公式法:設(shè) y 麥?zhǔn)竟陻?shù),d 表示從 1 月 1 日起算的日數(shù)。 首先求出 1 月 0 日(即上一年 12 月 31 日)的星期序數(shù),然后與日數(shù) d 相加,其和用 7 除,余數(shù)就是答案。為了推導(dǎo)公式,我們想一想,第一年 1 月 0 日的星期序數(shù)與第二 年 1 月 0 日的星期序數(shù)有什么關(guān)系?平年 365 天,等于 52 個星期零 1 天,所以第二年 1 月 0 日的星期序數(shù)比第一年的多 l,但這個 l 已包含在 y 中了,

19、因為第二年的年數(shù) y 比第一年大 1;閏年 366 天,等于 52 個星期零二天,所以第二年 1 月 0 日的星期序數(shù) 等于第一年(閏年)的星期序數(shù)加 2,除了 y 中包含的 1 外,還需加修正值 1。根據(jù)這些 道理我們可以推得三個公式,將式中 s 用 7 除,余數(shù)就表示星期幾。 從公元 1900 年 1 月 1 日到公元 2101 年 1 月 1 日之間這 201 年,可用公式: s y1900 + (y1901)/4 + d 方括號表示取商的整數(shù)部分,對于 1900 年1904 年 這五年方括號值為 0。這個公式是這樣來的:1900 年 1 月 0 日(即 1899 年 12 月 31 日

20、) 是星期天。這年是平年,以后直到 2100 年前都是每隔 4 年一閏,閏年多出的那一天, 影響到下一年 1 月 0 日的星期序數(shù),并不影響閏年本身,閏年產(chǎn)生的修正值應(yīng)加到下 一年上去,所以(y1901)/4中,計算時用 190l 而不是 1900。 例:求 2000 年 12 月 31 日是星期幾? 2000 年是閏年,從 1 月 1 日算起,12 月 31 日是第 366 天,所以 d366。根據(jù)公 式 s20001900 +(20001901)/4+ 366 100 +99/4+ 366 l00 + 24 + 366490 490 為 7 的整數(shù)倍,即余數(shù)為 0,所以 2000 年 12

21、 月 31 日為星期日。 3.2 設(shè)計流程圖及說明設(shè)計流程圖及說明 本設(shè)計的軟件程序主要完成時間顯示和定時輸出判斷功能。而年月日顯示和各時 間單元僅為時間設(shè)定時,調(diào)定時間設(shè)定時等功能全部在中斷服務(wù)程序中完成。從原理 圖中看出,單片機(jī)從 p3 口的輸出的數(shù)據(jù)是 bcd 碼,各存儲單元存儲的是二進(jìn)制數(shù), 也就是和要顯示出的字符表達(dá)的含義是不一致的。可見,將要顯示的存儲單元的數(shù)據(jù) 直接送到 p0 口去驅(qū)動 led 數(shù)碼管顯示時不能正確表達(dá)的,必須在系統(tǒng)內(nèi)部將要顯示 的數(shù)據(jù)經(jīng)過 bcd 碼行轉(zhuǎn)換后,將各單元數(shù)據(jù)的段選代碼送入 p0 口,送入數(shù)碼管顯示, 軟件總體設(shè)計如圖 3-2-1,3-2-2。 調(diào)定

22、時開關(guān)子程序 讀取時間寄存器數(shù)據(jù) 調(diào)顯示子程序 送顯示緩沖區(qū) 判斷有按鍵按下 數(shù)據(jù)處理 開始 定時開關(guān)子程序 取時間寄存器數(shù)據(jù) 數(shù)據(jù)處理 取時間開關(guān)寄存器數(shù)據(jù) 按開關(guān)條件生成開關(guān)數(shù)據(jù) 開關(guān)數(shù)據(jù)送 p1 口 返回 圖 3-2-1 主函數(shù)流程圖 圖 3-2-2 定時開關(guān)程序圖 按鍵處理部分:當(dāng)系統(tǒng)在正常顯示狀態(tài)下要進(jìn)行調(diào)整時,按一下切換鍵進(jìn)入按鍵 處理中斷程序,并且此時默認(rèn)的是調(diào)整年,在數(shù)碼管上顯示 n,此時按加按鈕可以進(jìn) 行加減調(diào)整,若再按一下切換鍵,則跳到月上顯示 y,同樣可以調(diào)整加,同樣的道理, 進(jìn)入日(r)、時(s)、分(f)、秒(m)的調(diào)整,最后再按一下切換鍵時退出中斷程序,星期 系統(tǒng)自

23、動的調(diào)整過來。如圖 3-2-3 n n y 開始 掃描按鍵 是否按鍵 延時 10ms 是否按鍵 判斷按鍵值 跳轉(zhuǎn)到鍵盤處理程序 返回 圖 3-2-3 按鍵掃描流程 3.3 源程序的編寫源程序的編寫 3.3.1 中斷程序中斷程序 void js_cs(void) tmod=0 x11; /tmod=0 x11 時 t1,t0 都是位定時器 th0=0 x3c; /初值 tl0=0 xaf; /初值 ea=1; et0=1; tr0=1; /tr0 是單片機(jī)會響應(yīng)定時/計數(shù)器 0 的啟動位,為 1,就啟動定 時為 0,就停止定時/計數(shù)器 0 的運行。 void time0(void) interr

24、upt 1 /定時器 0 中斷 th0=0 x3c; tl0=0 xaf; jishu+; if(jishu=10) sec+; /秒增 1 j=j; /取反 jishu=0; /計數(shù)清 0 3.3.2 延時程序延時程序 voiddelay_1ms(void) /延時 lms unsigned i; for(i=0;i1140;i+) ; voiddelay_nms(unsigned char n) /延時 nms unsigned char i; for(i=0;in;i+) delay_1ms(); void delay(unsigned char n) /延時函數(shù) unsigned i=

25、0; for(i=0;in;i+) _nop_(); /延時等待 3.3.3 讀取部分?jǐn)?shù)據(jù)讀取部分?jǐn)?shù)據(jù) void writeds_byte(uchar dat) /函數(shù)名:input_byte1302() 功能:實時時鐘寫入一字 節(jié) /說明:往 ds1302 寫入 1byte 數(shù)據(jù) uchar i,dat_w; dat_w=dat; for(i=0;i1; /數(shù)據(jù)右移 sclk=0; _nop_(); /延時等待 sclk=1; sclk=0; uchar readds_byte() uchar i,k; k=0; for(i=0;i1; /將各位數(shù)據(jù)右移一位,因為先讀出的是字節(jié)的最低位 if

26、(io) /如果讀出的數(shù)據(jù)是 1 k=k|0 x80; /將一取出,寫在 dat 的最高位 sclk=1; /將 sclk 置于高電平,為下降沿讀出 _nop_(); /稍微等待 sclk=0; /拉低 sclk,形成脈沖下降沿 sclk=0; return (k);) /將讀出的數(shù)據(jù)返回 void writeds_add(uchar add,uchar dat) /將指令或數(shù)據(jù)寫入對應(yīng)寄存器 rst=0; / sclk=0; rst=1; writeds_byte(add); writeds_byte(dat/104)|(dat%10); sclk=0; rst=0; uchar readd

27、s_add(uchar add) /讀出對應(yīng)寄存器內(nèi)容 uchar temp,dat1,dat2; rst=0; sclk=0; rst=1; writeds_byte(add); temp=readds_byte(); sclk=0; rst=0; dat1=temp/16; dat2=temp%16; temp=dat1*10+dat2; return (temp); void ds1302_init() /這個是從那個時鐘芯片 ds1302 讀取和寫入數(shù)據(jù)的。 uchar i,add; add=0 x80; writeds_add(0 x8e,0 x00); /將控制寄存器值設(shè)為零, ;

28、最高位 wp=0 允許寫 for(i=0;i7;i+) /將七個時間初值寫入對應(yīng)寄存器 writeds_add(add,tab_1302i); /寫對應(yīng)時鐘寄存器的值 add+=2; writeds_add(0 x90,0 xa6); writeds_add(0 x8e,0 x80); /寫保護(hù),防止干擾影響時間值 void ds1302() uchar i,add=0 x81; writeds_add(0 x8e,0 x00); for(i=0;i7;i+) tab_1302i=readds_add(add); add+=2; writeds_add(0 x8e,0 x80); 3.3.4

29、數(shù)碼管顯示程序數(shù)碼管顯示程序 void xianshi_67(unsigned char y) /共陽極數(shù)碼管的兩個位數(shù)的顯示 unsigned char d,c; d=y/10; /求商 c=y%10; /求余 p0=gyc; p0_7=j; p2_0=0; delay(100); p2_0=1; p0=gyd; /就是把一個數(shù)字的數(shù)碼管的編碼通過 p0 傳遞 p0_7=j; p2_1=0; /亮 delay(100); /延時 p2_1=1; /暗 void xianshi_45(unsigned char y) /同上 unsigned char d,c; d=y/10; c=y%10;

30、 p0=gyc; p0_7=j; p2_3=0; delay(100); p2_3=1; p0=gyd; p0_7=j; p2_4=0; delay(100); p2_4=1; xianshi_d() p0=0 xff; p0_7=j; p2_2=0; delay(100); p2_2=1; void xianshi_12(unsigned char y) unsigned char d,c; d=y/10; c=y%10; p0=gyc; p2_6=0; delay(100); p2_6=1; p0=gyd; p2_7=0; delay(100); p2_7=1; 3.3.5 按鍵程序按鍵程

31、序 main() / key1 是界面切換 key3 是加的操作 key4 是設(shè)置時間 js_cs(); ds1302_init(); while(1) /* if(key3=0) delay_nms(5); if(key3=0) number+; if(number=7) number=0; while(key3=0) xianshi_h(tab_13022) ; /調(diào)用共陽極數(shù)碼管的兩個位數(shù)的顯示 xianshi_d(tab_13021) ; /調(diào)用共陽極數(shù)碼管的兩個位數(shù)的顯示 if(number=0) ds1302(); /這個是從那個時鐘芯片 ds1302 讀取 xianshi_h(t

32、ab_13022) ; /共陽極數(shù)碼管的兩個位數(shù)的顯示 xianshi_d(tab_13021) ; /共陽極數(shù)碼管的兩個位數(shù)的顯示 if(number=1) xianshi_d(tab_13021); if(key4=0) /判斷 key4 是否按下,有加 1,判斷溢出,數(shù)據(jù)寫回芯片 里 delay_nms(5); if(key4=0) tab_13021+; /自加 if(tab_13021=60) /判斷是否溢出 tab_13021=0; tab_13020=0; ds1302_init(); /寫入數(shù)據(jù) ds1302(); /讀出數(shù)據(jù) while(key4=0) xianshi_d(t

33、ab_13021); /調(diào)用共陽極數(shù)碼管的兩個位數(shù)的顯示 第四章安裝與調(diào)試第四章安裝與調(diào)試 4.1 硬件的安裝調(diào)試硬件的安裝調(diào)試 原理圖的設(shè)計:選擇主控芯片;在 protel99se 軟件中畫出原理圖。印刷電路板 的制作:本系統(tǒng)中,用手工布板;按照電路圖連接有關(guān)引腳。腐蝕板的制作:打印出 印刷電路版圖;將印刷出來的油紙與剛好和版圖一樣大小的板,把油墨用高溫器,把 它壓到板上再將板放入腐蝕槽腐蝕完就好。鉆孔的制作:選擇適當(dāng)?shù)目揍?;對板上?各個引腳孔進(jìn)行通孔。焊板的制作:把相應(yīng)的空上裝上相應(yīng)的元件調(diào)試及測試(調(diào)試 分為硬件調(diào)試和軟件調(diào)試) 硬件調(diào)試主要任務(wù)是排除硬件故障,包括設(shè)計錯誤和工藝性故障

34、。主要檢測硬件 電路是否有短路、斷路、虛焊等。用萬用表逐步按照電路原理圖檢查印刷電路板中器 件的引腳,尤其是電源的接線是否正確;檢查是否有短路等故障;檢查各開關(guān)是否能 正常開關(guān),是否連接正確;各限流電阻是否短路等。確定無誤后就開始調(diào)試。接上電 源,看一下電源的指示燈有沒有亮,如果亮了就說明有電源輸入,再檢測一下單片機(jī) 的電源腳(40 號腳)是否有電源,如果有適當(dāng)?shù)碾妷赫f明電源部分沒有問題。在硬件 調(diào)試時也可以先在芯片中燒一個簡單的顯示程序,看一下顯示部分能不能正常工作。 如數(shù)碼管顯示不正常,有斷碼時要檢查一下數(shù)碼管的管腳有沒有虛焊。 4.2 軟件調(diào)試軟件調(diào)試 確定硬件沒有錯誤后,根據(jù)原理,連接

35、圖編寫無誤后先在仿真器上仿真一下,看下 程序是否按自己編寫的效果顯示出來。一開始程序經(jīng)董金燈還有向其他同學(xué)請教編寫 好以后,用仿真器試用了以下,萬年歷不能按照正常現(xiàn)象從數(shù)碼管上的顯示出來,原 以為是在編寫程序中出了問題,才不能工作,找了比較懂軟件的同學(xué)請教后,都說軟 件沒問題,唯一缺點就是只能顯示當(dāng)年,比如說只能顯示今年 2011,不能往后加了, 其他都很好顯示出來。經(jīng)過觀察,才知道是時鐘芯片 ds1302 出了點問題,后來換上之 后果然可以正常顯示了。 4.3 測試結(jié)果分析與結(jié)論測試結(jié)果分析與結(jié)論 4.3.1 測試結(jié)果分析測試結(jié)果分析 (1) 在測試中遇到發(fā)光二極管、led 數(shù)碼管為不顯示時

36、,首先使用萬用表對電路進(jìn) 行測試,觀察是否存在漏焊,虛焊,或者元件損壞. (2) led 數(shù)碼管顯示不正常,還有亮度不夠,首先使用萬用表對電路進(jìn)行測試,觀 察電路是否存在短路現(xiàn)象。查看燒寫的程序是否正確無誤,對程序進(jìn)行認(rèn)真修改。 4.3.2 測試結(jié)論測試結(jié)論 經(jīng)過多次的反復(fù)測試與分析,可以對電路的原理及功能更加熟悉,同時提高了設(shè)計能 力與及對電路的分析能力.同時在軟件的編程方面得到更到的提高,對編程能力得到加強(qiáng). 同時對所學(xué)的知識得到很大的提高與鞏固.。 總結(jié)總結(jié) 歷經(jīng)了幾個月的奮戰(zhàn),緊張而又充實的畢業(yè)設(shè)計終于完成了?;叵脒@段日子的經(jīng) 歷和感受,我感慨萬千,在這次課程設(shè)計的過程中,我擁有了無數(shù)

37、難忘的回憶和收獲。 選好紅外防盜報警器的方案,是一大難題。因此我們經(jīng)過上網(wǎng),圖書館借書查找 資料,選了幾個方案,經(jīng)過老師的指點,我們把它們仿真了,篩選之后,仿真能行的, 我們再次請教老師,確定了方案,接下來就是畫原理圖和 pcb 圖,這個過程讓我學(xué)到 了許多,加深了對畫圖軟件 protel99se 的熟悉與應(yīng)用,畫好圖之后就是制板了,之 中,有出現(xiàn)打印圖紙不清晰,磨板不光滑,汗孔缺了的錯誤,導(dǎo)致印在銅板上的原理 圖不完整,白花了我們時間,制好板之后,我們按照清單,買好了元器件,并焊好了 板,經(jīng)過調(diào)試,失望的是沒有任何效果,經(jīng)過檢查,方知里面的熱釋電紅外傳感器的 不適用,而該元器件不好買到,由于

38、時間關(guān)系,我們經(jīng)過老師的同意,換了課題-簡易 萬年歷的設(shè)計,經(jīng)過查找資料,制板,寫程序,仿真,調(diào)試,完成了設(shè)計,然而萬年 歷功能不多,這是我們設(shè)計的一大遺憾。 通過這次畢業(yè)設(shè)計,使我懂得了,做任何事一定要細(xì)心,恒心,耐心,并有責(zé)任 心,只有自己努力了,動手了,才是自己的成果。 致謝致謝 自從接受課題到現(xiàn)在完成畢業(yè)設(shè)計論文,衷心的感謝我的指導(dǎo)許莉婭老師給予了精 心的指導(dǎo)和熱情的幫助,尤其在畢業(yè)設(shè)計的前期準(zhǔn)備階段和本人的數(shù)據(jù)庫的設(shè)計階段,導(dǎo) 師提出許多寶貴的設(shè)計意見,在最后的測試修改階段老師在百忙之中抽出時間為我們提 供了必要的幫助,這樣使得我們得以順利的完成畢業(yè)設(shè)計開發(fā)工作,在短暫的幾個月的相

39、處時間里,老師淵博的知識,敏銳的思路和實事求是的工作作風(fēng)給我留下了深刻的印象,這 將使得我終身受益,謹(jǐn)此向老師表示衷心的感謝和崇高的敬意.。 參考文獻(xiàn)參考文獻(xiàn) 1 張勇基于at89c2051單片機(jī)的時鐘日歷系統(tǒng)j 鄭鐵科技通訊,2005.3. 2 魏立峰,王寶興單片機(jī)原理與應(yīng)用技術(shù)m 北京:北京大學(xué)出版社,2006. 3 余永權(quán)、黃英 單片機(jī)在控制系統(tǒng)中的應(yīng)用m 電子工業(yè)出版社,2003.3 4 鄧紅、張越 單片機(jī)實驗與應(yīng)用設(shè)計教程m冶金工業(yè)出版社,2004.5 5 胡健 單片機(jī)原理及接口技術(shù)實踐教程m 機(jī)械工業(yè)出版社,2004.8 附錄附錄 #include #include #define

40、 uchar unsigned char #define uint unsigned char sbit p2_0 = p20; sbit p2_1 = p21; sbit p2_2 = p22; sbit p2_3 = p23; sbit p2_4 = p24; sbit p2_5 = p25; sbit p2_6 = p26; sbit p2_7 = p27; sbit p3_7 = p37; sbit p0_7 = p07; sbit p1_0 = p10; sbit p1_1 = p11; sbit p1_2 = p12; sbit p1_3 = p13; sbit p3_0 = p1

41、7; sbit key1 = p32; sbit key2 = p33; sbit key3 = p34; sbit key4 = p35; sbit rst=p13; sbit io=p12; sbit sclk=p11; unsigned char gy=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90; unsignedchar sec=0,jishu=0,j=0,x=0,min=19,hour=23,number=0,d_hour=20,d_min=20,number1=0,number 2=0; uchar tab

42、_13027=0,42,15,29,7,2,11; void ds1302(); void writeds_byte(uchar); uchar readds_byte(); void ds1302_init(); void writeds_add(uchar,uchar); uchar readds_add(uchar); void js_cs(void) tmod=0 x11; th0=0 x3c; tl0=0 xaf; ea=1; et0=1; tr0=1; void time0(void) interrupt 1 ;定時中斷 th0=0 x3c; tl0=0 xaf; jishu+;

43、if(jishu=10) sec+; j=j; jishu=0; voiddelay_1ms(void) ;延時 1ms unsigned i; for(i=0;i1140;i+) ; voiddelay_nms(unsigned char n) ;延時 n ms unsigned char i; for(i=0;in;i+) delay_1ms(); void delay(unsigned char n) unsigned i=0; for(i=0;in;i+) _nop_(); void writeds_byte(uchar dat) ;寫字節(jié) uchar i,dat_w; dat_w=d

44、at; for(i=0;i1; sclk=0; _nop_(); sclk=1; sclk=0; uchar readds_byte() ;讀字節(jié) uchar i,k; k=0; for(i=0;i1; if(io) k=k|0 x80; sclk=1; _nop_(); sclk=0; sclk=0; return (k); void writeds_add(uchar add,uchar dat) ;寫地址 rst=0; sclk=0; rst=1; writeds_byte(add); writeds_byte(dat/104)|(dat%10); sclk=0; rst=0; ucha

45、r readds_add(uchar add) ;讀地址 uchar temp,dat1,dat2; rst=0; sclk=0; rst=1; writeds_byte(add); temp=readds_byte(); sclk=0; rst=0; dat1=temp/16; dat2=temp%16; temp=dat1*10+dat2; return (temp); void ds1302_init() ;初始化 1302 uchar i,add; add=0 x80; writeds_add(0 x8e,0 x00); for(i=0;i7;i+) writeds_add(add,t

46、ab_1302i); add+=2; writeds_add(0 x90,0 xa6); writeds_add(0 x8e,0 x80); void ds1302() uchar i,add=0 x81; writeds_add(0 x8e,0 x00); for(i=0;i7;i+) tab_1302i=readds_add(add); add+=2; writeds_add(0 x8e,0 x80); void xianshi_67(unsigned char y) unsigned char d,c; d=y/10; c=y%10; p0=gyc; p0_7=j; p2_0=0; delay(100); p2_0=1; p0=gyd; p0_7=j; p2_1=0; delay(100); p2_1=1; void xianshi_45(unsigned char y) unsigned char d,c; d=y/10; c=y%10; p0=gyc; p0_7=j; p2_3=0; delay(100); p2_3=1; p0=gyd; p0_7=j; p2_4=0; delay(100); p2_

溫馨提示

  • 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

提交評論