52单片机的四位共阳极的数码管从0至99的显示程序

如题所述

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar num,num2,shi,ge,aa;

uint num1;

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void display(uchar,uchar);

void delay(uint);

void main()

{

   TMOD=0x10;

 TH1=(65536-45872)/256;

 TL1=(65536-45872)%256;

 EA=1;

 ET1=1;

 TR1=1; 

   while(1)

   {

         

     display(shi,ge);

   } 

 }

       

void delay(uint z)

{

 uint x,y;

 for(x=z;x>0;x--)

  for(y=110;y>0;y--);

}

void display(uchar shi,uchar ge)

        wela=0;

  P0=0x01;

  wela=1;

  P0=0;

        dula=1;

  P0=table[shi];

  dula=0;

  P0=0xff; 

  delay(5);

  wela=0;

  P0=0x02;

  wela=1;

  P0=0;

        dula=1;

  P0=table[ge];

  dula=0; 

  P0=0xff; 

  delay(5);           

}

void timer1() interrupt 3

{

 TH1=(65536-45872)/256;

 TL1=(65536-45872)%256;

 num2++;

 if(num2==20)

 {

  num2=0;

  num++;

  if(num==100)

  num=0;

  shi=num/10;

  ge=num%10;

 } 

}

用到两个锁存器(74HC573),希望对你有用,我仿真过啦,能实现

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-03
#include"reg52.h"
unsigned int i=0;
unsigned int m=0;
unsigned char code tab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void dms()
{
unsigned int n=80;
while(n--);
}
void disp()
{
unsigned int j;

for(j=0;j<1000;j++)
{
P0=tab[m];
P2=0xfc;
dms();
P2=0xff;
P0=tab[i];
P2=0xfe;
dms();
P2=0xff;
}

}
void main()
{
while(1)
{
disp();
i++;
if(i>9)
{
i=0;
m++;
if(m>9)
{
m=0;
}
}

}
}
第2个回答  2012-12-03
是 0 ~ 9999 吧?

每秒加一?追问

是0~99 每秒加一,当显示个位数时,百和十位是不会显示的,例如当我显示8时,前面百位,十位不会显示0 0,不用锁存器,共阳极的

追答

哦,明白了。

但是,你选择的满意答案,和你说的,完全不符啊!

第一,它使用了锁存器。

第二,当显示 8 时,它显示的是 08 。并没有实现《当显示个位数时,百和十位是不会显示的,》。

这是怎么回事?

追问

不是我选的,我同学选的,是他要的答案,所以对不起啊,那请你帮我写一下吧,谢谢

追答

这个题目,已经结题。

还是到我的百度空间看看吧,有类似的程序。

相似回答