計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文.doc

上傳人:good****022 文檔編號(hào):116495830 上傳時(shí)間:2022-07-05 格式:DOC 頁(yè)數(shù):68 大?。?.20MB
收藏 版權(quán)申訴 舉報(bào) 下載
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文.doc_第1頁(yè)
第1頁(yè) / 共68頁(yè)
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文.doc_第2頁(yè)
第2頁(yè) / 共68頁(yè)
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文.doc_第3頁(yè)
第3頁(yè) / 共68頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文.doc(68頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、1 畢 業(yè) 論 文 題題 目目 基于基于 AVR 的可調(diào)電子鐘設(shè)計(jì)的可調(diào)電子鐘設(shè)計(jì) 院系名稱:院系名稱:計(jì)算機(jī)科學(xué)與技術(shù)計(jì)算機(jī)科學(xué)與技術(shù) 專業(yè)班級(jí):專業(yè)班級(jí):1111 專升本專升本 學(xué)生姓名:學(xué)生姓名: 學(xué)學(xué) 號(hào):號(hào): 指導(dǎo)教師:指導(dǎo)教師: 2 目錄目錄 摘摘 要要4 4 第一章第一章 引言引言5 5 1.11.1 設(shè)計(jì)任務(wù)設(shè)計(jì)任務(wù)5 1.21.2 設(shè)計(jì)要求設(shè)計(jì)要求5 第二章第二章 總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)6 6 第三章第三章 系統(tǒng)硬件設(shè)置系統(tǒng)硬件設(shè)置7 7 3.13.1 ATmega16ATmega16 單片機(jī)簡(jiǎn)介單片機(jī)簡(jiǎn)介.7 3.23.2

2、ATmega16ATmega16 單片機(jī)的工作原理單片機(jī)的工作原理.7 3.2.13.2.1 I/OI/O 端口的工作原理端口的工作原理 7 3.2.23.2.2 定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器 .8 3.2.33.2.3 中斷系統(tǒng)中斷系統(tǒng)8 3.2.43.2.4 振蕩器振蕩器9 3.33.3 時(shí)鐘模塊設(shè)計(jì)時(shí)鐘模塊設(shè)計(jì).10 3.3.13.3.1 DS1302DS1302 特性介紹特性介紹 10 3.3.23.3.2 DS1302DS1302 引腳介紹引腳介紹 11 3.3.33.3.3 DS1302DS1302 有關(guān)日歷,時(shí)間的寄存器有關(guān)日歷,時(shí)間的寄存器 12 3.3.43.3.4 DS130

3、2DS1302 與單片機(jī)接口電路與單片機(jī)接口電路 12 3.43.4 顯示模塊設(shè)計(jì)顯示模塊設(shè)計(jì).13 3.4.13.4.1 LCD1602LCD1602 的特性介紹的特性介紹 .14 3.4.23.4.2 LCD1602LCD1602 引腳介紹引腳介紹 .15 3.4.33.4.3 16021602 內(nèi)部功能器件及相關(guān)功能內(nèi)部功能器件及相關(guān)功能 16 3.4.43.4.4 16021602 液晶與單片機(jī)接口電路液晶與單片機(jī)接口電路 18 3.53.5 設(shè)置模塊設(shè)置模塊 20 3.63.6 振蕩電路振蕩電路 21 3.73.7 復(fù)位電路復(fù)位電路 22 第四章第四章 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì)232

4、3 4.14.1 時(shí)鐘函數(shù)模塊時(shí)鐘函數(shù)模塊 25 4.1.14.1.1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 .25 3 4.1.24.1.2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì).25 4.24.2 顯示函數(shù)模塊顯示函數(shù)模塊 30 4.2.14.2.1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能 .30 4.2.24.2.2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì).30 4.2.34.2.3 小結(jié)小結(jié).31 4.34.3 按鍵函數(shù)模塊按鍵函數(shù)模塊 32 4.3.14.3.1 實(shí)現(xiàn)功能實(shí)現(xiàn)功能.32 4.3.24.3.2 函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì).32 4.3.34.3.3 小結(jié)小結(jié).32 4.44.4 主函數(shù)模塊主函數(shù)模塊 32 第五章第五章 心得體會(huì)心得體會(huì)3333 第六章第六章 致

