多功能數(shù)字鐘方案設(shè)計書_第1頁
多功能數(shù)字鐘方案設(shè)計書_第2頁
多功能數(shù)字鐘方案設(shè)計書_第3頁
多功能數(shù)字鐘方案設(shè)計書_第4頁
多功能數(shù)字鐘方案設(shè)計書_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于 51 單片機(jī)的多功能數(shù)字鐘課程設(shè)計學(xué)校:開封大學(xué)院部:機(jī)電工程學(xué)院指導(dǎo)老師 :李斐班級:09應(yīng)電 1 班學(xué)號:姓名:2012年 2月 18日摘要隨著時代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到生活、工作、科研等各個領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù)。本文將介紹一種基于單片機(jī)控制的數(shù)字鐘和數(shù)字溫度計;本數(shù)字鐘可以同步顯示時間日歷,日期和時間都可通過按鍵校整。本系統(tǒng)采用的DS1302 可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。本系統(tǒng)顯示部分采用LCD 液晶顯示屏顯示,可通過按鍵切換工作界面,工作方便,外形美觀。關(guān)鍵詞:單片機(jī)AT89C52RC;時間同步;DS1302; DS18B2

2、01 設(shè)計背景隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它給人帶來的方便是不可否定的,其中數(shù)字鐘和數(shù)字溫度計就是一個典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活提供更好的更方便的設(shè)施就需要從單片機(jī)技術(shù)入手,一切向著數(shù)字化、智能化控制的方向發(fā)展。本文所介紹的數(shù)字鐘采用了低功耗實時時鐘電路DS1302 ,它可以對年、月、日、周、時、分、秒進(jìn)行計時,且具有閏年補(bǔ)償?shù)榷喾N功能。同時可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能;本文所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準(zhǔn)確度高,其輸出溫度采用數(shù)字顯示,主要適用于對測溫

3、要求比較準(zhǔn)確的場所或科研實驗室。本系統(tǒng)選用低功耗、高性能CMOS 8 位微控制器AT89C52 作為控制核心,采用溫度傳感器DS18B20 準(zhǔn)確測量溫度,采用液晶顯示屏LCD1602 顯示實時溫度和同步的時間日歷。經(jīng)過反復(fù)測試,本系統(tǒng)能準(zhǔn)確完成各項功能。2 方案論證2.1 系統(tǒng)總體設(shè)計方案論證2.1.1 方案一采用熱敏電阻的感溫效應(yīng)測量溫度,采用LED 數(shù)碼管顯示實時溫度和同步的時間日歷。本系統(tǒng)的測溫電路可使用熱敏電阻之類的器件利用其感溫效應(yīng),將隨被測溫度變化的電壓值或電流值進(jìn)行采集,經(jīng)過A/D 轉(zhuǎn)換后用單片機(jī)進(jìn)行數(shù)據(jù)處理,然后用LED 數(shù)碼管將被測溫度顯示出來。這種設(shè)計方案需要用到A/D 轉(zhuǎn)

4、換電路,其感溫電路比較繁雜,采用LED 數(shù)碼管顯示時間日歷至少需要8位數(shù)碼管,顯示電路繁雜,能量損耗大。2.1.2 方案二采用溫度傳感器 DS18B20測量溫度,采用LCD液晶顯示屏顯示實時溫度 和同步的時間日歷。本系統(tǒng)可考慮選用一只溫度傳感器DS18B20, DS18B20不僅可以很容易直接讀取被測溫度值進(jìn)行顯示,而且溫度傳感器DS18B20具有獨(dú)特的一線接口,只需要一條口線就可多點(diǎn)通信,無需外部元件,簡化了分布 式溫度傳感應(yīng)用。本系統(tǒng)采用液晶顯示屏LCD1602顯示實時溫度和同步的時問日歷,電路簡單,功耗低,顯示信息量大,顯示質(zhì)量高,顯示界面美觀、友 好,可以很好的滿足設(shè)計要求。綜上所述,

5、方案一的感溫電路和顯示電路設(shè)計繁雜,能量損耗大;方案二 的設(shè)計電路簡單,顯示界面美觀、友好,并且軟件設(shè)計也比較簡單,所以本系 統(tǒng)選用方案二實現(xiàn)實時溫度和同步的時間日歷的顯示功能。本系統(tǒng)控制器采用單片機(jī) AT89C52,溫度傳感器采用 DS18B20,采用 DS1302實現(xiàn)掉電充電功能,用液晶顯示屏 LCD1602顯示實時溫度和同步的 時間日歷。2.2 系統(tǒng)結(jié)構(gòu):2.2.1 主控制器單片機(jī)AT89C52具有低電壓供電和體積小等特點(diǎn),四個端口只需要兩個口 就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用,系統(tǒng)可用 二節(jié)電池供電。2.2.2 顯示電路顯示電路采用液晶顯示屏 LCD1602進(jìn)

