基于單片機和DS1302電子萬學(xué)年歷的設(shè)計_第1頁
基于單片機和DS1302電子萬學(xué)年歷的設(shè)計_第2頁
基于單片機和DS1302電子萬學(xué)年歷的設(shè)計_第3頁
基于單片機和DS1302電子萬學(xué)年歷的設(shè)計_第4頁
基于單片機和DS1302電子萬學(xué)年歷的設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 DS1302實時時鐘 時鐘芯片DS1302的工作原理:DS1302在每次進行讀、寫程序前都必須初始化,先把 SCLK端置“ 0”接著把RST 端置“ 1”最后才給予SCLK脈沖;讀/寫時序如下圖所示。為 DS1302的控制字,此控制 字的位7必須置1,若為0則不能把對DS1302進行讀寫數(shù)據(jù)。對于位6,若對程序進行讀 /寫時RAM=1,對時間進行讀/寫時,CK=0 o位1至位5指操作單元的地址。位0是讀/寫 操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作??刂谱止?jié)總是從最 低位開始輸入/輸出的。表6為DS1302的日歷、時間寄存器內(nèi)容:“CH是時鐘暫停標(biāo)志位, 當(dāng)該位為1時,

2、時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為 0時,時鐘開始運 行?!癢P是寫保護位,在任何的對時鐘和 RAM的寫操作之前,WP必須為0。當(dāng)“WP為 1時,寫保護位防止對任一寄存器的寫操作。DS1302的控制字節(jié)DS1302的控制字如表-1所示??刂谱止?jié)的高有效位(位 7)必須是邏輯1,如果它為 0,貝U不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取 RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位 0)如為0表示要進行寫操 作,為1表示進行讀操作,控制字節(jié)總是從最低位開始輸出(3)數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個 SCLK時鐘的

3、上升沿時,數(shù)據(jù)被寫入 DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個 SCLK脈沖的下降沿讀 出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。如下圖1所示I/OA0A1A2A3A4DOD1D2單字節(jié)演RESTI/O01 D2圖1 DS1302讀/寫時序圖單字節(jié)寫DS1302的寄存器DS1302有12個寄存器,其中有7個寄存器和日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD 碼形式,其日歷、時間寄存器及其控制字見表-2。表-2 DS1302的日歷、時間寄存器寫寄 存器讀寄 存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H

4、83H 10分分84H85H12/24010時時AM /PM86H87H0r 010日日88H89H00010月月8AH8BH00000星期8CH8DH :10年年8EH8FHWP0 00000 0外,DS1302還有年份寄存器、控制寄存此器、充電寄存器、時鐘突發(fā)寄存器及和 RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302和RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個

5、字節(jié),命令控制字為FEH(寫)、FFH(讀)。2方案論證和設(shè)計2.1控制器部分方案設(shè)計硬件控制電路主要用了 AT89C52芯片處理器、1602LCD顯示器、DS1302實時時鐘、DB18B20溫度傳感器。根據(jù)各自芯片的功能互相連接成電子萬年歷的控制電路。軟件控制程序主要有主控程序、電子萬年歷的時間控制程序、時間顯示及溫度顯示程序等組成。設(shè) 計框圖如圖2.1所示1602液晶顯示2.2顯示部分的方案論證方案一:采用8段數(shù)碼管 方案二:液晶顯示方式。所以,最后選擇液晶顯示方案。顯示電路圖如圖2.2所示圖2.2液晶顯示電路2.3實時時鐘電路設(shè)計圖2.3是DS1302和單片機的連接,其中Vcc1為后備電

6、源,Vcc2為主電源。在主電 源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。 DS1302由Vcc1或Vcc2兩者中的較大者供 電。當(dāng) Vcc2 大于 Vcc1+0.2V 時,Vcc2 給 DS1302 供電。當(dāng) Vcc2 小于 Vcc1 時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHZ晶振。U28 O575VCC1VCC2XIRSTSCLKI/OX2DS1302口緞i 3PR.襯腫B.BTPDJ7JibK rUJVAD B網(wǎng)3口 EM電VIEDaL EA超.如2PZ13 PZjtf/il-F3W1IFpinrralay.他&:PJ.WXkj bi u rn13a33FII

