計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文_第1頁(yè)
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文_第2頁(yè)
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文_第3頁(yè)
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文_第4頁(yè)
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)專升本論文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)介

2、單片機(jī)簡(jiǎn)介 .7 3.23.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.1DS1302DS1302 特 性 介紹特 性介紹10 3.3.23.3.2DS1302DS1302 弓 | 腳 介 紹 弓 | 腳 介紹11 3.3.33.3.3DS1302DS1302有關(guān)日歷,時(shí)間的寄存器有關(guān)日歷,時(shí)間的

3、寄存器 12 3.3.43.3.4 DS1302DS1302 與單片機(jī)接口電路與 單片機(jī)接口電路12 3.43.4顯示模塊設(shè)計(jì)顯示模塊設(shè)計(jì).133.4.13.4.1 LCD1602LCD1602 的特性介紹的特性介紹.143.4.23.4.2 LCD1602LCD1602 弓 | 腳 介 紹弓| 腳 介 紹 .153.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è)置模塊203.63.6振蕩電路振蕩電路 21 3.73.7復(fù)位電路復(fù)位電路 22 第四章第

4、四章 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì) 2323 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)功能.304.2.24.2.2函數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì).30 4.2.34.2.3 小結(jié)小結(jié).314.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附錄 附錄11元器件表元器件表 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單片機(jī),AVR系列的單片機(jī)不僅

6、具有良好的集成性能,而且都具備在線編程接口,其中的Mega系列還具備 JTAG仿真和下載功能;含有 片內(nèi)看門 狗電路、片內(nèi)程序 Flash、同步串行接口 SPI;多數(shù)AVR單 片機(jī)還內(nèi)嵌 了 A/D轉(zhuǎn)換器、EEPROM、模擬比較器、PWM 定時(shí)計(jì)數(shù)器等多種功能; AVR單片機(jī) 的I/O接口具有很 強(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í)能夠利用后備電池準(zhǔn)確計(jì)時(shí)。顯示器件采用LCD1602液晶

7、,通過(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è)計(jì)任務(wù)設(shè)計(jì)任務(wù) 利用AVR單片機(jī)等實(shí)現(xiàn)一個(gè) 簡(jiǎn)單的基于 AVR的可調(diào)電子鐘。1

8、.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 作為主控制器,以DS1302時(shí)鐘芯片和 16M的外置晶振提供準(zhǔn)確時(shí)間標(biāo)準(zhǔn),以期實(shí)現(xiàn)對(duì)時(shí)、分、秒

9、”的數(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.1ATmega16單片機(jī)簡(jiǎn)介單片機(jī)簡(jiǎn)介ATmega16單片機(jī)是ATmega系列AVR單片機(jī)中內(nèi)容接口豐富,功能齊全,性 能價(jià)格比較高的產(chǎn)品。

10、它具有高性能、低功耗的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 ATmega16ATmega16單片機(jī)的工作原理單 片機(jī)的工作原理 3.2.13.2.1 I/OI/O 端口的工作原理端口的工 作原理8 ATmeage16單片機(jī)具有 32個(gè)通用I/

11、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和輸入引腳 PINxo3.2.23.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/

12、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í)鐘的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)行

13、比較。一旦TCNTx(0 , 1,2)等于OCRx(0,1,2),比較器就給由匹配 信號(hào)。有4種工作模式:普通模式,CTC 模式, 快速 PWM 模式,相位修正 PWM 模式。3.2.3323中斷系統(tǒng)中斷系統(tǒng)ATmega16單片機(jī)有 21個(gè)中斷源,每一個(gè)中斷源都有一個(gè)獨(dú)立的中斷向量作為中斷服務(wù)程序的入口地址,而且所有的中斷源都有自己的獨(dú)立 的使能位。如果 全局中斷I和相應(yīng)使能位都置位,則在中斷標(biāo)志位 置位時(shí)將執(zhí)行中斷服務(wù)程序。9 一個(gè)中斷產(chǎn)生后,全局中斷使能位I將被清零,后續(xù)中斷被屏蔽。中斷相關(guān)的寄存器:MCU 控制寄存器 MCUCR , MCU 控制和狀態(tài)寄存器 MCUCSR ,通用中斷控制

