测温+万年历.docx

上传人:b****7 文档编号:23815437 上传时间:2023-05-21 格式:DOCX 页数:27 大小:46.55KB
下载 相关 举报
测温+万年历.docx_第1页
第1页 / 共27页
测温+万年历.docx_第2页
第2页 / 共27页
测温+万年历.docx_第3页
第3页 / 共27页
测温+万年历.docx_第4页
第4页 / 共27页
测温+万年历.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

测温+万年历.docx

《测温+万年历.docx》由会员分享,可在线阅读,更多相关《测温+万年历.docx(27页珍藏版)》请在冰豆网上搜索。

测温+万年历.docx

测温+万年历

//本程序实现测温+万年历显示;

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDS1302_CLK=P3^5;

sbitDS1302_IO=P3^6;

sbitDS1302_RST=P3^7;

sbitxing=P3^4;

sbitshanshuo=P1^0;

sbitjia=P1^1;

sbitjian=P1^2;

sbitDQ=P1^5;

sbitwei1=P1^6;

sbitwei2=P1^7;

sbitnao=P1^4;

sbitxa=P1^3;

ucharshanshuobz,jiabz,jianbz,flag,shanbz,naobz,naozhong;

ucharnum=0,x,t1;

uchartab[13];

ucharnaotab[6];

ucharnaobj[3],naojs,nz;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

floattp;

uchardisptab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};

uchardispbuf[6];

unsignedcharsecond,minute,hour,week,day,month,year,temp,t,t1,flag,shi,ge;//秒、分、时、星期、日、月、年

unsignedchartime[]={0x22,0x12,0x31,0x06,0x23,0x59,0x45};//初始时间数组11年12月31日23点59分45秒

voiddelay(ucharz)

