全部资料下载地址:
1302高精度不可调节时钟.zip
(40.5 KB, 下载次数: 8)
- 2017年9月7日
- 21:07
- //DS1302写入数据
- void writebety_ds(uchar dat)
- {
- uchar i;
- SCLK=0; //初始时钟线置为 0
- delayus(2);
- for(i=0;i<8;i++) //开始传输8个字节的数据
- {
- SDA=dat&0x01; // 取最低位,注意DS1302的数据和地址都是从最低位开始传输的
- delayus(2);
- SCLK=1; // 时钟线拉高,制造上升沿,SDA的数据被传输
- delayus(2);
- SCLK=0; // 时钟线拉低,为下一个上升沿做准备
- dat>>=1; // 数据右移一位,准备传输下一位数据
- }
- }
- //DS1302读出数据
- uchar readbety_ds()
- {
- uchar i,dat;
- delayus(2);
- for(i=0;i<8;i++)
- {
- dat>>=1; // 要返回的数据右移一位
- if(SDA==1) // 当数据线为高时,证明该位数据为 1
- dat|=0x80; // 要传输数据的当前值置为1
- SCLK=1; //拉高时钟线
- delayus(2);
- SCLK=0; // 制造下降沿
- delayus(2);
- }
- return dat; // 返回读取出的数据
- }
- //DS1302写入单个时间
- void dswrite_data(uchar add,uchar dat)
- {
-
- RST=0; // 初始 CE 线置为 0
- SCLK=0; // 初始时钟线置为 0
- RST=1; // 初始 CE 置为 1 ,传输开始
- writebety_ds(add);
- writebety_ds(dat); // 写入要修改的时间,日期
- SCLK=1; // 时钟线拉高
- RST=0; //
- }
- //DS1302读出单个时间
- uchar dsread_data(uchar add)
- {
- uchar temp_date;
- RST=0; // 初始 CE 线置为 0 0 0 0
- SCLK=0; // 初始时钟线置为 0 0 0 0
- RST=1; // 初始 CE 置为 1 1 1 1 ,传输开始
- writebety_ds(add); // 传输命令字,要读取的时间 日历地址
- temp_date=readbety_ds(); // 读取要得到的时间/ / / / 日期
- SCLK=1; // 时钟线拉高
- RST=0; // 读取结束, CE 置为 0 0 0 0 ,结束数据的传输
- return temp_date; //返回得到的时间/ / / /
-
-
- }
复制代码
|