14、寄存器 GICR,通用中斷狀態(tài)寄存器 GIFR. 3.2.4324 振蕩器振蕩器 XTAL1 :反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2 :來(lái)自反向振蕩器的輸由。振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸由。該反向放大 器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可米用。如采用外部時(shí)鐘源驅(qū) 動(dòng)器件,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ì)

15、外部 晶振的脈沖進(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 公司推由的一種高性能、低功耗 的實(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。采用雙電源供

16、電(主電源和備用電源),可設(shè) 置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。O利用單片機(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 特性介紹特性介紹DS1302是美國(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ǔ)償功能。工作 電壓寬

17、達(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í),且具有閏年補(bǔ)償?shù)榷喾N功能 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、

18、 Vcc1 :備用電池端;1、Vcc2:5V電源。當(dāng) Vcc2Vcc1+0.2V 時(shí),由 Vcc2 向 DS1302 供電, 當(dāng) Vcc2/單片機(jī)寄存器的頭文件#include #include #include /a為要操作的寄存器,b為要操作的位數(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

19、 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); SCLK_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);/ 地 址 DS13

20、02writeByte(ucDa);/ 寫 1byte 數(shù)據(jù) SCLK_SET_1;RST_CLE_0; /* 讀 ds1302 的寄存器*/ uchar Read1302(uchar ucAddr) uchar ucData; RST_CLE_0;SCLK_CLE_0;RST_SET_1;45DS1302writeByte(ucAddr|0X01);/ 地址,命令 ucData = DS1302OreadByte(); SCLK_SET_1;RST_CLE_0;return(ucData); void get_time(uchar *time) *(time+5)=Read1302(READ

21、_SECOND);*(time+4)=Read1302(READ_MINUTE);*(time+3)=Read1302(READ_HOUR);*(time+2)=Read1302(READ_DAY);*(time+1)=Read1302(READ_MONTH);*(time+0)=Read1302(READ_YEAR); /*void Initial(void) Write1302(WRITE_PROTECT,0x00);Write1302(WRITE_SECOND,0x45);WHte1302(WRITE_MINUTE,0x24);Write1302(WRITE_HOUR,0x09);Wri

22、te1302(WRITE_DAY ,0x13);46Write1302(WRITE_MONTH,0x04);Write1302(WRITE_PROTECT,0x80); void adopt_data(uchar n,uchar *show_data) *show_data = n4; *(show_data +1)= n */ void T1_int(void) TCCR1B = 0x00;/控制寄存器,停止定時(shí)TIMSK |= 0x04;/中斷屏蔽寄存器,中斷允許 TCNT1 =0xcf2c;/100ms 溢由一次 TCCR1B = 0x02; sei();/使能全局 中 斷47 void

23、 init_1302(void) Write1302(WRITE_PROTECT,0x00); 禁止寫保護(hù) Write1302(WRITE_SECOND,time4);/ 秒位初始化Write1302(WRITE_MINUTE,time3);/分鐘Write1302(WRITE_HOUR,time2);/小時(shí)Write1302(WRITE_DAY ,time1);/日Write1302(WRITE_MONTH,time0);/月Write1302(WRITE_PROTECT,0x80); 允許寫保護(hù) /* 按鍵 函數(shù) */ uchar get_key(void) uchar i=0; PORT

