版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢 業(yè) 論 文</b></p><p> 題 目 基于AVR的可調(diào)電子鐘設(shè)計(jì) </p><p> 院系名稱:計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 專業(yè)班級(jí):11專升本 </p><p>
2、; 學(xué)生姓名: </p><p> 學(xué) 號(hào):1110211057 </p><p> 指導(dǎo)教師: </p><p><b> 2013-3-12</b></p>
3、<p><b> 目錄</b></p><p><b> 摘 要4</b></p><p><b> 第一章 引言5</b></p><p><b> 1.1設(shè)計(jì)任務(wù)5</b></p><p><b> 1.2設(shè)計(jì)要求
4、5</b></p><p> 第二章 總體方案論證與設(shè)計(jì)6</p><p> 第三章 系統(tǒng)硬件設(shè)置7</p><p> 3.1 ATmega16單片機(jī)簡(jiǎn)介7</p><p> 3.2 ATmega16單片機(jī)的工作原理7</p><p> 3.2.1 I/O端口的工作原理7</p&
5、gt;<p> 3.2.2定時(shí)/計(jì)數(shù)器8</p><p> 3.2.3 中斷系統(tǒng)8</p><p> 3.2.4 振蕩器9</p><p> 3.3時(shí)鐘模塊設(shè)計(jì)10</p><p> 3.3.1 DS1302特性介紹10</p><p> 3.3.2 DS1302引腳介紹11<
6、;/p><p> 3.3.3 DS1302有關(guān)日歷,時(shí)間的寄存器12</p><p> 3.3.4 DS1302與單片機(jī)接口電路12</p><p> 3.4顯示模塊設(shè)計(jì)13</p><p> 3.4.1 LCD1602的特性介紹14</p><p> 3.4.2 LCD1602引腳介紹15</p
7、><p> 3.4.3 1602內(nèi)部功能器件及相關(guān)功能16</p><p> 3.4.4 1602液晶與單片機(jī)接口電路18</p><p> 3.5 設(shè)置模塊20</p><p> 3.6 振蕩電路21</p><p> 3.7 復(fù)位電路22</p><p> 第四章 系統(tǒng)軟件
8、設(shè)計(jì)23</p><p> 4.1 時(shí)鐘函數(shù)模塊25</p><p> 4.1.1實(shí)現(xiàn)功能25</p><p> 4.1.2 函數(shù)設(shè)計(jì)25</p><p> 4.2 顯示函數(shù)模塊30</p><p> 4.2.1實(shí)現(xiàn)功能30</p><p> 4.2.2 函數(shù)設(shè)計(jì)30&
9、lt;/p><p> 4.2.3 小結(jié)31</p><p> 4.3 按鍵函數(shù)模塊32</p><p> 4.3.1 實(shí)現(xiàn)功能32</p><p> 4.3.2 函數(shù)設(shè)計(jì)32</p><p> 4.3.3 小結(jié)32</p><p> 4.4 主函數(shù)模塊32</p>
10、<p> 第五章 心得體會(huì)33</p><p><b> 第六章 致謝33</b></p><p> 附錄 1元器件表34</p><p> 附錄2 仿真圖35</p><p><b> 附錄3 源碼36</b></p><p> 附錄4
11、參考文獻(xiàn)68</p><p><b> 摘 要</b></p><p> 單片機(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ì)象,
12、K2鍵用于調(diào)整時(shí)分秒,在按下K4鍵時(shí)確定調(diào)節(jié)值,時(shí)鐘繼續(xù)運(yùn)行。</p><p> 本設(shè)計(jì)采用的是AVR單片機(jī),AVR系列的單片機(jī)不僅具有良好的集成性能,而且都具備在線編程接口,其中的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)
13、能力,灌入電流可直接驅(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í)。</p><p> 顯示器件采用LCD1602液晶,通過(guò)相應(yīng)的按鍵調(diào)整相應(yīng)的值。通過(guò)此次設(shè)計(jì)能夠更加牢固的掌握單片機(jī)的應(yīng)用技術(shù),增強(qiáng)動(dòng)手能力、硬件設(shè)計(jì)能力以及軟
14、件設(shè)計(jì)能力。</p><p> 關(guān)鍵詞 AVR單片機(jī)</p><p> 時(shí)鐘芯片DS1302 LCD1602液晶</p><p><b> 第一章 引言</b></p><p> 本例采用LCD1602液晶作為顯示元件,液晶屏顯示當(dāng)前時(shí)鐘。該電子鐘實(shí)現(xiàn)如下功能:液晶屏模擬表盤與時(shí)分秒指針顯示當(dāng)前時(shí)鐘,K1
15、鍵用于選擇調(diào)節(jié)對(duì)象,K2鍵用于調(diào)整時(shí)分秒,在按下K3鍵時(shí)確定調(diào)節(jié)值,時(shí)鐘繼續(xù)運(yùn)行。本例程序包含控制模塊、顯示模塊、實(shí)時(shí)時(shí)間計(jì)算模塊、設(shè)置模塊(時(shí)間設(shè)置模塊)。</p><p><b> 1.1設(shè)計(jì)任務(wù)</b></p><p> 利用AVR單片機(jī)等實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于AVR的可調(diào)電子鐘。</p><p><b> 1.2設(shè)計(jì)要求&l
16、t;/b></p><p> a.實(shí)現(xiàn)年月日時(shí)分秒指針式顯示功能</p><p> b.用三個(gè)按鍵來(lái)實(shí)現(xiàn)調(diào)整時(shí)分秒的功能</p><p> 第二章 總體方案論證與設(shè)計(jì)</p><p> 組成框圖中包含顯示模塊,控制器,時(shí)間模塊,設(shè)置模塊。顯示模塊有LCD1602來(lái)控制顯示,整個(gè)代碼實(shí)現(xiàn)主要由控制器來(lái)實(shí)現(xiàn),時(shí)間模塊有DS1302來(lái)
17、實(shí)現(xiàn),可以顯示系統(tǒng)時(shí)間,也可自行調(diào)整,設(shè)置模塊為按鍵處理。具體模塊分析在相關(guān)的軟硬件設(shè)計(jì)中詳細(xì)介紹。</p><p> 本設(shè)計(jì)中的可調(diào)電子鐘擬采用AVR系列單片機(jī)ATMEGA16作為主控制器,以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í)間
18、的調(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è)置模塊)。</p><p> 第三章 系統(tǒng)硬件設(shè)置</p><p> 3.1 ATmega16單片機(jī)簡(jiǎn)介</p><p>
19、; 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)S
20、RAM 數(shù)據(jù)存儲(chǔ)器和EEPROM 3部分,均采用線性編址。</p><p><b> 圖3-1</b></p><p> 3.2 ATmega16單片機(jī)的工作原理</p><p> 3.2.1 I/O端口的工作原理</p><p> ATmeage16單片機(jī)具有32個(gè)通用I/O口,分為PA,PB,PC,PD,每組
21、都是八位。這些I/O都是可以通過(guò)各自的端口寄存器設(shè)置為輸入或置成輸出,有些I/O口還具有第二功能。</p><p> 所有的端口引腳都具有內(nèi)部上拉電阻,可以通過(guò)寄存器獨(dú)立選擇是否連接,復(fù)位時(shí)所有的引腳都為高阻態(tài)。ATmega16單片機(jī)的每個(gè)端口都有三個(gè)I/O寄存器地址:數(shù)據(jù)寄存器PORTx(x=A\B\C\D,下同)、方向寄存器DDRx和輸入引腳PINx。</p><p> 3.2.2
22、定時(shí)/計(jì)數(shù)器</p><p> 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ù)器。</p><p> 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í)鐘邏輯模
23、塊控制使用哪個(gè)時(shí)鐘源及哪個(gè)邊沿來(lái)進(jìn)行加或者減計(jì)數(shù)。</p><p> 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)。</p><p> T/Cx雙緩沖結(jié)構(gòu)的八位輸出比較寄存器OCRx(0,1,2)一直與T/Cx
24、(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模式。</p><p> 3.2.3 中斷系統(tǒng)</p><p> ATmega16 單片機(jī)有21個(gè)中斷源,每一個(gè)中斷源都有一個(gè)獨(dú)立的中斷向量作為中斷服務(wù)程序的入口地址,而且所有的中斷源都
25、有自己的獨(dú)立的使能位。如果全局中斷I和相應(yīng)使能位都置位,則在中斷標(biāo)志位置位時(shí)將執(zhí)行中斷服務(wù)程序。一個(gè)中斷產(chǎn)生后,全局中斷使能位I將被清零,后續(xù)中斷被屏蔽。</p><p> 中斷相關(guān)的寄存器:MCU控制寄存器MCUCR,MCU控制和狀態(tài)寄存器MCUCSR,通用中斷控制寄存器GICR,通用中斷狀態(tài)寄存器GIFR.</p><p><b> 3.2.4 振蕩器</b>
26、</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 </p><p> XTAL2:來(lái)自反向振蕩器的輸出。</p><p> 振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2
27、應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p><b> 3.3時(shí)鐘模塊設(shè)計(jì)</b></p><p><b> 實(shí)時(shí)時(shí)間計(jì)算模塊</b></p><p> 方案(1):AVR單片機(jī)內(nèi)部帶有定時(shí)/計(jì)數(shù)功能,此定時(shí)功能是通過(guò)對(duì)
28、外部晶振的脈沖進(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í),所以使用不便。</p><p> 方案(2):DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行通信,并可采用突發(fā)方
29、式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。利用單片機(jī)強(qiáng)大的控制功能就可實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)的功能,而且消耗的系統(tǒng)資源少,程序簡(jiǎn)單。</p><p> 綜合上述兩種方案,宜采用方案(2)實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)
30、功能。</p><p> 3.3.1 DS1302特性介紹</p><p> 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.5~5.
31、5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。利用單片機(jī)強(qiáng)大的控制功能就可實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)的功能,而且消耗的系統(tǒng)資源少,程序簡(jiǎn)單。</p><p> 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ù)器,
32、占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而采用時(shí)鐘芯片DS1302。</p><p> 3.3.2 DS1302引腳介紹</p><p><b> 圖3-2</b></p><p> 8 、Vcc1:備用電池端;</p><p> 1、Vcc2:5V電源。當(dāng)Vcc2>Vcc1+0
33、.2V時(shí),由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時(shí),由Vcc1向DS1302供電。</p><p> 7、 SCLK:串行時(shí)鐘,輸入; </p><p> 6、I/O:數(shù)據(jù)輸入輸出口;</p><p> 5、CE/RST:復(fù)位腳</p><p> 2 3、X1、X2 是外接晶振腳 (32.768KH
34、Z的晶振)</p><p><b> 4、地(GND)</b></p><p> 3.3.3 DS1302有關(guān)日歷,時(shí)間的寄存器</p><p><b> 表3-1</b></p><p> 3.3.4 DS1302與單片機(jī)接口電路</p><p><b>
35、 圖3-3</b></p><p> 由于DS1302是依靠外部晶振與其內(nèi)部的電容配合來(lái)產(chǎn)生時(shí)鐘脈沖,因?yàn)镈S1302在芯片本身已經(jīng)集成了6pF電容。所以,為了獲得穩(wěn)定的可靠的時(shí)鐘,必須選用具有6pF負(fù)載電容的晶振。當(dāng)它工作于所要求的負(fù)載電容時(shí),所以要選用32768HZ的晶振。</p><p> 石英晶振用12M,因?yàn)橐粋€(gè)機(jī)器周期為1/12時(shí)鐘周期,所以這樣用12M的話,
36、一個(gè)時(shí)鐘周期為12us那么定時(shí)器計(jì)一次數(shù)就是1us了,電容范圍是在20-40pf之間的都行。</p><p><b> 表3-2</b></p><p><b> 3.4顯示模塊設(shè)計(jì)</b></p><p><b> 液晶顯示模塊</b></p><p> 方案(1):
37、數(shù)碼管是利用發(fā)光二極管的特性組合而成數(shù)字顯示器件,通過(guò)控制相應(yīng)的二極管的狀態(tài)顯示相應(yīng)的數(shù)字。要使數(shù)碼管正常顯示就得有驅(qū)動(dòng)電路驅(qū)動(dòng)相應(yīng)的段碼,數(shù)碼管的現(xiàn)實(shí)方式可分為靜態(tài)顯示和動(dòng)態(tài)顯示,靜態(tài)顯示方式只適合顯示單個(gè)的數(shù)字,因此本設(shè)計(jì)應(yīng)采用動(dòng)態(tài)顯示方式。由于動(dòng)態(tài)顯示方式利用的是人眼視覺暫留的特性,掃描的時(shí)間應(yīng)不大于20毫秒,占用系統(tǒng)資源大,而且顯示的個(gè)數(shù)和字型有限,在本設(shè)計(jì)中不易采用。</p><p> 方案(2):L
38、CD1602是一種圖形點(diǎn)陣液晶顯示器,它主要由行驅(qū)動(dòng)器/列驅(qū)動(dòng)器及點(diǎn)陣液晶顯示器組成??赏瓿勺址@示,也可以顯示16*2字。該類液晶顯示模塊(即KS0108B及其兼容控制驅(qū)動(dòng)器)的指令系統(tǒng)比較簡(jiǎn)單,總共只有七種。關(guān)于行列和頁(yè)的解釋:從上向下共2行,每一行為16字,漢字占32B,分左右兩半,各占16B,根據(jù)在LCD上開始顯示的行列號(hào)及每行的列數(shù)可以找到顯示RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一個(gè)字節(jié),光標(biāo)位置加一,送第二個(gè)字節(jié)
39、,換行按列對(duì)齊。</p><p> 綜合比較上述兩種方案,應(yīng)采用LCD1602液晶組成本設(shè)計(jì)的顯示模塊。</p><p> 3.4.1 LCD1602的特性介紹</p><p> PG12864LCD是像素可尋址的圖形液晶顯示屏模塊</p><p><b> 芯片特性:</b></p><p&
40、gt; 1.工作電壓為4.5-5.5V,可自帶驅(qū)動(dòng)LCD所需的負(fù)電壓。</p><p> 2.全屏幕點(diǎn)陣,點(diǎn)陣數(shù)為16*2的字符的顯示。</p><p> 3.與CPU接口采用5條位控制總線和8位并行數(shù)據(jù)總線輸入輸出。</p><p> 4.內(nèi)部有顯示數(shù)據(jù)鎖存器,自帶EL驅(qū)動(dòng)。</p><p> 5.簡(jiǎn)單的操作指令,顯示開關(guān)設(shè)置,顯
41、示起始行設(shè)置,地址指針設(shè)置和數(shù)據(jù)讀/寫等指令。</p><p> 3.4.2 LCD1602引腳介紹</p><p><b> 表3-3</b></p><p> 3.4.3 1602內(nèi)部功能器件及相關(guān)功能</p><p> 1. 指令寄存器(IR)</p><p> 指令寄存器負(fù)責(zé)存放
42、單片機(jī)寫給HD144780的指令,對(duì)IR的操作如下:</p><p> 當(dāng)RS=0,R/W,E引腳由1變?yōu)?,就會(huì)把D0到D7引腳的數(shù)據(jù)送入指令寄存器IR。</p><p> 2.?dāng)?shù)據(jù)寄存器(DR)</p><p> DR負(fù)責(zé)存放單片機(jī)寫給CGRAM與DDRAM的數(shù)據(jù)或從CGRAM與DDRAM的數(shù)據(jù)。對(duì)DR的操作如下:</p><p>
43、 當(dāng)RS=1,R/W=1,E=1,HD44780就會(huì)把數(shù)據(jù)送到D0到D7引腳上,供單片機(jī)讀取。當(dāng)RS=1,R/W=0,E引腳信號(hào)由1變?yōu)?,HD44780就會(huì)把D0到D7引腳上的數(shù)據(jù)存入DR中</p><p><b> 3.忙標(biāo)志:BF</b></p><p> BF標(biāo)志提供內(nèi)部工作情況。BF=1表示模塊在內(nèi)部操作,此時(shí)模塊不接受外部指令和數(shù)據(jù)。BF=0時(shí),模塊
44、為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù)。</p><p> 4.顯示數(shù)據(jù)RAM(DDRAM)</p><p> DDRAM是用來(lái)存放LCD要顯示的數(shù)據(jù),只要將點(diǎn)陣字符圖形的代碼送入DDRAM,內(nèi)部的控制電路就會(huì)自動(dòng)將數(shù)據(jù)傳送到LCD顯示屏上,如果想在第一行的第一個(gè)位置顯示字符“0”,那么只要把字符“0”的代碼送達(dá)DDRAM的0X80地址中,在顯示屏就會(huì)出現(xiàn)一個(gè)字符“0”。</p&g
45、t;<p> 5.字符發(fā)生器(CGROM)</p><p> HD47780芯片內(nèi)含一個(gè)CGROM,存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如數(shù)字、字母、中文等。CGROM用來(lái)存儲(chǔ)設(shè)計(jì)者自行設(shè)計(jì)個(gè)性化字符造型代碼的RAM,共有512bit,一個(gè)5*7的字符體占用8*8bit,因此CGRAM最多只能存放8個(gè)自定義字符。</p><p> 6.地址寄存器(AC)</p>
46、;<p> AC是負(fù)責(zé)計(jì)算送DDRAM,CGRAM讀出的地址,或者計(jì)算寫到CGRAM,DDRAM數(shù)據(jù)的地址,當(dāng)單片機(jī)對(duì)CGRAM,DDRAM進(jìn)行操作時(shí),AC會(huì)依照單片機(jī)對(duì)HD47780的操作自動(dòng)修改地址的計(jì)數(shù)值。</p><p> LCD1602內(nèi)嵌芯片HD47780的控制功能</p><p><b> 表3-4</b></p>&l
47、t;p> 3.4.4 1602液晶與單片機(jī)接口電路</p><p><b> 圖3-4</b></p><p><b> 表3-5</b></p><p> 排阻的計(jì)算公式:上拉電源 /(硬件額定電流—單片機(jī)輸出電流)</p><p> 一、最大值的計(jì)算原則:要保證上拉電阻明顯小于負(fù)
48、載的阻抗,以使高電平時(shí)輸出有效。 </p><p> 例如:負(fù)載阻抗是10K,供電電壓是5V,如果要求高電平不小于4.5V,那么,上拉電阻最大值 R大5-4.5)=10:5 </p><p><b> R大=1K </b></p><p> 也就是最大值1k,(如果超過(guò)了1k,輸出的高電平就小于4.5V了) </p><
49、;p> 二、最小值的計(jì)算原則:保證不超過(guò)管子的額定電流(如果不是場(chǎng)效應(yīng)管而是三極管也可依照飽和電流來(lái)計(jì)算) </p><p> 例:管子的額定電流150mA,放大倍數(shù)100,基極限流電阻10k,工作在5v的系統(tǒng)中。那么,算法如下: </p><p> Ib=U/R=(5-0.7)/10=0.47(mA) </p><p> Ic=100*0.47=47
50、mA 小于額定的150,所以可以按飽和法來(lái)算最小值。 </p><p><b> 上拉電阻最小值 </b></p><p> R?。?v/47mA=106歐姆 (如果小于這個(gè)電阻,管子就會(huì)過(guò)飽和而沒(méi)有意義了。如果大于這個(gè)值,管子的導(dǎo)體電阻就會(huì)變大一些,所以太高也不利于低電平的輸出)</p><p><b> 3.5 設(shè)置模塊&l
51、t;/b></p><p> 設(shè)置模塊采用四個(gè)按鍵與PD連接</p><p> 按鍵與單片機(jī)的接口電路</p><p><b> 圖3-5</b></p><p> 按鍵的斷開與閉合式由機(jī)械觸點(diǎn)的動(dòng)作實(shí)現(xiàn)。由于機(jī)械的彈性作用在按鍵的斷開與閉合過(guò)程中會(huì)產(chǎn)生抖動(dòng)。此抖動(dòng)的脈沖會(huì)給單片機(jī)帶來(lái)誤判斷,所以必須消除。
52、消除抖動(dòng)可以從軟件和硬件兩方面入手。本設(shè)計(jì)采用軟件消除抖動(dòng),從按鍵斷開到穩(wěn)定閉合,此抖動(dòng)的時(shí)間一般為5ms到10ms。所以當(dāng)單片機(jī)檢測(cè)到有按鍵被按下時(shí)候,就延時(shí)一段時(shí)間。</p><p> 單片機(jī)與鍵盤的連接方式可分為獨(dú)立式,編碼式,串口擴(kuò)展式和矩陣式。其中較為常用的有獨(dú)立式和矩陣式。本設(shè)計(jì)采用獨(dú)立式按鍵,也就是每一個(gè)按鍵都與端口獨(dú)立連接,每一個(gè)按鍵獨(dú)立占一根輸入線,一根輸入線的工作狀態(tài)不會(huì)影響其他按鍵。獨(dú)立式
53、按鍵通過(guò)檢測(cè)電平的狀態(tài)可以很容易判斷出有沒(méi)有按鍵被按下。獨(dú)立式的電路配置靈活,軟件算法簡(jiǎn)單。</p><p><b> 3.6 振蕩電路</b></p><p> 本設(shè)計(jì)芯片選用內(nèi)部振蕩器方式。由于本設(shè)計(jì)的時(shí)間由內(nèi)部定時(shí)器中斷與軟件計(jì)數(shù)相結(jié)合產(chǎn)生的,所以從計(jì)算方便以及系統(tǒng)的效率上考慮,本設(shè)計(jì)選用12MHz頻率的晶振,電路原理圖如下:</p><
54、p> 圖3-6 atmage16的振蕩電路</p><p> 經(jīng)廠家推薦穩(wěn)定電路的電容C1,C2=22uf,C3為10uf。</p><p><b> 3.7 復(fù)位電路</b></p><p> Atmega16有5個(gè)復(fù)位源:上電復(fù)位、外部復(fù)位、看門狗復(fù)位、掉電檢測(cè)復(fù)位及JTAG復(fù)位。復(fù)位時(shí)所有的I/O寄存器都被設(shè)置為初始值,程序
55、從復(fù)位向量開始執(zhí)行。本設(shè)計(jì)使用上電復(fù)位電路。單片機(jī)晶振為12MHz,起振時(shí)間將近1ms,單片機(jī)2個(gè)機(jī)器周期的時(shí)間為2us。</p><p> 單片機(jī)每次上電復(fù)位所需的最短延時(shí)應(yīng)該不小于treset。這里,treset等于上電延時(shí)與起振延時(shí)之和。從實(shí)際上講,延遲一個(gè)treset往往還不夠,不能夠保障單片機(jī)有一個(gè)良好的工作開端。</p><p> 復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一
56、個(gè)延時(shí)(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間;在電源電壓穩(wěn)定之后,再插入一個(gè)延時(shí),給予時(shí)鐘振蕩器從起振到穩(wěn)定的一個(gè)等待時(shí)間;在單片機(jī)開始進(jìn)入運(yùn)行狀態(tài)之前,還要至少推遲2個(gè)機(jī)器周期的延時(shí)間。單片機(jī)是高電平的時(shí)候復(fù)位,一般是用電阻和電容組成的,電容充電的時(shí)RST復(fù)位端為高電平,此時(shí)單片機(jī)開始復(fù)位..電容充電完成,此時(shí)單片機(jī)復(fù)位完成。</p><p> 由此電容值可取10uf,電阻值取10KΩ。
57、詳細(xì)見附錄文件(電容充電時(shí)間的計(jì)算方法.pdf)</p><p> 圖3-7 Atmage上電復(fù)位電路</p><p> 第四章 系統(tǒng)軟件設(shè)計(jì)</p><p> 軟件設(shè)計(jì)是本設(shè)計(jì)的關(guān)鍵,軟件程序編寫的好壞直接影響著系統(tǒng)運(yùn)行情況的良好。因本程序涉及的模塊較多,所以程序編寫也采用模塊化設(shè)計(jì),C語(yǔ)言具有編寫靈活、移植方便、便于模塊化設(shè)計(jì)的特點(diǎn),所以本系統(tǒng)的軟件采用A
58、tmage16編寫。</p><p><b> 程序框圖如下:</b></p><p> 4.1 時(shí)鐘函數(shù)模塊</p><p> 具體實(shí)現(xiàn)含有向DS1302串行寫入一字節(jié)即DS1302writeByte,從DS1302讀取一字節(jié)即DS1302OreadByte,從DS1302指定位置讀數(shù)據(jù)Read1302,向DS1302某地址寫入數(shù)據(jù)Wr
59、ite1302,設(shè)置時(shí)間set_clock,從DS1302獲取時(shí)間(讀取當(dāng)前時(shí)間),get_time利用這些函數(shù)來(lái)實(shí)現(xiàn)時(shí)間,最終顯示在液晶屏上,可以自行調(diào)整。</p><p> 你可以顯示系統(tǒng)時(shí)間,也可以顯示調(diào)整時(shí)間,具體實(shí)現(xiàn)是設(shè)置時(shí)間函數(shù)。</p><p><b> 4.1.1實(shí)現(xiàn)功能</b></p><p> 能夠顯示年月日時(shí)分秒和星
60、期,完成了24小時(shí)和12小時(shí)之間的切換,并設(shè)有鬧鐘,鬧鐘存放于EEPROM中,時(shí)間和星期以及鬧鐘均可調(diào)。其中鬧鐘掉電數(shù)據(jù)不會(huì)丟失。</p><p> 4.1.2 函數(shù)設(shè)計(jì)</p><p> 1:void DS1302writeByte(uchar _data)</p><p><b> ?。?)功能</b></p><p
61、> 向DS1302中寫入一字節(jié)數(shù)據(jù)。</p><p><b> (2)依據(jù)</b></p><p> DS1302時(shí)序圖(詳見SD1302技術(shù)資料)可知,在啟動(dòng)DS1302時(shí)每產(chǎn)生一個(gè)下降沿可向DS1302中寫入一位數(shù)據(jù)。</p><p> ?。?)右圖為流程圖:</p><p> 2:uchar DS13
62、02OreadByte(void)</p><p><b> ?。?)功能</b></p><p> 從DS1302中讀取一字節(jié)數(shù)據(jù)。</p><p><b> ?。?)依據(jù)</b></p><p> DS1302時(shí)序圖(詳見SD1302技術(shù)資料)可知,在啟動(dòng)DS1302時(shí)每產(chǎn)生一個(gè)上升沿可向D
63、S1302中</p><p><b> 讀取一位數(shù)據(jù)。</b></p><p> ?。?)右圖為流程圖:</p><p> 3:uchar Read1302(uchar ucAddr)</p><p><b> 功能</b></p><p> 從指定的地址中讀取一字節(jié)
64、數(shù)據(jù)。</p><p><b> 依據(jù)</b></p><p> DS1302時(shí)序圖(詳見SD1302技術(shù)資料)可知,在啟動(dòng)DS1302時(shí)每產(chǎn)生一個(gè)下降沿可向DS1302中寫入一位數(shù)據(jù)。在啟動(dòng)DS1302時(shí)每產(chǎn)生一個(gè)上升沿可向DS1302中讀取一位數(shù)據(jù)。</p><p> ?。?)下圖為流程圖:</p><p>
65、4:void Write1302(uchar ucAddr,uchar ucDa)</p><p><b> (1)功能</b></p><p> 向DS1302指定地址中寫入一字節(jié)數(shù)據(jù)。</p><p><b> ?。?)依據(jù)</b></p><p> DS1302時(shí)序圖(詳見SD1302技
66、術(shù)資料)可知,在啟動(dòng)DS1302時(shí)每產(chǎn)生一個(gè)下降沿可向DS1302中寫入一位數(shù)據(jù)。在啟動(dòng)DS1302時(shí)每產(chǎn)生一個(gè)上升</p><p> 沿可向DS1302中讀取一位數(shù)據(jù)。</p><p> (3)右圖為流程圖:</p><p> 5:void affirm_data(void)</p><p><b> 功能</b&g
67、t;</p><p> 輸入數(shù)據(jù)入轉(zhuǎn)換函數(shù)、將十進(jìn)制轉(zhuǎn)換成BCD碼</p><p><b> 依據(jù)</b></p><p><b> 轉(zhuǎn)換公式。</b></p><p> (3)下圖為流程圖:</p><p> 6:void get_time(uchar *time
68、)</p><p><b> (1)功能</b></p><p> 讀取當(dāng)前時(shí)間,并判斷當(dāng)前是12小時(shí)顯示還是24小時(shí)顯示。</p><p><b> (2)依據(jù)</b></p><p> 通過(guò)對(duì)標(biāo)志位的判斷來(lái)確定當(dāng)前為12小時(shí)制還是24小時(shí)制,如果為12小時(shí)時(shí)要將DS1302寄存器內(nèi)相應(yīng)位
69、置1。</p><p> ?。?)右圖為流程圖:</p><p> 7:void set_clock(void)</p><p><b> 功能</b></p><p> 向DS1302中寫入初始時(shí)間,啟動(dòng)DS1302振蕩器,判斷上下午。</p><p><b> 依據(jù)</
70、b></p><p> DS1302時(shí)序圖(詳見SD1302技術(shù)資料)。</p><p> 8:void format_datetime(uchar d,uchar *a)</p><p><b> 功能</b></p><p><b> 將數(shù)字轉(zhuǎn)換成字符。</b></p>
71、<p><b> 依據(jù)</b></p><p><b> ASII碼表。</b></p><p> 9:void init_1302(void)</p><p><b> 功能</b></p><p> 啟動(dòng)DS1302振蕩器。</p>&
72、lt;p><b> 依據(jù)</b></p><p> 由DS1302的技術(shù)資料知,DS1302的秒寄存器的最高位為振蕩器控制位,向該位置一即可啟動(dòng)振蕩器</p><p> 4.2 顯示函數(shù)模塊</p><p> 檢測(cè)LCD是否忙rd_bf( ),向LCD發(fā)送命令wr_dictate( )向lcd發(fā)送數(shù)據(jù)wr_data( )初始化16
73、02顯示init_lcd( ),初始化1602顯示屏show_function (通用顯示函數(shù))。</p><p> 顯示字符和漢字的字模是用相應(yīng)的軟件導(dǎo)出的,根據(jù)液晶顯示屏的要求對(duì)時(shí)鐘進(jìn)行調(diào)整。</p><p><b> 4.2.1實(shí)現(xiàn)功能</b></p><p> 通過(guò)1602顯示電子時(shí)鐘</p><p>
74、4.2.2 函數(shù)設(shè)計(jì)</p><p> 1:void rd_bf(void)</p><p><b> (1)功能</b></p><p><b> 檢測(cè)LCD是否忙碌</b></p><p><b> ?。?)依據(jù)</b></p><p> 通
75、過(guò)判斷HD47780內(nèi)部是否處于空閑狀態(tài)等待單片機(jī)進(jìn)行讀寫操作</p><p> 2:void wr_dictate(uchar dictate)</p><p><b> 功能</b></p><p> 寫指令函數(shù),dictate 是要寫入的指令</p><p><b> 依據(jù)</b>&l
76、t;/p><p> 通過(guò)判斷LCD是否忙碌,是讀/寫指令</p><p> 3:void wr_data(uchar dat)</p><p><b> ?。?)功能</b></p><p><b> 寫入數(shù)據(jù)</b></p><p><b> (2)依據(jù)<
77、;/b></p><p> 通過(guò)判斷狀態(tài)位rd_bf(),是指令還是數(shù)據(jù)寄存器</p><p> 4:void init_lcd(void)</p><p><b> ?。?)功能</b></p><p><b> 初始化lcd</b></p><p><b
78、> (2)依據(jù)</b></p><p> 通過(guò)寫wr_dictate(0x38)來(lái)完成文本顯示區(qū)首地址,寫單參數(shù)函數(shù)實(shí)現(xiàn)光標(biāo)形狀,和顯示方式設(shè)置。</p><p><b> ?。?)流程圖</b></p><p><b> 4.2.3 小結(jié)</b></p><p> 通過(guò)L
79、CD想顯示,LCD是很有用的,要牢牢掌握才行。</p><p> 4.3 按鍵函數(shù)模塊</p><p> 按鍵實(shí)現(xiàn)通過(guò)中斷來(lái)進(jìn)行調(diào)整,鍵盤中斷(INT1)T1_INT,定時(shí)器1每秒刷新LCD顯示T0_INT。中斷時(shí),系統(tǒng)會(huì)調(diào)用一段特定的函數(shù),即我們?cè)O(shè)置的中斷函數(shù),一般稱為中斷服務(wù)函數(shù),一般的函數(shù)的調(diào)用在程序中是固定的,二中斷服務(wù)函數(shù)的執(zhí)行完全是隨機(jī)的。</p><p
80、> 4.3.1 實(shí)現(xiàn)功能</p><p><b> 通過(guò)按鍵調(diào)整</b></p><p> 4.3.2 函數(shù)設(shè)計(jì)</p><p> 鍵盤中斷(INT1)</p><p><b> 4.3.3 小結(jié)</b></p><p> 通過(guò)對(duì)電子時(shí)鐘調(diào)整函數(shù)的編寫,是我
81、認(rèn)識(shí)到,不管做什么,都要有明確的思路,對(duì)于本函數(shù)來(lái)說(shuō),大部分的內(nèi)容都是相同的不同的只是標(biāo)志位的賦值不同唯一,此時(shí)變成人員就要有高度清晰的思路,只要有一個(gè)賦值不對(duì),整個(gè)函數(shù)都會(huì)受到影響,而且這種錯(cuò)誤是非常不易檢查的,同樣在作別的編程的時(shí)候也是一樣,只有有了高度清晰的思路,我們?cè)谧兂蛇^(guò)程中才不會(huì)被絆倒。</p><p><b> 4.4 主函數(shù)模塊</b></p><p&g
82、t; 通過(guò)初始化,對(duì)各個(gè)端口進(jìn)行設(shè)置初值,如按鍵輸入端口PD,數(shù)據(jù)輸入輸出端口,控制端口等。對(duì)1302的初始化,lcd的初始化等完成主控制器的應(yīng)用。</p><p><b> 第五章 心得體會(huì)</b></p><p> 單片機(jī)的學(xué)習(xí)已即將結(jié)束,我對(duì)自己的專業(yè)有了更深的體會(huì)。非常感謝老師們的辛勤教導(dǎo),以企業(yè)的要求對(duì)我們進(jìn)行培訓(xùn),開拓我們的思維,改變我們的思維方式,
83、讓我們自主發(fā)揮,讓我們?cè)谝院蠊ぷ髦猩僮吆芏鄰澛?并在此過(guò)程中讓我們自己找到了自身的種種缺點(diǎn),讓我們受益非淺。也許現(xiàn)階段的學(xué)習(xí)還存在諸多不足,在以后的工作中,會(huì)勤于總結(jié),認(rèn)真學(xué)好自己的一切課程。</p><p><b> 第六章 致謝</b></p><p> 感謝吳老師的批閱和幫助,希望能達(dá)到你的要求,在你的幫助下我們的論文會(huì)愈來(lái)愈好的。</p>&
84、lt;p><b> 附錄 1元器件表</b></p><p><b> 附錄2 仿真圖</b></p><p> 注:代碼暫時(shí)還不能與protuse連接,</p><p><b> 附錄3 源碼</b></p><p><b> /*</b>
85、;</p><p> * dianzizhong.c</p><p><b> *</b></p><p> * Created: 2013-3-15 9:21:25</p><p> * Author: Administrator</p><p><b> */ </
86、b></p><p> #include <avr/io.h>//單片機(jī)寄存器的頭文件</p><p> #include <avr/pgmspace.h></p><p> #include <util/delay.h></p><p> #include <avr/interrupt
87、.h></p><p> //a為要操作的寄存器,b為要操作的位數(shù)</p><p> #define SET_1(a,b) a|=(1<<b)</p><p> #define CLE_0(a,b) a&=~(1<<b)</p><p> #define dataport PORTB</p&
88、gt;<p> #define NOP()asm("nop")</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define RS_SET_1 SET_1(PORTC,PC0)</p><
89、p> #define RS_CLE_0 CLE_0(PORTC,PC0)</p><p> #define RW_SET_1 SET_1(PORTC,PC1)</p><p> #define RW_CLE_0 CLE_0(PORTC,PC1)</p><p> #define E_SET_1 SET_1(PORTC,PC2)</p>&
90、lt;p> #define E_CLE_0 CLE_0(PORTC,PC2)</p><p> #define SCLK_SET_1 SET_1(PORTD,PD4)</p><p> #define SCLK_CLE_0 CLE_0(PORTD,PD4) </p><p> #define DIO_SET_1 SET_1(PORTD,PD5)<
91、;/p><p> #define DIO_CLE_0 CLE_0(PORTD,PD5) </p><p> #define RST_SET_1 SET_1(PORTD,PD6)</p><p> #define RST_CLE_0 CLE_0(PORTD,PD6) </p><p> #define LED_bicker PORTD^
92、=(1<<PD3)</p><p> #define WRITE_SECOND 0x80 //秒</p><p> #define READ_SECOND 0x81 </p><p> #define WRITE_MINUTE 0x82 //分</p><p> #define
93、READ_MINUTE 0x83 </p><p> #define WRITE_HOUR 0x84 //時(shí)</p><p> #define READ_HOUR 0x85 </p><p> #define WRITE_DAY 0x86 //日</p><p>
94、 #define READ_DAY 0x87 </p><p> #define WRITE_MONTH 0x88 //月</p><p> #define READ_MONTH0x89</p><p> #define WRITE_YEAR0x8c</p><p> #define
95、 READ_YEAR0x8d //年</p><p> #define WRITE_PROTECT0X8E</p><p> #define T1_CLOSE CLE_0(TCCR1B,CS11)</p><p> #define T1_OPEN SET_1(TCCR1B,CS11)</p><p> #define T1_
96、INIT_CLOSE CLE_0(TIMSK,TOIE1)</p><p> #define T1_INIT_OPEN SET_1(TIMSK,TOIE1)</p><p> uchar time[6];//存放年月日時(shí)分秒</p><p> volatile uchar lcd_show[10];</p><p> volatile
97、 uchar count =10;</p><p> volatile uchar place = 0x80,value;</p><p> uchar number[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};</p><p> //檢測(cè)LCD是否忙碌</p><p>
98、; void rd_bf(void)</p><p><b> {</b></p><p> dataport = 0xff;//數(shù)據(jù)端口選高電平</p><p> RS_CLE_0;//指令寄存器</p><p> RW_SET_1;//讀操作</p><p> E_SET_1;//
99、E為高電平</p><p> DDRB = 0x00;//設(shè)置為輸入,準(zhǔn)備讀端口數(shù)據(jù)</p><p> NOP();//適當(dāng)?shù)难訒r(shí)</p><p><b> NOP();</b></p><p> while(PINB&0x80);//判斷數(shù)據(jù)端口的D7是否為1,假如為1則等待</p>&l
100、t;p> E_CLE_0;//讀取數(shù)據(jù)完成</p><p> DDRB = 0xff;</p><p><b> }</b></p><p> //寫指令函數(shù),dictate 為要寫入的指令</p><p> void wr_dictate(uchar dictate)</p><p&
101、gt;<b> {</b></p><p> rd_bf();//每次寫數(shù)據(jù)之前,檢測(cè)LCD是否忙碌</p><p> RW_CLE_0;//寫操作</p><p> RS_CLE_0;//選擇指令寄存器</p><p> E_SET_1;//E為高電平</p><p> NOP();
102、//為等待點(diǎn)評(píng)穩(wěn)定</p><p><b> NOP();</b></p><p> dataport = dictate;//把指令寫入液晶顯示器</p><p> E_CLE_0;//當(dāng)E由高電平變?yōu)榈碗娖綍r(shí)指令被寫入寄存器</p><p><b> }</b></p>&
103、lt;p> //寫數(shù)據(jù)函數(shù),dat 為要寫入的數(shù)據(jù)</p><p> void wr_data(uchar dat)</p><p><b> {</b></p><p><b> rd_bf();</b></p><p><b> RW_CLE_0;</b>&
104、lt;/p><p> RS_SET_1;//選擇數(shù)據(jù)寄存器</p><p><b> E_SET_1;</b></p><p><b> NOP();</b></p><p><b> NOP();</b></p><p> dataport =
105、dat;//寫入液晶顯示器</p><p><b> E_CLE_0;</b></p><p><b> }</b></p><p> //初始化LCD函數(shù)</p><p> void init_lcd(void)</p><p><b> {</b
106、></p><p> wr_dictate(0x38);//設(shè)置數(shù)據(jù)總線為8位,字符字體為5*7,顯示兩行</p><p> wr_dictate(0x01);//清屏;</p><p> wr_dictate(0x0c);//開顯示</p><p> wr_dictate(0x06);//字符進(jìn)入模式,屏幕不動(dòng),字符后移<
107、;/p><p><b> }</b></p><p> void display_lcd(uchar address,uchar ch_data)</p><p><b> {</b></p><p> wr_dictate(address);//寫地址</p><p>
108、 wr_data(ch_data);//寫數(shù)據(jù)</p><p><b> }</b></p><p> //向DS1302寫入一個(gè)字節(jié)</p><p> void DS1302writeByte(uchar _data) </p><p><b> { </b></p>&
109、lt;p> uchar i; </p><p> for(i=8; i>0; i--) </p><p><b> { </b></p><p> if(_data&0x01) </p><p><b> { </b></p>&l
110、t;p> DIO_SET_1;</p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> DIO_CLE_0; </p><p>&
111、lt;b> } </b></p><p> SCLK_SET_1;//時(shí)鐘信號(hào) </p><p> _delay_us(2);</p><p> SCLK_CLE_0; </p><p> _data>>=1;//移位,準(zhǔn)備好下次要寫的數(shù)據(jù)</p><p><b>
112、 } </b></p><p><b> } </b></p><p> //向DS1302讀取一個(gè)字節(jié)</p><p> uchar DS1302OreadByte(void)</p><p><b> { </b></p><p> uchar
113、i; </p><p> uchar d_data=0; </p><p> CLE_0(DDRD,PD5); </p><p> for(i=8; i>0; i--) </p><p><b> { </b></p><p> d_data>>=1
114、;//移位,以便下次存放讀出的數(shù)據(jù) </p><p> if(PIND&0X20) </p><p> d_data|=0x80; </p><p> SCLK_SET_1; </p><p> _delay_us(2); </p><p> SCLK_CLE_0
115、; </p><p><b> } </b></p><p> SET_1(DDRD,PD5); </p><p> return (d_data);//返回讀到的數(shù)據(jù)</p><p><b> } </b></p><p> /*寫ds1302寄存器*
116、/</p><p> void Write1302(uchar ucAddr,uchar ucDa)</p><p><b> {</b></p><p> RST_CLE_0;</p><p> SCLK_CLE_0;</p><p> RST_SET_1;</p>&l
117、t;p> DS1302writeByte(ucAddr);//地址</p><p> DS1302writeByte(ucDa);//寫1byte數(shù)據(jù)</p><p> SCLK_SET_1;</p><p> RST_CLE_0;</p><p><b> }</b></p><p&
118、gt; /*讀ds1302 的寄存器*/</p><p> uchar Read1302(uchar ucAddr)</p><p><b> {</b></p><p> uchar ucData;</p><p> RST_CLE_0;</p><p> SCLK_CLE_0;&l
119、t;/p><p> RST_SET_1;</p><p> DS1302writeByte(ucAddr|0X01);//地址,命令</p><p> ucData = DS1302OreadByte();</p><p> SCLK_SET_1;</p><p> RST_CLE_0;</p>&
120、lt;p> return (ucData);</p><p><b> }</b></p><p> void get_time(uchar *time)</p><p><b> {</b></p><p> *(time+5) = Read1302(READ_SECOND);&l
121、t;/p><p> *(time+4) = Read1302(READ_MINUTE);</p><p> *(time+3) = Read1302(READ_HOUR);</p><p> *(time+2) = Read1302(READ_DAY);</p><p> *(time+1) = Read1302(READ_MONTH);
122、</p><p> *(time+0) = Read1302(READ_YEAR);</p><p><b> }</b></p><p> /*void Initial(void)</p><p><b> {</b></p><p> Write1302(WRI
123、TE_PROTECT,0x00);</p><p> Write1302(WRITE_SECOND,0x45);</p><p> Write1302(WRITE_MINUTE,0x24);</p><p> Write1302(WRITE_HOUR,0x09);</p><p> Write1302(WRITE_DAY,0x13);
124、</p><p> Write1302(WRITE_MONTH,0x04);</p><p> Write1302(WRITE_PROTECT,0x80);</p><p><b> }</b></p><p> void adopt_data(uchar n,uchar *show_data)</p>
125、;<p><b> {</b></p><p> *show_data = n>>4;</p><p> *(show_data +1) = n & 0x0f;</p><p><b> }*/</b></p><p> void T1_int(void)
126、</p><p><b> {</b></p><p> TCCR1B = 0x00;//控制寄存器,停止定時(shí)</p><p> TIMSK |= 0x04;//中斷屏蔽寄存器,中斷允許</p><p> TCNT1 = 0xcf2c;//100ms溢出一次</p><p> TCCR1
127、B = 0x02;</p><p> sei();//使能全局中斷</p><p><b> }</b></p><p> void init_1302(void)</p><p><b> {</b></p><p> Write1302(WRITE_PROTEC
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)專業(yè)??飘厴I(yè)論文--單片機(jī)數(shù)字電子鐘的設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文(設(shè)計(jì))
- 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文
- 有關(guān)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文規(guī)范
- 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 電大計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 畢業(yè)論文計(jì)算機(jī)科學(xué)與技術(shù)
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文
- 電大計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論