ds1302的c语言程序,DS1302实时时钟芯片的C语言源程序

单片机程序

#include

#include

#include

#define uchar unsigned char

#define unint unsigned int

/* 时钟程序*/

/************************************/

sbit T_CLK=P3^6; /* 实时时钟的时钟线引脚*/

sbit T_IO=P3^7; /* 实时时钟的数据线*/

sbit T_RST=P3^5; /* 实时时钟的复位线引脚*/

sbit hw=P0^5; //fr位

sbit ww=P0^4; //rr位

sbit qw=P0^3; //个位

sbit bw=P0^2; //十位

sbit sw=P0^1; //百位

sbit gw=P0^0; //千位

unint a[6];//={0,0,0,0,0,0}; /*位段的数字*/

uchar code ledk[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

uchar code ledk1[10]={0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0xfF,0xeF}; //加了小数点后

unint ucCurtime[3]={30,59,23}; // 秒 分 时

unint temp;

uchar data BUFFER[1]={0};

void delay() /*延时*/

{

uchar m,n;

for(m=100;m>0;m--)

for(n=255;n>0;n--);

}

void v_RTInputByte(uchar ucDa) //写1个字节的数据

{

uchar i;

ACC=ucDa;

for(i=8;i>0;i--)

{

if((ACC&0x01)==1)

//T_IO=ACC0; /* 相当于汇编中的RRC */

T_IO=1;

else T_IO=0;//if((ACC&0x01)==0)

T_CLK=1;

T_CLK=0;

ACC=ACC>>1;

}

}

uchar uc_RTOutputByte(void) /*读1字节的数据*/

{

uchar i,ACC;

ACC=0;

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

{

ACC=ACC>>1; /*相当于汇编中的RRC*/

if(T_IO==1)

ACC=ACC|0x80;

T_CLK=1;

T_CLK=0;

}

return(ACC);

}

void v_W1302(uchar ucAddr,uchar ucDa)

{

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(ucAddr); /*地址,命令*/

v_RTInputByte(ucDa); /*写1Byte数据*/

T_CLK=1;

T_RST=0;

}

uchar uc_R1302(uchar ucAddr)

{

unsigned char ucDa,k;

k=0x00;

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(ucAddr); /*地址,命令*/ //输入一个字节的数据。 写入读地址的控制命令。

ucDa=uc_RTOutputByte(); /*读取1Byte数据*/

T_CLK=1;

T_RST=0;

k=ucDa/16; //在将10进制的数转化为16进制的数。

ucDa=ucDa%16;

ucDa=ucDa+k*10;

return(ucDa);

}

void v_Set1302(uchar *pSecDa) /*设定初试时间*/

{

uchar i,j;

uchar ucAddr=0x80;

v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/

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

{

j=ucCurtime[i];

v_W1302(ucAddr,j); /* 秒 分 时 */

ucAddr +=2;

}

v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/

}

void v_Get1302() //读1302里的数据。

{

uchar i;

uchar ucAddr=0x81;

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

{

ucCurtime[i]=uc_R1302(ucAddr);/*格式为: 秒 分 时 */

ucAddr +=2;

}

}

void t2_10()

{

unint k;

a[5]=temp/100000;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值