微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S35390驱动程序

S35390驱动程序

时间:11-13 来源:互联网 点击:

/**********************************************************
Function: S35390A_CACULATE_WEEK(unsigned char year,unsigned char month,unsigned char data)
Description: 通过年月日计算星期
Input: year,month,date
output: none
Return: week
**********************************************************/
unsigned char S35390A_CACULATE_WEEK(unsigned char year,unsigned char month,unsigned char date)
{
unsigned char wtemp;

if(month==1)
{
year-=1;
month=13;
}
else
{
if(month==2)
{
year-=1;
month=14;
}
}

wtemp=year+year/4+13*((month+1)/5)+date-36;
wtemp%=7;
return(wtemp);
}

/**********************************************************
Function: S35390A_INIT(void)
Description: S35390A初始化
Input: none
output: none
Return: week
**********************************************************/
void S35390A_INIT(void)
{
S35390A_SDA_DIR |= S35390A_SDA; //输出
S35390A_SCL_DIR |= S35390A_SCL;
S35390A_INT1_DIR &= ~S35390A_INT1; //输入
// S35390A_INT2_DIR &= ~(1S35390A_SDA_OUT |= S35390A_SDA; //输出高电平
S35390A_SCL_OUT |= S35390A_SCL;
S35390A_INT1_OUT |=S35390A_INT1;
// S35390A_INT2_OUT |= 1s35390a[0] = 0x00;
S35390A_WRITE(0x62, 0x01); //清除报警1中断使能,使INT1脚输出高电平
Delay_Nms(5); //延时

if(S35390A_READ(0x61,0x01))
{
if((s35390a[0]&0xc0)!=0)
{
s35390a[0]=0xc0;
S35390A_WRITE(0x60,0x01);
}
}
if(S35390A_READ(0x63,0x01))
{
if((s35390a[0]&0x80)!=0)
{
s35390a[0]=0x0c;
S35390A_WRITE(0x60,0x01);
}
}
Delay_Nms(5);
s35390a[0]=0x40; //设置为24小时制
S35390A_WRITE(0x60,0x01);
Delay_Nms(5);

s35390a[0]=0x20; //设置报警1中断使能
S35390A_WRITE(0x62,0x01); //设置报警1中断使能

s35390a[0] =0;
s35390a[1] = S35390A_SWAP_BYTE((0x08<4)|0x00); //时;
s35390a[2] =0;
S35390A_WRITE(0x68,0x03); //中断时间为每天的0时

S35390A_INT1_DIR &= ~S35390A_INT1; //置为输入方式
S35390A_INT1_OUT |= S35390A_INT1; //置为高电平
P1IE|=S35390A_INT1; //中断使能
P1IES|=S35390A_INT1; //下降沿产生中断
}
void SetS35390ATime(void)
{
s35390a[0] = S35390A_SWAP_BYTE(twdata[7]); //年
s35390a[1] = S35390A_SWAP_BYTE(twdata[6]%32); //月
s35390a[2] = S35390A_SWAP_BYTE(twdata[4]%64); //日
s35390a[3] = 0x00; //星期不使用为00
s35390a[4] = S35390A_SWAP_BYTE(twdata[3]%64); //时
s35390a[5] = S35390A_SWAP_BYTE(twdata[2]%128); //分
s35390a[6] = 0x00; //秒为00
S35390A_WRITE(0x64,0x07); //写时间和日期
}

void readS35390ATime(void)
{
S35390A_READ(0x65,0x07); //读时间
Delay_Nms(5);
trdata[6]=s35390a[0]; //年
trdata[5]=s35390a[1]%32; //月
months=trdata[5];
trdata[3]=s35390a[2]%64; //日
trdata[2]=s35390a[4]%64; //时
trdata[1]=s35390a[5]%128; //分
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top