DS1302求助

2020-02-05 09:24发布

src.rar (2.09 KB, 下载次数: 2) 2012-5-9 23:38 上传 点击文件名下载附件
全部代码

DS1302.C代码如下:

#include <reg52.h>
#include "MacroAndConst.h"
#include "ds1302.h"

/*************************************************************************************************
定义静态变量
ds1302驱动引脚:slck/io/rst
**************************************************************************************************/
sbit sclk=P3^4;
sbit io=P3^6;
sbit rst=P3^5;
sbit ACC_7=ACC^7;



/*************************************************************************************************
函数名称:writebyte_ds1302()
函数功能:向DS1302中写一位数据
CPU_frequence:12Mhz
输入:无
输出:一个位bat
调用函数:无
**************************************************************************************************/
void writebyte_ds1302(uchar add,uchar date)
{
        uchar i,temp;
        bit bitemp;

        rst=0;
        sclk=0;
        rst=1;

        for(i=8;i>0;i--)
        {
                sclk=0;
                temp=add;
                bitemp=temp&0x01;
                io=bitemp;
                add=add>>1;       
                sclk=1;       
        }

        for(i=8;i>0;i--)
        {
                sclk=0;
                temp=date;
                bitemp=temp&0x01;
                io=bitemp;
                date=date>>1;       
                sclk=1;                       
        }

        rst=0;
}


/*************************************************************************************************
函数名称:readbyte_ds1302()
函数功能:从DS1302中读一位数据
CPU_frequence:12Mhz
输入:无
输出:一个位bat
调用函数:无
**************************************************************************************************/
uchar readbyte_ds1302(uchar add)
{
        uchar i,temp;
        bit bitemp;
        rst=0;
        sclk=0;
        rst=1;

        for(i=8;i>0;i--)
        {
                sclk=0;
                temp=add;
                bitemp=temp&0x01;
                io=bitemp;
                add=add>>1;       
                sclk=1;               
        }
               
        for(i=8;i>0;i--)
        {
                ACC_7=io;
                sclk=0;
                ACC=ACC>>1;
                sclk=1;
        }
               
        rst=0;
        temp=ACC;       
        return(temp);
}

/*************************************************************************************************
函数名称:initial_ds1302()
函数功能:ds1302初始化
CPU_frequence:12Mhz
输入:无
输出:无
调用函数:无
**************************************************************************************************/
void initial_ds1302()
{
        writebyte_ds1302(0x8e,0x00);        //开写保护
        writebyte_ds1302(0x80,0x25);
        writebyte_ds1302(0x82,0x30);
        writebyte_ds1302(0x84,0x10);
        writebyte_ds1302(0x8e,0x80);
}

DS1302.h代码如下:
#ifndef _ds1302_h_
        #define _ds1302_h_

extern void writebyte_ds1302(uchar add,uchar date);
extern uchar readbyte_ds1302(uchar add);
extern void initial_ds1302(void);

#endif

main.c代码如下:
void main()
{
        lcd_initial();
        initial_ds1302();

        while(1)
        {               
                write_com(0x80);
                P1=readbyte_ds1302(0x81);
                write_date(readbyte_ds1302(0x81));
                 while(1);
        }                                                                               
}

全部代码:
读到LCD的始终是一个向左的箭头,郁闷了。
求大侠指导!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
horalxi
2020-02-06 01:25
nicksean 发表于 2012-5-10 12:45
DS1302 读出的数据要么是BCD码要么是HEX,要送显示肯定要转成字符才行啊。没看代码。 ...


DS1302读出的数据时BCD码,
我现在只求能正确读出,
只有能正确读出来我才可以转成字符啊。

问题是:我现在读出的数据是左向的箭头。
估计是时序或延时不够的问题。

一周热门 更多>