单片机/MCU论坛
直播中

为你努力

11年用户 45经验值
擅长:可编程逻辑 EMC/EMI设计 EDA/IC设计 处理器/DSP 控制/MCU
私信 关注
[问答]

新手,DS1302数码管电子钟

请前辈高手们帮忙提供一个编程思路,尤其是DS1302的数据实时读取与显示
   附仿真电路图如下:
图片1.png

回帖(9)

宋喜良

2013-10-6 18:29:31
#include
#include"ds1302.h"
#include"disp.h"
#define  unsigned char uchar
uchar hour,minute,second;
void main(void)
{
while(1)
{
  ds1302();
disp();
}
}

举报

为你努力

2013-10-6 19:52:17
谢谢,但1302的数据读取与实时显示要怎么实现呢?
举报

为你努力

2013-10-8 09:14:03
为什么仿真的时候,三极管不工作呢,实际用9012,protues里没有,就随便找了个PNP。
举报

heishe1989

2014-6-20 15:23:07
用74hc573代替三极管更简单的
举报

ying-teng

2014-6-24 08:15:40
先把DS1302的读取程序写好,网上有好多,注意延时。再写显示函数
举报

宋喜良

2014-7-1 19:13:38
void v_RTInputByte(uchar ucDa)        //写
{
        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)          //读
{
        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;  //BCD转换成16进制
        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;
        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<7;i++)       //连续写入7个时间
        {
                j=ucCurtime[i];       //代入初始时间
                v_W1302(ucAddr,j); /* 秒 分 时 日 月 星期 年 */
                ucAddr +=2;         //地址+2
        }
        v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}

void v_Get1302()         //记录时间
{
        uchar i;
        uchar ucAddr=0x81;     //秒读地址
        for (i=0;i<7;i++)       //连续读数据
        {
                ucCurtime[i]=uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
                ucAddr +=2;
        }
}
举报

宋喜良

2014-7-1 19:15:40
单片机与ds1302的通讯程序在上面
举报

宋喜良

2014-7-1 19:27:29
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

哇咔咔32

2015-10-12 12:00:19
看看就看看,。。。。。。。。。。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分