7、TI i號 UTif USP3SWPP1TFM町,d,n r , | ,au sf. 小時O -圖2.5鍵盤電路設(shè)計2.6總體電路圖3軟件設(shè)計流程3.1系統(tǒng)總流程圖系統(tǒng)總體流程圖如圖3.1所示,系統(tǒng)流程圖設(shè)計分析如下:首系統(tǒng)初始化,系統(tǒng)運行, 當(dāng)有設(shè)置鍵按下時進入時間修改模式,無按鍵按下時讀取時間溫度等數(shù)據(jù)送入顯示器顯 示。在時間修改模式下設(shè)置時間完成后再將時間送入顯示器顯示。圖3.1系統(tǒng)流程圖3.2溫度程序流程圖溫度讀取程序流程圖如圖3.2所示。流程圖分析:開始進入初始化 DS18B20,就是通 過主機拉低單線產(chǎn)生復(fù)位脈沖然后釋放總線,如果有應(yīng)答就發(fā)起ROM命令,當(dāng)成功執(zhí)行操作命令后,就使用

8、溫度轉(zhuǎn)換,當(dāng)溫度轉(zhuǎn)換完成后又初始化 DS18B20是否有應(yīng)答脈沖,若 有就發(fā)起讀暫存器和CRC命令,同時讀出第一第二字節(jié)即溫度數(shù)據(jù)。開始圖3.2溫度讀取程序流程圖3.3 DS1302時鐘程序流程圖時鐘流程圖如圖3.3所示,流程圖分析:DS1302開始計時時,首先進行初始化,當(dāng)有 中斷信號時,讀取時鐘芯片的時間數(shù)據(jù)送入液晶顯示。這時若有設(shè)置鍵按下,進行時間修 改,完成后將時間數(shù)據(jù)送入1302芯片,若沒有按鍵按下,直接送入EPROM中,送入液晶 顯示。圖3.3時鐘程序流程圖DS1302時鐘部分子程序void write_byte(uchar dat) 寫一個字節(jié)ACC=dat;RST=1;for(

9、a=8;a0;a-)IO=ACC0;SCLK=0; /產(chǎn)生上升沿寫入數(shù)據(jù),從低位寫入SCLK=1;ACC=ACC1;uchar read_byte()/瀆一個字節(jié)RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1; /產(chǎn)生下降沿輸出數(shù)據(jù),先輸出低位,保存到ACC中SCLK=0;ACC=ACC1;return (ACC);void write_1302(uchar add,uchar dat)/向 1302 芯片寫函數(shù),指定寫入地址,數(shù)據(jù)RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar r

10、ead_1302(uchar add)從 1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=O;return(temp);uchar BCD_Decimal(uchar bcd)/BCD碼轉(zhuǎn)十進制函數(shù),輸入 BCD,返回十進制uchar Decimal;Decimal=bcd4;return(Decimal=Decimal*10+(bcd&=OxOF);void ds1302_init() /1302 芯片初始化子函數(shù)(2012-06-18,12:00:00

11、,week7)RST=0;SCLK=0;write_1302(0x8e,0x00); 允許寫,禁止寫保護write_1302(0x80,0x00); /向DS1302內(nèi)寫秒寄存器80H寫入初始秒數(shù)據(jù)00 write_1302(0x82,0x00);向DS1302內(nèi)寫分寄存器82H寫入初始分?jǐn)?shù)據(jù)00 write_1302(0x84,0x12);向DS1302內(nèi)寫小時寄存器84H寫入初始小時數(shù)據(jù)12 write_1302(0x8a,0x07);向DS1302內(nèi)寫周寄存器8aH寫入初始周數(shù)據(jù) 4 write_1302(0x86,0x17);向DS1302內(nèi)寫日期寄存器86H寫入初始日期數(shù)據(jù)18 wr

12、ite_1302(0x88,0x06);向DS1302內(nèi)寫月份寄存器88H寫入初始月份數(shù)據(jù) 06 write_1302(0x8c,0x12);向DS1302內(nèi)寫年份寄存器 8cH寫入初始年份數(shù)據(jù)12 write_1302(0x8e,0x80); 打開寫保護3.4 LCD顯示程序流程圖顯示流程圖如圖3.4所示,流程圖分析如下:首先對1602顯示屏進行初始化(初始化 大約持續(xù)10ms),然后檢查忙信號,若BF=0,則獲得顯示RAM地址,寫入相應(yīng)的數(shù)據(jù)顯 示。若BF=1,則代表模塊正在進行內(nèi)部操作,不接受任何外部指令和數(shù)據(jù),直到BF=0為圖3.4 LCD顯示程序流程圖4萬年歷的仿真和調(diào)試結(jié)果上電后的

