ds1302写时间
来源:互联网 发布:澳门网络彩票 编辑:程序博客网 时间:2024/06/07 04:04
#include "1302.h"
#include "delay.h"
/*****************************************************
函数功能:向1302写一个字节数据
入口参数:x
***************************************************/
void Write1302(unsigned char dat)
{
unsigned char i;
//SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备
//delaynus(2); //稍微等待,使硬件做好准备 //(这个两个多余的)
for(i=0;i<8;i++) //连续写8个二进制位数据
{
DATA=dat&0x01; //取出dat的第0位数据写入1302 低位在前,高位在后
delaynus(2); //稍微等待,使硬件做好准备
SCLK=1; //上升沿写入数据
delaynus(2); //稍微等待,使硬件做好准备
SCLK=0; //重新拉低SCLK,形成脉冲
dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位
}
}
/*****************************************************
函数功能:根据命令字,向1302写一个字节数据
入口参数:Cmd,储存命令字;dat,储存待写的数据
***************************************************/
void WriteSet1302(unsigned char Cmd,unsigned char dat)
{
RST=0; //禁止数据传递
delaynus(2); //稍微等待,使硬件做好准备
SCLK=0; //确保写数居前SCLK被拉低
delaynus(2); //稍微等待,使硬件做好准备
RST=1; //启动数据传输
delaynus(2); //稍微等待,使硬件做好准备
Write1302(Cmd); //写入命令字
Write1302(dat); //写数据
RST=0; //禁止数据传递
delaynus(2); //稍微等待,使硬件做好准备
DATA=1;//(这个是什么意思?)
SCLK=1; //将时钟电平置于高电平状态
}
/*****************************************************
函数功能:从1302读一个字节数据
入口参数:x
***************************************************/
unsigned char Read1302(void)
{
unsigned char i,dat;
delaynus(2); //稍微等待,使硬件做好准备//(这个可以不要)
for(i=0;i<8;i++) //连续读8个二进制位数据
{ dat>>=1;
if(DATA==1) //如果读出的数据是1
dat|=0x80; //将1取出,写在dat的最高位
SCLK=1; //将SCLK置于高电平,为下降沿读出
delaynus(2); //稍微等待
SCLK=0; //拉低SCLK,形成脉冲下降沿
delaynus(2); //稍微等待
}
return dat; //将读出的数据返回
}
/*****************************************************
函数功能:根据命令字,从1302读取一个字节数据
入口参数:Cmd
***************************************************/
unsigned char ReadSet1302(unsigned char Cmd)
{
unsigned char dat;
RST=0; //拉低RST
SCLK=0; //确保写数居前SCLK被拉低
RST=1; //启动数据传输
Write1302(Cmd); //写入命令字
dat=Read1302(); //读出数据
SCLK=1; //将时钟电平置于已知状态
RST=0; //禁止数据传递
return dat; //将读出的数据返回
}
/*****************************************************
函数功能: 1302进行初始化设置
***************************************************/
void Init_DS1302(void)
{ (写入时间的话可以直接写如:WriteSet1302(0x80,0x55)
WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令
WriteSet1302(0x80,((55/10)<<4|(55%10))); //根据写秒寄存器命令字,写入秒的初始值
WriteSet1302(0x82,((59/10)<<4|(59%10))); //根据写分寄存器命令字,写入分的初始值
WriteSet1302(0x84,((23/10)<<4|(23%10))); //根据写小时寄存器命令字,写入小时的初始值
WriteSet1302(0x86,((18/10)<<4|(18%10))); //根据写日寄存器命令字,写入日的初始值
WriteSet1302(0x88,((6/10)<<4|(6%10))); //根据写月寄存器命令字,写入月的初始值
WriteSet1302(0x8c,((9/10)<<4|(9%10))); //根据写年寄存器命令字,写入年的初始值
WriteSet1302(0x90,0xa5); //打开充电功能 选择2K电阻充电方式
WriteSet1302(0x8E,0x80); //根据写状态寄存器命令字,写入保护指令
}
void Ds1302_Write_Time(void) (这里没看懂)
{
WriteSet1302(0x8e,0x00); //关闭写保护
WriteSet1302(0x80,0x80); //暂停
//Ds1302_Write_Byte(ds1302_charger_add,0xa9); //涓流充电
WriteSet1302(0x84,BCDhour); //时
WriteSet1302(0x82,BCDminute); //分
WriteSet1302(0x80,BCDsecond); //秒
WriteSet1302(0x8e,0x80); //打开写保护
}
以上带括号的就是我写的,你自己再看看
#include "delay.h"
/*****************************************************
函数功能:向1302写一个字节数据
入口参数:x
***************************************************/
void Write1302(unsigned char dat)
{
unsigned char i;
//SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备
//delaynus(2); //稍微等待,使硬件做好准备 //(这个两个多余的)
for(i=0;i<8;i++) //连续写8个二进制位数据
{
DATA=dat&0x01; //取出dat的第0位数据写入1302 低位在前,高位在后
delaynus(2); //稍微等待,使硬件做好准备
SCLK=1; //上升沿写入数据
delaynus(2); //稍微等待,使硬件做好准备
SCLK=0; //重新拉低SCLK,形成脉冲
dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位
}
}
/*****************************************************
函数功能:根据命令字,向1302写一个字节数据
入口参数:Cmd,储存命令字;dat,储存待写的数据
***************************************************/
void WriteSet1302(unsigned char Cmd,unsigned char dat)
{
RST=0; //禁止数据传递
delaynus(2); //稍微等待,使硬件做好准备
SCLK=0; //确保写数居前SCLK被拉低
delaynus(2); //稍微等待,使硬件做好准备
RST=1; //启动数据传输
delaynus(2); //稍微等待,使硬件做好准备
Write1302(Cmd); //写入命令字
Write1302(dat); //写数据
RST=0; //禁止数据传递
delaynus(2); //稍微等待,使硬件做好准备
DATA=1;//(这个是什么意思?)
SCLK=1; //将时钟电平置于高电平状态
}
/*****************************************************
函数功能:从1302读一个字节数据
入口参数:x
***************************************************/
unsigned char Read1302(void)
{
unsigned char i,dat;
delaynus(2); //稍微等待,使硬件做好准备//(这个可以不要)
for(i=0;i<8;i++) //连续读8个二进制位数据
{ dat>>=1;
if(DATA==1) //如果读出的数据是1
dat|=0x80; //将1取出,写在dat的最高位
SCLK=1; //将SCLK置于高电平,为下降沿读出
delaynus(2); //稍微等待
SCLK=0; //拉低SCLK,形成脉冲下降沿
delaynus(2); //稍微等待
}
return dat; //将读出的数据返回
}
/*****************************************************
函数功能:根据命令字,从1302读取一个字节数据
入口参数:Cmd
***************************************************/
unsigned char ReadSet1302(unsigned char Cmd)
{
unsigned char dat;
RST=0; //拉低RST
SCLK=0; //确保写数居前SCLK被拉低
RST=1; //启动数据传输
Write1302(Cmd); //写入命令字
dat=Read1302(); //读出数据
SCLK=1; //将时钟电平置于已知状态
RST=0; //禁止数据传递
return dat; //将读出的数据返回
}
/*****************************************************
函数功能: 1302进行初始化设置
***************************************************/
void Init_DS1302(void)
{ (写入时间的话可以直接写如:WriteSet1302(0x80,0x55)
WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令
WriteSet1302(0x80,((55/10)<<4|(55%10))); //根据写秒寄存器命令字,写入秒的初始值
WriteSet1302(0x82,((59/10)<<4|(59%10))); //根据写分寄存器命令字,写入分的初始值
WriteSet1302(0x84,((23/10)<<4|(23%10))); //根据写小时寄存器命令字,写入小时的初始值
WriteSet1302(0x86,((18/10)<<4|(18%10))); //根据写日寄存器命令字,写入日的初始值
WriteSet1302(0x88,((6/10)<<4|(6%10))); //根据写月寄存器命令字,写入月的初始值
WriteSet1302(0x8c,((9/10)<<4|(9%10))); //根据写年寄存器命令字,写入年的初始值
WriteSet1302(0x90,0xa5); //打开充电功能 选择2K电阻充电方式
WriteSet1302(0x8E,0x80); //根据写状态寄存器命令字,写入保护指令
}
void Ds1302_Write_Time(void) (这里没看懂)
{
WriteSet1302(0x8e,0x00); //关闭写保护
WriteSet1302(0x80,0x80); //暂停
//Ds1302_Write_Byte(ds1302_charger_add,0xa9); //涓流充电
WriteSet1302(0x84,BCDhour); //时
WriteSet1302(0x82,BCDminute); //分
WriteSet1302(0x80,BCDsecond); //秒
WriteSet1302(0x8e,0x80); //打开写保护
}
以上带括号的就是我写的,你自己再看看
0 0
- ds1302写时间
- ds1302
- DS1302
- DS1302
- Ds1302
- DS1302
- ds1302
- DS1302
- DS1302
- 实现时间芯片DS1302的一些程序
- DS1302的延时时间要按照datasheet上来
- DS1302测出时间并且在LCD1602上面显示
- ds1302显示时间(通过串口调试助手)---C语言版本
- DS1302程序
- DS1302 万年历
- DS1302读写
- DS1302组件
- 单片机--ds1302
- leetcode 344 Reverse String
- POJ 2417 Discrete Logging(BSGS算法,gcd(a,p)=1)
- python打印列表中指定元素的所有下标(5种方法)
- android的帧动画和补间动画总结
- CDH中impala读取不到hive创建的表
- ds1302写时间
- Codeforces Round#321 Kefa and Dishes(状压DP)
- Cow Contest poj3360()
- mysql性能优化-慢查询分析、优化索引和配置
- iOS 【如何把项目托管到GitHub】
- zencart 选择支付方式
- Docker部署Tensorflow
- Cocos2d-x 基础概念——调度器(scheduler)
- python3.5 爬虫 基于广度优先算法