打印

数码管显示电路

[复制链接]
2553|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 1070309620 于 2011-4-2 10:50 编辑

我这几天焊接了一个数码管显示电路,仿真是没有问题,一通电数码管就一直闪(即使P0直接输出0)或者根本不亮,不知道是怎么回事哪位高手给我指点一下?

#include <reg51.h>
sbit key1=P1^0;
sbit key2=P1^1;  //0  1  2   3    4 5  6   7    8 9
int code num[ ] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int j,k;
void delay_1ms(int k)   //延时
{
while(k--)
for(j=0;j<125;j++);
}
void main(void)
{
int i=0,m,n=0,P0=0xff;
while(1)
{
  if(!key1)
loop1: {delay_1ms(100);i=i+1;
    while(1)
    {
    if(i==100)i=99;
    P3=i;
    m=i/10;n=i%10;
    P0=0xfd;
    P2=~num[m]+128;
    delay_1ms(10);
      P0=0xfe;
      P2=~num[n];
      delay_1ms(10);
    if(!key1){delay_1ms(100);goto loop1;}
    if(!key2){delay_1ms(100);goto loop2;}
    }
   }
   if(!key2)
loop2:  {delay_1ms(100);i=i-1;
     while(1)
     {
     if(i==-1)i=0;
     P3=i;
     m=i/10;n=i%10;
     P0=0xfd;
     P2=~num[m]+128;
     delay_1ms(10);
         P0=0xfe;
      P2=~num[n];
      delay_1ms(10);
     if(!key1){delay_1ms(100);goto loop1;}
     if(!key2){delay_1ms(100);goto loop2;}
     }
    }
}
}

相关帖子

沙发
ningling_21| | 2011-4-2 13:08 | 只看该作者
没驱动?

使用特权

评论回复
板凳
yuyi21ic| | 2011-4-2 13:23 | 只看该作者
Start Debug!

使用特权

评论回复
地板
bnyuli| | 2011-4-2 14:22 | 只看该作者
表示看电路图最敏感的路过

使用特权

评论回复
5
w522930954| | 2011-4-2 17:16 | 只看该作者
,晕 一下子就看到了两个while(1),估计全进死循环了。您再重新屡屡程序的顺序吧。

使用特权

评论回复
6
jinkeqi| | 2011-4-2 20:57 | 只看该作者
为什么有三个while(1);

使用特权

评论回复
7
mrxum| | 2011-4-2 22:41 | 只看该作者
简直就是汇编C语言啊 ,各种goto 各种while ,你先静态显示一下,把数据位全有效,位选全有效,应该全亮,在数据全清应该全灭,要是这个都过不去,那么硬件都没做好,仿真永远代替不了真实的调试,我学单片机时从来没仿真过,单片机这么简单的玩意何须仿真,焊上不好用调调就可以大部分是有虚焊造成的

使用特权

评论回复
8
shell.albert| | 2011-4-2 22:58 | 只看该作者
51单片机的P0口是开漏输出吧,要接上拉电阻的吧。

使用特权

评论回复
9
lfb112| | 2011-4-2 23:27 | 只看该作者
这程序啊!c语言中用goto最要小心了,能不用最好别用,从多层嵌套循环的里层跳出整个循环倒是可以用到goto

使用特权

评论回复
10
patson| | 2011-4-3 00:48 | 只看该作者
P0直接输出0还出现你所说的这种情况.这是硬件电路的问题了.因为仿真没问题的话,并不代表在实际电路中就会没问题,在现实的电路单片机就会因为电源不足而导致出错(有些是因为电源过大出错了).同时你检查一下你的实际电路中有没有接错或一者虚焊之类的东东了.还有一个就是你所提供给单片机的电源一定要满足.要不然单片机就会因为你提供不了足够的电流而导致出现你上面所说的情况了.这一个我以前就深有体会过了.你最好用5V/2.5A或者2.5A以上的电流的电源给它了.再看看会不会出现这种情况.一般仿真都通过了.用在现实电路中是没问题的.除了一些实时操作类的电路外

使用特权

评论回复
11
patson| | 2011-4-3 00:54 | 只看该作者
还有一个就是你的代码中我建议你使用中断来实现它吧.因为你这一个程序.在现实中一通电后就会不停的运作.同时不同时间段时可能会出现如不停闪烁的现象了.就好像是一个流水灯程序一样了.因为这种电路在仿真中是测不出来的.因为一个单片机不一定会像仿真那样理想的环境.就如七楼所说的那样了.

使用特权

评论回复
12
shadow_| | 2011-4-3 01:13 | 只看该作者
来学习一下,P0漏输出什么意思?谁能给我解释一下?

使用特权

评论回复
13
xlsbz| | 2011-4-3 01:16 | 只看该作者
不亮不见得是坏事

使用特权

评论回复
14
1070309620|  楼主 | 2014-1-7 17:33 | 只看该作者
居然看到自己两年前的帖子,各种感慨!

使用特权

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

本版积分规则

1

主题

3

帖子

1

粉丝