新闻中心

EEPW首页>嵌入式系统>设计应用> MSP430与DS1302之1602显示

MSP430与DS1302之1602显示

作者: 时间:2016-12-02 来源:网络 收藏

/*******************************************
函数名称:Reset_DS1302
功 能:对DS1302进行复位操作
********************************************/
void Reset_DS1302(void)
{
DS_RST_OUT; //RST对应的IO设置为输出状态
DS_SCL_OUT; //SCLK对应的IO设置为输出状态
DS_SCL0; //SCLK=0
DS_RST0; //RST=0
delay(10);
DS_SCL1; //SCLK=1
}
/*******************************************
函数名称:Write1Byte
功 能:对DS1302写入1个字节的数据
********************************************/
void Write_Byte(uchar wdata)
{
uchar i;
DS_SDA_OUT; //SDA对应的IO设置为输出状态
DS_RST1; //REST=1;
for(i = 8; i > 0; i--)
{
if(wdata&0x01)
DS_SDA1;
else
DS_SDA0;
DS_SCL0;
delay(10);
DS_SCL1;
delay(10);
wdata>>= 1;
}
}
/*******************************************
函数名称:Read1Byte
功 能:从DS1302读出1个字节的数据
********************************************/
uchar Read_Byte()
{
uchar i;
uchar rdata = 0X00;
DS_SDA_IN; //SDA对应的IO设置为输入状态
DS_RST1; //REST=1;
for(i = 8; i > 0; i--)
{
DS_SCL1;
delay(10);
DS_SCL0;
delay(10);
rdata >>= 1;
if(DS_SDA_BIT)
rdata |= 0x80;
}

return(rdata);
}
/*******************************************
函数名称:Write_dat
功 能:向某个寄存器写入一个字节数据
参 数:add--寄存器地址
dat--写入的数据
********************************************/
void Write_dat(uchar add, uchar dat)
{
DS_RST0;
DS_SCL0;
_NOP();
DS_RST1;
Write_Byte(add); //写入地址
Write_Byte(dat); //写入数据
DS_SCL1;
DS_RST0;
}
/*******************************************
函数名称:Read_dat
功 能:从某个寄存器读出一个字节数据
参 数:addr--寄存器地址
返回值 :读出的数据
********************************************/
uchar read_1302add(uchar add)
{
uchar rdata;
DS_RST0;
DS_SCL0;
_NOP();
DS_RST1;
Write_Byte(add); //写入地址
rdata = Read_Byte(); //读出数据
DS_SCL1;
DS_RST0;

return(rdata);
}
/***********初始化1302*************/
void init_1302()
{
flag=read_1302add(0x81);//读秒寄存器最高位,读出时钟状态
if(flag&0x80);//判断时钟是否关闭,若内部关闭,则初始化,否则继续走
{
Write_dat(0x8e,0x00);
Write_dat(0x80,((55/10)<<4|(55%10)));//写秒寄存器,并写入初值55
Write_dat(0x82,((59/10)<<4|(59%10)));//写分寄存器,并写入初值59
Write_dat(0x84,((22/10)<<4|(22%10)));//写小时寄存器,并写入初值23
Write_dat(0x86,((24/10)<<4|(24%10)));//写日寄存器,并写入初值18
Write_dat(0x88,((2/10)<<4|(2%10)));//写月寄存器,并写入初值2
Write_dat(0x8a,((5/10)<<4|(5%10)));//写周寄存器,并写入初值5
Write_dat(0x8c,((12/10)<<4|(12%10)));//写年寄存器,并写入初值12,不能写2012年
Write_dat(0x90,0xa5);//写充电方式
Write_dat(0x8e,0x80);//加上写保护

}
}
/*****************读出秒的十进制数***************************/

本文引用地址://m.amcfsurvey.com/article/201612/324673.htm

uchar readsecond()
{
uchar dat;
dat=read_1302add(0x81);
second=((dat&0x70)>>4)*10+(dat&0x0f);
return second;
}

/*****************读出分的十进制数***************************/

uchar readminute()
{
uchar dat;
dat=read_1302add(0x83);
minute=((dat&0x70)>>4)*10+(dat&0x0f);
return minute;
}

/*****************读出小时的十进制数***************************/

uchar readhour()
{
uchar dat;
dat=read_1302add(0x85);
hour=((dat&0x70)>>4)*10+(dat&0x0f);
return hour;
}
/*****************读出天的十进制数***************************/

uchar readday()
{
uchar dat;
dat=read_1302add(0x87);
day=((dat&0x70)>>4)*10+(dat&0x0f);
returnday;
}

/*****************读出月的十进制数***************************/

uchar readmonth()
{
uchar dat;
dat=read_1302add(0x89);
month=((dat&0x70)>>4)*10+(dat&0x0f);
return month;
}
/*****************读出周的十进制数***************************/

uchar readweek()
{
uchar dat;
dat=read_1302add(0x8b);
week=((dat&0x70)>>4)*10+(dat&0x0f);
return week;
}



关键词:MSP430DS13021602显

评论


技术专区

关闭