您的位置 首页 新能源

时钟芯片DS1302程序事例

*该程序主要实现如下的功能:从DS1302的秒寄存器中,读出秒的数值;将秒的数值用两个数码管显示出来。*includereg52h>define

/*

该程序首要完成如下的功用:

从DS1302的秒寄存器中,读出秒的数值;

将秒的数值用两个数码管显现出来。

*/

#include

#define uchar unsigned char

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit RST=P1^2;

sbit DATA=P1^1;

sbit SCLK=P1^0;

//延时n us函数

void Delayus(uchar n)

{

uchar i;

for(i=0;i

{

;

}

}

//往DS1302写入数据

void WriteDs1302(uchar dat)

{

uchar i;

SCLK=0;

Delayus(2);

for(i=0;i<8;i++)

{

DATA=dat&0x01;

Delayus(2);

SCLK=1;

Delayus(2);

SCLK=0;

dat>>=1;

Delayus(2);

}

}

// 往DS1302中写入指令及数据

void WriteSetDs1302(uchar cmd,uchar dat)

{

RST=0;

SCLK=0;

RST=1;

Delayus(2);

WriteDs1302(cmd);

WriteDs1302(dat);

SCLK=1;

RST=0;

}

//从DS1302中读出一个字节

uchar ReadDs1302()

{

uchar dat,i;

Delayus(2);

//SCLK=1;

Delayus(2);

for(i=0;i<8;i++)

{

dat>>=1;

if(DATA==1)

{

dat|=0x80;

}

SCLK=1;

Delayus(2);

SCLK=0;

Delayus(2);

}

return dat;

}

//从DS1302的特定的寄存器中,读出数据

uchar ReadSetDs1302(uchar cmd)

{

uchar dat;

RST=0;

SCLK=0;

RST=1;

WriteDs1302(cmd);

dat=ReadDs1302();

SCLK=1;

RST=0;

return dat;

}

//显现函数

void Dispaly(uchar dat)

{

P0=table[dat];

}

//DS1302初始化函数

void Ds1302Init()

{

WriteSetDs1302(0x8e,0x00);//去除写保护

WriteSetDs1302(0x80,0x05);//往秒寄存器中写入数据

WriteSetDs1302(0x8e,0x80);//敞开写保护

}

//1ms的推迟函数

void delay1ms()

{

unsigned char i,j;

for(i=0;i<10;i++)

for(j=0;j<33;j++)

;

}

// n ms 的延时函数

void Delayms(uchar n)

{

uchar i;

for(i=0;i

{

delay1ms();

}

}

//主函数

void main()

{

uchar sec,num1,num2;

Ds1302Init();

P2=0Xfc;

while(1)

{

sec=ReadSetDs1302(0x81); //从DS1302的秒寄存器中读出秒值

num1=(sec&0x70)>>4; //别离出秒值的十位数

num2=sec&0x0f; //别离出秒值的个位数

P2=0xfd;

Dispaly(num1);

Delayms(5);

P2=0xfe;

Dispaly(num2);

Delayms(5);

}

}

同理,可读出分、时,月、年等时刻信息,并显现出来。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/260150.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部