畢業(yè)設(shè)計(jì)(論文)基于AT89S51單片機(jī)的簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AT89S51單片機(jī)的簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AT89S51單片機(jī)的簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AT89S51單片機(jī)的簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于AT89S51單片機(jī)的簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、3.1 公歷與星期的換算方法.9 3.2 設(shè)計(jì)流程圖及說(shuō)明.10 3.3 源程序的編寫(xiě).11 3.3.1 中斷程序.11 3.3.2 延時(shí)程序.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 測(cè)試結(jié)果分析與結(jié)論.18 4.3.1 測(cè)試結(jié)果分析.18 4.3.2 測(cè)試結(jié)論.18 總結(jié).18 致謝.19 參考文獻(xiàn).20 附錄.21 引言引言 電子萬(wàn)年歷是一種應(yīng)用非常廣泛的日常計(jì)時(shí)工具,數(shù)字顯示的日歷鐘已經(jīng)越來(lái)越 流行,特別是適合在家庭居室、辦公室、大廳、會(huì)議室、

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

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

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

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

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

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

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

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

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

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

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

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

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

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

18、對(duì)應(yīng)關(guān)系。一般情況下,不看日歷牌就無(wú)法知道某月某 日是星期幾。不過(guò),它們之間還是有一定規(guī)律可循的,只要經(jīng)過(guò)簡(jiǎn)單計(jì)算,或者查找 表格,就可以知道與任何日期相對(duì)應(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 個(gè)星期零 1 天,所以第二年 1 月 0 日的星期序數(shù)比第一年的多 l,但這個(gè) l 已包含在 y 中了,

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

20、) 是星期天。這年是平年,以后直到 2100 年前都是每隔 4 年一閏,閏年多出的那一天, 影響到下一年 1 月 0 日的星期序數(shù),并不影響閏年本身,閏年產(chǎn)生的修正值應(yīng)加到下 一年上去,所以(y1901)/4中,計(jì)算時(shí)用 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è)計(jì)流程圖及說(shuō)明設(shè)計(jì)流程圖及說(shuō)明 本設(shè)計(jì)的軟件程序主要完成時(shí)間顯示和定時(shí)輸出判斷功能。而年月日顯示和各時(shí) 間單元僅為時(shí)間設(shè)定時(shí),調(diào)定時(shí)間設(shè)定時(shí)等功能全部在中斷服務(wù)程序中完成。從原理 圖中看出,單片機(jī)從 p3 口的輸出的數(shù)據(jù)是 bcd 碼,各存儲(chǔ)單元存儲(chǔ)的是二進(jìn)制數(shù), 也就是和要顯示出的字符表達(dá)的含義是不一致的??梢?jiàn),將要顯示的存儲(chǔ)單元的數(shù)據(jù) 直接送到 p0 口去驅(qū)動(dòng) led 數(shù)碼管顯示時(shí)不能正確表達(dá)的,必須在系統(tǒng)內(nèi)部將要顯示 的數(shù)據(jù)經(jīng)過(guò) bcd 碼行轉(zhuǎn)換后,將各單元數(shù)據(jù)的段選代碼送入 p0 口,送入數(shù)碼管顯示, 軟件總體設(shè)計(jì)如圖 3-2-1,3-2-2。 調(diào)定

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

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

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

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

26、(io) /如果讀出的數(shù)據(jù)是 1 k=k|0 x80; /將一取出,寫(xiě)在 dat 的最高位 sclk=1; /將 sclk 置于高電平,為下降沿讀出 _nop_(); /稍微等待 sclk=0; /拉低 sclk,形成脈沖下降沿 sclk=0; return (k);) /將讀出的數(shù)據(jù)返回 void writeds_add(uchar add,uchar dat) /將指令或數(shù)據(jù)寫(xiě)入對(duì)應(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) /讀出對(duì)應(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() /這個(gè)是從那個(gè)時(shí)鐘芯片 ds1302 讀取和寫(xiě)入數(shù)據(jù)的。 uchar i,add; add=0 x80; writeds_add(0 x8e,0 x00); /將控制寄存器值設(shè)為零, ;

28、最高位 wp=0 允許寫(xiě) for(i=0;i7;i+) /將七個(gè)時(shí)間初值寫(xiě)入對(duì)應(yīng)寄存器 writeds_add(add,tab_1302i); /寫(xiě)對(duì)應(yīng)時(shí)鐘寄存器的值 add+=2; writeds_add(0 x90,0 xa6); writeds_add(0 x8e,0 x80); /寫(xiě)保護(hù),防止干擾影響時(shí)間值 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) /共陽(yáng)極數(shù)碼管的兩個(gè)位數(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; /就是把一個(gè)數(shù)字的數(shù)碼管的編碼通過(guò) p0 傳遞 p0_7=j; p2_1=0; /亮 delay(100); /延時(shí) 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è)置時(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)用共陽(yáng)極數(shù)碼管的兩個(gè)位數(shù)的顯示 xianshi_d(tab_13021) ; /調(diào)用共陽(yáng)極數(shù)碼管的兩個(gè)位數(shù)的顯示 if(number=0) ds1302(); /這個(gè)是從那個(gè)時(shí)鐘芯片 ds1302 讀取 xianshi_h(t

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

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

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

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

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

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

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

39、處時(shí)間里,老師淵博的知識(shí),敏銳的思路和實(shí)事求是的工作作風(fēng)給我留下了深刻的印象,這 將使得我終身受益,謹(jǐn)此向老師表示衷心的感謝和崇高的敬意.。 參考文獻(xiàn)參考文獻(xiàn) 1 張勇基于at89c2051單片機(jī)的時(shí)鐘日歷系統(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 鄧紅、張?jiān)?單片機(jī)實(shí)驗(yàn)與應(yīng)用設(shè)計(jì)教程m冶金工業(yè)出版社,2004.5 5 胡健 單片機(jī)原理及接口技術(shù)實(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 ;定時(shí)中斷 th0=0 x3c; tl0=0 xaf; jishu+;

43、if(jishu=10) sec+; j=j; jishu=0; voiddelay_1ms(void) ;延時(shí) 1ms unsigned i; for(i=0;i1140;i+) ; voiddelay_nms(unsigned char n) ;延時(shí) 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) ;寫(xiě)字節(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) ;寫(xiě)地址 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論