找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4333|回复: 0
打印 上一主题 下一主题
收起左侧

12864+DS1302显示当前时间,调试的时候读不出时间

[复制链接]
跳转到指定楼层
楼主
ID:90563 发表于 2015-10-6 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有哪位用DS1302调试显示时间成功的,可不可以帮我看一下,或者有调试成功的可以给我参考一下,我现做的东西急需要显示当前时间,调试的时候读不出时间,非常着急,求帮助,谢谢了

/***************************1302写入操作*********************/
void write_byte(uchar dat)
{
    uchar a;
        ACC=dat;
        for(a=8;a>0;a--)           //循环8次 写入数据
        {
                IO=ACC0;        //每次传输低字节
                SCLK=1;          //错误,先为1后为0
                SCLK=0;
                ACC=ACC>>1;          //右移一位
        }
}

uchar read_byte()//读一个字节
{
        uchar a;
        for(a=8;a>0;a--)                          
        {
                ACC=ACC>>1;
                ACC7=IO;
                SCLK=1;
                SCLK=0;
        }
        return(ACC);
}

/***************************1302写入数据*****************************/
void write_1302( uchar add,uchar dat )     //先写地址,再写数据
{
    RST=0;
        SCLK=0;
        RST=1;         //重新工作
        write_byte(add);  //发送地址
        write_byte(dat);  //发送数据
//        SCLK=1;
        RST=0;
}

/***************************1302读出数据***********************************/
uchar read_1302(uchar add)        //先送地址,再读数据
{
        uchar temp;
        RST=0;
        SCLK=0;
        RST=1;
        write_byte(add);
        temp=read_byte();
        //SCLK=1;
        RST=0;
        return(temp);
}

uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制
{
uchar Decimal;
Decimal=bcd>>4;
return(Decimal=Decimal*10+(bcd&=0x0F));
}  

void ds1302_init() //1302芯片初始化子函数
{
if(read_1302(0xd1)==0x55)               //判断内存单元的内容,是否进行初始化
{        
return;  
}     
else
{
        write_1302(0x8e,0x00); //关闭写保护
        write_1302(0x90,0x00); //电池充电设置
        write_1302(0x80,0x00); //秒
        write_1302(0x82,0x54); //分
        write_1302(0x84,0x20); //时
        write_1302(0xd0,0x55); //写RAM
        write_1302(0x8e,0x80); //打开写保护
}
}
void read_data(void)
{
miao = BCD_Decimal(read_1302(0x81));
fen = BCD_Decimal(read_1302(0x83));
shi  = BCD_Decimal(read_1302(0x85));
write_com(0x80);
write_data(shi/10+0x30);
write_data(shi%10+0x30);
write_data(':');
write_data(fen/10+0x30);
write_data(fen%10+0x30);
write_data(':');
write_data(miao/10+0x30);
write_data(miao%10+0x30);
}


void main()
{
lcd_init();
write_com(0x01);
lcd_display();
ds1302_init();
while(1)
{
  read_data();
  key();
  delayms(5);
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表