新手,DS1302数码管电子钟

2019-07-15 22:15发布

请前辈高手们帮忙提供一个编程思路,尤其是DS1302的数据实时读取与显示
   附仿真电路图如下:
图片1.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
sxl1971
1楼-- · 2019-07-16 01:43
#include<reg52.h>
#include"ds1302.h"
#include"disp.h"
#define  unsigned char uchar
uchar hour,minute,second;
void main(void)
{
while(1)
{
  ds1302();
disp();
}
}

为你努力
2楼-- · 2019-07-16 05:59
谢谢,但1302的数据读取与实时显示要怎么实现呢?
为你努力
3楼-- · 2019-07-16 10:22
为什么仿真的时候,三极管不工作呢,实际用9012,protues里没有,就随便找了个PNP。
heishe1989
4楼-- · 2019-07-16 12:23
用74hc573代替三极管更简单的
ying-teng
5楼-- · 2019-07-16 15:33
 精彩回答 2  元偷偷看……
sxl1971
6楼-- · 2019-07-16 20:31
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;
        }
}

一周热门 更多>