6、行顯示,單片機(jī)從 P0 口傳輸溫度和 時間數(shù)據(jù)驅(qū)動LCD1602進(jìn)行顯示。LCD1602的接口定義如表1所示。表1 LCD1602的接口定義弓1腳號標(biāo)識說明PIN1GND接0VPIN2VCC接 4.8V-5VPIN3V0對地接電阻470-2KPIN4RSRS-0,指令寄存器;RS-1,數(shù)據(jù)寄存器PIN5R/WR/W=0 ,寫;R/W=1 ,讀PIN6E允許信號PIN7D0數(shù)據(jù)0PIN8D1數(shù)據(jù)1PIN9D2數(shù)據(jù)2PIN10D3數(shù)據(jù)3PIN11D4數(shù)據(jù)4PIN12D5數(shù)據(jù)5PIN13D6數(shù)據(jù)6PIN14D7數(shù)據(jù)7PIN15LED+背光正極,接 4.8V - 5VPIN16LED-背光負(fù)極,接0V

7、材料:字符液晶LCD1602顯示字符的過程:使用1602型液晶顯示字符必須解決三個問題:代縣字符ASCII標(biāo)準(zhǔn)媽的產(chǎn)生;液晶顯示模式的設(shè)置;字符顯示位置的指定。1)字符ASCII標(biāo)準(zhǔn)碼產(chǎn)生常用字符的標(biāo)準(zhǔn) ASCII碼無需人工產(chǎn)生,在程序中定義字符常量或字符串常量時,C語言在編譯后會自動產(chǎn)生其標(biāo)準(zhǔn)ASCII碼。職演講澄澄的標(biāo)準(zhǔn)ASCII碼通過單片機(jī)的IO口送入數(shù)據(jù)線使用存儲器(DDRAM ),內(nèi)部控制線路就會自動將字符傳送到顯示器上。2)液晶顯示模式的設(shè)置要讓液晶顯示字符,必須對有無光標(biāo)、光標(biāo)的移動方向、光標(biāo)是否閃爍及字符的移動方向等進(jìn)行設(shè)置。這樣才能獲得所需的顯示效果。1602液晶顯示模式的設(shè)

8、置是通過控制指令對內(nèi)部的控制器進(jìn)行控制而實現(xiàn)的。常用的控制指令需要查詢液晶的數(shù)據(jù)手冊獲 得。3)字符顯示位置的指定想要在液晶的某一位置顯示特定的字符,則必須指定其顯示位置,顯示位置的地址需要查詢1602型LCD內(nèi)部地址獲得。2、1602型LCD的讀寫操作LCD是一個慢速顯示器件,所以在寫每一條指令之前一定要先讀取LCD的忙碌狀態(tài)(當(dāng)然也可以通過加入一個比較長的延時時間來避開液晶的忙狀態(tài),但是這種方法并不合理)。如果 LCD正忙于處理其他指令,就需要等待處理結(jié)束;如果不忙,再執(zhí)行寫操作。為此,1602型液晶專門設(shè)了一個忙碌標(biāo)志位BF,該位位于從1602讀取的8位數(shù)據(jù)的最高位,如果BF為0,表示L

9、CD處于空閑狀態(tài),反之則處于忙碌狀態(tài)。3、1602液晶顯示一個字符的操作過程為:讀狀態(tài) -寫指令-寫數(shù)據(jù)-自動顯示。1)讀狀態(tài)要將待顯字符寫入液晶模塊,首先就要檢測LCD是否忙碌,只有在 LCD處于空閑狀態(tài)的時候,才能夠?qū)⒋@字符寫入2)寫指令寫指令包括寫顯示模式控制指令和寫入地址。3)寫數(shù)據(jù)寫數(shù)據(jù)實際上是將待顯字符的標(biāo)準(zhǔn)4)自動顯示數(shù)據(jù)寫入液晶模塊后,字符產(chǎn)生器( 字符顯示在液晶屏上,這個過程由4、1602液晶的初始化過程ASCII碼寫入LCD的數(shù)據(jù)顯示存儲器(DDRAM )CGROM )將自動讀出字符的字形點(diǎn)陣數(shù)據(jù),并將 LCD自動完成,無需人工干預(yù)使用1602液晶顯示字符之前,需要對其顯

