找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5163|回复: 4
打印 上一主题 下一主题
收起左侧

51hei板数码管显示0-9999,求指导

[复制链接]
跳转到指定楼层
楼主
ID:35727 发表于 2012-4-4 21:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#inclede<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uchar  tape[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;
sbit duan=P2^6;
sbit wei=P2^7;
uchar a,qian,bai,shi,ge;
uint   num;
void display();
void delay(uint z)
{
    uint x,y;
 for(x=z;x>0;x--)
 for(y=110;y>0;y--);
}
 main()
{ TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
 num=0;
 while(1)
   {  if(a==20)
     { a=0;
  num++;
      if(num==9999)
     num=0;
      qian=num/1000;
         bai=num%1000/100;
         shi=num%100/10;
   ge=num%10;
      display();
  }
  
   }


}
void display()
{    P0=0xf7;
 wei=1;
 wei=0;
 duan=1;
 P0=tape[ge];
 duan=0;
 delay(6);
 P0=0xfb;
  wei=1;
 wei=0;
 duan=1;
 P0=tape[shi];
 duan=0;
 delay(6);
   P0=0xfd;
  wei=1;
 wei=0;
 duan=1;
 P0=tape[bai];
 duan=0;
 delay(6);
  P0=0xfe;
  wei=1;
 wei=0;
 duan=1;
 P0=tape[qian];
 duan=0;
 delay(6);

 
}

 

void time0() interrupt 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  a++;
}

 

 

 

为什么数码管上只有千位是保持不动。其他位都是闪烁的啊,怎样才能保证其他位也不闪烁啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:34099 发表于 2012-4-4 22:22 | 只看该作者
动态扫描的时间短一点 可以改为delay(1);
回复

使用道具 举报

板凳
ID:37419 发表于 2012-4-4 22:24 | 只看该作者

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar tape[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;
sbit duan=P2^6;
sbit wei=P2^7;
uchar a,qian,bai,shi,ge;
uint num;
void display(uchar qian,uchar bai,uchar shi,uchar ge);
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
main()
{ TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
num=0;
while(1)
{ if(a==20)
{ a=0;
num++;
if(num==9999)
num=0;
qian=num/1000;
bai=num%1000/100;
shi=num%100/10;
ge=num%10;

}

display(qian,bai,shi,ge);

}


}
void display(uchar qian,uchar bai,uchar shi,uchar ge)
{ P0=0xf7;
wei=1;
wei=0;
duan=1;
P0=tape[ge];
duan=0;
delay(6);
P0=0xfb;
wei=1;
wei=0;
duan=1;
P0=tape[shi];
duan=0;
delay(6);
P0=0xfd;
wei=1;
wei=0;
duan=1;
P0=tape[bai];
duan=0;
delay(6);
P0=0xfe;
wei=1;
wei=0;
duan=1;
P0=tape[qian];
duan=0;
delay(6);


}


void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}

 

因板子型号不同,没有进行具体测试,改程序的问题主要是display();函数的位置不对,已经帮你调整好了,你试试应该没问题了

回复

使用道具 举报

地板
ID:35727 发表于 2012-4-4 23:16 | 只看该作者
谢谢啊。没问题
回复

使用道具 举报

5#
ID:37147 发表于 2012-4-5 21:50 | 只看该作者

   ORG 0000H

LJMP MIAN

ORG 000BH

LJMP INT_T0

ORG 0030H

MIAN:   MOV DPTR,#TABLE

         TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

   MOV R1,#200

        MOV R2,#20
 
        MOV R3,#0

        MOV R4,#0

       MOV R5,#0

         MOV R6,#0

       

      

         MOV TMOD,#02H

         MOV TH0,#06H

         MOV TL0,#00H

SETB EA

SETB ET0

SETB TR0

 

 LOOP:

         MOV P2,#07H

         MOV A,R3

         MOVC A,@A+DPTR

         MOV P0,A

LCALL DELAY10ms

         MOV P2,#06H

         MOV A,R4

         MOVC A,@A+DPTR

         MOV P0,A

LCALL DELAY10ms

         MOV P2,#05H

         MOV A,R5

         MOVC A,@A+DPTR

         MOV P0,A

LCALL DELAY10ms

         MOV P2,#04H

         MOV A,R6

         MOVC A,@A+DPTR

         MOV P0,A

LCALL DELAY10ms

    

LJMP LOOP

 

 

INT_T0:   DJNZ R1,QUIT

           MOV R1,#200

           DJNZ R2,QUIT

           MOV R2,#20
 

INC R3

CJNE R3,#10,QUIT

MOV R3,#0

 

INC R4

CJNE R4,#10,QUIT

MOV R4,#0

 

INC R5

CJNE R5,#10,QUIT

MOV R5,#0

 

INC R6

CJNE R6,#10,QUIT

MOV R6,#0


 QUIT:RETI

 


DELAY10ms:

 

                     MOV 40H,#10

        LOOP1:   MOV 41H,#200                    

                     DJNZ 41,$

                     DJNZ 40H,LOOP1

                     RET

END

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表