[求助] 首先谢谢版主耐心的指导,关于DS1302,新的问题出现了。

流氓小哥   2016-1-21 17:05 楼主
对于1302的秒寄存器的读取和显示已经实现了。
但新的问题出现了,当秒为奇数时,显示正常,当秒为偶数时就会闪烁。
有没有人知道是哪里的问题呢?

/*****1302写入一字节*****/
void writebyte(u8 dat)
{
u8 i;
for(i=0;i<8;i++)
{
  IO=dat&0x01;
  delay(1);
  SCLK=1;
  delay(1);
  SCLK=0;
  dat>>=1;
}
}
/*****1302读出一字节*****/
u8 readbyte()
{
u8 i,dat;
for(i=0;i<8;i++)
{
  dat>>=1;
  if(IO==1)
  dat|=0x80;
  SCLK=1;
  delay(1);
  SCLK=0;
  delay(1);
}
return dat;
}
/*****读1302数据*****/
u8 read(u8 num)
{
u8 dat,i;
for(i=0;i<1;i++)
{
  CE=0;
  SCLK=0;
  CE=1;
  writebyte(num);
  dat=readbyte();
  CE=0;
  delay(1);
}
return dat;
}
/*****定义BCD转换*****/
u8 BCD(u8 num)
{
u8 dat;
dat=read(num);
delay(1);
dat=dat&0x0f;
delay(1);
return dat;
}
/*****主函数*****/
void main()
{
P1=0;
while(1)
{
  P2=0x00;
  P1=table[BCD(0x81)];
  delay(100);
}
}

QQ:33817465

回复评论 (10)

今天怎么没人啊
QQ:33817465
点赞  2016-1-21 19:20
闪烁是什么情况?字变暗了还是变成别的数了?
点赞  2016-1-22 10:08
引用: jishuaihu 发表于 2016-1-22 10:08
闪烁是什么情况?字变暗了还是变成别的数了?

0 闪几次然后  1正常 2 闪几次然后  3正常 4 闪几次然后  5正常 6 闪几次然后  7正常 8 闪几次然后  9正常

数字都很清楚,没有异常。
QQ:33817465
点赞  2016-1-22 12:51
那种就是你的显示函数的问题了。建议多看看如何驱动数码管程序之类的东西。闪烁就是你在不知道的情况下把那一位关了。动态显示数码管很需要技巧的
点赞  2016-1-22 17:14
问完问题还能回来的就是好坛友
training
点赞  2016-1-22 22:32
引用: jishuaihu 发表于 2016-1-22 17:14
那种就是你的显示函数的问题了。建议多看看如何驱动数码管程序之类的东西。闪烁就是你在不知道的情况下把那 ...

我并不是动态显示的数码管,而是静态显示的。就像先送0延时1秒再送1延时1秒再送2........一直到9后回0。
QQ:33817465
点赞  2016-1-23 08:42
引用: 白丁 发表于 2016-1-22 22:32
问完问题还能回来的就是好坛友

能帮帮我吗?
QQ:33817465
点赞  2016-1-23 08:43
经过分析、调试后基本解决,应该是时序的问题,不对新的问题又出来了。秒显示的间隔会有规律性的停顿。正在进行调试
QQ:33817465
点赞  2016-1-23 10:39
问题全部解决,谢谢回贴的各位大神,继续学习,学明白了回来分享。
QQ:33817465
点赞  2016-1-23 11:35
直接用LED数码管驱动芯片!!!!
点赞  2016-1-23 16:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复