我想做一个用单片机频率计,用T0计数,T1定时1s,数码管显示,但当频率大于10KHZ 时显示就不行了,求指教!

别人说51可以达到250khz的,我的为什么大一点就不行了啊?
希望能帮忙指出问题所在,并给出可行的解决方法哈!谢谢啦
只是程序:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned long count;

unsigned char dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(void)
{uchar i;

for (i=0;i<255;i++);
}

void display(void )
{

P2=0x01;
P0=dis[(TH0*256+TL0)/10000];
delay();
P2=0x00;

P2=0x02;
P0=dis[(TH0*256+TL0)%10000/1000];
delay();
P2=0x00;

P2=0x04;
P0=dis[(TH0*256+TL0)%1000/100];
delay();
P2=0x00;

P2=0x08;
P0=dis[(TH0*256+TL0)%100/10];
delay();
P2=0x00;

P2=0x10;
P0=dis[(TH0*256+TL0)%10];
delay();
P2=0x00;

}
void ex3(void) interrupt 3
{

TR0=0;
TR1=0;

}
void main(void )
{P0=0x00;
P2=0X00;
TMOD=0x15;
TH1=0x3c;
TL1=0xb0;
ET1=1;
ET0=1;
TR0=1;
TR1=1;
EA=1;
while(1)
{display();}

}

没有修改你的,我把以前做的一个给帖过来了,最后是显示图片。

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uint Tcount=0,Ncount=0;

//uint tt;

void delay(uchar a)

{

  uchar i,j;

  for(i=0;i<a;i++)

    for(j=0;j<110;j++);

}

void display(void)

  uchar g,s,b,q,w,m;

  //Ncount=tt;

  m=Ncount/100000;

  w=Ncount/10000%10;

  q=Ncount/1000%10;

  b=Ncount/100%10;

  s=Ncount/10%10;

  g=Ncount%10;

  //q=Ncount/1000;

  //b=Ncount%1000/100;

  //s=Ncount%1000%100/10;

  //g=Ncount%1000%100%10;

  

  P2=0x01;

  P0=led[m];

  delay(5);

  P2=0x02;

  P0=led[w];

  delay(5);

  P2=0x04;

  P0=led[q];

  delay(5);

  P2=0x08;

  P0=led[b];

  delay(5);

  P2=0x10;

  P0=led[s];

  delay(5);

  P2=0x20;

  P0=led[g];

  delay(5);

  

  //TR0=0; 

  //TR1=0; 

}

void init()

{

  //TMOD=0x61;   //定时器0,方式1;计数器1,方式2

  

  TMOD=0x25;

  //TH0=(65536-50000)/256; //TH0=0x3C

  //TL0=(65536-50000)%256;  // TL0=0xB0  定时50ms

  TH1=6;

  TL1=6;

  TH0=0;

  TL0=0;

  //TH1=0X00;

 // TL1=0X00;

  TR0=1;

  ET0=1;

  TR1=1;

  ET1=1;

  EA=1;

}

void main(void)

{

  P2=0;

  init();

  while(1)

  {

    display();

  }

}

void timer0(void) interrupt 3

{

  

  //TH0=(65536-50000)/256; //TH0=0x3C

  //TL0=(65536-50000)%256;  // TL0=0xB0  定时50ms

  Tcount++;

  if(Tcount==4000)

  {

   Tcount=0;

EA=0;

Ncount=TH0*256+TL0;

TH0=0;

TL0=0;

EA=1; 

//TR1=0;

//Tcount=0;

  }

}

追问

我的程序和你基本上是一样的,但为什么我把你的程序拷打keil里,protues仿真图也画出来了,就是不行啊!麻烦把你那个仿真图发给我一下啊?郁闷好多天了,帮帮忙了!
[email protected]

追答

好的,我加你了。QQ聊。

温馨提示:答案为网友推荐,仅供参考
相似回答