13、顯示秒調(diào)節(jié)2012-06-17 SUN12:00: IQ 27BC功能按鍵,自上而下功能依次為調(diào)節(jié)按鍵、加按鍵、減按鍵5心得體會本次設(shè)計是我們遇到過的較大的設(shè)計,所以遇到的問題也比較的多,尤其是以前沒有 接觸過如此復(fù)雜的硬件電路以及軟件編程,在軟、硬件設(shè)計和調(diào)試中遇到了不少的困難, 在同學(xué)的幫助才逐一克服了難題,學(xué)習(xí)到了不少的專業(yè)知識。在整個設(shè)計過程之前,我已經(jīng)在網(wǎng)上找了相關(guān)方面的資料,萬事開始難,一開始不知 道從哪里下手。后來慢慢學(xué)會分析系統(tǒng),將系統(tǒng)模塊化,各個模塊可以在軟件或者硬件上 實現(xiàn)。在確保各個模塊的硬件電路和和之相搭配的程序能夠正常工作后在把它們組成一個 系統(tǒng)。在今后的日子里,我會

14、進一步加強自己的動手能力,豐富自己的知識面。參考文獻1李朝青單片機原理及接口技術(shù)M,北京:北京航天航空大學(xué)出版社,20052李廣弟.單片機基礎(chǔ)M,北京:北京航空航天大學(xué)出版社,20003萬光毅.單片機實驗和實踐教程M,北京:北京航空航天大學(xué)出版社,20034唐亞平、李移倫.單片機原理實訓(xùn)和學(xué)習(xí)指導(dǎo)M,長沙:中南大學(xué)出版社,2006劉軍.單片機原理和接口技術(shù)M,華東理工大學(xué)出版社,20066謝自美.電子線路設(shè)計、實驗、測試M,武漢:華中理工大學(xué)出版社,2000附件萬年歷源程序#in clude#i ncludeDS18B20_3.H#defi ne uint un sig ned int#def

15、i ne uchar un sig ned charuchar a,miao,shi,fe n,ri,yue ,nian, week,flag,key1 n,temp;/flag用于讀取頭文件中的溫度值,和顯示溫度值#define yh 0x80 /LCD 第一行的初始位置,因為LCD1602字符地址首位 D7恒定為1( 100000000=80)#defi ne er 0x80+0x40 /LCD 第二行初始位置(因為第二行第一個字符位置地址是0x40)II液晶屏的和C51之間的引腳連接定義(顯示數(shù)據(jù)線接C51的P0 口)sbit rs=P2A6; /寄存器選擇sbit en=卩2人7; /

16、下降沿使能sbit rw=P2A5; /讀寫信號線/DS1302時鐘芯片和 C51之間的引腳連接定義sbit IO=P3A4; 數(shù)據(jù)線sbit SCLK=P3A6;sbit RST=P3A5;sbit ACC0=ACCA0;sbit ACC7=ACCA7;ACC累加器=AACC.0=E0H/校時按鍵和C51的引腳連接定義sbit key仁卩2人0;/設(shè)置鍵sbit key2=P2A1; / 加鍵sbit key3=P2A2; / 減鍵sbit buzzer=P1A5;蜂鳴器,端口低電平響uchar code tab1=20-; / 年顯示的固定字符uchar code tab2=:;/時間顯示