24、D |= 0x0f; DDRD = 0xf0;/ 設(shè)置為輸由 NOP(); NOP(); if(PIND/ 消除抖 動(dòng) switch(PINDbreak; 選擇鍵 case 0x0d:i = 3;break;/ 減 值鍵 case 0x0b:i = 2;break;/ 增值鍵 case 0x07:i =1;break;/確定鍵 while(PIND 等待按鍵松開(kāi) else i = 0;/沒(méi)有按鍵被按下 DDRD = 0xff;設(shè)置為輸由 return i;/返回按鍵值 /*轉(zhuǎn)換為led要顯示的數(shù)據(jù)*/ 49 void adopt_data() uehar i,j=0; for (i=0;i4;

25、 lcd_showj+1 = timei j += 2; /* 轉(zhuǎn)換為 ds1302 的時(shí)間*/ void affirm_data(void) uehar 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=0x43,0x4c,0x4f,0x43,0x4b,0x41,0x4c,0x41,0x52,0

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

27、行Write1302(WRITE_PROTECT,0x80);display_lcd(0x82,0x00);/ 顯示年 display_lcd(0x85,0x01);/ 月 display_lcd(0x88,0x02);/ 日 display_lcd(0xc2,0x03);/ 時(shí) display_lcd(0xc5,0x03);/ 分 display_lcd(0xc8,0x03);/ 秒 for (i=0,j=0;i10;i+=2) display_lcd(0x80+j,numberlcd_showi);display_lcd(0x80+j+1,numberlcd_showi+1); 53 j

28、= j+3; wr_dictate(0x02); wr_dictate(0x0e); j = 0; while(1) NOP(); switch(get_key() case 1:/ 確認(rèn) cursor+; j+; if (cursor%2=0) j+; wr_dictate(0x14); wr_dictate(0x14); 54 else wr_dictate(0x14); if (cursor=10) j = 0; cursor = 0; wr_dictate(0x02);/ 光標(biāo)歸位 place = 0x80+j; break; case 2:/加 switch(cursor) /* 一

29、下的 case成功選擇項(xiàng)為光標(biāo)對(duì) 應(yīng)的調(diào) 55 整位數(shù)*/ case 0:add_d(cursor,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);

30、 else add_d(cursor,9);break; case 6:add_d(cursor,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(0x10); break; 57 case 3:減 switch(cursor) /*一下的case成功選擇項(xiàng)為光標(biāo)對(duì)應(yīng)的調(diào)整位數(shù)*/ case0:dec_d(cursor,1);bre

31、ak; case 1: if(lcd_show0=1) dec_d(cursor,2); else dec_d(cursor,9); break; case 2:dec_d(cursor,3);break; case 3: if(lcd_show2=3) 58dec_d(cursor,0);elsedec_d(cursor,9);break;case4:add_d(cursor,2);break; case 5: if(lcd_show4=2) dec_d(cursor,3);elsedec_d(cursor,9);break;case6:dec_d(cursor,5);break; case

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

33、cd(0x82,0x00);/ 顯示月 display_lcd(0x85,0x01);/ 日 display_lcd(0x88,0x02);/ 時(shí) display_lcd(0x8b,0x03);/ 分 get_time(time); adopt_data(); for (i=0,j=0;i10;i+=2) display_lcd(0x80+j,numberlcd_showi);display_lcd(0x80+j+1,numberlcd_showi+1); j = j+3; int main(void) uchar chinese58 =610x08,0x0f,0x12,0x0f,0x0a,0

34、x1f,0x02,0x02,0x0f,0x09,0x0f,0x0,0x0f,0x09,0x13,0x00, 0x1f,0x11,0x11,0x1f,0x11,0x11,0x11,0x1f,0x00, 0x01,0x1d,0x17,0x1d,0x17,0x1d,0x03,0x01, 0x04,0x0a,0x11,0x0e,0x02,0x0a,0x16,0x00,; uchar i,j; uchar key_Enter = 0;確認(rèn)鍵被按下的次數(shù)控制線 DDRC =0xff;方向寄存器PORTC = 0xff;數(shù)據(jù)寄存器數(shù)據(jù)端DDRB = 0xff;/ 端口 B 設(shè)置為輸由 PORTB = 0xf

35、f; DDRD = 0xff; 按鍵設(shè)為輸入 PORTD = 0xff; 62 init_1302(); init_lcd(); T1_int(); wr_dictate(0x40); 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)鍵按下才開(kāi)始操作 63 while (1) NOP(); switch(i) case 1:/確認(rèn)鍵 T1_CLOSE;確認(rèn)鍵按下,停止顯

36、示數(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(0x84,0x20);/ 清除上行 的箭頭 display_lcd(0xc4,0x7e);/ 顯示一個(gè)箭頭 break; case 3:/減值鍵 display_lcd(0xc4,0x20);/ 消除下行的 箭頭 display_lcd(0x84,0x7e);/ 顯示一個(gè)箭 頭 break; 65 case 4:/ 確定鍵 OUT: wr_dictate(0x01);

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論