51單片機(jī)c語(yǔ)言電子萬(wàn)年歷完整程序_第1頁(yè)
51單片機(jī)c語(yǔ)言電子萬(wàn)年歷完整程序_第2頁(yè)
51單片機(jī)c語(yǔ)言電子萬(wàn)年歷完整程序_第3頁(yè)
51單片機(jī)c語(yǔ)言電子萬(wàn)年歷完整程序_第4頁(yè)
51單片機(jī)c語(yǔ)言電子萬(wàn)年歷完整程序_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、51單片機(jī)c語(yǔ)言電子萬(wàn)年歷完該程序?yàn)?1單片機(jī)c語(yǔ)言電子萬(wàn)年歷#include>vreg52.hlv/#indude<stdio.h>#defineucharunsignedchar#defineuintunsignedintsbitlcden=P3A4;sbitlcdrs=P3A5;sbitDATA=P0A7;sbitRST=P0A5;sbitSCLK=P0A6;sbitmenu=P3A0;/菜單sbitadd=P3Al;力口一sbitdec=P3A7;減一sbitledO=PlAO;sbitledl=PlAl;sbitled2=PlA2;sbitled3=PlA3;sbi

2、tds=P3A2;/sbitbeep=P3A3;uinttemp;floatf_temp;uintwarn_ll=270;uintwarn_l2=250;uintwarn_hl=300;uintwarn_h2=320;uintget_temp();voiddelayms(uintx);voidwrite_com(ucharcom);voidinit();voiddis_temp(uintt);voidWritel302(uchardat);voidWriteSetl302(ucharCmdfuchardat);ucharReadl302(void);ucharReadSetl302(uchar

3、Cmd);voidInit_DS1302(void);voidDisplaySecond(ucharx);voidDisplayMinute(ucharx);voidDisplayHour(ucharx);voidDisplayDay(ucharx);voidDisplayMonth(ucharx);voidDisplayYear(ucharx);voidDisplayWeek(ucharx);voiddis_temp(uintt);voidread_date(void);voidturn_val(charnewval,ucharflag,ucharnewaddr,ucharslnum);vo

4、idkey_scan(void);charcodetable="0123456789”;ucharcodetable2='TUEWESTHUFRISATSUNMON1;ucharsecondzminutezhour/day,monthryearzweek/count=0;ucharReadValueznumztime;voiddelayms(uintx)<uinti,j;for(i=x;i>0;i)for(j=110;j>0;j-);/lcdrs=O;P2=com;delayms(5);lcden=l;delayms(5);lcden=O;>voidw

5、rite_data(uchardate)<lcdrs=l;P2=date;delayms(5);lcden=l;delayms(5);lcden=O;voidinit()<lcden=O;write_com(0x38);write_com(OxOc);write_com(0x06);write_com(0x01);lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllvoidWritel302(uchardat)uchari;SCLK=O;拉低SCLK,為脈沖上升沿寫(xiě)入數(shù)據(jù)做好準(zhǔn)備delayms(2);稍微

6、等待,使硬件做好準(zhǔn)備for(i=0;i<8;i+)連續(xù)寫(xiě)8個(gè)二進(jìn)制位數(shù)據(jù)DATA=dat&0x01;取出dat的第0位數(shù)據(jù)寫(xiě)入1302delayms(2);稍微等待,使硬件做好準(zhǔn)備SCLK=1;上升沿寫(xiě)入數(shù)據(jù)delayms(2);稍微等待,使硬件做好準(zhǔn)備SCLK=O;重新拉低SCLK,形成脈沖dat>>=l;將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫(xiě)入下一個(gè)數(shù)據(jù)位voidWriteSetl302(ucharCmdzuchardat)RST=O;禁止數(shù)據(jù)傳遞SCLK=O;確保寫(xiě)散居前SCLK被拉低RST=1;啟動(dòng)數(shù)據(jù)傳輸delayms(2);稍微等待,使硬件做好準(zhǔn)備Writel

