ds13021602鍵盤(pán)調(diào)整鬧鐘_第1頁(yè)
ds13021602鍵盤(pán)調(diào)整鬧鐘_第2頁(yè)
ds13021602鍵盤(pán)調(diào)整鬧鐘_第3頁(yè)
ds13021602鍵盤(pán)調(diào)整鬧鐘_第4頁(yè)
ds13021602鍵盤(pán)調(diào)整鬧鐘_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、#include #include #define uchar unsigned char #define uint unsigned int sbit s仁 P3A0; sbit s2=P3A1; sbit s3=P3A2; sbit s4=P3A6; sbit s5=P3A3; sbit dula=P2A6; sbit wela=P2A7; sbit lcden=P2A5; sbit lcdrs=P1A0; sbit lcdrw=P1A1; sbit rd二P3A7;定義的的4個(gè)鍵盤(pán) / 時(shí)鐘功能鍵 / 加鍵 / 減鍵 / 確認(rèn)鍵 / 鬧鐘功能鍵 / 數(shù)碼管操作 / 液晶操作 / 為了分離

2、出 3 個(gè)獨(dú)立鍵盤(pán) sbit FM二P2八3;/ 蜂鳴器口 sbit ACCO二ACCS; sbit ACC7=ACCA7;/累加器喂ACC這是位定義 sbit scik二P2A1;/DS1302 操作 sbit data1=P2A0; sbit rst=P2A4; uchar s1num,fiag1,fiag2,s5num; int miao,shi,fen,nian,yue,ri,week,afen,ashi; int x1,x2; uchar code table1=SUN; 星期字表 uchar code tabie2=MON; uchar code table3=TUE; uchar

3、 code table4=WED; uchar code table5=THU; uchar code table6=FRI; uchar code table7=SAT; void delayms( uint xms) 延時(shí)函數(shù) uint x,y; for(x=xms;x0;x-) for(y=110;y0;y-); void di()/ 蜂鳴器函數(shù) FM=0; delayms(100); FM=1; void cmg88()/ 關(guān)數(shù)碼管函數(shù) dula=1; P0=0 x00; dula=0; void write_com(uchar com) lcdrs=0; lcden=0; P0=co

4、m; delayms(5); 13 / 37 lcden=1; delayms(5); lcden=0; void write_date(uchar date) lcdrs=1; lcden=0; P0=date; delayms(5); lcden=1; delayms(5); lcden=0; void Write1302(uchar dat) uchar i; ACC二dat;/液晶寫(xiě)命令函數(shù) / 液晶寫(xiě)數(shù)據(jù)函數(shù) / 向 1302 寫(xiě)一個(gè)字節(jié)數(shù)據(jù) for(i=8;i0;i-) data1=ACC0; sclk=1; sclk=0; ACC=ACC1; void WriteSet1302(

5、uchar Cmd,uchar dat) 根據(jù)命令,向 1302 寫(xiě)一個(gè)字節(jié)數(shù) 據(jù) rst=0; _nop_(); sclk=0; _nop_(); rst=1; delayms(2); Write1302(Cmd); Write1302(dat); sclk=1; rst=0; uchar Read1302()向1302讀一個(gè)字節(jié)數(shù)據(jù) uchar i; for(i=8;i0;i-) ACC=ACC1; ACC7=data1; sclk=1; sclk=0; return(ACC); ucharReadSet1302(uchar Cmd)/根據(jù)命令,向1302讀一個(gè)字節(jié)數(shù)據(jù) uchar dat

6、; rst=0; sclk=0; rst=1; Write1302(Cmd); dat=Read1302(); sclk=1; rst=0; return(dat); void inital_1302() WriteSet1302(0 x8e,0 x00); WriteSet1302(0 x90,0 xaa); WriteSet1302(0 x80,0 x45); WriteSet1302(0 x84,0 x18); WriteSet1302(0 x82,0 x47); WriteSet1302(0 x8c,0 x16); WriteSet1302(0 x88,0 x05); WriteSet