10、示模式進(jìn)行初始化設(shè)置,過程如此下:1)延時15ms,給液晶一段反應(yīng)時間2)寫指令0x38H ,尚未開始工作,所以這里不需要檢測忙信號,將液晶的顯示模式設(shè) 置為“16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 ”3)延時5ms4)寫指令,不需要檢測忙信號5)延時5ms6)寫指令,不需要檢測忙信號7)延時5ms (連續(xù)設(shè)置 3次,確保設(shè)置成功)8)以后每次寫指令,讀 /寫數(shù)據(jù)操作都要檢測忙信號2.2.3 DS1302H寸鐘芯片丫82匚 xi匚 X2C GND匚331、DS1302弓|腳排列:如下圖Vcci SCLK I/O RST圖1 DS1302弓|腳排歹U引腳說明:1) Vcc1:后備電源,VCC2:

11、主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn) 行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng) Vcc2大于Vcc1 + 0.2V時,Vcc2給 DS1302供電。當(dāng) Vcc2小于Vcc1時,DS1302由Vcc1供電。2) X1、X2 :振蕩源,外接 32.768kHz 晶振。3) RST:復(fù)位/片選線,通過把 RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址 /命令序列送入移位寄存器;其次, RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中

12、RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時,在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將 RST置為高電平。4) I/O為串行數(shù)據(jù)輸入輸出端(雙向)。5) SCLK為時鐘輸入端。2、 DS1302的控制字節(jié)DS1302的控制字如下圖所示。RAMjrA43A3,心ALAO.'ram) /以表2 DS1302的控制字節(jié)控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入 DS1302 中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù)。位5至位1指示操作單元的地址。最低有效位 (位0)如為

13、0表示要進(jìn)行寫操作,為 1表示進(jìn)行讀操作,控制 字節(jié)總是從最低位開始輸出。3、數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟 8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位 0位到高位7。DS1302的寄存器DS1302有12個寄存器,其中有 7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見數(shù)據(jù)手冊。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充

14、電寄存器外的所有寄存器內(nèi) 容。DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的 RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為 FEH(寫)、FFH(讀)。2.24DS18B20溫度傳感器1、I2C總線器件與單片機(jī)之間的通信需要兩根線,而單總線器件與單片機(jī)間的數(shù)據(jù)通信只 要一根線。單總線適用于單主機(jī)系統(tǒng),能夠控制一個或多個從機(jī)設(shè)備。主機(jī)通常是單片機(jī),從機(jī)可以 是單總線器件,他們之間通過一條信號線進(jìn)行數(shù)據(jù)交換,單總線上同樣允許掛接多個單

15、總線器件,因此,每隔單總線器件必須有各自固定的地址,但總線器件通常需要接一個4.7k左右的上拉電阻,這樣,當(dāng)總線空閑時,狀態(tài)為高電平。2、單總線器件的數(shù)據(jù)操作過程1)初始化單總線上的所有處理均從初始化開始,單片機(jī)先發(fā)送一個復(fù)位脈沖,當(dāng)單總線其間接收到 復(fù)位脈沖后,先單片機(jī)發(fā)出應(yīng)答信號,以便通知單片機(jī):該器件已經(jīng)準(zhǔn)備好等待下一步操 作2)識別單總線器件總線上允許掛接多個但總線器件,為便于單片機(jī)識別,每個單總線器件在出廠前都分配好 了 64為序列號以作為地址序列碼。所以單片機(jī)能夠根據(jù)該序列號來識別和判斷對那一個單 總線器件進(jìn)行操作3)數(shù)據(jù)交換單片機(jī)與單總線器件之間的數(shù)據(jù)交換必須遵循嚴(yán)格的通信協(xié)議。

16、單總線協(xié)議定義了復(fù)位信號,應(yīng)答彳t號,寫/讀0,寫/讀1的集中信號類型,所有的單總線命令都是由這些基本的信號類型組成的,除了應(yīng)答信號外,其余信號都由單片機(jī)發(fā)出,并且發(fā)送的所有命令和數(shù)據(jù) 都是低位在前,高位在后。當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。單片機(jī)通過單線接口 讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在前,高位在后,數(shù)據(jù)格式以0.0625C/LSB形式表示。當(dāng)符號位S=0時,表示測得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換 為十進(jìn)制;當(dāng)符號位S=1時,表示測得的溫度值為負(fù)值,要先將補(bǔ)碼變成原 碼,再計算十進(jìn)制數(shù)值。表2是一部分溫度值對應(yīng)的二進(jìn)制溫度數(shù)據(jù)。表3 一部分溫度對應(yīng)值表一進(jìn)制表小十八