17、的固定字符/延時函數(shù),后面經(jīng)常調(diào)用void delay(uint xms)延時函數(shù),有參函數(shù)uint x,y;for(x=xms;x0;x-)for(y=120;y0;y-);void write_1602com(uchar com)/* 液晶寫入指令函數(shù) *rs=O;數(shù)據(jù)/指令選擇置為指令rw=0; /讀寫選擇置為寫P0=com;送入數(shù)據(jù)delay(1);en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令void write_1602dat(uchar dat)/* 液晶寫入數(shù)據(jù)函數(shù) *rs=1;/數(shù)據(jù)/指令選擇置為數(shù)據(jù)rw=

18、0; /讀寫選擇置為寫PO=dat;送入數(shù)據(jù)delay(1);en=1; en置高電平,為制造下降沿做準(zhǔn)備delay(1);en=0; en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令void lcdnit()/* 液晶初始化函數(shù) *write_1602com(0x38);設(shè)置液晶工作模式,意思: 16*2行顯示,5*7點陣,8位數(shù)據(jù)write_1602com(0x0c);開顯示不顯示光標(biāo)write_1602com(0x06);整屏不移動,光標(biāo)自動右移write_1602com(0x01); 清顯示write_1602com(yh+1);日歷顯示固定符號從第一行第1個位置之后開始顯示for(a=0;a1

19、4;a+)write_1602dat(tab1a);向液晶屏寫日歷顯示的固定符號部分/delay(3);write_1602com(er+2);/時間顯示固定符號寫入位置,從第2個位置后開始顯示for(a=0;a0;a_)IO=ACCO;SCLK=O; /產(chǎn)生上升沿寫入數(shù)據(jù),從低位寫入SCLK=1;ACC=ACC1;uchar read_byte() 讀一個字節(jié)RST=1;for(a=8;a0;a_)ACC7=IO;SCLK=1; /產(chǎn)生下降沿輸出數(shù)據(jù),先輸出低位,保存到ACC中SCLK=0;ACC=ACC1;return (ACC);void write_1302(uchar add,uch

20、ar dat)/向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);uchar BCD_Decimal(uchar bcd)/BCD 碼轉(zhuǎn)十進制函數(shù),輸入 BCD,返回十進制uchar Decimal;Deci

21、mal=bcd4;return(Decimal=Decimal*10+(bcd &=OxOF);void ds1302_init() 1302 芯片初始化子函數(shù)(2012-06-18,12:00:00,week7)RST=0;SCLK=0;write_1302(0x8e,0x00); / 允許寫,禁止寫保護write_1302(0x80,0x00); /向DS1302內(nèi)寫秒寄存器 80H寫入初始秒數(shù)據(jù) 00 write_1302(0x82,0x00);向DS1302內(nèi)寫分寄存器 82H寫入初始分?jǐn)?shù)據(jù) 00 write_1302(0x84,0x12);向DS1302內(nèi)寫小時寄存器 84H寫入初始

22、小時數(shù)據(jù)12write_1302(0x8a,0x07);向DS1302內(nèi)寫周寄存器 8aH寫入初始周數(shù)據(jù) 4 write_1302(0x86,0x17);向DS1302內(nèi)寫日期寄存器 86H寫入初始日期數(shù)據(jù) 18 write_1302(0x88,0x06);向DS1302內(nèi)寫月份寄存器 88H寫入初始月份數(shù)據(jù) 06 write_1302(0x8c,0x12);向DS1302內(nèi)寫年份寄存器 8cH寫入初始年份數(shù)據(jù) 12 write_1302(0x8e,0x80); / 打開寫保護/溫度顯示子函數(shù)void write_temp(uchar add,uchar dat)/向LCD寫溫度數(shù)據(jù),并指定顯

23、示位置uchar gw,sw;gw=dat%10;取得個位數(shù)字sw=dat/10;取得十位數(shù)字write_1602com(er+add);/er 是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+sw); 數(shù)字 +30 得到該數(shù)字的 LCD1602 顯示碼write_1602dat(0x30+gw); 數(shù)字 +30 得到該數(shù)字的 LCD1602 顯示碼write_1602dat(0xdf);/顯示溫度的小圓圈符號,0xdf是液晶屏字符庫的該符號地址碼write_1602dat(0x43); /顯示C符號,0x43是液晶屏字符庫里大寫C的地址碼/時分秒顯示子函數(shù)void w

24、rite_sfm(uchar add,uchar dat)/向LCD寫時分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個參數(shù)uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er 是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+sw); 數(shù)字 +30 得到該數(shù)字的 LCD1602 顯示碼 write_1602dat(0x30+gw); 數(shù)字 +30 得到該數(shù)字的 LCD1602 顯示碼 /年月日顯示子函數(shù)void write_nyr(uchar add,uchar dat)/向LCD寫年月日,有顯

25、示位置加數(shù)、顯示數(shù)據(jù),兩個參數(shù) uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;取得十位數(shù)字write_1602com(yh+add);設(shè)定顯示位置為第一個位置+addwrite_1602dat(0x30+sw); 數(shù)字 +30 得到該數(shù)字的 LCD1602 顯示碼 write_1602dat(0x30+gw); 數(shù)字 +30 得到該數(shù)字的 LCD1602 顯示碼 void write_week(uchar week)/ 寫星期函數(shù)write_1602com(yh+0x0c);星期字符的顯示位置 switch(week) case 1:write_1602dat(

26、M); 星期數(shù)為 1 時,顯示 write_1602dat(O);write_1602dat(N);break;case 2:write_1602dat(T); 星期數(shù)據(jù)為 2 時顯示 write_1602dat(U);write_1602dat(E);break;case 3:write_1602dat(W); 星期數(shù)據(jù)為 3 時顯示 write_1602dat(E);write_1602dat(D);break;case 4:write_1602dat(T); 星期數(shù)據(jù)為 4 是顯示 write_1602dat(H);write_1602dat(U);break;case 5:write_

27、1602dat(F); 星期數(shù)據(jù)為 5 時顯示 write_1602dat(R);write_1602dat(T);break;case 6:write_1602dat(S); 星期數(shù)據(jù)為 6 時顯示 write_1602dat(T);write_1602dat(A);break;case 7:write_1602dat(S); 星期數(shù)據(jù)為 7 時顯示 write_1602dat(U);write_1602dat(N);break;/*鍵盤掃描有關(guān)函數(shù) *void keysca n()if(key1=O)key1為功能鍵(設(shè)置鍵) delay(9);延時,用于消抖動if(key1=0)延時后再

28、次確認(rèn)按鍵按下buzzer=O;蜂鳴器短響一次delay(20);buzzer=1;while(!key1);keyln+;if(key1 n=9)8個功能循環(huán)keyl n=1;設(shè)置按鍵共有秒、分、時、星期、日、月、年、返回, switch(key1 n)case 1: TRO=O;關(guān)閉定時器/TR1=0;write_1602com(er+0x09);設(shè)置按鍵按動一次,秒位置顯示光標(biāo) write_1602com(0x0f);設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10; 秒數(shù)據(jù)寫入 DS1302 write_1302(0x8e,0x00);write_1302(0x8

29、0,0x80|temp);/miao write_1302(0x8e,0x80);break;case 2: write_1602com(er+6);/ 按 2 次 fen 位置顯示光標(biāo) write_1602com(0x0f);break;case 3: write_1602com(er+3);/ 按動 3 次,shi write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e); 按動 4 次,week write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a); 按動 5 次,ri w

30、rite_1602com(0x0f);break;case 6: write_1602com(yh+0x07); 按動 6 次,yue write_1602com(0x0f);break;case 7: write_1602com(yh+0x04); 按動 7 次,nian write_1602com(0x0f);break;case 8:write_1602com(0x0c);按動到第8次,設(shè)置光標(biāo)不閃爍 TR0=1;/打開定時器temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);/mi

31、ao 數(shù)據(jù)寫入 DS1302write_1302(0x8e,0x80);break;/加鍵 key2if(key1 n!=0)/當(dāng)keyl按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零)if(key2=0)/ 上調(diào)鍵delay(10);if(key2=0)buzzer=0;蜂鳴器短響一次delay(20);buzzer=1;while(!key2);switch(key1 n)case 1:miao+;設(shè)置鍵按動1次,調(diào)秒if(miao=60)miao=0;/秒超過59,再加1,就歸零write_sfm(0x08,miao);/令LCD在正確位置顯示”加設(shè)定好的秒數(shù)temp=(miao)/10*

32、16+(miao)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 BCD 碼write_1302(0x8e,0x00); / 允許寫,禁止寫保護write_1302(0x80,temp); /向DS1302內(nèi)寫秒寄存器 80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼write_1302(0x8e,0x80); / 打開寫保護write_1602com(er+0x09);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,光標(biāo)自動右移,所以要指定返回/write_1602com(0x0b);break;case 2:fe n+;if(fen=60)fen=0;write_sfm(0x05,fen);令LCD在正確位置顯示”加設(shè)定

33、好的分?jǐn)?shù)據(jù)temp=(fen)/10*16+(fen)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x82,temp);向DS1302內(nèi)寫分寄存器 82H寫入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(er+6);/因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的位 置break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);/令LCD在正確的位置顯示”加設(shè)定好的小時數(shù)據(jù)temp

34、=(shi)/10*16+(shi)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x84,temp);向DS1302內(nèi)寫小時寄存器 84H寫入調(diào)整后的小時數(shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(er+3);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 4:week+;if(week=8)week=1;write_1602com(yh+0x0C);指定加后的周數(shù)據(jù)顯示位置write_week(week);指定

35、周數(shù)據(jù)顯示內(nèi)容 temp=(week)/10*16+(week)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x8a,temp);向DS1302內(nèi)寫周寄存器 8aH寫入調(diào)整后的周數(shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(yh+0x0e);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回 位break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);令LCD在正確的位置顯示加設(shè)定好的日期數(shù)據(jù)temp=

36、(ri)/10*16+(ri)%10;/ 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x86,temp);向DS1302內(nèi)寫日期寄存器 86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(yh+10);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue);令LCD在正確的位置顯示力設(shè)定好的月份數(shù)據(jù)temp=(yue)/10*16+(

37、yue)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x88,temp);向DS1302內(nèi)寫月份寄存器 88H寫入調(diào)整后的月份數(shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(yh+7);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 7:nian+;if(nian=100)nian=0;write_nyr(3,nian);/令LCD在正確的位置顯示”力設(shè)定好的年份數(shù)據(jù)temp=(nian)/10*16+(nian)

38、%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x8c,temp);向DS1302內(nèi)寫年份寄存器 8cH寫入調(diào)整后的年份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80); 打開寫保護write_1602com(yh+4);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位 break; 減鍵key3,各句功能參照加鍵注釋if(key3=0)delay(10);調(diào)延時,消抖動if(key3=0)buzzer=O;蜂鳴器短響一次delay(20);buzzer=1;while(!ke

39、y3);switch(key1 n)case 1:miao-;if(miao=-1)miao=59;秒數(shù)據(jù)減到-1時自動變成59write_sfm(0x08,miao);在LCD的正確位置顯示改變后新的秒數(shù) temp=(miao)/10*16+(miao)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00); / 允許寫,禁止寫保護write_1302(0x80,temp); /向DS1302內(nèi)寫秒寄存器 80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼write_1302(0x8e,0x80); / 打開寫保護write_1602com(er+0x09);因為

40、設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,在這里是寫回原來的write_1602com(0x0b);break;case 2:fe n-;if(fen=_1)fen=59;write_sfm(5,fe n);temp=(fen)/10*16+(fen)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x82,temp);向DS1302內(nèi)寫分寄存器 82H寫入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(er+6);/因為設(shè)置液晶的模式是寫入數(shù)

41、據(jù)后,指針自動加一,在這里是寫回原來的位 置break;case 3:shi-;if(shi=-1)shi=23;write_sfm(2,shi);temp=(shi)/10*16+(shi)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x84,temp);向DS1302內(nèi)寫小時寄存器 84H寫入調(diào)整后的小時數(shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(er+3);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 4

42、:week-;if(week=O)week=7;write_1602com(yh+0x0C);指定加后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容 temp=(week)/10*16+(week)%10;/ 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x8a,temp);向DS1302內(nèi)寫周寄存器 8aH寫入調(diào)整后的周數(shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(yh+0x0e);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以

43、需要光標(biāo)回 位break;case 5:ri-;if(ri=0)ri=31;write_ nyr(9,ri);temp=(ri)/10*16+(ri)%10;/ 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼write_1302(0x8e,0x00);允許寫,禁止寫保護write_1302(0x86,temp);向DS1302內(nèi)寫日期寄存器 86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼write_1302(0x8e,0x80); 打開寫保護write_1602com(yh+10);因為設(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動加一,所以需要光標(biāo)回位break;case 6:yue-;if(yue=0)yue=12;write _n yr(6,yue);temp=(yue)/10*16+(yue)%10; 十進制轉(zhuǎn)換成 DS1302 要求的 DCB 碼 write_1302(0x8e,0x00);允許寫,禁止寫保護

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論