DS1302+1602+鍵盤調(diào)整+鬧鐘_第1頁
DS1302+1602+鍵盤調(diào)整+鬧鐘_第2頁
DS1302+1602+鍵盤調(diào)整+鬧鐘_第3頁
DS1302+1602+鍵盤調(diào)整+鬧鐘_第4頁
DS1302+1602+鍵盤調(diào)整+鬧鐘_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、DS1302+1602+,鍵盤調(diào)整+鬧鐘i-aii#include<reg52.h>#include<intrinseh>defineucharunsignedchar#defineuintunsignedint定義的的4個鍵盤時鐘功能鍵sbitsl=P30;sbits2=P31;sbits3二P32;sbits4二P36;sbits5=P33;加鍵減鍵確認鍵鬧鐘功能鍵sbitdula=P26;數(shù)碼管操作sbitwela=P27;sbit lcden=P2"5;液晶操作sbitlcdrs=Pl0;sbitlcdrw=Pl1;sbitrd=P3"7;立

2、鍵盤為了分離出3個獨sbitFM=P2-;蜂鳴器口sbitACCO二AC(TO;累加器喂ACC這是位定義sbitACC7=ACC八7;sbitsclk=P2;DS1302操作sbitdatal=P2'0;sbitrst=P2M;ucharslnum,flagl,flag2,s5num;intmiao,shi,fen,nian,yue,ri,week,afen,ashi;intxl,x2;ucharcodetablel="SUN”;星期字表ucharcodetable2口""MON"ucharcodetable3口=“TUE"ucharc

3、odetable4口=“WED"ucharcodetable51="THU"ucharcodetable6口="FRI"ucharcodetable7口="SAT"延時函數(shù)voiddelayms(uintxms)(uintx,y;for(x=xms;x>0;x一)for(y=110;y>0;y-);)voiddi()蜂鳴器函數(shù)FM=0;delayms(100);FM=1;關數(shù)碼管函數(shù)voidcmg88()(dula=l;P0=0x00;dula=0;液晶寫命令voidwrite_com(ucharcom)函數(shù)lc

4、drs=O;lcden=O;PO=com;delayms(5);lcden=l;delayms(5);lcden=O;液晶寫voidwrite_date(uchardate)數(shù)據(jù)函數(shù)(lcdrs=l;lcden=0;PO=date;delayms(5);lcden=l;delayms(5);lcden=O;)voidWritel302(uchardat)向1302寫一個字節(jié)數(shù)據(jù)(uchari;ACC=dat;for(i=8;i>0;i-)(datal=ACC0;sclk=l;sclk=0;ACC=ACC»1;voidWriteSetl302(ucharCmd,uchardat)

5、根據(jù)命令,向1302寫一個字節(jié)數(shù)據(jù)(rst=0;_nop_();sclk=0;_nop_0;rst=l;delayms(2);Writel302(Cmd);Writel302(dat);sclk=l;rst=0;)uchar Readl302 ()向1302讀一個字節(jié)數(shù)據(jù)uchari;for(i=8;i>0;i一)(ACC=ACC»1;ACC7=datal;sclk=l;sclk=0;)return(ACC);)ucharReadSet1302(ucharCmd)根據(jù)命令,向1302讀一個字節(jié)數(shù)據(jù)uchardat;rst=O;sclk=O;rst=l;Writel302(Cmd

6、);dat=Readl302();sclk=l;rst=O;return(dat);voidinital_1302()始化DS1302函數(shù)WriteSetl302(Ox8e,0x00);寫保護/初禁止WriteSetl302(0x90,Oxaa);/秒/年月日星開寫定義充電WriteSetl302(0x80,0x45);WriteSetl302(0x84,0x18);時WriteSetl302(0x82,0x47);分WriteSetl302(0x8c,0x16);WriteSetl302(0x88,0x05);WriteSetl302(0x86,0x23);WriteSetl302(0x8a

7、,0x01);期WriteSetl302(OxcO,0x07);鬧鐘小時初始化WriteSetl302(Oxfc,0x30);鬧鐘分鐘初始化WriteSetl302(Ox8e,0x80);保護voidwrite_sfm(ucharadd,uchardat)時分秒函數(shù)(uchargw,sw;gw=dat%16;sw=dat/16;write_com(0x80+0x40+add);write_date(sw+0x30);write_date(gw+0x30);)voidwrite_nyr(ucharadd,uchardat)年月日函數(shù)(uchargw,sw;gw=dat%16;sw=dat/16;

8、write_com(0x80+add);write_date(sw+0x30);write_date(gw+0x30);)寫星voidwrite_week(ucharxq)期函數(shù)(ucharx;write_com(0x80+12);switch(xq)(case 1:for(x=0;x<3;x+)write_date(tablelx1);break;case 2:for(x=0;x<3;x+)(write_date(table2x);)break;case 3:for(x=0;x<3;x+)(write_date(table3x1);)break;case 4:for(x=0

9、;x<3;x+)writerate(table4x);)break;case 5:for(x=0;x<3;x+)(write_date(table5x);)break;case 6:for(x=0;x<3;x+)(writerate(table6x);break;case 7:for(x=0;x<3;x+)write_date(table7x1);)break;)write_com(0x80+12);)voidinit()初始化操作(flagl=0;flag2=0;rd=0;dula=0;wela=0;lcdrw=0;lcden=0;fen=O;miao=0;shi=O

10、;week=O;nian=O;yue=O;ri=O;slnum=O;s5num=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80+1);在液晶上寫一些固定的數(shù)write_date(,2');write_date(,O');delayms(5);在液晶上寫一些write_com(0x80+5);固定的數(shù)write_date(,);delayms(5);write_com(0x80+8);write_date(,);delayms(5);write_com(0x80+0x

11、40+3);時間部分的兩個冒號write_date(,:;delayms(5);write_com(0x80+0x40+6);write_date(,:;delayms(5);write_com(0x80+0x40+12);write_date(,:;delayms(5);voidkeyscan()鍵盤掃描操作if(sl=0&&s5num=0)時鐘功能鍵并且鬧鐘不處于調(diào)整狀態(tài)delayms(5);if(sl=0&&s5num=0)slnum+;flagl=l;while(!si);di();switch(slnum)case 1:write_com(0x80+0

12、x40+8)光標閃爍write_com(0x0f);break;case 2:write_com(0x80+0x40+5)break;case 3:write_com(0x80+0x40+2)break;case 4:write_com(0x80+14);break;case 5:write_com(0x80+10);break;case 6:write_com(0x80+7);break;case 7:write_com(0x80+4);break;flagl=O;slnum=O;write_com(OxOc);WriteSetl302(0x8e, 0x00);第八次按時鐘.-Hi.功能鍵后

13、,把調(diào)整了的所有數(shù)據(jù)當前狀態(tài)存入到DS1302中WriteSetl302(0x80,miao);WriteSetl302(0x84,shi);WriteSetl302(0x82,fen);WriteSetl302(0x8a,week);WriteSetl302(0x8c,nian);WriteSetl302(0x88,yue);WriteSetl302(0x86,ri);WriteSetl302(Ox8e,0x80);break;if(slnum!=0&&s5num=O)(if(s2=0)(delayms(5);if(s2=0)(while(!s2);di();switch(s

14、lnum)(case 1:xl=miao%16;x2=miao/16;時鐘加鍵xl+;if(xl=10)xl=O;x2+;if(x2>=6)x2=0;)miao=xl+x2*16;write_sfm(7,miao);write_com(0x80+0x40+8);break;case 2:xl=fen%16;x2=fen/16;xl+;if(xl10)xl=O;x2+;if(x2>=6)x2=0;)fen=xl+x2*16;write_sfm(4,fen);write_com(0x80+0x40+5);break;case 3:xl=shi%16;x2=shi/16;xl+;if(x

15、l=10)xl=O;x2+;)if(x2>=2&&xl>=4)(xl=O;x2=0;)shi=xl+x2*16;write_sfm(l,shi);write_com(0x80+0x40+2);break;case 4:xl=(week)%10;x2=(week)/10;xl+;if(xl=8)xl=l;week=x2*16+xl;write_week(week);write_com(0x80+14);break;case 5:xl=ri%16;x2=ri/16;xl+;if(xl=10)(xl=0;x2+;if(x2=3&&xl=2)xl=O;x2=

16、0;ri=xl+x2*16;write_nyr(9,ri);write_com(0x80+10);break;case 6:xl=yue%16;x2=yue/16;xl+;if(x2=l&&xl=3)(xl=l;x2=0;)if(xl=10)(xl=O;x2+;)yue=xl+x2*16;write_nyr(6,yue);write_com(0x80+7);break;case 7:xl=nian%16;x2=nian/16;xl+;if(x2=9)&&(xl=10)xl=O;x2=0;)if(xl=10)(x2+;xl=O;)nian=xl+x2*16;wri

17、te_nyr(3,nian);write_com(0x80+4);break;)if(s30)時鐘減鍵delayms(5);if(s3=0)(while(!s3);di0;switch(slnum)(case 1:xl=miao%16;x2=miao/16;xl一;if(xl=-l)(xl=9;x2一;if(x2=-l)x2=5;miao=xl+x2*16;write_sfm(7,miao);write_com(0x80+0x40+8);break;case 2:xl=fen%16;x2=fen/16;xl;if(xl=-l)(xl=9;x2一;if(x2=-l)x2=5;fen=xl+x2*

18、16;write_sfm(4,fen);write_com(0x80+0x40+5);break;case 3:xl=shi%16;x2=shi/16;xl一;if(xl-1)(xl=9;x2一;if(x2=-l)(xl=3;x2=2;)shi=xl+x2*16;write_sfm(l,shi);write_com(0x80+0x40+2);break;case 4:xl=(week)%10;x2=(week)/10;xl;if(xl=0)xl=7;week=x2*16+xl;write_week(week);write_com(0x80+14);break;case 5:xl=ri%16;x

19、2=ri/16;xl;if(xl-1)(xl=9;x2一;if(x2-1)(xl=l;x2=3;write-nyr(9,ri);write_com(0x80+10);break;case 6:xl=yue%16;x2=yue/16;xl;if(x2=l)&&(xl=-l)(xl=9;x2一;if(x2=0)&&(xl=0)(xl=2;x2=l;yue=xl+x2*16;write_nyr(6,yue);write_com(0x80+7);break;case 7:xl=nian%16;x2=nian/16;xl一;if(xl-1)(xl=9;x2一;if(x2=

20、-l)xl=9;x2=9;nian=xl+x2*16;write_nyr(3,nian);write_com(0x80+4);break;)表示時if(slnum!=0|s5num!=0)鐘或者鬧鐘處于調(diào)整狀態(tài)if(s4=0)確定狀態(tài)的按鍵delayms(5);if(s40)(if(slnum!=0)表示時鐘處于調(diào)整狀態(tài)(while(!s4);確定鍵被按下di0;WriteSetl302(0x8e,0x00);按了確認鍵后,把調(diào)整了的所有數(shù)據(jù)當前狀態(tài)存入到DS1302中WriteSetl302(0x80,miao);WriteSetl302(0x84,shi);WriteSetl302(0x8

21、2,fen);WriteSet1302(0x8a,week);WriteSetl302(0x8c,nian);WriteSetl302(0x88,yue);WriteSetl302(0x86,ri);WriteSetl302(Ox8e,0x80);flagl=0;write_com(0x0c);slnum=0;if(s5num!=0)表示鬧鐘處于調(diào)整狀態(tài)while(!s4);di();WriteSetl302(Ox8e,0x00);調(diào)整鬧鐘,不能讓時鐘暫停,故沒把時鐘數(shù)據(jù)寫入DS1302中WriteSetl302(OxcO,ashi);把鬧鐘數(shù)據(jù)寫入DS1302中WriteSetl302(Ox

22、fc,afen);WriteSetl302(Ox8e,0x80);flag2=0;s5num=0;write_com(OxOc);)if(s5=0&&slnum=0)鬧鐘功能鍵并且時鐘不處于調(diào)整狀態(tài)delayms(5);if(s5=0&&slnum=0)s5num+;flag2=l;while(!s5);di();if(s5num=l)(write_com(0x80+0x40+14);write_com(OxOf);)if(s5num-2)(write_com(0x80+0x40+11);if(s5num=3)(s5num=0;flag2=0;WriteSetl

23、302(Ox8e,0x00);WriteSetl302(Oxfc,afen);WriteSetl302(OxcO,ashi);WriteSetl302(Ox8e,0x80);write_com(0x0c);if(s5num!=0&&slnum=0)只有鬧鐘處于調(diào)整狀態(tài)(鬧鐘加鍵if(s2=0)(delayms(5);if(s2=0)while(!s2);di();if(s5num=l)xl=afen%16;x2=afen/16;xl+;if(xl=10)(xl=O;x2+;if(x2>=6)x2=0;)afen=xl+x2*16;write_sfm(13,afen);wr

24、ite_com(0x80+0x40+14);)if(s5num=2)xl=ashi%16;x2=ashi/16;xl+;if(x2>=2&&xl>=4)xl=O;x2=0;)if(xl10)(xl=0;x2+;)ashi=xl+x2*16;write_sfm(10,ashi);write_com(0x80+0x40+11);)鬧鐘減鍵if(s3=0)(delayms(5);if(s3=0)(while(!s3);di0;if(s5num=l)(xl=afen%16;x2=afen/16;xl一;if(xl=-l)x2一;if(x2-1)x2=5;)afen=xl+x2*16;write_sfm(13,af

溫馨提示

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

評論

0/150

提交評論