17、進(jìn)制表小+ 1250000 0111 1101 000007D0H+850000 0101 0101 00000550H溫度/C0000 0001 1001 00000191H+ 10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H3、DS18B20

18、的工作時序1)初始化單片機(jī)將數(shù)據(jù)線拉低480-960US后釋放,等待15-60US,單總線器件即可輸出一個持續(xù)時間為60-240us的低電平(應(yīng)答信號),單片機(jī)受到此應(yīng)答后即可進(jìn)行后續(xù)操作單繳總線線型含義:DSF82。低電平 電阻上拄息緩校制器低電平一總線校制翳和DW182口同 為俄電平圖2 DS18B20的初始化時序2)寫時序當(dāng)主機(jī)將數(shù)據(jù)線的電平從高拉到低時,形成寫時序,有寫 0和寫1兩種時序。寫時序開始 后,DS18B20在15-60US期間從數(shù)據(jù)線上采樣,如果采樣到低電平,則向 DS18B20寫0, 否則寫1,兩個獨(dú)立的時序之間至少需要1us的回復(fù)時間按(拉高總線電平) 3)讀時序當(dāng)主機(jī)

19、從DS18B20讀取數(shù)據(jù)時,產(chǎn)生讀時序,此時,主機(jī)將數(shù)據(jù)線的電平從高拉到低使讀時序被初始化。如果此后 15us內(nèi),主機(jī)在總線上采樣到低電平,則從 DS18B20讀0,否則讀13系統(tǒng)主電路圖LCD1LM016L士TEXT>QJ J LU S凸山0二00寸號通卜二.王aH Ut UJ/kL二寸M-'£O LL寸 L/R7-1U 1L以TAUPO.OXADO P0.1/AD1 P0.2/A£>2 PQ .3/AD©3©i23S-卜?RA37d4IISKT*kWI64.7kPQ.5/1KP0.6/AD6F0.7/AD736u34733e1gD

20、SI321g/I TL<TEXT>P2.o/eeF2.1 碼P2.2;A1OP2.3/ZV11P2.4/A12P2.57A13P2.6/A14P2.7/A-1521RESFACK22UJ:TEjjj>2331cc (PSENAl C.24一2VDr32£)3C25Lk131EA26卡HE LJ27DS18B3D2SL .匕*招T>*-aL1B # ftP3 0/RXD P3.1/TXD P3.2/IHK P3NTT q rm10l-l-lR1R2Q:jeVCC1VCC2X1274r2r i .w i /P1.1/TZEXB 4 H11inikMl131210k

21、e UF-W-.;rP12 F" Pi; PK F1.713IKEXTF 1XiF5114i5BE、r dveFr q.f iu P3.5/T1P3.6/WRP3.7/RD15.7nQ iSCLKih.L106X23FJ-J:r1701302sacazEX.T>L HjT _圖3系統(tǒng)主電路圖4源程序:#include<reg51.h>/包含單片機(jī)寄存器的頭文件#include<intrins.h> /包含_nop_()函數(shù)定義的頭文件/DS1302相關(guān)的變量和引腳定義unsigned char code digit10="0123456789&

22、quot;。 定義字符數(shù)組顯示數(shù)字unsigned char xuanxiang=0。 時間調(diào)節(jié)的選項unsigned char second,minute,hour,day,month,year,week。分另U儲存苗、分、小時,日,月,年unsigned char code week_a7="SMTWTFS"。 星期顯示的首字母unsigned char code week_b7="UOUEHRA"。 星期顯示的次字母bit F =0。/檢測DS18B20溫度傳感器存在的標(biāo)志sbit DATA=P3A6。位定義1302芯片的接口,數(shù)據(jù)輸出端定義在P3

