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è),還剩20頁(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、該程序?yàn)?1單片機(jī)c語(yǔ)言電子萬(wàn)年歷#includereg52.h/#include#define uchar unsigned char#define uint unsigned intsbit lcden=P3A4;sbit lcdrs=P3A5;sbit DATA=P0A7;sbit RST=P0A5;sbit SCLK=P0A6;菜單加一減一sbit menu=P3A0; /sbit add=P3A1;/sbit dec=P3A7;/sbit led0=P1A0;sbit led1=P1A1;sbit led2=P1A2;sbit led3=P1A3;sbit ds=P3A2;/sbit

2、 beep=P3A3;uint temp;float f_temp;uint warn_l1=270;uint warn_l2=250;uint warn_h1=300;uint warn_h2=320;uint get_temp();void delayms(uint x);void write_com(uchar com);void init();void dis_temp(uint t);void Write1302(uchar dat);void WriteSet1302(uchar Cmd,uchar dat);uchar Read1302(void);uchar ReadSet13

3、02(uchar Cmd);void Init_DS1302(void);void DisplaySecond(uchar x);void DisplayMinute(uchar x);void DisplayHour(uchar x);void DisplayDay(uchar x);void DisplayMonth(uchar x);void DisplayYear(uchar x);void DisplayWeek(uchar x);void dis_temp(uint t);void read_date(void);void turn_val(char newval,uchar fl

4、ag,uchar newaddr,uchar s1num);void key_scan(void);uchar code table2= TUEWESTHUFRISATSUNMON;uchar second,minute,hour,day,month,year,week,count=0;uchar ReadValue,num,time;void delayms(uint x)uint i,j;for(i=x;i0;i-)for(j=110;j0;j-);/lcdrs=0;P2=com;delayms(5);lcden=1;delayms(5);lcden=0;)void write_data(

5、uchar date)(lcdrs=1;P2=date;delayms(5);lcden=1;delayms(5);lcden=0;)void init()(lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);)/void Write1302(uchar dat)(uchar i;SCLK=0;/ 拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備delayms(2); /稍微等待,使硬件做好準(zhǔn)備for(i=0;i=1;/ 將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個(gè)數(shù)據(jù)位void WriteSet1302(uc

6、har Cmd,uchar dat)RST=0;/禁止數(shù)據(jù)傳遞SCLK=0;/保證寫數(shù)居前SCLK被拉低RST=1;/啟動(dòng)數(shù)據(jù)傳輸delayms(2);/稍微等待,使硬件做好準(zhǔn)備Write1302(Cmd);/寫入命令字Write1302(dat); / 寫數(shù)據(jù)SCLK=1; / 將時(shí)鐘電平置于狀態(tài)RST=0; / 禁止數(shù)據(jù)傳遞uchar Read1302(void)(uchar i,dat;for(i=0;i=1;/ 將dat的各數(shù)據(jù)位右移1位,由于先讀出的是字節(jié)的最低位if(DATA=1) /如果讀出的數(shù)據(jù)是 1dat|=0x80; / 將1取出,寫在 dat的最高位SCLK=1; /將S

7、CLK置于高電平,為下降沿讀出delayms(2); / 稍微等待SCLK=0; / 拉低SCLK,形成脈沖下降沿delayms(2); /稍微等待return dat; /將讀出的數(shù)據(jù)返回uchar ReadSet1302(uchar Cmd)(uchar dat;RST=0;/拉低 RSTSCLK=0;/ 保證寫數(shù)居前SCLK被拉低RST=1;/啟動(dòng)數(shù)據(jù)傳輸Write1302(Cmd);/寫入命令字dat=Read1302();/讀出數(shù)據(jù)SCLK=1;/將時(shí)鐘電平置于狀態(tài)RST=0;/禁止數(shù)據(jù)傳遞return dat;/將讀出的數(shù)據(jù)返回 void Init_DS1302(void)(護(hù)指令

8、WriteSet1302(0x8E,0x00);/根據(jù)寫狀態(tài)存放器命令字,寫入不保WriteSet1302(0x80,(0/10)4|(0%10); /秒的初始值根據(jù)寫秒存放器命令字,寫入WriteSet1302(0x82,(59/10)4|(59%10); /根據(jù)寫分存放器命令字,寫入分的初始值WriteSet1302(0x84,(23/10)4|(23%10); /入小時(shí)的初始值根據(jù)寫小時(shí)存放器命令字,寫WriteSet1302(0x86,(28/10)4|(28%10); /根據(jù)寫日存放器命令字,寫入日的初始值WriteSet1302(0x88,(2/10)4|(2%10); /的初始值

9、根據(jù)寫月存放器命令字,寫入月WriteSet1302(0x8c,(14/10)4|(14%10); /nian/WriteSet1302(0x8a,(4/10)4)*10 + (ReadValue&0x0F);i=x/10;j=x%10;write_com(0x80+0x46);write_data(i+0x30);write_com(0x80+0x47);write_data(j+0x30);void DisplayMinute(uchar x)(uchar i,j;i=x/10;j=x%10;write_com(0x80+0x43);write_data(i+0x30);write_com

10、(0x80+0x44);write_data(j+0x30);write_com(0x80+0x45);write_data(:);void DisplayHour(uchar x)(uchar i,j;i=x/10;j=x%10;write_com(0x80+0x40);write_data(i+0x30);write_com(0x80+0x41);write_data(j+0x30);write_com(0x80+0x42);write_data(:);void DisplayDay(uchar x)uchar i,j;i=x/10;j=x%10;write_com(0x89);write

11、_data(i+0x30);write_com(0x8a);write_data(j+0x30);void DisplayMonth(uchar x)uchar i,j;i=x/10;j=x%10;write_com(0x86);write_data(i+0x30);write_com(0x87);write_data(j+0x30);write_com(0x88);write_data(/);void DisplayYear(uchar x)i=x/10;j=x%10;write_com(0x81);write_data(2+0x30);write_com(0x82);write_data(

12、0+0x30);write_com(0x83);write_data(i+0x30);write_com(0x84);write_data(j+0x30);write_com(0x85);write_data(/);void DisplayWeek(uchar x) uchar i;x=x*3;/ write_com(0x8c);write_data(table2x);/ write_com(0x8d);write_data(table2x+1);/ write_com(0x8e);write_data(table2x+2);write_com(0x8c);for(i=0;i4)*10 + (

13、ReadValue&0x0F);ReadValue = ReadSet1302(0x83);minute=(ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x85);hour=(ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x87);day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x89);month=(ReadValue&0x70)4)*

14、10 + (ReadValue&0x0F);ReadValue = ReadSet1302(0x8d);year=(ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue=ReadSet1302(0x8b);/ 讀星期week=ReadValue&0x07;DisplayYear(year);DisplayMonth(month);DisplayDay(day);DisplayWeek(week);DisplayHour(hour);DisplayMinute(minute);DisplaySecond(second);dis_temp(get_te

15、mp();/溫度顯示key_scan();/按鍵檢測(cè)void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num)newval=ReadSet1302(newaddr);/讀取當(dāng)前時(shí)間newval=(newval&0x70)4)*10+(newval&0x0f); /將 bcd 碼轉(zhuǎn)換成十進(jìn)制if(flag)/判斷是加一還是減一newval+;switch(slnum) case 1: if(newval99) newval=0;DisplayYear(newval);break;case 2: if(newval12) newv

16、al=1;DisplayMonth(newval);break;case 3: if(newval31) newval=1;DisplayDay(newval);break;case 4: if(newval6) newval=0;DisplayWeek(newval);break;case 5: if(newval23) newval=0;DisplayHour(newval);break;case 6: if(newval59) newval=0;DisplayMinute(newval);break;case 7: if(newval59) newval=0;DisplaySecond(

17、newval);break;default:break;elsenewval-;switch(s1num) case 1: if(newval=0) newval=99;DisplayYear(newval);break;case 2: if(newval=0) newval=12;DisplayMonth(newval);break;case 3: if(newval=0) newval=31;DisplayDay(newval);break;case 4: if(newval0) newval=6;DisplayWeek(newval);break;case 5: if(newval0)

18、newval=23;DisplayHour(newval);break;case 6: if(newval0) newval=59;DisplayMinute(newval);break;case 7: if(newval0) newval=59;DisplaySecond(newval);break;default:break;WriteSet1302(newaddr-1),(newval/10)0)i-;ds=1;i=4;while(i0)i-;)bit tempreadbit(void)(uint i;bit dat;ds=0;i+;ds=1;i+;i+;dat=ds;i=8;while

19、(i0)i-;return(dat);)uchar tempread(void)(uchar i,j,dat;dat=0;for(i=1;i=8;i+)(j=tempreadbit();dat=(j1);)return(dat);)void tempwritebyte(uchar dat)(uint i;uchar j;bit testb;for(j=1;j1;if(testb)(ds=0;i+;i+;ds=1;i=8;while(i0)i-;)else(ds=0;i=8;while(i0)i-;ds=1;i+;i+;void tempchange(void)(dsreset();delaym

20、s(1);tempwritebyte(0xcc);tempwritebyte(0x44);key_scan();/ 按鍵函數(shù))uint get_temp()(uchar a,b;tempchange();/ 溫度函數(shù)dsreset();delayms(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;tempwarn_l2)&(t=warn_l1)(warn(40,0x01);else if(t=warn_l2)(warn(10,0x03);else if(t=warn_h1)(warn(40

21、,0x04);else if(t=warn_h2)(warn(10,0x0c);)else(i=40;while(i-)dis_temp(get_temp();DisSecond(second);)/void main()init();Init_DS1302();while(1)tempchange();read_date();deal(temp);key_scan();/*void key_scan(void)/ uchar miao,s1num=0;uchar s1num=0;delayms(5);if(menu=0)(while(!menu);s1num+;while(1)(if(men

22、u=0)(delayms(5);if(menu=0)(while(!menu);s1num+;/miao=ReadSet1302(0x81);/second=miao;/WriteSet1302(0x80,miao|0x80);write_com(0x0f);光標(biāo)閃射if(s1num=1) /year=ReadSet1302(0x8d);write_com(0x80+4); / 年光標(biāo)if(add=0)delayms(3);if(add=0)while(!add);turn_val(year,1,0x8d,1);)if(dec=0)(delayms(3);if(dec=0)while(!dec

23、);turn_val(year,0,0x8d,1);)if(s1num=2)/month=ReadSet1302(0x89);write_com(0x80+7); / 月光標(biāo)if(add=0)delayms(3);if(add=0) while(!add);turn_val(month,1,0x89,2);)if(dec=0)delayms(3);if(dec=0) while(!dec);turn_val(month,0,0x89,2);)if(s1num=3)/day=ReadSet1302(0x87);write_com(0x80+10);/ 日光標(biāo)if(add=0)delayms(3);if(add=0) while(!add);turn_val(day,1,0x87,3);)if(dec=0)delayms(3);if(dec=0) while(!dec);寫入日寄turn_val(day,0,0x87,3);存器)if(s1num=4) /week=ReadSet1302(0x8b);write_com(0x80+14);/ 星期光標(biāo)if(add=0)delayms(3);if(add=0) while(!add);turn_val(week,1,0x8b,4);)if(dec=0)delayms(3);if(dec=0) while(!

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論