5、謝致謝3333 附錄附錄 1 1 元器件表元器件表 3434 附錄附錄 2 2 仿真圖仿真圖 3535 附錄附錄 3 3 源碼源碼 3636 附錄附錄 4 4 參考文獻(xiàn)參考文獻(xiàn) 6868 4 摘摘 要要 單片機(jī)就是微控制器,是面向應(yīng)用對(duì)象設(shè)計(jì)、突出控制功能的芯片。單片機(jī) 接上晶振、復(fù)位電路和相應(yīng)的接口電路,裝載軟件后就可以構(gòu)成單片機(jī)應(yīng)用系統(tǒng)。 本設(shè)計(jì)就是應(yīng)用單片機(jī)強(qiáng)大的控制功能制作而成的指針式電子鐘,該指針式電子 鐘實(shí)現(xiàn)如下功能:液晶屏模擬表盤與時(shí)分秒指針顯示當(dāng)前時(shí)鐘,K1 鍵用于選擇 調(diào)節(jié)對(duì)象,K2 鍵用于調(diào)整時(shí)分秒,在按下 K4 鍵時(shí)確定調(diào)節(jié)值,時(shí)鐘繼續(xù)運(yùn)行。 本設(shè)計(jì)采用的是 AVR 單片

6、機(jī),AVR 系列的單片機(jī)不僅具有良好的集成性能, 而且都具備在線編程接口,其中的 Mega 系列還具備 JTAG 仿真和下載功能;含有 片內(nèi)看門狗電路、片內(nèi)程序 Flash、同步串行接口 SPI;多數(shù) AVR 單片機(jī)還內(nèi)嵌 了 AD 轉(zhuǎn)換器、EEPROM、模擬比較器、PWM 定時(shí)計(jì)數(shù)器等多種功能;AVR 單片機(jī) 的 IO 接口具有很強(qiáng)的驅(qū)動(dòng)能力,灌入電流可直接驅(qū)動(dòng)繼電器、LCD 等元件。 芯片采用 DALLAS 公司的涓細(xì)充電時(shí)鐘芯片 DS1302,該芯片通過(guò)簡(jiǎn)單的串行通 信與單片機(jī)進(jìn)行通信,時(shí)鐘/日歷電路能夠?qū)崟r(shí)提供年、月、日、時(shí)分、秒信息, 采用雙電源供電,當(dāng)外部電源掉電時(shí)能夠利用后備電池

7、準(zhǔn)確計(jì)時(shí)。 顯示器件采用 LCD1602 液晶,通過(guò)相應(yīng)的按鍵調(diào)整相應(yīng)的值。通過(guò)此次設(shè) 計(jì)能夠更加牢固的掌握單片機(jī)的應(yīng)用技術(shù),增強(qiáng)動(dòng)手能力、硬件設(shè)計(jì)能力以及軟 件設(shè)計(jì)能力。 關(guān)鍵詞關(guān)鍵詞 AVR 單片機(jī) 時(shí)鐘芯片 DS1302 LCD1602 液晶 5 第一章第一章 引言引言 本例采用 LCD1602 液晶作為顯示元件,液晶屏顯示當(dāng)前時(shí)鐘。該電子鐘實(shí) 現(xiàn)如下功能:液晶屏模擬表盤與時(shí)分秒指針顯示當(dāng)前時(shí)鐘,K1 鍵用于選擇調(diào)節(jié) 對(duì)象,K2 鍵用于調(diào)整時(shí)分秒,在按下 K3 鍵時(shí)確定調(diào)節(jié)值,時(shí)鐘繼續(xù)運(yùn)行。本例 程序包含控制模塊、顯示模塊、實(shí)時(shí)時(shí)間計(jì)算模塊、設(shè)置模塊(時(shí)間設(shè)置模塊) 。 1.11.1 設(shè)

