[讨论] 两位数码管的动态显示

真菌拉拖鞋   2010-6-25 23:37 楼主
各位大师,我最近在学数码管的动态显示,是用两位的数码管,首先想做一个简单的0到99秒的秒表,可是扫描的太快,是不是应该直接写个定时一秒的程序呢,应该怎么改,程序如下:
#include
#include
char code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};/*共阴数码管*/
unsigned char data led[]={0,0};/*用两个LED定义成一个数组,用来显示个位和十位*/
char code num1[]={0xfd,0xfe};
#define uint unsigned int
#define uchar unsigned char
uint count;
bit flag;
char tt;

  void delay(uint x)
{
    uchar i;
    while(x--)
   {
     for(i=120;i>0;i--);
   }
}


  void show()
{
   uint i;
   led[1]=count/10;
   led[0]=count%10;
   if(led[1]>9)led[1]=led[1]-10;
   if(led[1]==0)
   {led[1]=0x0a;}
  

   for(i=0;i<2;i++)
  {
    P0=num1;
        P1=num[led];
        delay(20);
   
  }
}
   int time0()interrupt 1/*不能用UINT*/
{
  
   char time=0;
   TH0=-100000/256;
   TL0=-100000%256;
   

   count++;
   delay(20);

}

int main()
{  
   TMOD=0X01;
   TH0=-100000/256;
   TL0=-100000%256;
   TR0=1;
   EA=1;
   ET0=1;
  /* delay(100);*/
   while(1)
   {
    show();
}
}
  • proutes仿真图

回复评论 (4)

引用: count++;
delay(20);


这里的delay(20)做什么用啊???有点看不明白。
点赞  2010-6-26 00:07

回复 沙发 huchuan987 的帖子

嗯,我当时看他扫描太快了,就在这里加了个延时!你认为应该是在哪里加吗
点赞  2010-6-26 07:29
引用: for(i=0;i<2;i++)
{
P0=num1;
P1=num[led];
delay(20);

}

在这里加啊~~~~把那个delay(20)中的数调大一些,比如把20变成200如何???

引用: void delay(uint x)
{
uchar i;
while(x--)
{
for(i=120;i>0;i--);
}
}

还可以把这里的I值调大点。

[ 本帖最后由 huchuan987 于 2010-6-26 09:45 编辑 ]
点赞  2010-6-26 09:44
扫得快不是问题,数码管要显示稳定一般都是延时1ms左右,关键是把显示内容每秒钟改变一次,计时和显示是分开的两个模块
点赞  2010-6-26 12:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复