{

ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidInputByte(unsignedcharbyte1)

{unsignedchari;//向DS1302送一字节数据子程序

ACC=byte1;

for(i=8;i>0;i--)

{

DS1302_IO=ACC0;

DS1302_CLK=1;

DS1302_CLK=0;

ACC=ACC>>1;

}

return;

}

unsignedcharOutputByte()

{//读DS1302一个字节子程序

unsignedchari;

for(i=8;i>0;i--)

{ACC=ACC>>1;

ACC7=DS1302_IO;

DS1302_CLK=1;

DS1302_CLK=0;

}

return(ACC);

}

voidwrite_ds1302(unsignedcharaddr,unsignedcharTDat)

{

DS1302_RST=0;//向DS1302某地址写一字节数据子程序

_nop_();

DS1302_CLK=0;

_nop_();

DS1302_RST=1;

InputByte(addr);

_nop_();

InputByte(TDat);

DS1302_CLK=1;

_nop_();

DS1302_RST=0;

}

unsignedcharread_ds1302(unsignedcharaddr)

{//读DS1302地址子程序

unsignedchartimedata,kk;

DS1302_RST=0;

_nop_();

DS1302_CLK=0;

_nop_();

DS1302_RST=1;

InputByte(addr);

timedata=OutputByte();

DS1302_CLK=1;

_nop_();

DS1302_RST=0;

kk=timedata>>4;

kk=kk*10+(timedata&=0x0f);

return(kk);

}

voidinitial_ds1302()//初始化DS1302子程序

{

write_ds1302(0x8e,0x00);//写保护寄存器,在对时钟或RAM写前WP一定要为0

write_ds1302(0x8c,time[0]);//年

write_ds1302(0x88,time[1]);//月

write_ds1302(0x86,time[2]);//日

write_ds1302(0x8A,time[3]);//星期

write_ds1302(0x84,time[4]);//时

write_ds1302(0x82,time[5]);//分

write_ds1302(0x80,time[6]);//秒

write_ds1302(0x8e,0x80);//写保护寄存器

}

voidread_time()

{//读DS1302时间子程序

second=read_ds1302(0x81);//秒寄存器

minute=read_ds1302(0x83);//分

hour=read_ds1302(0x85);//时

week=read_ds1302(0x8B);//星期

day=read_ds1302(0x87);//日

month=read_ds1302(0x89);//月

year=read_ds1302(0x8d);//年

}

voidfenli(void)

{

if(num==1)

{if(shanshuobz==0)

{tab[0]=0x00;

tab[1]=0x00;

}

else

{

tab[0]=disptab[year/10];

tab[1]=disptab[year%10];

}

}

else

{

tab[0]=disptab[year/10];

tab[1]=disptab[year%10];}

if(num==2)

{if(shanshuobz==0)

{tab[2]=0x00;

tab[3]=0x00;

}

else

{

tab[2]=disptab[month/10];

tab[3]=disptab[month%10];

}

}

else

{

tab[2]=disptab[month/10];

tab[3]=disptab[month%10];}

if(num==3)

{if(shanshuobz==0)

{tab[4]=0x00;

tab[5]=0x00;

}

else

{

tab[4]=disptab[day/10];

tab[5]=disptab[day%10];

}

}

else

{

tab[4]=disptab[day/10];

tab[5]=disptab[day%10];}

if(num==4)

{if(shanshuobz==0)

{tab[6]=0x00;

tab[7]=0x00;

}

else

{

tab[6]=disptab[hour/10];

tab[7]=disptab[hour%10];

}

}

else

{

tab[6]=disptab[hour/10];

tab[7]=disptab[hour%10];}

if(num==5)

{if(shanshuobz==0)

{tab[8]=0x00;

tab[9]=0x00;

}

else

{

tab[8]=disptab[minute/10];

tab[9]=disptab[minute%10];

}

}

else

{

tab[8]=disptab[minute/10];

tab[9]=disptab[minute%10];}

if(num==6)

{if(shanshuobz==0)

{tab[10]=0x00;

tab[11]=0x00;

}

else

{

tab[10]=disptab[second/10];

tab[11]=disptab[second%10];

}

}

else

{

tab[10]=disptab[second/10];

tab[11]=disptab[second%10];}

if(num==7)

{if(shanshuobz==0)

{tab[12]=0x00;

}

else

{

tab[12]=disptab[week];

}

}

else

{

tab[12]=disptab[week];

}

}

voiddisplay()

{uchara,b=0xfe,c=0xfe;

for(a=4;a<12;a++)

{P2=b;

P0=tab[a];

delay(10);

b=_crol_(b,1);

P2=0xff;

P0=0x00;

}

for(a=0;a<4;a++)

{

P3=c;

P0=tab[a];

delay(10);

c=_crol_(c,1);

P3=0xff;

P0=0x00;

}

xing=0;

P0=tab[12];

delay(10);

xing=1;

P0=0x00;

}

voidnumjia(void)

{

switch(num)

{

case0:

{;}break;

case1:

{year++;

if(year==100)

{year=0;}

t1=year/10*16+year%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x8c,0x00|t1);//year数据写入DS1302

write_ds1302(0x8e,0x80);}break;

case2:

{month++;

if(month==13)

{month=1;}

t1=month/10*16+month%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x88,0x00|t1);//month数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case3:

{day++;

if(day==32)

{day=1;}

t1=day/10*16+day%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x86,0x00|t1);//day数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case4:

{hour++;

if(hour==24)

{hour=0;}

t1=hour/10*16+hour%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x84,0x00|t1);//hour数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case5:

{minute++;

if(minute==60)

{minute=0;}

t1=minute/10*16+minute%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x82,0x00|t1);//minute数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case6:

{second++;

if(second==60)

{second=0;}

t1=second/10*16+second%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x80,0x00|t1);//second数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case7:

{week++;

if(week==8)

{week=1;}

t1=week/10*16+week%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x8a,0x00|t1);//week数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

default:

break;

}

}

voidnumjian(void)

{

switch(num)

{

case0:

{;}break;

case1:

{year=year-1;

if(year==0)

{year=100;}

t1=year/10*16+year%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x8c,0x00|t1);//year数据写入DS1302

write_ds1302(0x8e,0x80);}break;

case2:

{month--;

if(month==0)

{month=12;}

t1=month/10*16+month%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x88,0x00|t1);//month数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case3:

{day--;

if(day==0)

{day=31;}

t1=day/10*16+day%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x86,0x00|t1);//day数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case4:

{hour--;

if(hour==255)

{hour=23;}

t1=hour/10*16+hour%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x84,0x00|t1);//hour数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case5:

{minute--;

if(minute==255)

{minute=59;}

t1=minute/10*16+minute%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x82,0x00|t1);//minute数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case6:

{second--;

if(second==255)

{second=59;}

t1=second/10*16+second%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x80,0x00|t1);//second数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

case7:

{week--;

if(week==0)

{week=7;}

t1=week/10*16+week%10;

write_ds1302(0x8e,0x00);

write_ds1302(0x8a,0x00|t1);//week数据写入DS1302

write_ds1302(0x8e,0x80);;}break;

default:

break;

}

}