7、1302(0 x86,0 x23); WriteSet1302(0 x8a,0 x01); WriteSet1302(0 xc0,0 x07); WriteSet1302(0 xfc,0 x30); WriteSet1302(0 x8e,0 x80); void write_sfm(uchar add,uchar dat) uchar gw,sw; gw=dat%16; sw=dat/16; write_com(0 x80+0 x40+add); write_date(sw+0 x30); write_date(gw+0 x30); void write_nyr(uchar add,uchar

8、 dat) uchar gw,sw; gw=dat%16; sw=dat/16; write_com(0 x80+add); write_date(sw+0 x30); write_date(gw+0 x30); void write_week(uchar xq) /初始化DS1302函數(shù) / 禁止寫(xiě)保護(hù) / 定義充電 / 秒 / 時(shí) / 分 / 年 / 月 / 日 / 星期 / 鬧鐘小時(shí)初始化 / 鬧鐘分鐘初始化 / 開(kāi)寫(xiě)保護(hù) / 時(shí)分秒函數(shù) / 年月日函數(shù) / 寫(xiě)星期函數(shù) uchar x; write_com(0 x80+12); switch(xq) case 1: for(x=0;x3

9、;x+) write_date(table1x); break; case 2: for(x=0;x3;x+) write_date(table2x); break; case 3: for(x=0;x3;x+) write_date(table3x); break; case 4: for(x=0;x3;x+) write_date(table4x); break; case 5: for(x=0;x3;x+) write_date(table5x); break; case 6: for(x=0;x3;x+) write_date(table6x); break; case 7: for(

10、x=0;x0oeLSQ 蕪 險(xiǎn)獎(jiǎng)屁 H酈理w亠曲w揺樺菲起韜好 w注(00X0(08X0)00 LQS9一M iyoxoEs七m oHLUnuLS o上曇 G Seo q -(寸+08XO)LUOOIS一M L Seo q P+08X0E8七m 險(xiǎn)獎(jiǎng)酈理” gK菲醫(yī)M故w揺樺菲feuCDSeo q _(OL+O8XO)LU8lM q Seo q -(寸 L +08X0E8七m -寸Seo WriteSet1302(0 x8c,nian); WriteSet1302(0 x88,yue); WriteSet1302(0 x86,ri); WriteSet1302(0 x8e,0 x80); br

11、eak; if(s1num!=0 if(s2=0) while(!s2); di(); switch(s1num) case 1: x1=miao%16; x2=miao/16; x1+; if(x1=10) x1=0; x2+; if(x2=6) x2=0; miao=x1+x2*16; write_sfm(7,miao); write_com(0 x80+0 x40+8); break; case 2: x1=fen%16; x2=fen/16; x1+; if(x1=10) x1=0; x2+; if(x2=6) x2=0; fen=x1+x2*16; write_sfm(4,fen);

12、 write_com(0 x80+0 x40+5); break; case 3: x1=shi%16; x2=shi/16; x1+; if(x1=10) x1=0; x2+; if(x2=2 x2=0; shi=x1+x2*16; write_sfm(1,shi); write_com(0 x80+0 x40+2); break; case 4: x1=(week)%10; x2=(week)/10; x1+; if(x1=8) x1=1; week=x2*16+x1; write_week(week); write_com(0 x80+14); break; case 5: x1=ri%

13、16; x2=ri/16; x1+; if(x1=10) x1=0; x2+; if(x2=3 x2=0; ri=x1+x2*16; write_nyr(9,ri); write_com(0 x80+10); break; case 6: x1=yue%16; x2=yue/16; x1+; if(x2=1 x2=0; if(x1=10) x1=0; x2+; yue=x1+x2*16; write_nyr(6,yue); write_com(0 x80+7); break; case 7: x1=nian%16; x2=nian/16; x1+; if(x2=9) x2=0; if(x1=1

14、0) x2+; x1=0; nian=x1+x2*16; write_nyr(3,nian); write_com(0 x80+4); break; if(s3=0) delayms(5); if(s3=0) while(!s3); di(); switch(s1num) case 1: x1=miao%16; x2=miao/16; x1-; if(x1=-1) x1=9; x2-;/ 時(shí)鐘減鍵 if(x2=-1) x2=5; miao=x1+x2*16; write_sfm(7,miao); write_com(0 x80+0 x40+8); break; case 2: x1=fen%1

15、6; x2=fen/16; x1-; if(x1=-1) x1=9; x2-; if(x2=-1) x2=5; fen=x1+x2*16; write_sfm(4,fen); write_com(0 x80+0 x40+5); break; case 3: x1=shi%16; x2=shi/16; x1-; if(x1=-1) x1=9; x2-; if(x2=-1) x1=3; x2=2; shi=x1+x2*16; write_sfm(1,shi); write_com(0 x80+0 x40+2); break; case 4: x1=(week)%10; x2=(week)/10;

16、x1-; if(x1=0) x1=7; week=x2*16+x1; write_week(week); write_com(0 x80+14); break; case 5: x1=ri%16; x2=ri/16; x1-; if(x1=-1) x1=9; x2-; if(x2=-1) x1=1; x2=3; ri=x1+x2*16; write_nyr(9,ri); write_com(0 x80+10); break; case 6: x1=yue%16; x2=yue/16; x1-; if(x2=1) x2-; if(x2=0) 35 / 37 x2=1; yue=x1+x2*16;

17、 write_nyr(6,yue); write_com(0 x80+7); break; case 7: x1=nian%16; x2=nian/16; x1-; if(x1=-1) x1=9; x2-; if(x2=-1) x1=9; x2=9; nian=x1+x2*16; write_nyr(3,nian); write_com(0 x80+4); break; if(s1num!=0|s5num!=0)/ 表示時(shí)鐘或者鬧鐘處于調(diào)整狀態(tài) if(s4=0)確定狀態(tài)的按鍵 delayms(5); if(s4=0) if(s1num!=0)/ 表示時(shí)鐘處于調(diào)整狀態(tài) while(!s4);/

18、確定鍵被按下 di(); WriteSet1302(0 x8e,0 x00);按了確認(rèn)鍵后,把調(diào)整了的所有數(shù)據(jù)當(dāng)前狀態(tài)存 入到DS1302中 WriteSet1302(0 x80,miao); WriteSet1302(0 x84,shi); WriteSet1302(0 x82,fen); WriteSet1302(0 x8a,week); WriteSet1302(0 x8c,nian); WriteSet1302(0 x88,yue); WriteSet1302(0 x86,ri); WriteSet1302(0 x8e,0 x80); flag1=0; write_com(0 x0c)

19、; s1num=0; if(s5num!=0) while(!s4); di();/ 表示鬧鐘處于調(diào)整狀態(tài) WriteSet1302(0 x8e,0 x00);調(diào)整鬧鐘,不能讓時(shí)鐘暫停,故沒(méi)把時(shí)鐘數(shù)據(jù)寫(xiě) 入 DS1302中 WriteSet1302(0 xc0,ashi);把鬧鐘數(shù)據(jù)寫(xiě)入 DS1302中 WriteSet1302(0 xfc,afen); WriteSet1302(0 x8e,0 x80); flag2=0; s5num=0; write_com(0 x0c); if(s5=0 if(s5=0 flag2=1; while(!s5); di(); if(s5num=1) wri

20、te_com(0 x80+0 x40+14); write_com(0 x0f); if(s5num=2) write_com(0 x80+0 x40+11); if(s5num=3)/ 鬧鐘功能鍵并且時(shí)鐘不處于調(diào)整狀態(tài) s5num=0; flag2=0; WriteSet1302(0 x8e,0 x00); WriteSet1302(0 xfc,afen); WriteSet1302(0 xc0,ashi); WriteSet1302(0 x8e,0 x80); write_com(0 x0c); if(s5num!=0 if(s2=0) while(!s2); di(); if(s5num

21、=1) x1=afen%16; x2=afen/16; x1+; if(x1=10) x1=0; x2+; if(x2=6) x2=0; afen=x1+x2*16; write_sfm(13,afen); write_com(0 x80+0 x40+14); if(s5num=2) x1=ashi%16; x2=ashi/16; x1+; if(x2=2/ 只有鬧鐘處于調(diào)整狀態(tài) / 鬧鐘加鍵 x2=0; if(x1=10) x1=0; x2+; ashi=x1+x2*16; write_sfm(10,ashi); write_com(0 x80+0 x40+11); if(s3=0) delayms(5); if(s3=0) while(!s3); di(); if(s5num=1) x1=afen%16; x2=afen/16; x1-; if(x1=-1) x1=9; x2-; if(x2=-1) x2=5; afen=x1+x2*16; write_sfm(13,afen); write_com(0 x80+0 x40+

溫馨提示

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

評(píng)論

0/150

提交評(píng)論