版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 PAGE24 / NUMPAGES251 DS1302實(shí)時(shí)時(shí)鐘(1) 時(shí)鐘芯片DS1302的工作原理: DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖所示。為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對(duì)DS1302進(jìn)行讀寫數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫時(shí)RAM=1,對(duì)時(shí)間進(jìn)行讀/寫時(shí),CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表6為DS1302的日歷、時(shí)間寄存器容:“CH”
2、是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行?!癢P”是寫保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。(2) DS1302的控制字節(jié)DS1302的控制字如表-1所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出表-1 DS1302的控制字格式 RAM RD
3、 1 A4 A3 A2 A1 A0 / CK /WR(3) 數(shù)據(jù)輸入輸出(I/O) 在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如下圖1所示圖1 DS1302讀/寫時(shí)序圖(4) DS1302的寄存器DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器與其控制字見表-2。表-2 DS1302的日歷、時(shí)間寄存器 寫寄存器讀寄存器Bit7Bit6Bit5Bit4Bit3Bit2B
4、it1Bit080H81HCH10秒秒82H83H10分分84H85H12/010時(shí)時(shí)/PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10 年年8EH8FHWP0000000此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器與與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫
5、所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。 2 方案論證與設(shè)計(jì)2.1控制器部分方案設(shè)計(jì)硬件控制電路主要用了AT89C52芯片處理器、1602LCD顯示器、DS1302實(shí)時(shí)時(shí)鐘、DB18B20溫度傳感器。根據(jù)各自芯片的功能互相連接成電子萬(wàn)年歷的控制電路。軟件控制程序主要有主控程序、電子萬(wàn)年歷的時(shí)間控制程序、時(shí)間顯示與溫度顯示程序等組成。設(shè)計(jì)框圖如圖2.1所示AT89C52主控模塊1602液晶顯示DS1302時(shí)鐘電路獨(dú)立鍵盤電路DS18B20實(shí)時(shí)環(huán)境溫度采集電路蜂鳴器圖2.1 框圖設(shè)計(jì)2.2 顯示部分的方案論證方案一:采用8段數(shù)碼管雖經(jīng)濟(jì)實(shí)惠,但操作比液晶顯示來(lái)說(shuō)略顯繁瑣。
6、方案二:液晶顯示方式。液晶顯示效果出眾,可以運(yùn)用菜單項(xiàng)來(lái)方便操作,比較簡(jiǎn)單,所以,最后選擇液晶顯示方案。顯示電路圖如圖2.2所示。圖2.2 液晶顯示電路2.3 實(shí)時(shí)時(shí)鐘電路設(shè)計(jì) 圖2.3是 DS1302與單片機(jī)的連接,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。圖2.3 DS1302時(shí)鐘電路2.4 溫度采集模塊設(shè)計(jì)如圖2.4所示,采用數(shù)
7、字式溫度傳感器DS18B20,它是數(shù)字式溫度傳感器,具有測(cè)量精度高,電路連接簡(jiǎn)單特點(diǎn),此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,使用P3.7與DS18B20的I/O口連接加一個(gè)上拉電阻,Vcc接電源,Vss接地。圖2.4 DS18B20溫度采集模塊2.5 功能按鈕設(shè)計(jì)當(dāng)按鈕被按下時(shí),該按鈕對(duì)應(yīng)的I/O口被拉為低電平,松開時(shí)按鈕對(duì)應(yīng)的I/O口由部的上拉電阻將該I/O拉為高電平,如圖2.5所示:圖2.5 鍵盤電路設(shè)計(jì)2.6 總體電路圖3 軟件設(shè)計(jì)流程3.1 系統(tǒng)總流程圖 系統(tǒng)總體流程圖如圖3.1所示,系統(tǒng)流程圖設(shè)計(jì)分析如下:首系統(tǒng)初始化,系統(tǒng)運(yùn)行,當(dāng)有設(shè)置鍵按下時(shí)進(jìn)入時(shí)間修改模式,無(wú)按鍵按下時(shí)讀取時(shí)
8、間溫度等數(shù)據(jù)送入顯示器顯示。在時(shí)間修改模式下設(shè)置時(shí)間完成后再將時(shí)間送入顯示器顯示。圖3.1 系統(tǒng)流程圖3.2 溫度程序流程圖 溫度讀取程序流程圖如圖3.2所示。流程圖分析:開始進(jìn)入初始化DS18B20,就是通過(guò)主機(jī)拉低單線產(chǎn)生復(fù)位脈沖然后釋放總線,如果有應(yīng)答就發(fā)起ROM命令,當(dāng)成功執(zhí)行操作命令后,就使用溫度轉(zhuǎn)換,當(dāng)溫度轉(zhuǎn)換完成后又初始化DS18B20是否有應(yīng)答脈沖,若有就發(fā)起讀暫存器和CRC命令,同時(shí)讀出第一第二字節(jié)即溫度數(shù)據(jù)。 圖3.2 溫度讀取程序流程圖3.3 DS1302時(shí)鐘程序流程圖 時(shí)鐘流程圖如圖3.3所示,流程圖分析:DS1302開始計(jì)時(shí)時(shí),首先進(jìn)行初始化,當(dāng)有中斷信號(hào)時(shí),讀取時(shí)鐘
9、芯片的時(shí)間數(shù)據(jù)送入液晶顯示。這時(shí)若有設(shè)置鍵按下,進(jìn)行時(shí)間修改,完成后將時(shí)間數(shù)據(jù)送入1302芯片,若沒有按鍵按下,直接送入EPROM中,送入液晶顯示。圖3.3 時(shí)鐘程序流程圖DS1302時(shí)鐘部分子程序void write_byte(uchar dat)/寫一個(gè)字節(jié)ACC=dat;RST=1;for(a=8;a0;a-) IO=ACC0; SCLK=0; /產(chǎn)生上升沿寫入數(shù)據(jù),從低位寫入 SCLK=1; ACC=ACC1;uchar read_byte()/讀一個(gè)字節(jié)RST=1;for(a=8;a0;a-) ACC7=IO; SCLK=1; /產(chǎn)生下降沿輸出數(shù)據(jù),先輸出低位,保存到ACC中 SCL
10、K=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 read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);uchar BCD_Decim
11、al(uchar bcd)/BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制uchar Decimal;Decimal=bcd4;return(Decimal=Decimal*10+(bcd&=0 x0F);void ds1302_init() /1302芯片初始化子函數(shù)(2012-06-18,12:00:00,week7)RST=0;SCLK=0;write_1302(0 x8e,0 x00); /允許寫,禁止寫保護(hù) write_1302(0 x80,0 x00); /向DS1302寫秒寄存器80H寫入初始秒數(shù)據(jù)00write_1302(0 x82,0 x00);/向DS1302寫分寄存器82H
12、寫入初始分?jǐn)?shù)據(jù)00write_1302(0 x84,0 x12);/向DS1302寫小時(shí)寄存器84H寫入初始小時(shí)數(shù)據(jù)12write_1302(0 x8a,0 x07);/向DS1302寫周寄存器8aH寫入初始周數(shù)據(jù)4write_1302(0 x86,0 x17);/向DS1302寫日期寄存器86H寫入初始日期數(shù)據(jù)18write_1302(0 x88,0 x06);/向DS1302寫月份寄存器88H寫入初始月份數(shù)據(jù)06write_1302(0 x8c,0 x12);/向DS1302寫年份寄存器8cH寫入初始年份數(shù)據(jù)12write_1302(0 x8e,0 x80); /打開寫保護(hù)3.4 LCD顯
13、示程序流程圖顯示流程圖如圖3.4所示,流程圖分析如下:首先對(duì)1602顯示屏進(jìn)行初始化(初始化大約持續(xù)10ms),然后檢查忙信號(hào),若BF=0,則獲得顯示RAM地址,寫入相應(yīng)的數(shù)據(jù)顯示。若BF=1,則代表模塊正在進(jìn)行部操作,不接受任何外部指令和數(shù)據(jù),直到BF=0為止。圖3.4 LCD顯示程序流程圖4 萬(wàn)年歷的仿真與調(diào)試結(jié)果上電后的顯示 秒調(diào)節(jié) 功能按鍵,自上而下功能依次為調(diào)節(jié)按鍵、加按鍵、減按鍵5 心得體會(huì)本次設(shè)計(jì)是我們遇到過(guò)的較大的設(shè)計(jì),所以遇到的問題也比較的多,尤其是以前沒有接觸過(guò)如此復(fù)雜的硬件電路以與軟件編程,在軟、硬件設(shè)計(jì)和調(diào)試中遇到了不少的困難,在同學(xué)的幫助才逐一克服了難題,學(xué)習(xí)到了不少
14、的專業(yè)知識(shí)。在整個(gè)設(shè)計(jì)過(guò)程之前,我已經(jīng)在網(wǎng)上找了相關(guān)方面的資料,萬(wàn)事開始難,一開始不知道從哪里下手。后來(lái)慢慢學(xué)會(huì)分析系統(tǒng),將系統(tǒng)模塊化,各個(gè)模塊可以在軟件或者硬件上實(shí)現(xiàn)。在確保各個(gè)模塊的硬件電路和與之相搭配的程序能夠正常工作后在把它們組成一個(gè)系統(tǒng)。在今后的日子里,我會(huì)進(jìn)一步加強(qiáng)自己的動(dòng)手能力,豐富自己的知識(shí)面。參考文獻(xiàn)朝青.單片機(jī)原理與接口技術(shù)M,:航天航空大學(xué),2005廣弟.單片機(jī)基礎(chǔ)M,:航空航天大學(xué),2000萬(wàn)光毅.單片機(jī)實(shí)驗(yàn)與實(shí)踐教程M,:航空航天大學(xué),2003唐亞平、移倫.單片機(jī)原理實(shí)訓(xùn)與學(xué)習(xí)指導(dǎo)M,:中南大學(xué),2006軍.單片機(jī)原理與接口技術(shù)M,華東理工大學(xué),2006自美.電子線路
15、設(shè)計(jì)、實(shí)驗(yàn)、測(cè)試M,:華中理工大學(xué),2000附件萬(wàn)年歷源程序#include#includeDS18B20_3.H#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;/flag用于讀取頭文件中的溫度值,和顯示溫度值#define yh 0 x80 /LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)#define er 0 x80+0 x40 /LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地
16、址是0 x40)/液晶屏的與C51之間的引腳連接定義(顯示數(shù)據(jù)線接C51的P0口)sbit rs=P26; /寄存器選擇sbit en=P27; /下降沿使能sbit rw=P25; /讀寫信號(hào)線/DS1302時(shí)鐘芯片與C51之間的引腳連接定義sbit IO=P34;/數(shù)據(jù)線sbit SCLK=P36;sbit RST=P35;sbit ACC0=ACC0;sbit ACC7=ACC7;ACC累加器=AACC.0=E0H /校時(shí)按鍵與C51的引腳連接定義sbit key1=P20; /設(shè)置鍵sbit key2=P21; /加鍵sbit key3=P22; /減鍵sbit buzzer=P15;
17、/蜂鳴器,端口低電平響uchar code tab1=20 - - ; /年顯示的固定字符uchar code tab2= : : ;/時(shí)間顯示的固定字符/延時(shí)函數(shù),后面經(jīng)常調(diào)用void delay(uint xms)/延時(shí)函數(shù),有參函數(shù)uint x,y;for(x=xms;x0;x-) for(y=120;y0;y-);void write_1602com(uchar )/*液晶寫入指令函數(shù)*rs=0;/數(shù)據(jù)/指令選擇置為指令rw=0; /讀寫選擇置為寫P0=;/送入數(shù)據(jù)delay(1);en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);en=0;/en由高變低,產(chǎn)生下降沿,
18、液晶執(zhí)行命令void write_1602dat(uchar dat)/*液晶寫入數(shù)據(jù)函數(shù)*rs=1;/數(shù)據(jù)/指令選擇置為數(shù)據(jù)rw=0; /讀寫選擇置為寫P0=dat;/送入數(shù)據(jù)delay(1);en=1; /en置高電平,為制造下降沿做準(zhǔn)備delay(1);en=0; /en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令void lcd_init()/*液晶初始化函數(shù)*write_1602com(0 x38);/設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)write_1602com(0 x0c);/開顯示不顯示光標(biāo)write_1602com(0 x06);/整屏不移動(dòng),光標(biāo)自動(dòng)右移wri
19、te_1602com(0 x01);/清顯示write_1602com(yh+1);/日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開始顯示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏寫日歷顯示的固定符號(hào)部分/delay(3);write_1602com(er+2);/時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開始顯示for(a=0;a0;a-) IO=ACC0; SCLK=0; /產(chǎn)生上升沿寫入數(shù)據(jù),從低位寫入 SCLK=1; ACC=ACC1;uchar read_byte()/讀一個(gè)字節(jié)RST=1;for(a=8;a0;a-) ACC7=IO; SCLK=1;
20、 /產(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 read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0
21、;return(temp);uchar BCD_Decimal(uchar bcd)/BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制uchar Decimal;Decimal=bcd4;return(Decimal=Decimal*10+(bcd&=0 x0F);void ds1302_init() /1302芯片初始化子函數(shù)(2012-06-18,12:00:00,week7)RST=0;SCLK=0;write_1302(0 x8e,0 x00); /允許寫,禁止寫保護(hù) write_1302(0 x80,0 x00); /向DS1302寫秒寄存器80H寫入初始秒數(shù)據(jù)00write_1302(
22、0 x82,0 x00);/向DS1302寫分寄存器82H寫入初始分?jǐn)?shù)據(jù)00write_1302(0 x84,0 x12);/向DS1302寫小時(shí)寄存器84H寫入初始小時(shí)數(shù)據(jù)12write_1302(0 x8a,0 x07);/向DS1302寫周寄存器8aH寫入初始周數(shù)據(jù)4write_1302(0 x86,0 x17);/向DS1302寫日期寄存器86H寫入初始日期數(shù)據(jù)18write_1302(0 x88,0 x06);/向DS1302寫月份寄存器88H寫入初始月份數(shù)據(jù)06write_1302(0 x8c,0 x12);/向DS1302寫年份寄存器8cH寫入初始年份數(shù)據(jù)12write_1302
23、(0 x8e,0 x80); /打開寫保護(hù)/溫度顯示子函數(shù)void write_temp(uchar add,uchar dat)/向LCD寫溫度數(shù)據(jù),并指定顯示位置uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0 x80+0 x40write_1602dat(0 x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0 x30+gw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼 write_1602dat(0 xdf);/顯示溫度的小圓圈符號(hào),0
24、 xdf是液晶屏字符庫(kù)的該符號(hào)地址碼 write_1602dat(0 x43); /顯示C符號(hào),0 x43是液晶屏字符庫(kù)里大寫C的地址碼 /時(shí)分秒顯示子函數(shù)void write_sfm(uchar add,uchar dat)/向LCD寫時(shí)分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個(gè)參數(shù)uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0 x80+0 x40write_1602dat(0 x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0 x30+gw);/
25、數(shù)字+30得到該數(shù)字的LCD1602顯示碼 /年月日顯示子函數(shù)void write_nyr(uchar add,uchar dat)/向LCD寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個(gè)參數(shù)uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(yh+add);/設(shè)定顯示位置為第一個(gè)位置+addwrite_1602dat(0 x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0 x30+gw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼void write_week(uchar week)/寫星
26、期函數(shù)write_1602com(yh+0 x0c);/星期字符的顯示位置switch(week) case 1:write_1602dat(M);/星期數(shù)為1時(shí),顯示 write_1602dat(O); write_1602dat(N); break; case 2:write_1602dat(T);/星期數(shù)據(jù)為2時(shí)顯示 write_1602dat(U); write_1602dat(E); break; case 3:write_1602dat(W);/星期數(shù)據(jù)為3時(shí)顯示 write_1602dat(E); write_1602dat(D); break; case 4:write_160
27、2dat(T);/星期數(shù)據(jù)為4是顯示 write_1602dat(H); write_1602dat(U); break; case 5:write_1602dat(F);/星期數(shù)據(jù)為5時(shí)顯示 write_1602dat(R); write_1602dat(I); break; case 6:write_1602dat(S);/星期數(shù)據(jù)為6時(shí)顯示 write_1602dat(T); write_1602dat(A); break; case 7:write_1602dat(S);/星期數(shù)據(jù)為7時(shí)顯示 write_1602dat(U); write_1602dat(N); break;/*鍵盤掃
28、描有關(guān)函數(shù)*void keyscan()if(key1=0)/key1為功能鍵(設(shè)置鍵)delay(9);/延時(shí),用于消抖動(dòng)if(key1=0)/延時(shí)后再次確認(rèn)按鍵按下 buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=9) key1n=1;/設(shè)置按鍵共有秒、分、時(shí)、星期、日、月、年、返回,8個(gè)功能循環(huán)switch(key1n)case 1: TR0=0;/關(guān)閉定時(shí)器 /TR1=0; write_1602com(er+0 x09);/設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo) write_1602com(0 x0f);/
29、設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;/秒數(shù)據(jù)寫入DS1302 write_1302(0 x8e,0 x00); write_1302(0 x80,0 x80|temp);/miao write_1302(0 x8e,0 x80); break;case 2: write_1602com(er+6);/按2次fen位置顯示光標(biāo) /write_1602com(0 x0f); break;case 3: write_1602com(er+3);/按動(dòng)3次,shi /write_1602com(0 x0f); break;case 4: write_1602com(
30、yh+0 x0e);/按動(dòng)4次,week /write_1602com(0 x0f); break;case 5: write_1602com(yh+0 x0a);/按動(dòng)5次,ri /write_1602com(0 x0f); break;case 6: write_1602com(yh+0 x07);/按動(dòng)6次,yue /write_1602com(0 x0f); break;case 7: write_1602com(yh+0 x04);/按動(dòng)7次,nian /write_1602com(0 x0f); break;case 8: write_1602com(0 x0c);/按動(dòng)到第8次,
31、設(shè)置光標(biāo)不閃爍 TR0=1;/打開定時(shí)器 temp=(miao)/10*16+(miao)%10; write_1302(0 x8e,0 x00); write_1302(0 x80,0 x00|temp);/miao數(shù)據(jù)寫入DS1302 write_1302(0 x8e,0 x80); break; /加鍵key2 if(key1n!=0)/當(dāng)key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零)if(key2=0) /上調(diào)鍵delay(10);if(key2=0) buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key2);switch(key1n
32、)case 1:miao+;/設(shè)置鍵按動(dòng)1次,調(diào)秒 if(miao=60) miao=0;/秒超過(guò)59,再加1,就歸零 write_sfm(0 x08,miao);/令LCD在正確位置顯示加設(shè)定好的秒數(shù) temp=(miao)/10*16+(miao)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的BCD碼 write_1302(0 x8e,0 x00); /允許寫,禁止寫保護(hù) write_1302(0 x80,temp); /向DS1302寫秒寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼 write_1302(0 x8e,0 x80); /打開寫保護(hù) write_1602com(er+0 x09);/因?yàn)?/p>
33、設(shè)置液晶的模式是寫入數(shù)據(jù)后,光標(biāo)自動(dòng)右移,所以要指定返回 /write_1602com(0 x0b); break;case 2:fen+; if(fen=60) fen=0; write_sfm(0 x05,fen);/令LCD在正確位置顯示加設(shè)定好的分?jǐn)?shù)據(jù) temp=(fen)/10*16+(fen)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x82,temp);/向DS1302寫分寄存器82H寫入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼 write_1302(0 x8e,0 x80);/打開寫保護(hù) wri
34、te_1602com(er+6);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫回原來(lái)的位置 break;case 3:shi+; if(shi=24) shi=0; write_sfm(2,shi);/令LCD在正確的位置顯示加設(shè)定好的小時(shí)數(shù)據(jù) temp=(shi)/10*16+(shi)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x84,temp);/向DS1302寫小時(shí)寄存器84H寫入調(diào)整后的小時(shí)數(shù)據(jù)BCD碼 write_1302(0 x8e,0 x80);/打開寫保護(hù) wr
35、ite_1602com(er+3);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break;case 4:week+; if(week=8) week=1; write_1602com(yh+0 x0C);/指定加后的周數(shù)據(jù)顯示位置 write_week(week);/指定周數(shù)據(jù)顯示容 temp=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x8a,temp);/向DS1302寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù)BCD碼 write_13
36、02(0 x8e,0 x80);/打開寫保護(hù) write_1602com(yh+0 x0e);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break;case 5:ri+; if(ri=32) ri=1; write_nyr(9,ri);/令LCD在正確的位置顯示加設(shè)定好的日期數(shù)據(jù) temp=(ri)/10*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x86,temp);/向DS1302寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼 write_1302(0
37、 x8e,0 x80);/打開寫保護(hù) write_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break;case 6:yue+; if(yue=13) yue=1; write_nyr(6,yue);/令LCD在正確的位置顯示加設(shè)定好的月份數(shù)據(jù) temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x88,temp);/向DS1302寫月份寄存器88H寫入調(diào)整后的月份數(shù)據(jù)BCD碼 write_1302(0
38、x8e,0 x80);/打開寫保護(hù) write_1602com(yh+7);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break;case 7:nian+; if(nian=100) nian=0; write_nyr(3,nian);/令LCD在正確的位置顯示加設(shè)定好的年份數(shù)據(jù) temp=(nian)/10*16+(nian)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x8c,temp);/向DS1302寫年份寄存器8cH寫入調(diào)整后的年份數(shù)據(jù)BCD碼 write_13
39、02(0 x8e,0 x80);/打開寫保護(hù) write_1602com(yh+4);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break;/減鍵key3,各句功能參照加鍵注釋if(key3=0)delay(10);/調(diào)延時(shí),消抖動(dòng)if(key3=0) buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key3);switch(key1n) case 1:miao-; if(miao=-1) miao=59;/秒數(shù)據(jù)減到-1時(shí)自動(dòng)變成59 write_sfm(0 x08,miao);/在LCD的正確位置顯示改變后新的秒數(shù) temp
40、=(miao)/10*16+(miao)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00); /允許寫,禁止寫保護(hù) write_1302(0 x80,temp); /向DS1302寫秒寄存器80H寫入調(diào)整后的秒數(shù)據(jù)BCD碼 write_1302(0 x8e,0 x80); /打開寫保護(hù) write_1602com(er+0 x09);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫回原來(lái)的位置 /write_1602com(0 x0b); break; case 2:fen-; if(fen=-1) fen=59; write_sfm(5
41、,fen); temp=(fen)/10*16+(fen)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x82,temp);/向DS1302寫分寄存器82H寫入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼 write_1302(0 x8e,0 x80);/打開寫保護(hù) write_1602com(er+6);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫回原來(lái)的位置 break; case 3:shi-; if(shi=-1) shi=23; write_sfm(2,shi); temp=(shi)/10*
42、16+(shi)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x84,temp);/向DS1302寫小時(shí)寄存器84H寫入調(diào)整后的小時(shí)數(shù)據(jù)BCD碼 write_1302(0 x8e,0 x80);/打開寫保護(hù) write_1602com(er+3);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break; case 4:week-; if(week=0) week=7; write_1602com(yh+0 x0C);/指定加后的周數(shù)據(jù)顯示位置 write_week(week
43、);/指定周數(shù)據(jù)顯示容 temp=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x8a,temp);/向DS1302寫周寄存器8aH寫入調(diào)整后的周數(shù)據(jù)BCD碼 write_1302(0 x8e,0 x80);/打開寫保護(hù) write_1602com(yh+0 x0e);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break; case 5:ri-; if(ri=0) ri=31; write_nyr(9,ri); temp=(ri)/1
44、0*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x86,temp);/向DS1302寫日期寄存器86H寫入調(diào)整后的日期數(shù)據(jù)BCD碼 write_1302(0 x8e,0 x80);/打開寫保護(hù) write_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位 break; case 6:yue-; if(yue=0) yue=12; write_nyr(6,yue); temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0 x8e,0 x00);/允許寫,禁止寫保護(hù) write_1302(0 x
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 別墅改造施工項(xiàng)目協(xié)議
- 城市道路園林建設(shè)協(xié)議
- 眼鏡租賃合同樣本
- 市政工程招投標(biāo)質(zhì)量保證協(xié)議
- 稅務(wù)局人員聘用協(xié)議范本
- 廣告?zhèn)髅焦靖笨偨?jīng)理招聘啟事
- 地震災(zāi)區(qū)重建泥水施工協(xié)議
- 臨時(shí)辦公室租賃協(xié)議
- 影像制作服務(wù)協(xié)議
- 地鐵站電梯井道建設(shè)協(xié)議
- 教科(2024秋)版科學(xué)三年級(jí)上冊(cè)2.6 我們來(lái)做“熱氣球”教學(xué)設(shè)計(jì)
- 山西省運(yùn)城市2024-2025學(xué)年高二上學(xué)期10月月考英語(yǔ)試題
- 4.3《課間》 (教案)-2024-2025學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)北師大版
- 【班主任工作】2024-2025學(xué)年秋季安全主題班會(huì)教育周記錄
- 2024-2030年街舞培訓(xùn)行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)前景預(yù)測(cè)報(bào)告
- 橡膠壩工程施工質(zhì)量驗(yàn)收評(píng)定表及填表說(shuō)明
- 《2024版CSCO胰腺癌診療指南》更新要點(diǎn) 2
- +陜西省渭南市富平縣2023-2024學(xué)年九年級(jí)上學(xué)期摸底數(shù)學(xué)試卷
- 2023年法律職業(yè)資格《客觀題卷一》真題及答案
- 三年級(jí)上《時(shí)分秒》教材解讀
- 公司培訓(xùn)工作報(bào)告6篇
評(píng)論
0/150
提交評(píng)論