8、計(jì)任務(wù)設(shè)計(jì)任務(wù) 利用 AVR 單片機(jī)等實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于 AVR 的可調(diào)電子鐘。 1.21.2 設(shè)計(jì)要求設(shè)計(jì)要求 a實(shí)現(xiàn)年月日時(shí)分秒指針式顯示功能 b用三個(gè)按鍵來(lái)實(shí)現(xiàn)調(diào)整時(shí)分秒的功能 6 第二章第二章 總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì)總體方案論證與設(shè)計(jì) 組成框圖中包含顯示模塊,控制器,時(shí)間模塊,設(shè)置模塊。顯示模塊有 LCD1602 來(lái)控制顯示,整個(gè)代碼實(shí)現(xiàn)主要由控制器來(lái)實(shí)現(xiàn),時(shí)間模塊有 DS1302 來(lái)實(shí)現(xiàn),可以顯示系統(tǒng)時(shí)間,也可自行調(diào)整,設(shè)置模塊為按鍵處理。具體模塊分 析在相關(guān)的軟硬件設(shè)計(jì)中詳細(xì)介紹。 本設(shè)計(jì)中的可調(diào)電子鐘擬采用 AVR 系列單片機(jī) ATMEGA16 作

9、為主控制器, 以 DS1302 時(shí)鐘芯片和 16M 的外置晶振提供準(zhǔn)確時(shí)間標(biāo)準(zhǔn),以期實(shí)現(xiàn)對(duì)“時(shí)、分、 秒”的數(shù)字顯示和校準(zhǔn)時(shí)間的計(jì)時(shí)裝置;可調(diào)電子鐘不但可以顯示當(dāng)前時(shí)間,而 且可以顯示年、月、日等,給人們的生活帶來(lái)方便。另外可調(diào)電子鐘還具備日期 時(shí)間的調(diào)節(jié)與寫入功能。本設(shè)計(jì)將以 AVR 單片機(jī)為控制核心,通過(guò)與 DS1302 信獲取實(shí)時(shí)時(shí)間,并將得到的數(shù)據(jù)通過(guò) LCD1602 液晶顯示出來(lái),同時(shí)通過(guò)相應(yīng) 的按鍵調(diào)整相應(yīng)的值。因此本設(shè)計(jì)可分為以下模塊:控制模塊、顯示模塊、實(shí)時(shí) 時(shí)間計(jì)算模塊、設(shè)置模塊(時(shí)間設(shè)置模塊) 。 7 第三章第三章 系統(tǒng)硬件設(shè)置系統(tǒng)硬件設(shè)置 3.13.1 ATmega16

10、單片機(jī)簡(jiǎn)介單片機(jī)簡(jiǎn)介 ATmega16 單片機(jī)是 ATmega 系列 AVR 單片機(jī)中內(nèi)容接口豐富,功能齊全,性 能價(jià)格比較高的產(chǎn)品。它具有高性能、低功耗的 8 位 AVR 微處理器,先進(jìn)的 RISC 結(jié)構(gòu),非易失性程序和數(shù)據(jù)存儲(chǔ)器等。ATmega16 單片機(jī)的中央處理器由 32 個(gè) 8 位通用寄存器,1 個(gè)算術(shù)運(yùn)算單元及狀態(tài)和控制邏輯單元組成。AVR 采用了 哈弗結(jié)構(gòu),具有獨(dú)立的程序總線和數(shù)據(jù)總線,程序存儲(chǔ)器里的指令通過(guò)一級(jí)流水 線運(yùn)行。它的存儲(chǔ)器分為獨(dú)立尋址的 flash 程序存儲(chǔ)器,片內(nèi) SRAM 數(shù)據(jù)存儲(chǔ)器 和 EEPROM 3 部分,均采用線性編址。 圖 3-1 3.23.2 ATm

11、ega16ATmega16 單片機(jī)的工作原理單片機(jī)的工作原理 3.2.13.2.1 I/OI/O 端口的工作原理端口的工作原理 8 ATmeage16 單片機(jī)具有 32 個(gè)通用 I/O 口,分為 PA,PB,PC,PD,每組都是八位。 這些 I/O 都是可以通過(guò)各自的端口寄存器設(shè)置為輸入或置成輸出,有些 I/O 口還 具有第二功能。 所有的端口引腳都具有內(nèi)部上拉電阻,可以通過(guò)寄存器獨(dú)立選擇是否連接, 復(fù)位時(shí)所有的引腳都為高阻態(tài)。ATmega16 單片機(jī)的每個(gè)端口都有三個(gè) I/O 寄存 器地址:數(shù)據(jù)寄存器 PORTx(x=ABCD,下同)、方向寄存器 DDRx 和輸入引腳 PINx。 3.2.2