voidnaojia(void)

{

switch(num)

{

case0:

{;}break;

case1:

{naobj[0]++;

if(naobj[0]==24)

{naobj[0]=0;}

}break;

case2:

{naobj[1]++;

if(naobj[1]==60)

{naobj[1]=0;}

}break;

case3:

{naobj[2]++;

if(naobj[2]==60)

{naobj[2]=0;}

}break;

}

}

voidnaojian(void)

{

switch(num)

{

case0:

{;}break;

case1:

{naobj[0]--;

if(naobj[0]==255)

{naobj[0]=24;}

}break;

case2:

{naobj[1]--;

if(naobj[1]==255)

{naobj[1]=60;}

}break;

case3:

{naobj[2]--;

if(naobj[2]==255)

{naobj[2]=60;}

}break;

}

}

voidkey(void)

{

if(shanshuo==0)

{

if(shanbz==0)

{shanbz=1;

num++;

if(naozhong==0)

{if(num==8)

{num=0;}

}

else

{if(num==4)

{num=0;}

}

}}

if(shanshuo!

=0)

{shanbz=0;}

if(jian==0)

{if(jianbz==0)

{jianbz=1;

if(naozhong==0)

{numjian();}

else

{naojian();}

}

}

if(jian!

=0)

{

jianbz=0;

}

if(jia==0)

{

if(jiabz==0)

{jiabz=1;

if(naozhong==0)

{numjia();}

else

{naojia();}

}

}

if(jia!

=0)

{

jiabz=0;

}

if(nao==0)

{

if(naobz==0)

{

naobz=1;

naozhong=~naozhong;

num=0;

}

}

if(nao!

=0)

{

naobz=0;

}

}

voiddelayx(uinti)

{

while(i--);

}

voidDelayMS(uintms)

{

uchari;

while(ms--)for(i=0;i<120;i++);

}

voiddisplaydq(intk)//数码管显示

{

wei1=0;

P0=disptab[k/10];

DelayMS(5);

wei1=1;

P0=0x00;

wei2=0;

P0=disptab[k%10];

DelayMS(5);

wei2=1;

P0=0x00;

}

voidinit_DS(void)

{

ucharx=0;

DQ=1;

delayx(8);

DQ=0;

delayx(85);

DQ=1;

delayx(14);

x=DQ;

delayx(20);

}

Read(void)

{

uchari=0;

uchardat=0;

for(i=8;i>0;i--)

{

DQ=0;

dat>>=1;

DQ=1;

if(DQ)

dat|=0x80;

delayx(4);

}

return(dat);}

voidwrite(uchardat)

{uchari=0;

for(i=8;i>0;i--)

{DQ=0;

DQ=dat&0x01;

delayx(5);

DQ=1;

dat>>=1;}

delayx(4);}

Readtem(void)

{uchara=0;

ucharb=0;

uchart=0,t1;

init_DS();

write(0xcc);

write(0x44);

delayx(125);

init_DS();

write(0xcc);

write(0xbe);

a=Read();

b=Read();

t1=(a&0x0f)*0.0625;

t=((b<<4)|(a>>4));

if(t>128)

{

t=~t+1;

}

t=t+t1;

return(t);

}

voidfenlinao(void)

{

if(num==1)

{if(shanshuobz==0)

{naotab[0]=0x00;

naotab[1]=0x00;

}

else

{

naotab[0]=disptab[naobj[0]/10];

naotab[1]=disptab[naobj[0]%10];

}

}

else

{

naotab[0]=disptab[naobj[0]/10];

naotab[1]=disptab[naobj[0]%10];}

if(num==2)

{if(shanshuobz==0)

{naotab[2]=0x00;

naotab[3]=0x00;

}

else

{

naotab[2]=dispt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1