- //主函数
- #include <ds1302.h>
- u8 code smg[10]=
- {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- u8 dat2[8];
- void delay(u16 aaa)
- {
- while(aaa--);
- }
- void dat2fp();
- void xs();
- void main()
- {
- writetime();
- while(1)
- { readtime();
- delay(50);
- dat2fp();
- xs();
- }
- }
- void dat2fp()
- {
-
- dat2[0]=smg[time[2]/16];
- dat2[1]=smg[time[2]&0x0f];
- dat2[2]=0x40;
- dat2[3]=smg[time[1]/16];
- dat2[4]=smg[time[1]&0x0f];
- dat2[5]=0x40;
- dat2[6]=smg[time[0]/16];
- dat2[7]=smg[time[0]&0x0f];
- }
- void xs()
- {
- u8 ii;
- for(ii=0;ii<8;ii++)
- {
- P0=dat2[ii];
- P1=ii;
- delay(100);
- P0=0x00;
- }
- }
- //ds1302.h
- #ifndef _DS1302_H_
- #define _DS1302_H_
- #include<reg52.h>
- #include<intrins.h>
- #ifndef u8
- #define u8 unsigned char
- #endif
- #ifndef u16
- #define u16 unsigned int
- #endif
- sbit sclk=P3^6;
- sbit dsio=P3^4;
- sbit ce=P3^5;
- void readtime();
- void writetime();
- u8 read(u8 dzz);
- void write(u8 dz,u8 sj);
- extern u8 time[7];
- #endif
- //ds1302.c
- #include<ds1302.h>
- u8 code writedz[7]=
- {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒 分 时 日 月 星期 年
- u8 code readdz[7]=
- {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
- u8 time[7]=
- {0x50,0x59,0x92,0x07,0x05,0x05,0x17}; //秒 分 时 日 月 星期 年
- void write(u8 dz,u8 sj)
- {
- u8 a;
- ce=0;
- _nop_(); //
- sclk=0;
- _nop_();
- ce=1;
- _nop_();
- for(a=0;a<8;a++)
- {
- dsio=dz&0x01; //放入最低位
- dz>>=1;
- sclk=1;
- _nop_();
- sclk=0;
- _nop_();
- }
- for(a=0;a<8;a++)
- {
- dsio=sj&0x01; //放入最低位
- sj>>=1;
- sclk=1;
- _nop_();
- sclk=0;
- _nop_();
- }
- ce=0;
- _nop_();
- }
- u8 read(u8 dzz)
- {
- u8 aa,dd,dat1;
- ce=0;
- _nop_(); //
- sclk=0;
- _nop_();
- ce=1;
- _nop_();
- for(aa=0;aa<8;aa++)
- {
- dsio=dzz&0x01; //放入最低位
- dzz>>=1;
- sclk=1;
- _nop_();
- sclk=0; //ds1302输出数据
- _nop_();
- }
- _nop_();
- for(aa=0;aa<8;aa++)
- {
- dd=dsio;
- dat1>>=1;
- dat1|=dd<<7;
- sclk=1;
- _nop_();
- sclk=0;
- _nop_();
- }
-
- ce=1;
- _nop_();
- sclk=1;
- _nop_();
- dsio=0;
- _nop_();
- dsio=1;
- _nop_();
- return dat1;
- }
- void writetime()
- {
- u8 i;
- write(0x8e,0x00); // 关闭写保护
- for(i=0;i<7;i++)
- {
- write(writedz[i],time[i]);
- }
- write(0x8e,0x80);
- }
- void readtime()
- {
- u8 g,aa;
- for(g=0;g<7;g++)
- {
- time[g]=read(readdz[g]);
- }
- aa=time[2]<<3;
- time[2]=aa>>3;
- }
复制代码 |