一、倒计时相关寄存器
1、0FH负责写允许
2、10H负责写允许和选择倒计时功能(允许倒计时和选择倒计时中断输出)
3、13H负责设置倒计时时间
4、允许倒计时,需要将10H的INTDE置位
5、允许倒计时,需要将10H的INTS1置位,INTS0置位
6、倒计时选择秒到计时
11H寄存器的TDS1=1,TDS0=0,表示使用倒计时的秒倒计数功能(因为定时器频率源为1HZ),程序中往13H寄存器中送的数值的单位为秒(最大支持255秒)。
7、倒计时选择分钟到计时
11H寄存器的TDS1=1,TDS0=1,表示使用倒计时的分钟倒计数功能(因为定时器频率源为1/60HZ),程序中往13H寄存器中送的数值的单位为分钟(最大支持255分钟)。
8、程序
//
//写SD2405允许程序
//
void WriteTimeOn(void)
{
I2CStart();
I2CSendByte(0x64);
I2CWaitAck();
I2CSendByte(0x10); //设置写地址10H
I2CWaitAck();
I2CSendByte(0x80); //置WRTC1=1
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0x64);
I2CWaitAck();
I2CSendByte(0x0F); //设置写地址0FH
I2CWaitAck();
I2CSendByte(0x84); //置WRTC2,WRTC3=1
I2CWaitAck();
I2CStop();
}
//
//写SD2405禁止程序
//
void WriteTimeOff(void)
{
I2CStart();
I2CSendByte(0x64);
I2CWaitAck();
I2CSendByte(0x0F); //设置写地址0FH
I2CWaitAck();
I2CSendByte(0x0) ; //置WRTC2,WRTC3=0
I2CWaitAck();
I2CSendByte(0x0) ; //置WRTC1=0(10H地址)
I2CWaitAck();
I2CStop();
}
///
//BCD转换成16进制数
//
uint8_t BCDtoHEX(uint8_t BCD)
{
uint8_t tempData;
tempData = (BCD >> 4) * 10 + (BCD & 0x0F);
return (tempData);
}
///
//16进制数转换成BCD码
//
uint8_t HEXtoBCD(uint8_t HEX)
{
uint8_t tempData;
tempData = ((HEX / 10) << 0x04) + (HEX % 10);
return (tempData);
}
///
//设置倒计时中断(单位:分钟)
//
void SetDjs(uint8_t djs_Minute)
{
WriteTimeOn();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x10); //发送起始地址(0x10=CTR2控制寄存器)
I2CWaitAck();
I2CSendByte(0xF0); //清倒计时中断总允许位(INTDE)
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x10); //发送起始地址(0x10=CTR2控制寄存器)
I2CWaitAck();
I2CSendByte(0xF4); //INT中断选通(INTS1=1,INTS0=1选择倒计时中断),配置倒计时中断总允许位(INTDE=1)
I2CWaitAck();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x11); //发送起始地址(0x11=CTR3控制寄存器)
I2CWaitAck();
I2CSendByte(0x30); //选择定时器频率源(TDS1=1、TDS0=1)为1/60Hz
I2CWaitAck();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x12); //发送起始地址(0x12=时间调整寄存器)
I2CWaitAck();
I2CSendByte(0x00); //数字调整寄存器(12H)清0
I2CWaitAck();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x13); //发送起始地址(0x13=倒计时寄存器)
I2CWaitAck();
I2CSendByte(djs_Minute); //设置计数初值(单位:分钟)
I2CWaitAck();
I2CStop();
WriteTimeOff();
}
///
//关闭倒计时中断
//
void ClrDjs(void)
{
WriteTimeOn();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x10); //发送起始地址(0x10=CTR2控制寄存器)
I2CWaitAck();
I2CSendByte(0xF0); //清倒计时中断总允许位(INTDE)
I2CWaitAck();
I2CStop();
WriteTimeOff();
}