java89vc 发表于 2011-8-1 00:45:25

新手求帮助!DS12887数据读出不正确!

前段时间学习12887后来有事耽搁了,现在重新学习,程序和电路都焊好了,可是一开机分钟就一直在2和4之间跳,秒就没变化,硬件接线我都跟网上的对了没什么问题,程序看了好久也找不出问题。希望搞过个这个的前辈指点一下兄弟谢谢了!
/*
                     DS12887时钟            

*/
#include <reg52.h>   
#define uchar unsigned char
#define uint unsigned int   
uint shi_jian;   

sbit CS=P2^3;// 片选
sbit DS=P2^6;// 读允许
sbit AS=P2^4;// 地址锁存
sbit RW=P2^5;// 写允许
sbit h_gao=P3^1;// 数码管小时位-1
sbit h_di=P3^2;   // 数码管小时位-2
sbit m_gao=P3^4;// 数码分钟位-1
sbit m_di=P3^5;   // 数码分钟位-2

/* 子函数 */
void init();      //初始化函数
void write_887(uchar add,uchar date);//写12887函数
uchar read_887(uchar add);// 读12887函数
void delay(uchar k);    //延时函数
void display();         //数码管显示函数

unsigned char table[]=   //数组
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};            //0~~9段码   共阳极




void main()
{
      init();//开机初始化
      while(1)
      {
       
         display();//数码管循环显示时间
      }


}

/*写入函数 */
void write_887(uchar add,uchar date)
{
        CS=0;      
        DS=1;      
        RW=1;          
         AS=1;      
        P1=add;   
        AS=0;      
        RW=0;      
        P1=date;   
        RW=1;      
        AS=1;      
        CS=1;      
}

/*读取函数 */
uchar read_887(uchar add)
{
        CS=0;
        DS=1;
        RW=1;
        AS=1;   
        P1=add;
        AS=0;   
        DS=0;
       
        shi_jian=P1;
        DS=1;   
        AS=1;   
        CS=1;   
        return shi_jian;


}

/*延时函数*/
void delay(uchar k)
{
        uchar x,y;   
        for(x=k;x>0;--x)
        {
                for(y=110;y>0;--y)
                {}
        }

}

void init()
{
    write_887(0x0A,0x20);    //开启震荡器
    write_887(0x0B,0x86);    //10000110 禁止更新数据,二进制,24小时制,
       
   write_887(0x02,0x0c);   //初始时间 分=12
   write_887(0x04,0x0c);   //初始时间 时=12

    write_887(0x0B,0x06);          // 00000110 二进制数据;24小时格式;无中断输出;

}

//***********      显示函数    ************
void display()
{
        uchar shi_gao,shi_di,fen_gao,fen_di;
        uint time_date;

      time_date=read_887(0x02);   //读取12887的时间
          shi_gao=time_date/10;   //分离高位
      shi_di=time_date%10;          //分离低位
            
          P0=table;    // 高位段码数据
                   h_gao=1;          //位选
                   delay(2);
                   h_gao=0;                     // 显示小时
                P0=table;   // 低位段码数据
          h_di=1;             //位选
                   delay(2);
                   h_di=0;
    /********************/
      time_date=read_887(0x00);         //读取12887的时间
      fen_gao=time_date/10;          //分离高位
      fen_di=time_date%10;                //分离低位
          P0=table;   // 高位段码数据
                   m_gao=1;         //位选
                   delay(2);
                   m_gao=0;                         //显示分钟
                P0=table;   // 低位段码数据
          m_di=1;
                   delay(2);
                   m_di=0;
}

很简单的程序,没什么调时功能,我只是想把它正确的读出来,有过的朋友麻烦帮帮忙!

java89vc 发表于 2011-8-1 20:27:32

那位前辈能帮帮我啊,我研究好几天了实在找不出问题来!

www1519 发表于 2011-8-1 20:29:03

maxim的官网,那里有例程,你看下就明白了

PS:在这个坛子里,就拿个程序出来问,什么电路也没有,
这个是很难找到有人耐心的看完你程序来给你解答的,
关于这个的例程网上有很多。

billowtust 发表于 2011-8-1 20:30:22

找找别人的代码研究一下吧,

刚开始学的时候都想什么程序都自己写

这个能理解

不过,学习一下别人的代码,没什么坏处的。当然,要找编程习惯好的代码,看起来舒服一些

在坛子里搜一下吧

q2616444 发表于 2011-8-1 21:59:32

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4922059&bbs_page_no=1&search_mode=4&search_text=q2616444&bbs_id=9999

huangyiwen 发表于 2013-3-28 12:06:00

{:smile:}   
页: [1]
查看完整版本: 新手求帮助!DS12887数据读出不正确!