DS1302设计的可调万年历实测正常附有程序.docx
- 文档编号:24532560
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:17
- 大小:120.45KB
DS1302设计的可调万年历实测正常附有程序.docx
《DS1302设计的可调万年历实测正常附有程序.docx》由会员分享,可在线阅读,更多相关《DS1302设计的可调万年历实测正常附有程序.docx(17页珍藏版)》请在冰豆网上搜索。
DS1302设计的可调万年历实测正常附有程序
DS1302设计的可调万年历(实测正常-附有程序)
DS1302设计的可调万年历
(本制作所用数码管全为共阳数码管)
我刚开始想做万年历的时候是上网找别人的程序,可是发现找了很多都不理想,要不就没日历和时间一起显示,要不就不能调时间的,后来我研究了两天,自己终于把程序编了出来。
好了,废话我就不多说,本制作我已经把实物做了出来,保证没问题!
下面附有仿真图和实物图。
拍摄的效果不够好,但实物是不错的,本人实物中用三级管代替了仿真图的74HC04非门,用哪个都是可以的……
请注意:
本程序分两个C文件的,如果不会编,可以Q我:
1107588997我直接发程序过去给你……
软件源程序:
(初始化程序只在开始时用一次,之后要把它屏蔽掉)
#include
#include
#include
uchartime_data[7]={0,0,0,0,0,0,0};
ucharwrite_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
ucharread_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
voidwrite_ds1302_byte(uchardat)
{
uchari;
for(i=0;i<8;i++)
{
sck=0;
io=dat&0x01;
dat=dat>>1;
sck=1;
}
}
voidwrite_ds1302(ucharadd,uchardat)
{
rst=0;_nop_();
sck=0;_nop_();
rst=1;_nop_();
write_ds1302_byte(add);
write_ds1302_byte(dat);
rst=0;_nop_();
io=1;
sck=1;
}
ucharread_ds1302(ucharadd)
{
uchari,value;
rst=0;_nop_();
sck=0;_nop_();
rst=1;_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
value=value>>1;
sck=0;
if(io)
value=value|0x80;
sck=1;
}
rst=0;_nop_();
sck=0;_nop_();
sck=1;
io=1;
returnvalue;
}
voidread_rtc(void)
{
uchari;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302(read_add[i]);
}
}
voidtime_pros(void)
{
nian=time_data[0]/16*10+time_data[0]%16;
yue=time_data[2]/16*10+time_data[2]%16;
ri=time_data[3]/16*10+time_data[3]%16;
xi=time_data[1]/16*10+time_data[1]%16;
shi=time_data[4]/16*10+time_data[4]%16;
fen=time_data[5]/16*10+time_data[5]%16;
miao=time_data[6]/16*10+time_data[6]%16;
}
voidmain()
{
//Init_DS1302();//初始化
while
(1)
{
read_rtc();
time_pros();
display();
button();
}
}
//----------------------------zichengxu.c----------------------------------------------
#defineDUAN1P2
#defineDUAN2P3
#defineWEIP0
#defineuintunsignedint
#defineucharunsignedchar
sbitsck=P1^1;
sbitio=P1^0;
sbitrst=P1^2;
sbitk1=P1^4;
sbitk2=P1^5;
sbitk3=P1^6;
sbitk4=P1^7;
ucharshi,fen,miao,nian,yue,ri,xi,menu,y;
unsignedcharcodequan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voidwrite_ds1302_byte(uchardat);
voidwrite_ds1302(ucharadd,uchardat);
ucharread_ds1302(ucharadd);
//voidInit_DS1302(void);//初始化
voidread_rtc(void);
voidtime_pros(void);
voiddisplay(void);
voidbutton(void);
voiddelay(uintz)
{
ucharx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*(voidInit_DS1302(void)//初始化
{
write_ds1302(0x8e,0x00);
write_ds1302(0x80,0x00);
write_ds1302(0x82,0x20);
write_ds1302(0x84,0x09);
write_ds1302(0x86,0x25);
write_ds1302(0x88,0x12);
write_ds1302(0x8a,0x06);
write_ds1302(0x8c,0x10);
write_ds1302(0x90,0x01);
write_ds1302(0xc0,0xf0);
write_ds1302(0x8e,0x80);
}*/
voiddisplay(void)
{
WEI=0;
DUAN1=quan[2];
if(menu==3&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN2=0xff;}
elseDUAN2=quan[shi/10];
delay
(2);
DUAN1=0xff;
DUAN2=0xff;
WEI=1;
DUAN1=quan[0];
if(menu==3&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN2=0xff;}
elseDUAN2=quan[shi%10];
delay
(2);
DUAN1=0xff;
DUAN2=0xff;
WEI=2;
if(menu==7&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN1=0xff;}
elseDUAN1=quan[nian/10];
if(menu==2&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN2=0xff;}
elseDUAN2=quan[fen/10];
delay
(2);
DUAN1=0xff;
DUAN2=0xff;
WEI=3;
if(menu==7&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN1=0xff;}
elseDUAN1=quan[nian%10];
if(menu==2&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN2=0xff;}
elseDUAN2=quan[fen%10];
delay
(2);
DUAN1=0xff;
DUAN2=0xff;
WEI=4;
if(menu==6&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN1=0xff;}
elseDUAN1=quan[yue/10];
if(menu==1&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN2=0xff;}
elseDUAN2=quan[miao/10];
delay
(2);
DUAN1=0xff;
DUAN2=0xff;
WEI=5;
if(menu==6&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN1=0xff;}
elseDUAN1=quan[yue%10];
if(menu==1&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN2=0xff;}
elseDUAN2=quan[miao%10];
delay
(2);
DUAN1=0xff;
DUAN2=0xff;
WEI=6;
if(menu==5&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN1=0xff;}
elseDUAN1=quan[ri/10];
DUAN2=0xff;
delay
(2);
DUAN1=0xff;
WEI=7;
if(menu==5&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN1=0xff;}
elseDUAN1=quan[ri%10];
if(menu==4&&y<80&&k1!
=0&&k2!
=0&&k3!
=0&&k4!
=0)
{DUAN2=0xff;}
elseDUAN2=quan[xi%10];
delay
(2);
DUAN1=0xff;
DUAN2=0xff;
}
voidbutton(void)
{
if(k4==0)
{
delay(10);
if(k4==0)
{
menu++;
if(menu>=8){menu=0;}
while(!
k4){display();}
}
}
if(menu==1)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
miao++;
if(miao==60){miao=0;}
while(!
k2){display();}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
miao--;
if(miao==255){miao=59;}
while(!
k3){display();}
}
}
write_ds1302(0x8e,0x00);
write_ds1302(0x80,miao/10*16+miao%10);
write_ds1302(0x8e,0x80);
y++;if(y>=160){y=0;}
}
if(menu==2)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
fen++;
if(fen==60){fen=0;}
while(!
k2){display();}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
fen--;
if(fen==255){fen=59;}
while(!
k3){display();}
}
}
write_ds1302(0x8e,0x00);
write_ds1302(0x82,fen/10*16+fen%10);
write_ds1302(0x8e,0x80);
y++;if(y>=160){y=0;}
}
if(menu==3)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
shi++;
if(shi==24){shi=0;}
while(!
k2){display();}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
shi--;
if(shi==255){shi=23;}
while(!
k3){display();}
}
}
write_ds1302(0x8e,0x00);
write_ds1302(0x84,shi/10*16+shi%10);
write_ds1302(0x8e,0x80);
y++;if(y>=160){y=0;}
}
if(menu==4)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
xi++;
if(xi==8){xi=1;}
while(!
k2){display();}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
xi--;
if(xi==0){xi=7;}
while(!
k3){display();}
}
}
write_ds1302(0x8e,0x00);
write_ds1302(0x8a,xi/10*16+xi%10);
write_ds1302(0x8e,0x80);
y++;if(y>=160){y=0;}
}
if(menu==5)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
ri++;
if(ri==32){ri=1;}
while(!
k2){display();}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
ri--;
if(ri==0){ri=31;}
while(!
k3){display();}
}
}
write_ds1302(0x8e,0x00);
write_ds1302(0x86,ri/10*16+ri%10);
write_ds1302(0x8e,0x80);
y++;if(y>=160){y=0;}
}
if(menu==6)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
yue++;
if(yue==13){yue=1;}
while(!
k2){display();}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
yue--;
if(yue==0){yue=12;}
while(!
k3){display();}
}
}
write_ds1302(0x8e,0x00);
write_ds1302(0x88,yue/10*16+yue%10);
write_ds1302(0x8e,0x80);
y++;if(y>=160){y=0;}
}
if(menu==7)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
nian++;
if(nian==100){nian=0;}
while(!
k2){display();}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
nian--;
if(nian==255){nian=99;}
while(!
k3){display();}
}
}
write_ds1302(0x8e,0x00);
write_ds1302(0x8c,nian/10*16+nian%10);
write_ds1302(0x8e,0x80);
y++;if(y>=160){y=0;}
}
if(k1==0)
{
menu=0;
while(!
k1){display();}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS1302 设计 可调 万年历 实测 正常 附有 程序