12、3.2.2 定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器 ATmega16 單片機(jī)有三個(gè)定時(shí)/計(jì)數(shù)器:T/C0,T/C1,T/C2。其中 T/C0,T/C2 是兩個(gè)八位的定時(shí)/計(jì)數(shù)器,而 T/C1 是 16 位的定時(shí)/計(jì)數(shù)器。 T/Cx(0,1,2)是一個(gè)通用的帶有輸出比較匹配和 PWM 波形發(fā)生器的單通道 8 位定時(shí)/計(jì)數(shù)器模塊。T/Cx 可以選擇通過(guò)預(yù)分頻器由系統(tǒng)時(shí)鐘驅(qū)動(dòng),或通過(guò) T0 引腳的外部時(shí)鐘驅(qū)動(dòng),時(shí)鐘邏輯模塊控制使用哪個(gè)時(shí)鐘源及哪個(gè)邊沿來(lái)進(jìn)行加或 者減計(jì)數(shù)。 T/Cx(0,1,2)的時(shí)鐘分頻器對(duì)系統(tǒng)分頻后作為 T/Cx(0,1,2)的驅(qū)動(dòng)時(shí) 鐘。T/Cx(0,1,2)的時(shí)鐘可以是系統(tǒng)時(shí)鐘或者系統(tǒng)時(shí)

13、鐘的 8 分頻、64 分頻、 256 分頻及 1024 分頻,通過(guò)控制寄存器 TCCRx(0,1,2)。 T/Cx 雙緩沖結(jié)構(gòu)的八位輸出比較寄存器 OCRx(0,1,2)一直與 T/Cx(0,1,2)的計(jì)數(shù)值 TCNTx(0,1,2)進(jìn)行比較。一旦 TCNTx(0,1,2)等于 OCRx(0,1,2),比較器就給出匹配信號(hào)。有 4 種工作模式:普通模式,CTC 模式, 快速 PWM 模式,相位修正 PWM 模式。 3.2.33.2.3 中斷系統(tǒng)中斷系統(tǒng) ATmega16 單片機(jī)有 21 個(gè)中斷源,每一個(gè)中斷源都有一個(gè)獨(dú)立的中斷向量作 為中斷服務(wù)程序的入口地址,而且所有的中斷源都有自己的獨(dú)立的使

14、能位。如果 全局中斷 I 和相應(yīng)使能位都置位,則在中斷標(biāo)志位置位時(shí)將執(zhí)行中斷服務(wù)程序。 9 一個(gè)中斷產(chǎn)生后,全局中斷使能位 I 將被清零,后續(xù)中斷被屏蔽。 中斷相關(guān)的寄存器:MCU 控制寄存器 MCUCR,MCU 控制和狀態(tài)寄存器 MCUCSR,通用中斷控制寄存器 GICR,通用中斷狀態(tài)寄存器 GIFR. 3.2.43.2.4 振蕩器振蕩器 XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來(lái)自反向振蕩器的輸出。 振蕩器特性:XTAL1 和 XTAL2 分別為反向放大器的輸入和輸出。該反向放大 器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū) 動(dòng)器件

