七、源程序//
//写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();
I2CStart();
I2CSendByte(0x64);
I2CWaitAck();
I2CSendByte(0x10); //设置写地址10H
I2CWaitAck();
I2CSendByte(0x0) ; //置WRTC1=0(10H地址)
I2CWaitAck();
I2CStop();
}
//设置SD2405中断程序(设置报警时间:小时+分钟)
void WriteALARM(uint8_t hour , uint8_t minute)
{
WriteTimeOn(); //写SD2405允许
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x08); //发送起始地址(0x08=分钟报警寄存器)
I2CWaitAck();
I2CSendByte(HEXtoBCD(minute)); //分钟
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x09); //发送起始地址(0x09=小时报警寄存器)
I2CWaitAck();
I2CSendByte(HEXtoBCD(hour)); //小时
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x0E); //发送起始地址(0x0E=报警允许寄存器)
I2CWaitAck();
I2CSendByte(0x06); //设置报警允许(使能小时、分钟报警)
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x10); //发送起始地址(0x10=CTR2控制寄存器)
I2CWaitAck();
I2CSendByte(0x92); //设置INT中断选通(INTS1,INTS0),及报警中断总允许位(INTAE)
I2CWaitAck();
I2CStop();
WriteTimeOff(); //写SD2405禁止
}
//关闭报警中断
void ClrALARM(void)
{
WriteTimeOn(); //写SD2405允许
I2CStart();
I2CSendByte(0x64); //发送SD2400写寄存器命令
I2CWaitAck();
I2CSendByte(0x10); //发送起始地址
I2CWaitAck();
I2CSendByte(0x90); //清报警中断总允许位(INTAE)
I2CWaitAck();
I2CStop();
WriteTimeOff(); //写SD2405禁止
}
|