計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文-基于avr的可調(diào)電子鐘設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩67頁(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、<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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論