两个数码管动态显示的程序,有点想不通

2019-07-16 04:52发布

void display()
{
static int i=0;
  P2=i;
  P0=TempData[i];
  i++;
  if(i==8 ) i=0;
}
/////////////////////////////////////////////
void display()
{ int i;
  for(i=0;i<8;i++)
  {
   P2=i;
  P0=TempData[i];
  delay(1);   //延时一毫秒
  }

}

最近在用ds1302做电子钟,数码管显示。以上是我写的显示程序,放在定时器中断里调用。P2是位码,P0是段码。
只有第一个可以正常显示,动态显示不是要用到延时么?第二个反而会让数码管出现余晖。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
chengzidun
1楼-- · 2019-07-16 08:55
本帖最后由 chengzidun 于 2012-8-20 09:45 编辑

说明前一个段码数据没关掉,影响下一位数码管,在延时后面加一句把P0全部关掉,试试
草根白骨精
2楼-- · 2019-07-16 13:15
 精彩回答 2  元偷偷看……
笑靥
3楼-- · 2019-07-16 15:58
如果你的是用138来做的位选,这个程序看上去是没的问题的。就是不知道你所谓的余晖是什么。你可以适当的改变延时再试试!
lstcspring
4楼-- · 2019-07-16 18:08
既然用了定时器,为什么还要加延时,不知道你是怎么考虑的?
lovedollar
5楼-- · 2019-07-16 18:41
草根白骨精 发表于 2012-8-20 13:09
这个程序是错的,i 不是全局变量,每次都只显示第一位,i 是不会保持有效数据的。看你这个程序应该不是P2直 ...

是的,第二个显示程序放在中断里跑时间不够。第一个显示程序是可以的,p2直接选通位,定时中断2ms,每次就显示一位,i是用static声明过可以保持。刚想明白了,谢谢。
lovedollar
6楼-- · 2019-07-16 22:22
lstcspring 发表于 2012-8-20 20:08
既然用了定时器,为什么还要加延时,不知道你是怎么考虑的?

一语惊醒梦中人啊,都写糊涂了,想明白了。谢谢

一周热门 更多>