首页 > 编程知识 正文

ds1302时钟芯片与51单片机,51单片机ds1302数码管时钟

时间:2023-05-03 21:11:30 阅读:125011 作者:4361

DS1302充电计时器芯片包括实时时钟/日历和31字节静态RAW。 通过简单的串行接口与微处理器进行通信。 实时时钟/日历提供秒、分钟、小时、天、日期、月和年的信息。 月末的日期会自动调整,不到31天,包括闰年的修正。 时钟以24小时或12小时的形式工作,带有am/pm指示灯等。

CE:输入。 在读取或写入过程中,必须将CE信号设为高电平。 该导线上接地有内部40k(标准值)的下拉电阻。

注:以前数据表修订的简称CE是RST。 针脚功能未改变;I/O:输入/推挽输出。 I/O端子为3线双向数据端子连接器。 该导线上接地有内部40k(标准值)的下拉电阻;

SCLK:输入。 SCLK用于同步串行接口上的数据移动。 该导线上接地有内部40k(标准值)的下拉电阻。

这是一个1字节的读写时序图,可以看到前8位读写地址,表示不同的功能,后8位读写数据。 读写操作的明显区别在于后面8位数据位的操作不同。 读取操作在SCLK的下降沿锁存数据。 也就是说,要从I/O端口读取1位数据,可以先将SCLK引脚从高到低,然后进行从高到低的跳转,从而读取数据。 写入时,在SCLK的上升沿锁存数据。 道理是一样的。 另一个是读写数据从低位到高位。 是D0-D7

接下来,需要知道寄存器的操作方法。 我的理解是真值表,根据值有什么样的功能。

# includeintrins.h # includereg 52.h # defineucharunsigned char//或更高版本unsigned char是#define uint unsigned int//或更高版本unsigned char //时钟芯片DS1302的SDA引脚sbit RST_P=P1^2; //时钟芯片DS1302的RST引脚uchartimebuff [7]={ 17、9、1、6、18、30、40 }; //时间序列//TimeBuff[0]为年,范围00-99//TimeBuff[1]为月,范围1-12//TimeBuff[2]为日期,范围1-31//TimeBuff[3] 范围00-59/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。 //SCK脚踏低SDA_P=0; //SDA脚踏低(/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * uchar temp; RST_P=1; /*写入地址: addr*/for(I=0; i8; I ) if(addr0x01 ) SDA_P=1; else SDA_P=0; SCK_P=1; _nop_ (); SCK_P=0; _nop_ (); addr=addr 1; (/)读取该地址的数据)/for ) I=0; i8; I ) {temp=temp1; if(sda_p ) temp|=0x80; else temp=0x7F; SCK_P=1; _nop_ (); SCK_P=0; _nop_ (); }RST_P=0; 返回时间; (() ) () () ) ) ) ) (() ) ) ) ) ) ) ) 652 RST_P=1; /*写入地址: addr*/for(I=0; i8; I ) if(addr0x01 ) SDA_P=1; else SDA_P=0; SCK_P=1; _nop_ (); SCK_P=0; _nop_ (); addr=addr1; }/*写入数据: dat*/for(I=0; i8; I ) if(dat0x01 ) SDA_P=1; else SDA_P=0; SCK_P=1; _nop_ (); SCK_P=0; _nop_ (); dat=dat1; }RST_P=0; (() ) () () ) ) ) (() ) ) ) ) ) ) ) 652 uchar temp1(() ) ) )。 uchar temp2; for(I=0; i7; I//十进制转换BCD码{temp1=(timebuff[I]/10 ) 4; temp2=TimeBuff[i]; 时间buff [ I ]=temp1temp 2; }ds1302_write_byte(0x8e,0x00 ); //写保护ds 1302 _ write _ byte (0x 80,0x 80 ); //暂停时钟ds1302_write_byte(0x8c,TimeBuff[0]; //年ds1302_write_byte(0x88,TimeBuff[1]; //月ds1302_write_byte(0x86,TimeBuff[2]; //日ds1302_write_byte(0x8a,TimeBuff[3]; //星期ds1302_write_byte(0x84,TimeBuff[4]; //时ds1302_write_byte(0x82,TimeBuff[5]; //分ds1302_write_byte(0x80,TimeBuff[6]; //秒ds1302_write_byte(0x80,TimeBuff[6]0x7F ); //执行时钟ds1302_write_byte(0x8e,0x80 ); //打开写保护(/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * time buff [0]=ds 1302 _ read _ bytte //年time buff [1]=ds 1302 _ read _ byte (0x 89 ); //月time buff [2]=ds 1302 _ read _ byte (0x 87; //日time buff [3]=ds 1302 _ read _ byte (0x8b; //星期time buff [4]=ds 1302 _ read _ byte (0x 85 ); //时time buff [5]=ds 1302 _ read _ byte (0x 83 ); //分钟time buff [6]=(ds 1302 _ read _ byte (0x 81 ) )0x7F; //秒for(I=0; i7; I//BCD10进制{timebuff[I]=(timebuff[I]/16 ) *10 TimeBuff[i]; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。