15、,XTAL2 應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因 此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。 10 3.33.3 時(shí)鐘模塊設(shè)計(jì)時(shí)鐘模塊設(shè)計(jì) 實(shí)時(shí)時(shí)間計(jì)算模塊 方案(1):AVR 單片機(jī)內(nèi)部帶有定時(shí)/計(jì)數(shù)功能,此定時(shí)功能是通過(guò)對(duì)外部 晶振的脈沖進(jìn)行計(jì)數(shù),從而達(dá)到計(jì)時(shí)功能,只要使用 11.0592 的晶振就能實(shí)現(xiàn)零 誤差的計(jì)時(shí),因此可以利用此功能實(shí)現(xiàn)計(jì)時(shí),但因?yàn)橹挥袉我坏挠?jì)時(shí)功能要實(shí)現(xiàn) “萬(wàn)年歷”的功能需要較復(fù)雜的程序,而且如果單片機(jī)掉電無(wú)法繼續(xù)進(jìn)行計(jì)時(shí), 所以使用不便。 方案(2):DS1302 是美國(guó) DALLAS 公司推出的一種高性能、低功耗

16、的實(shí) 時(shí)時(shí)鐘芯片,附加 31 字節(jié)靜態(tài) RAM,采用 SPI 三線接口與 CPU 進(jìn)行通信,并 可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和 RAM 數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、 分、時(shí)、日、星期、月和年,一個(gè)月小與 31 天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ) 償功能。工作電壓寬達(dá) 2.55.5V。采用雙電源供電(主電源和備用電源) ,可設(shè) 置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。利用單片機(jī) 強(qiáng)大的控制功能就可實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)的功能,而且消耗的系統(tǒng)資源少,程序簡(jiǎn)單。 綜合上述兩種方案,宜采用方案(2)實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)功能。 3.3.13.3.1 DS1302DS1302 特性介紹特性介紹 DS

17、1302 是美國(guó) DALLAS 公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片, 附加 31 字節(jié)靜態(tài) RAM,采用 SPI 三線接口與 CPU 進(jìn)行通信,并可采用突發(fā)方 式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和 RAM 數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、 星期、月和年,一個(gè)月小與 31 天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作 電壓寬達(dá) 2.55.5V。采用雙電源供電(主電源和備用電源) ,可設(shè)置備用電源充 電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。利用單片機(jī)強(qiáng)大的控制功 能就可實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)的功能,而且消耗的系統(tǒng)資源少,程序簡(jiǎn)單。 11 DS1302 可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),

18、且具有閏年補(bǔ)償 等多種功能 DS1302 有 12 個(gè)寄存器,其中有 7 個(gè)寄存器與日歷、時(shí)鐘相關(guān),存 放的數(shù)據(jù)位為 BCD 碼形式;采用單片機(jī)計(jì)時(shí),一方面需要采用計(jì)數(shù)器,占用硬 件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而采用時(shí)鐘 芯片 DS1302。 3.3.23.3.2 DS1302DS1302 引腳介紹引腳介紹 圖 3-2 8 、Vcc1:備用電池端; 1、Vcc2:5V 電源。當(dāng) Vcc2Vcc1+0.2V 時(shí),由 Vcc2 向 DS1302 供電, 當(dāng) Vcc2/單片機(jī)寄存器的頭文件 #include #include #include /a 為要操作的寄存器,b

19、 為要操作的位數(shù) #define SET_1(a,b) a|=(10; i-) if(_data else DIO_CLE_0; SCLK_SET_1;/時(shí)鐘信號(hào) _delay_us(2); SCLK_CLE_0; _data=1;/移位,準(zhǔn)備好下次要寫的數(shù)據(jù) 43 /向 DS1302 讀取一個(gè)字節(jié) uchar DS1302OreadByte(void) uchar i; uchar d_data=0; CLE_0(DDRD,PD5); for(i=8; i0; i-) d_data=1;/移位,以便下次存放讀出的數(shù)據(jù) if(PIND SCLK_SET_1; _delay_us(2); SCL

20、K_CLE_0; SET_1(DDRD,PD5); return (d_data);/返回讀到的數(shù)據(jù) 44 /*寫 ds1302 寄存器*/ void Write1302(uchar ucAddr,uchar ucDa) RST_CLE_0; SCLK_CLE_0; RST_SET_1; DS1302writeByte(ucAddr);/地址 DS1302writeByte(ucDa);/寫 1byte 數(shù)據(jù) SCLK_SET_1; RST_CLE_0; /*讀 ds1302 的寄存器*/ uchar Read1302(uchar ucAddr) uchar ucData; RST_CLE_0