23、.6弓唧sbit RST=P3A4。位定義1302芯片的接口,復(fù)位端口定義在P3.4引腳sbit SCLK=P3A5。 位定義1302芯片的接口,時鐘輸出端口定義在 P3.5引腳液晶引腳定義sbit RS=P2A0。sbit RW=P2A1。sbit E=P2A2。sbit BF=P0A7 。/按鍵引腳定義sbit MENU =P1A0 。/寄存器選擇位,將RS 位定義為P2.0 引腳/讀寫選擇位,將 RW位定義為P2.1引腳/使能信號位,將E 位定義為P2.2 引腳/忙碌標(biāo)志位,將BF 位定義為P0.7 引腳sbit ADD =P1A2 。sbit REDUCE=P1A3 。/時鐘調(diào)節(jié)菜單鍵

24、/時鐘調(diào)節(jié)+1/時鐘調(diào)節(jié)-1/*函數(shù)功能:延時若干微秒入口參數(shù):n */ void delaynus(unsigned char n)unsigned char i 。for(i=0 。 i<n 。 i+) 。/*函數(shù)功能:向1302 寫一個字節(jié)數(shù)據(jù)入口參數(shù):x */ void Write1302(unsigned char dat)unsigned char i。SCLK=0 。delaynus(2)。/拉低SCLK ,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備/稍微等待,使硬件做好準(zhǔn)備for(i=0 。 i<8。 i+)/連續(xù)寫 8個二進(jìn)制位數(shù)據(jù)DATA=dat&0x01 。取出da

25、t的第0位數(shù)據(jù)寫入1302delaynus(2)。SCLK=1 。 delaynus(2)。SCLK=0 。dat>>=1 。/稍微等待,使硬件做好準(zhǔn)備/上升沿寫入數(shù)據(jù)/稍微等待,使硬件做好準(zhǔn)備/重新拉低SCLK ,形成脈沖將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個數(shù)據(jù)位/*函數(shù)功能:根據(jù)命令字,向1302 寫一個字節(jié)數(shù)據(jù)入口參數(shù):Cmd,儲存命令字;dat,儲存待寫的數(shù)據(jù)*/ void WriteSet1302(unsigned char Cmd,unsigned char dat) RST=0。/禁止數(shù)據(jù)傳遞SCLK=0 。/確保寫數(shù)居前SCLK 被拉低RST=1 。/啟動數(shù)據(jù)

26、傳輸delaynus(2)。/稍微等待,使硬件做好準(zhǔn)備Write1302(Cmd) 。/寫入命令字Write1302(dat) 。/寫數(shù)據(jù)SCLK=1 。/將時鐘電平置于已知狀態(tài)RST=0。/禁止數(shù)據(jù)傳遞 /*函數(shù)功能:從1302 讀一個字節(jié)數(shù)據(jù)入口參數(shù):x */unsigned char Read1302(void)unsigned char i,dat。delaynus(2)。/稍微等待,使硬件做好準(zhǔn)備for(i=0 。 i<8。 i+) /連續(xù)讀 8個二進(jìn)制位數(shù)據(jù)dat>>=1。 將dat的各數(shù)據(jù)位右移1位,因為先讀出的是字節(jié)的最低位if(DA TA=1) / 如果讀出

27、的數(shù)據(jù)是1dat|=0x80。/將1取出,寫在 dat的最高位SCLK=1 。/將SCLK 置于高電平,為下降沿讀出delaynus(2)。/稍微等待SCLK=0 。/拉低SCLK ,形成脈沖下降沿delaynus(2)。/稍微等待return dat。/將讀出的數(shù)據(jù)返回 /*函數(shù)功能:根據(jù)命令字,從1302 讀取一個字節(jié)數(shù)據(jù)入口參數(shù):Cmd */unsigned char ReadSet1302(unsigned char Cmd) unsigned char dat。RST=0。SCLK=0 。RST=1 。Write1302(Cmd) 。dat=Read1302()。SCLK=1 。RS