7、302(Cmd);寫(xiě)入命令字Writel302(dat);寫(xiě)數(shù)據(jù)SCLK=1;將時(shí)鐘電平置于已知狀態(tài)RST=O;禁止數(shù)據(jù)傳遞ucharizdat;delayms(2);稍微等待,使硬件做好準(zhǔn)備for(i=0;i<8;i+)連續(xù)讀8個(gè)二進(jìn)制慘據(jù)<dat»=l;將dat的各數(shù)據(jù)位右移1位,因?yàn)橄茸x出的是字節(jié)的最低位if(DATA=l)如果讀出的數(shù)據(jù)是1dat|=0x80;將工取出,寫(xiě)在dat的最高位SCLK=1;將SCLK置于高電平,為下降沿讀出delayms(2);稍微等待SCLK=0;拉低SCLK,形成脈沖下降沿delayms(2);稍微等待returndat;將讀出的數(shù)

8、據(jù)返回ucharReadSetl302(ucharCmd)<uchardat;RST=0;拉低RSTSCLK=0;確保寫(xiě)數(shù)居前SCLK被拉低Rst=i;啟動(dòng)數(shù)據(jù)傳輸Writel302(Cmd);寫(xiě)入命令字dat=Readl302();/讀出數(shù)據(jù)SCLK=1;將時(shí)鐘電平置于已知狀態(tài)RST=0;禁止數(shù)據(jù)傳遞return dat;將讀出的數(shù)據(jù)返回)voidInit_DS1302(void)<WriteSetl302(0x8Ez0x00);/根據(jù)寫(xiě)狀態(tài)寄存器命令字,寫(xiě)入不保護(hù)指令WriteSetl302(0x80z(0/10)«41(0<10);根據(jù)寫(xiě)秒寄存器命令字,寫(xiě)入秒

9、的初始值WriteSetl302(0x82z(59/10)«4|(59<Vbl0);根據(jù)寫(xiě)分寄存器命令字,寫(xiě)入分的初始值WriteSetl302(0x84,(23/10)VV4|(23%10);根據(jù)寫(xiě)小時(shí)寄15gg命令字,寫(xiě)入小時(shí)的初始值WriteSetl302(0x86,(28/10)VV4|(28%)10);/根據(jù)寫(xiě)日寄存器命令字,寫(xiě)入日的初始值WriteSet1302(0x88,(2/10)VV4(2%10);根據(jù)寫(xiě)月寄存器命令字,寫(xiě)入月的初始值WriteSetl302(0x8cz(14/10)<<4|(14<Vbl0);/nian/WriteSetl3

10、02(0x8az(4/10)<<4|(4<Vbl0);)/voidDisplaySecond(ucharx)<ucharizj;i=x/10;j=x<VblO;write_com(0x80+0x46);write_data(i+0x30);write_com(0x80+0x47);write_data(j+0x30);write_com(0x80+0x48);write_dataC*);dis_temp(get_temp();)voidDisSecond(ucharx)<ucharizj;ReadValue=ReadSetl302(0x81);second=

11、(ReadValue&0x70)>>4)*10+(ReadValue&OxOF);i=x/10;j=x<VblO;write_com(0x80+0x46);write_data(i+0x30);write_com(0x80+0x47);write_data0+Ox3O);)voidDisplayMinute(ucharx)<uchari,j;i=x/10;j=x<VblO;write_com(0x80+0x43);write_data(i+0x30);write_com(0x80+0x44);write_data0+Ox3O);write_com(

12、0x80+0x45);write_data(1:1);voidDisplayHour(ucharx)uchari,j;i=x/10;j=x<VblO;write_com(0x80+0x40);write_data(i+0x30);write_com(0x80+0x41);write_data(j+0x30);write_com(0x80+0x42);write.dataC:1);voidDisplayDay(ucharx)<ucharizj;i=x/10;j=x<VblO;write_com(0x89);write_data(i+0x30);write_com(0x8a);w