21、; SCLK_CLE_0; RST_SET_1; 45 DS1302writeByte(ucAddr|0X01);/地址,命令 ucData = DS1302OreadByte(); SCLK_SET_1; RST_CLE_0; return (ucData); void get_time(uchar *time) *(time+5) = Read1302(READ_SECOND); *(time+4) = Read1302(READ_MINUTE); *(time+3) = Read1302(READ_HOUR); *(time+2) = Read1302(READ_DAY); *(time

22、+1) = Read1302(READ_MONTH); *(time+0) = Read1302(READ_YEAR); /*void Initial(void) Write1302(WRITE_PROTECT,0 x00); Write1302(WRITE_SECOND,0 x45); 46 Write1302(WRITE_MINUTE,0 x24); Write1302(WRITE_HOUR,0 x09); Write1302(WRITE_DAY,0 x13); Write1302(WRITE_MONTH,0 x04); Write1302(WRITE_PROTECT,0 x80); vo

23、id adopt_data(uchar n,uchar *show_data) *show_data = n4; *(show_data +1) = n */ void T1_int(void) TCCR1B = 0 x00;/控制寄存器,停止定時(shí) TIMSK |= 0 x04;/中斷屏蔽寄存器,中斷允許 TCNT1 = 0 xcf2c;/100ms 溢出一次 TCCR1B = 0 x02; sei();/使能全局中斷 47 void init_1302(void) Write1302(WRITE_PROTECT,0 x00);/禁止寫保護(hù) Write1302(WRITE_SECOND,tim

24、e4);/秒位初始化 Write1302(WRITE_MINUTE,time3);/分鐘 Write1302(WRITE_HOUR,time2);/小時(shí) Write1302(WRITE_DAY,time1);/日 Write1302(WRITE_MONTH,time0);/月 Write1302(WRITE_PROTECT,0 x80);/允許寫保護(hù) /*按鍵函數(shù)*/ uchar get_key(void) uchar i=0; PORTD |= 0 x0f; DDRD = 0 xf0;/設(shè)置為輸出 NOP(); NOP(); if(PIND/消除抖動(dòng) switch(PINDbreak;/選擇

25、鍵 case 0 x0d:i = 3;break;/減值鍵 case 0 x0b:i = 2;break;/增值鍵 case 0 x07:i = 1;break;/確定鍵 while(PIND/等待按鍵松開 else i = 0;/沒有按鍵被按下 DDRD = 0 xff;/設(shè)置為輸出 return i;/返回按鍵值 /*轉(zhuǎn)換為 lcd 要顯示的數(shù)據(jù)*/ 49 void adopt_data() uchar i,j=0; for (i=0;i4; lcd_showj+1 = timei j += 2; /*轉(zhuǎn)換為 ds1302 的時(shí)間*/ void affirm_data(void) ucha

26、r i ,j = 0 ; for (i=0;i0) lcd_shown-; else if(lcd_shown=max) lcd_shown=0; 51 else lcd_shown=max; value=lcd_shown; /*功能顯示函數(shù)*/ void show_function(void) uchar i; uchar function25=0 x43,0 x4c,0 x4f,0 x43,0 x4b, 0 x41,0 x4c,0 x41,0 x52,0 x4d, ; wr_dictate(0 x01); display_lcd(0 x84,0 x7e); for (i=0;i6;i+)

27、 display_lcd(0 x85+i,function0i);/顯示時(shí)間 display_lcd(0 xc5+i,function1i); /*設(shè)置時(shí)間*/ 52 void set_clock(void) uchar cursor = 0;/光標(biāo) uchar i,j; wr_dictate(0 x01);/清屏 Write1302(WRITE_PROTECT,0 x00); Write1302(WRITE_SECOND,time4|0 x80);/暫時(shí)停止時(shí)鐘的 運(yùn)行 Write1302(WRITE_PROTECT,0 x80); display_lcd(0 x82,0 x00);/顯示年

28、 display_lcd(0 x85,0 x01);/月 display_lcd(0 x88,0 x02);/日 display_lcd(0 xc2,0 x03);/時(shí) display_lcd(0 xc5,0 x03);/分 display_lcd(0 xc8,0 x03);/秒 for (i=0,j=0;i10;i+=2) display_lcd(0 x80+j,numberlcd_showi); display_lcd(0 x80+j+1,numberlcd_showi+1); 53 j = j+3; wr_dictate(0 x02); wr_dictate(0 x0e); j = 0;

29、 while(1) NOP(); switch(get_key() case 1:/確認(rèn) cursor+; j+; if (cursor%2=0) j+; wr_dictate(0 x14); wr_dictate(0 x14); 54 else wr_dictate(0 x14); if (cursor=10) j = 0; cursor = 0; wr_dictate(0 x02);/光標(biāo)歸位 place = 0 x80+j; break; case 2:/加 switch(cursor) /*一下的 case 成功選擇項(xiàng)為光標(biāo)對(duì)應(yīng)的調(diào) 55 整位數(shù)*/ case 0:add_d(curs

30、or,1);break; case 1: if(lcd_show0=1) add_d(cursor,2); else add_d(cursor,9); break; case 2:add_d(cursor,3);break; case 3: if(lcd_show2=3) add_d(cursor,0); else add_d(cursor,9); break; 56 case 4:add_d(cursor,2);break; case 5: if(lcd_show4=2) add_d(cursor,3); else add_d(cursor,9); break; case 6:add_d(c

31、ursor,5);break; case 7:add_d(cursor,9);break; case 8:add_d(cursor,5);break; case 9:add_d(cursor,9);break; display_lcd(place,numbervalue);/顯示在 液晶屏的相應(yīng)的位置 wr_dictate(0 x10); break; 57 case 3:/減 switch(cursor) /*一下的 case 成功選擇項(xiàng)為光標(biāo)對(duì)應(yīng)的調(diào) 整位數(shù)*/ case 0:dec_d(cursor,1);break; case 1: if(lcd_show0=1) dec_d(curs

32、or,2); else dec_d(cursor,9); break; case 2:dec_d(cursor,3);break; case 3: if(lcd_show2=3) 58 dec_d(cursor,0); else dec_d(cursor,9); break; case 4:add_d(cursor,2);break; case 5: if(lcd_show4=2) dec_d(cursor,3); else dec_d(cursor,9); break; case 6:dec_d(cursor,5);break; case 7:dec_d(cursor,9);break; c

33、ase 8:dec_d(cursor,5);break; case 9:dec_d(cursor,9);break; 59 display_lcd(place,numbervalue);/顯示在 液晶屏的相應(yīng)的位置 wr_dictate(0 x10); break; case 4:/退格 affirm_data(); init_1302(); T1_OPEN; goto OUT; default: break; OUT:NOP(); /*補(bǔ)充顯示*/ void allowance(void) 60 uchar i,j; display_lcd(0 x82,0 x00);/顯示月 display

34、_lcd(0 x85,0 x01);/日 display_lcd(0 x88,0 x02);/時(shí) display_lcd(0 x8b,0 x03);/分 get_time(time); adopt_data(); for (i=0,j=0;i10;i+=2) display_lcd(0 x80+j,numberlcd_showi); display_lcd(0 x80+j+1,numberlcd_showi+1); j = j+3; int main(void) uchar chinese58 = 61 0 x08,0 x0f,0 x12,0 x0f,0 x0a,0 x1f,0 x02,0 x

35、02, 0 x0f,0 x09,0 x0f,0 x0,0 x0f,0 x09,0 x13,0 x00, 0 x1f,0 x11,0 x11,0 x1f,0 x11,0 x11,0 x11,0 x1f,0 x00, 0 x01,0 x1d,0 x17,0 x1d,0 x17,0 x1d,0 x03,0 x01, 0 x04,0 x0a,0 x11,0 x0e,0 x02,0 x0a,0 x16,0 x00,; uchar i,j; uchar key_Enter = 0;/確認(rèn)鍵被按下的次數(shù) /控制線 DDRC = 0 xff;/方向寄存器 PORTC = 0 xff;/數(shù)據(jù)寄存器 /數(shù)據(jù)端 D

36、DRB = 0 xff;/端口 B 設(shè)置為輸出 PORTB = 0 xff; DDRD = 0 xff;/按鍵設(shè)為輸入 PORTD = 0 xff; 62 init_1302(); init_lcd(); T1_int(); wr_dictate(0 x40); for (j=0;j5;j+) for (i=0;i8;i+) wr_data(chineseji);/利用循環(huán)語(yǔ)句把點(diǎn)陣字 符寫進(jìn) CGRAM 中 allowance();/補(bǔ)充顯示 while(1) NOP(); i=get_key(); if (i=1)/所有的功能以確認(rèn)鍵按下才開始操作 63 while (1) NOP();

37、switch(i) case 1:/確認(rèn)鍵 T1_CLOSE;/確認(rèn)鍵按下,停止顯示數(shù)字 key_Enter+; switch(key_Enter) case 1: show_function();/顯示功能 break; case 2: set_clock();/設(shè)置時(shí)間 64 goto OUT; break; case 2:/加值鍵 display_lcd(0 x84,0 x20);/清除上行的 箭頭 display_lcd(0 xc4,0 x7e);/顯示一個(gè)箭 頭 break; case 3:/減值鍵 display_lcd(0 xc4,0 x20);/消除下行的 箭頭 display

38、_lcd(0 x84,0 x7e);/顯示一個(gè)箭 頭 break; 65 case 4:/確定鍵 OUT: wr_dictate(0 x01); key_Enter =0; allowance(); wr_dictate(0 x0c); T1_OPEN;/繼續(xù)顯示 break; default:break; i = get_key(); if(key_Enter=0)/操作完成,退出 break; 66 return 0; /*利用中斷程序來(lái)訪問(wèn) ds1302*/ SIGNAL(TIMER1_OVF_vect)/T1 中斷程序,執(zhí)行中斷程序時(shí)將關(guān) 閉全局中斷使能位,不能響應(yīng)其他中斷 uchar

39、 i,j; TCNT1 = 0 xcf2c;/16 位計(jì)數(shù)寄存器 T1_INIT_CLOSE; count-; if (count=0) count=10; T1_CLOSE; get_time(time); adopt_data();/轉(zhuǎn)化為 lcd 顯示的數(shù)據(jù) for (i=0,j=0;i10;i +=2) display_lcd(0 x80+j,numberlcd_showi); 67 display_lcd(0 x80+j+1,numberlcd_showi+1); T1_INIT_OPEN;/再次開定時(shí)中斷 68 附錄附錄 4 4 參考文獻(xiàn)參考文獻(xiàn) 1 沈文,Eagle lee,詹衛(wèi)

40、前. AVR 單片機(jī) C 語(yǔ)言開發(fā)入門指 導(dǎo)M.北京:清華大學(xué)出版社, 2003. 2 Richard Barnett 等.嵌入式 C 編程與 Atmel AVRM.北京: 清華大學(xué)出版社,2003. 3 Ying HuangSanthosh KumaranJen-Yao Chung.A model- driven framework for enterprise service managementJ.IseB,2005,3:201-217 4 耿德根等.AVR 高速嵌入式單片機(jī)原理與應(yīng)用M.北京: 航空航天大學(xué)出版社,2001. 5 Mohamadi, T. Real Time Opera

41、ting System for AVR microcontrollers. Design & Test Symposium (EWDTS),2011 9th East- West,9-12 Sept. 2011:376-380 6金春林等.AVR 系列單片機(jī) C 語(yǔ)言編程與應(yīng)用實(shí)例M.北 京:清華大學(xué)出版社,2003. 7 張軍,宋濤.AVR 單片機(jī) C 語(yǔ)言程序設(shè)計(jì)實(shí)例精粹M.北 京:電子工業(yè)出版社,2009 8 Von Dhananjay V. Gadre .Programming And Customizing the AVR MicrocontrollerM. McGraw-Hill Companies,2008 9 丁化成等.AVR 單片機(jī)應(yīng)用設(shè)計(jì)M.北京:航空航天大學(xué)出 版社,2002. 10 丁正林等.AVR 單片機(jī)原理及應(yīng)用M.北京:國(guó)防工業(yè)出 版社,2009.

展開閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!