ds1302啊,弄了两天了。还没显示正常!求助了

2019-07-15 23:30发布

本帖最后由 zmin21 于 2013-7-26 08:29 编辑

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsingned int
sbit wela=P2^7;
sbit dula=P2^6;
sbit tclk=P2^5;   时钟
sbit tio=P2^4;     io
sbit trst=P2^3;      复位
//sbit acc0=ACC^0;
//sbit acc7=ACC^7;
uchar code duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
uchar code wei[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管各位的码表

void delay(uchar z)
{
uchar x;
for(x=z;x>0;x--);  
}
void ds1302_write(uchar byte)
{
uchar i,dat;
dat=byte;
tclk=0;
delay(2);
for(i=0;i<8;i++)
   {tio=dat&0x01;
   tclk=1;
   delay(2);
   tclk=0;
   dat>>=1;
    }
}
uchar ds1302_read(void)
{
uchar i,dat;
delay(2);
for(i==0;i<8;i++)
  {dat=dat>>1;
  if(tio=1) dat=dat|0x80;
  tclk=1;
  delay(2);
  tclk=0;
  delay(2);
}
return(dat);
}
void wr1302(uchar add,uchar data1)
{
  trst=0;
  tclk=0;
  trst=1;
  delay(2);
  ds1302_write(add);
  ds1302_write(data1);
  tclk=1;
  trst=0;
}
uchar  rd1302(uchar add)
{
  uchar data2;
  trst=0;
  tclk=0;
  trst=1;
  ds1302_write(add);
  data2=ds1302_read();
  tclk=1;
  trst=0;
  return(data2);
}
void ds1302_init(void)
{
uchar flag;
flag= rd1302(0x81);  
if(flag&0x80)
  {
  wr1302(0x8e,0x00);//关保护寄存器
  wr1302(0x90,0xa5);//卷电流充电  
  wr1302(0x80,((55/10)<<4|(55%10)));//秒
  wr1302(0x82,((19/10)<<4|(19%10)));//分
  wr1302(0x84,((10/10)<<4|(10%10)));//时
  wr1302(0x8e,0x80);//开保护寄存器  
}
}
void display_led(uchar date,uchar num)
{
P0=wei[num];   
wela=1;
wela=0;
P0=duan[date];   
dula=1;
dula=0;
delay(50);
}
void main()
{
  uchar sec,sec1,sec2;
  uchar min,min1,min2;
  uchar hour,hour1,hour2;
  ds1302_init();
  delay(4);

  while(1)
   {
  sec=rd1302(0x81);
  sec1=(sec&0x0f);
  sec2=(sec>>4);
        
  min=rd1302(0x83);
  min1=min&0x0f;
  min2=(min>>4);
  hour=rd1302(0x85);
  hour1=hour&0x0f;
  hour2=(hour>>4);

display_led(sec1,5);
display_led(sec2,4);
display_led(min1,3);
  display_led(min2,2);
  display_led(hour1,1);   
  display_led(hour1,0);  
   }
}
这是所有程序, 愿大神指导指导,小弟刚学不久,本来很有激情的,一下子被1302打击了,求激励!
新人,可惜只有6个E币,全送了
工程备份.zip 下载积分: 积分 -1 分
25.05 KB, 下载次数: 4, 下载积分: 积分 -1 分 修改的小问题后的定稿,呵呵...上传给新手参考
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
snakeissky
1楼-- · 2019-07-16 05:17
顶一个  看看大神来解决
swq736993598
2楼-- · 2019-07-16 08:30
 精彩回答 2  元偷偷看……
dongyumin
3楼-- · 2019-07-16 11:04
是数码管显示的问题呢,还是读1302数据错误的问题?
zmin21
4楼-- · 2019-07-16 11:25
swq736993598 发表于 2013-7-25 09:51
void ds1302_write(uchar byte)
{
uchar i,dat;

刚才也查到资料说C里面用ACC不对,改了,还是不行,努力调试中,不过仍然全0
zmin21
5楼-- · 2019-07-16 12:51
dongyumin 发表于 2013-7-25 09:56
是数码管显示的问题呢,还是读1302数据错误的问题?

我试了数码管,显示没问题,我觉得是程序问题吧,没读出来1302数据,可惜我看不出来程序错误,看了好多遍了
zmin21
6楼-- · 2019-07-16 16:05
swq736993598 发表于 2013-7-25 09:51
void ds1302_write(uchar byte)
{
uchar i,dat;

那个ACC啊,修改的时候忘了,谢谢提醒! 现在不是全0,能走了,不过不是预期的走法,继续调试!加油!

一周热门 更多>