28、T=0。/ 拉低 RST/確保寫數(shù)居前SCLK 被拉低/ 啟動數(shù)據(jù)傳輸/寫入命令字/讀出數(shù)據(jù)/將時鐘電平置于已知狀態(tài)/禁止數(shù)據(jù)傳遞return dat。/將讀出的數(shù)據(jù)返回/*函數(shù)功能:1302 進(jìn)行初始化設(shè)置*/ void Init_DS1302(void)/根據(jù)寫狀態(tài)寄存器命令字,寫入不保護(hù)指令WriteSet1302(0x8E,0x00) 。/根據(jù)寫秒寄存器命令字,寫入秒的初始值/根據(jù)寫分寄存器命令字,寫入分的初始值/根據(jù)寫小時寄存器命令字,寫入小時的初始值/根據(jù)寫日寄存器命令字,寫入日的初始值WriteSet1302(0x80,(0/10)<<4|(0%10) 。WriteS

29、et1302(0x82,(0/10)<<4|(0%10) 。WriteSet1302(0x84,(12/10)<<4|(12%10) 。WriteSet1302(0x86,(16/10)<<4|(16%10) 。WriteSet1302(0x88,(2/10)<<4|(2%10) 。 /根據(jù)寫月寄存器命令字,寫入月的初始值WriteSet1302(0x8c,(12/10)<<4|(12%10) 。/根據(jù)寫小時寄存器命令字,寫入小時的初始值/*函數(shù)功能:延時1ms(3j+2)*i=(3 X 33+2) X 10=1010(微秒),可以認(rèn)

30、為是 1 毫秒*/ void delay1ms()unsigned char i,j。for(i=0 。 i<10。 i+)for(j=0 。 j<33。 j+) /*函數(shù)功能:延時若干毫秒入口參數(shù):n */ void delaynms(unsigned char n)unsigned char i。for(i=0 。 i<n 。 i+)delay1ms()。/*函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌。result=0 ,不忙*/bit BusyTest(void) bit result。RS=0o/根據(jù)規(guī)定,RS為低電平,RW為高電平時

31、,可以讀狀態(tài)RW=1 。E=1 。/E=1 ,才允許讀寫_nop_()。/空操作_nop_()。_nop_()。_nop_()。/空操作四個機(jī)器周期,給硬件反應(yīng)時間result=BF 。/將忙碌標(biāo)志電平賦給resultE=0 。/將 E 恢復(fù)低電平return result。/* 函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):dictate*/*void WriteInstruction (unsigned char dictate)while(BusyTest()=1) 。/如果忙就等待RS=0。/根據(jù)規(guī)定,RS 和 R/W 同時為低電平時,可以寫入指令RW=0 。E=0 。/E

32、置低電平(根據(jù)表8-6,寫指令時,E 為高脈沖,/ 就是讓 E 從 0 到 1 發(fā)生正跳變,所以應(yīng)先置"0"_nop_()。_nop_()。/空操作兩個機(jī)器周期,給硬件反應(yīng)時間P0=dictate。 將數(shù)據(jù)送入P0 口,即寫入指令或地址_nop_()。_nop_()。_nop_()。_nop_()。/空操作四個機(jī)器周期,給硬件反應(yīng)時間E=1 。/E 置高電平_nop_()。_nop_()。_nop_()。_nop_()。/空操作四個機(jī)器周期,給硬件反應(yīng)時間E=0。/當(dāng)E 由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令/*函數(shù)功能:指定字符顯示的實際地址入口參數(shù):x */voi

33、d WriteAddress(unsigned char x) WriteInstruction(x|0x80) 。 /顯示位置的確定方法規(guī)定為"80H+ 地址碼 x"/* 函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII 碼 )寫入液晶模塊入口參數(shù):y(為字符常量)*/ void WriteData(unsigned char y) while(BusyTest()=1) 。RS=1 。/RS 為高電平,RW 為低電平時,可以寫入數(shù)據(jù)RW=0。E=0。/E 置低電平(根據(jù)表8-6,寫指令時,E 為高脈沖,P0=y。_nop_()。_nop_()。_nop_()。_nop_()。E=

34、1 。/ 就是讓 E 從 0 到 1 發(fā)生正跳變,所以應(yīng)先置將數(shù)據(jù)送入P0 口,即將數(shù)據(jù)寫入液晶模塊/空操作四個機(jī)器周期,給硬件反應(yīng)時間/E 置高電平"0"_nop_()。_nop_()。_nop_()。/空操作四個機(jī)器周期,給硬件反應(yīng)時間/當(dāng) E 由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令_nop_()。E=0。/*函數(shù)功能:對LCD 的顯示模式進(jìn)行初始化設(shè)置*/void LcdInitiate(void) delaynms(15)。WriteInstruction(0x38)delaynms(5)。WriteInstruction(0x38)延時15ms,首次寫指令時應(yīng)給顯示模式設(shè)置:16X2顯示,/延時5ms ,給硬件一點(diǎn)反應(yīng)時間LCD 一段較長的反應(yīng)時間5X7點(diǎn)陣,8位數(shù)據(jù)接口delaynms(5)。WriteInstructio

溫馨提示

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

最新文檔

評論

0/150

提交評論