- 积分
- 98
- 在线时间
- 262 小时
- 最后登录
- 2015-4-1
- 阅读权限
- 50
- 精华
- 0
 
- UID
- 490843
- 帖子
- 272
- 精华
- 0
- 经验
- 98 点
- 金钱
- 92 ¥
- 注册时间
- 2012-4-21
|
#define DS1302_C
#include "HEAD.H"
sbit DSRST=P1^7;//定影DS1302片选信号
sbit DSDIO=P1^6; //定义DS1302数据信号
sbit DSSCLK=P1^5;//定义DS1302时钟信号
sbit ACC_7=ACC^7;
void DS_Write(uchar addr,uchar dat)//DS1302的数据写时序
{
uchar i,temp;
DSRST=0;
DSSCLK=0;
DSRST=1;//数据传送开始信号
for(i=0;i<8;i++)
{
DSSCLK=0;
temp=addr;
DSDIO=(bit)(temp&0x01);
addr>>=1;
DSSCLK=1;
}
for(i=0;i<8;i++)
{
DSSCLK=0;
temp=dat;
DSDIO=(bit)(temp&0x01);
dat>>=1;
DSSCLK=1;
}
DSRST=0;//数据传送终止信号
}
uchar DS_Read(uchar addr)//DS1302读时序
{
uchar dat1,dat2;
uchar i,temp;
DSRST=0;
DSSCLK=0;
DSRST=1;
for(i=0;i<8;i++) //发送地址
{
DSSCLK=0;
temp=addr;
DSDIO=(bit)(temp&0x01);
addr>>=1;
DSSCLK=1;
}
for(i=0;i<8;i++)//读取数据
{
ACC_7=DSDIO;
DSSCLK=1;
ACC>>=1;
DSSCLK=0;
}
DSRST=0;
dat1=ACC; //数据进制转换,十六进制转十进制
dat2=dat1/16;
dat1=dat1%16;
dat1=dat1+dat2*10;
return (dat1);
}
void DS_Init()//DS1302初始化
{
DS_Write(Write_WP,0x00);//WP=0;允许写
DS_Write(Write_Second,0x56);//初始化秒
DS_Write(Write_Minute,0x34);//分
DS_Write(Write_Hour,0x12); //时
DS_Write(Write_WP,0x80);//禁止写
}
void main()
{
DS_Init();
while(1)
{
uchar Hour,Minute,Second;
Hour=DS_Read(Read_Hour); //读取DS1302中的时钟数据
Minute=DS_Read(Read_Minute);
Second=DS_Read(Read_Second);
display(Hour,Minute,Second); //数码显示时钟
}
}
程序如上,无法设置时间。我的显示程序我测试过 正常显示... |
|