#include //下面是引脚连接关系 sbit clock_dat=P1^0; sbit clock_clk=P1^1; sbit clock_clk=P1^2; sbit a0=ACC^0; sbit a1=ACC^1; sbit a2=ACC^2; sbit a3=ACC^3; sbit a4=ACC^4; sbit a5=ACC^5; sbit a6=ACC^6; sbit a7=ACC^7; void clock_out(unsigned char dd) { ACC=dd; clock_dat=a0;clock_clk=1;clock_clk=0; clock_dat=a1;clock_clk=1;clock_clk=0; clock_dat=a2;clock_clk=1;clock_clk=0; clock_dat=a3;clock_clk=1;clock_clk=0; clock_dat=a4;clock_clk=1;clock_clk=0; clock_dat=a5;clock_clk=1;clock_clk=0; clock_dat=a6;clock_clk=1;clock_clk=0; clock_dat=a7;clock_clk=1;clock_clk=0; } unsigned char clock_in(void) { clock_dat=1; a0=clock_dat; clock_clk=1;clock_clk=0;a1=clock_dat; clock_clk=1;clock_clk=0;a2=clock_dat; clock_clk=1;clock_clk=0;a3=clock_dat; clock_clk=1;clock_clk=0;a4=clock_dat; clock_clk=1;clock_clk=0;a5=clock_dat; clock_clk=1;clock_clk=0;a6=clock_dat; clock_clk=1;clock_clk=0;a7=clock_dat; return(ACC); } unsigned char read_clock(unsigned char ord) { unsigned char dd=0; clock_clk=0; clock_rst=0; clock_rst=1; clock_out(ord); dd=clock_in(); clock_rst=0; clock_clk=1; return(dd); } void write_clock(unsigned char ord,unsigned char dd) { clock_clk=0; clock_rst=0; clock_rst=1; clock_out(ord); clock_out(dd); clock_rst=0; clock_clk=1; } /*注意事项: 1.每次上电,必须把秒寄存器高位(第7位)设置为0,时钟才能走时。 2.如果需要写入数据和时钟日历信息,必须把“写保护”寄存器设置成为0,方法入下: write_clock(0xc1 0x7,0); 3.使能“慢速充电”,方法如下: write_clock(0xc1 0x8,0xaa); */ void main(void) { unsigned char address,d; //调用方法: //DS1302内部分为32字节RAM和8字节时钟日历数据 //读内部RAM 0: address=0; d=read_clock(0xc0 address); //读内部RAM 1: address=1; d=read_clock(0xc0 address); //写内部RAM 0,写入5: address=0;d=5; write_clock(0xc1 address,d); //读内部RAM 1,写入123: address=1;d=123; d=read_clock(0xc1 address,d); //================================= //读内部时钟日历数据0:秒: address=0; d=read_clock(0x80 address); //读内部时钟日历数据1:分: address=1; d=read_clock(0x80 address); //写内部时钟日历数据0:秒,写入03秒 address=0;d=3; write_clock(0x80 address,d); } /* 内部时钟日历地址图,始终日历用BCD码储存 0:秒 1:分 2:小时 3:日期 4:月份 5:星期 6:年 7:写保护寄存器 8:慢速充电寄存器 */
|