13、rite_data0+Ox3O);)voidDisplayMonth(ucharx)ucharizj;i=x/10;j=x<VblO;write_com(0x86);write_data(i+0x30);write_com(0x87);write_data(j+0x30);write_com(0x88);write_data(1/1);voidDisplayYear(ucharx)<ucharizj;i=x/10;j=x<VblO;write_com(0x81);write_data(2+0x30);write_com(0x82);write_data(0+0x30);wri

14、te_com(0x83);write_data(i+0x30);write_com(0x84);write_data(j+0x30);write_com(0x85);write_data(v/v);)voidDisplayWeek(ucharx)uchari;x=x*3;/write_com(0x8c);write_data(table2x);/write_com(0x8d);write_data(table2x+l);/write_com(0x8e);write_data(table2x+2);write_com(0x8c);for(i=0;i<3;i+)write_data(tabl

15、e2x);x+;voidread_date(void)<ReadValue=ReadSetl302(0x81);second=(ReadValue&0x70)>>4)*10+(ReadVaIue&OxOF);ReadValue=ReadSetl302(0x83);minute=(ReadValue&0x70)>>4)*10+(ReadValue&OxOF);ReadValue=ReadSetl302(0x85);hour=(ReadValue&0x70)>>4)*10+(ReadValue&OxOF);R

16、eadValue=ReadSetl302(0x87);day=(ReadValue&0x70)>>4)*10+(ReadValue&OxOF);ReadValue=ReadSetl302(0x89);month=(ReadValue&0x70)>>4)*10+(ReadVaIue&OxOF);ReadValue=ReadSetl302(0x8d);year=(ReadValue&0x70)>>4)*10+(ReadValue&OxOF);ReadValue=ReadSetl302(0x8b);/讀星期week=

17、ReadValue&0x07;DisplayYear(year);DisplayMonth(month);DisplayDay(day);DisplayWeek(week);DisplayHour(hour);DisplayMinute(minute);DisplaySecond(second);/溫度顯示/按健檢測(cè)dis_temp(get_temp();key_scan();)voidturn_val(charnewvalzucharflagzucharnewaddrzucharslnum)<newval=ReadSetl302(newaddr);讀取當(dāng)前時(shí)間newval=(n

18、ewval&0x70)>>4)*10+(newval&0x0f);將bed碼轉(zhuǎn)換成十進(jìn)制if(flag)判斷是加一還是減一<newval+;switch(slnum)case1:if(newval>99)newval=O;DisplayYear(newval);break;case 2: if(newval>12)newval=l;DisplayMonth(newval);break;case 3: if(newval>31)newval=l;DisplayDay(newval);break;case 4: if(newval>6)ne

19、wval=O;DisplayWeek(newval);break;case 5: if(newval>23)newval=O;DisplayHour(newval);break;case 6: if(newval>59)newval=O;DisplayMinute(newval);break;case 7: if(newval>59)newval=O;DisplaySecond(newval);break;defaultzbreak;else<newval-;switch(slnum)case1:if(newval=O)newval=99;DisplayYear(new

20、val);break;case 2: if(newval=O)newval=12;DisplayMonth(newval);break;case 3: if(newval=O)newval=31;DisplayDay(newval);break;case 4: if(newval<0)newval=6;DisplayWeek(newval);break;case 5: if(newval<0)newval=23;DisplayHour(newval);break;case 6: if(newval<0)newval=59;DisplayMinute(newval);break

21、;case 7: if(newval<0)newval=59;DisplaySecond(newval);break;default:break;)WriteSetl302(newaddr-l)z(newval/10)<<4)|(newvallO);將新數(shù)據(jù)寫(xiě)入寄存器/voiddsreset(void)uinti;ds=O;i=103;while(i>0)i-;ds=l;i=4;while(i>0)i-;)bittempreadbit(void)uinti;bitdat;ds=O;i+;ds=l;i+;i+;dat=ds;i=8;while(i>0)i-;r

