打印

请帮忙解决数码管显示问题

[复制链接]
1813|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
frankeng|  楼主 | 2009-2-12 12:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是个初学者,用的是Philip的LPC931做一个很简单的数码管显示的累加实验。程序和电路图如下所示,现在问题如下:如果P0、P2口设为开漏或准双向口,最后一个数码管特别亮,其它正常,如果屏蔽掉最后一个,倒数第二个又变成特亮了。如果把P0、P2口设开推挽的话,整个显示都不正常了,所有数码管同时显示相同的字段,我把延迟时间放的很慢,发现三极管的集电极始终处于高电平,按照道理应该设置成推输出。我想了很长时间都没把问题想出来,请哪位高手指点。

#include<reg931.h>
#define uchar unsigned char
unsigned char data dis_buf[6];  // dis_buf 显于缓冲区基地址

unsigned char tab[6]={0xfb,0xfd,0xfe,0x7f,0xbf,0xf7};
unsigned char code dis_code[11]={

0x28,               /*0*/
0xEB,        /*1*/
0x32,        /*2*/
0x62,        /*3*/
0xE1,        /*4*/
0x64,        /*5*/
0x24,        /*6*/
0xEA,        /*7*/
0x20,        /*8*/
0x60,        /*9*/
0xff            /*null*/
                                };

long int Num=0;
uchar k;

void delay(uchar i)
{uchar j;
  while(i--)   
  {
  for(j=0;j<50;j++);    
   }
}



void time() interrupt 1 using 1    
{    k++;
    TH0=0xec;
    TL0=0x78;

    if(k==100){k=0;Num++;}
}

void disp(void)
{     uchar j;
     dis_buf[5]=Num%10;
    dis_buf[4]=Num/10%10;
    dis_buf[3]=Num/100%10;
    dis_buf[2]=Num/1000%10;
    dis_buf[1]=Num/10000%10;
    dis_buf[0]=Num/100000%10;
    for(j=0;j<6;j++)
    {
    P0=tab[j];
    P2=dis_code[dis_buf[j]];
    delay(5);
    
    }
    
}
main()
{
      P0M1=0x00;        
     P0M2=0xff;        

    P2M1=0x00;        
    P2M2=0xff;        
    P0=1;
    P2=0;

    TMOD=0x01;
    TH0=0xec;
    TL0=0x78;
    TR0=1;
    ET0=1;
    EA=1;

while(1)
    
   {
disp();
    } 

}

相关帖子

沙发
frankeng|  楼主 | 2009-2-12 16:32 | 只看该作者

自己顶

咋就没人帮忙指点一下呢,知道的说一下呀,唉,自己顶自己一下吧。

使用特权

评论回复
板凳
风云兄| | 2009-2-12 20:36 | 只看该作者

显示程序最后面要关闭显示输出

否则最后一个显示内容会由于显示的时间比其它的长而显得特别亮。

使用特权

评论回复
地板
xwj| | 2009-2-12 20:41 | 只看该作者

批评下LZ:到处发帖,回了的你都看不到!

使用特权

评论回复
5
frankeng|  楼主 | 2009-2-13 10:56 | 只看该作者

谢谢

特别感谢xwj,不好意思,你回的贴子今天上午才看到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

14

帖子

0

粉丝