22、eturn(dat);)uchartempread(void)<ucharijzdat;dat=O;for(i=l;i<=8;i+)<j=tempreadbit();dat=(j<<7)|(dat>>l);return(dat);)voidtempwritebyte(uchardat)<uinti;ucharj;bittestb;for0=l;j<=8;j+)<testb=dat&OxO1;dat=dat>>l;if(testb)ds=O;i+;i+;ds=l;i=8;while(i>0)i-;else<

23、;ds=O;i=8;while(i>O)i-;ds=l;i+;i+;)voidtempchange(void)<dsreset();delayms(l);tempwritebyte(Oxcc);tempwritebyte(0x44);keyscan();按鍵函數(shù))uintget_temp()<ucharazb;tempchange();/iSS函數(shù)dsreset();delayms(l);tempwritebyte(Oxcc);tempwritebyte(Oxbe);a=tempread();b=tempread();temp=b;temp<<=8;temp=te

24、mp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;f_temp=f_temp+0.05;returntemp;/voiddis_temp(uintt)ucharnlzn2zn3;nl=t/100;n2=t<Vbl00/10;n3=t<Vbl00<Vbl0;/秒顯示DisSecond(second);write_com(0x80+0x49);write_data(tablenl);/delayms(5);write_com(0x80+0x4a);write_data(tablen2);/delayms(5);write_com(0x80+0x

25、4b);write_data(,);/delayms(5);(Oduia4-436)dui94-sjp(TWlNMfs=i如xo=id=dgqf()duid4_4a0)diua4-s;p)(-!)9!qMf(pa|)rv=Td,O=daaq/fs=!hjeqon?(pa|jeq3nys)U!n)ueMpjoA/*區(qū)杳晉V*/空皆叫f(pUO39S)pUO3dSS!a(S)siuAbpp/(QjqepFUJM,(&txo+08XO)iuo:F!M(S)siuAbpp/;(lVl)e4Bp-a4UM(PfrX0+08X0)UJOD_94UM/(S)suiAepp/,(Ma|qr間叩Fm!(

26、»xo+O8XO)uic»F1!m)voiddeal(uintt)<uchari;if(t>warn_l2)&&(t<=warn_l1)<warn(40z0x01);elseif(t<=warn_l2)<warn(10z0x03);elseif(t<warn_h2)&&(t>=warn_h1)<warn(40,0x04);elseif(t>=warn_h2)<warn(10z0x0c);?elsei=40;while(i-)dis_temp(get_temp();DisSeco

27、nd(second);/voidmain()Init_DS1302();while(l)<tempchange();read_date();deal(temp);key_scan();/*voidkey_scan(void)/ucharmiaozslnum=0;ucharslnum=O;if(menu=O)delayms(5);if(menu=O)while(!menu);slnum+;while(l)if(dec=O)<while(ldec);turn_vaI(yearz0z0x8dzl);)if(slnum=2)</month=ReadSetl302(0x89);writ

28、e_com(0x80+7);月光標(biāo)if(add=O)<delayms(3);if(add=O)while(Iadd);turn_val(monthzl,0x89z2);)if(dec=O)<delayms(3);if(dec=O)<while(!dec);turn_val(monthz0z0x89z2);if(slnum=3)/day=ReadSetl302(0x87);write_com(0x80+10);/日光標(biāo)if(add=O)delayms(3);if(add=O)<while(ladd);turn_val(dayzlz0x87,3);?if(dec=O)<delayms(3);if(dec=O)<while(!dec);turn_val(dayz0,0x87,3);寫(xiě)入日寄存器if(slnum=4)/week=ReadSetl302(0x8b);write_com(0x80

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論