注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
leiming121的个人空间 https://home.eeworld.com.cn/space-uid-233063.html [收藏] [复制] [分享] [RSS]
日志

数码管扫描慢 放到主函数后也慢 怎么解决了

已有 685 次阅读2011-11-24 16:26

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code Disp_Sel[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
uchar aa=0;
unsigned int tmp;
long f;
void init();
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
unsigned char num=0;
uint ff;
uchar count;
uchar first;
void display();
void diffence();

void main()
{
 init();
 first=0;
 while(1)
 {
  switch(count)//
  {
   case 0:P21=0;P22=0;P23=0;tmp=f*1;break;
   case 1:P21=0;P22=0;P23=1;tmp=f*10;break;
   case 2:P21=0;P22=1;P23=0;tmp=f*100;break;
   case 3:P21=0;P22=1;P23=1;tmp=f*1000;break;
   case 4:P21=1;P22=0;P23=0;tmp=f*10000;break;
   case 5:P21=1;P22=0;P23=1;tmp=f*100000;break;
   case 6:P21=1;P22=1;P23=0;tmp=f*1000000;break;
   case 7:P21=1;P22=1;P23=1;tmp=f*10000000;break;
   default:break;
  }
 } 
}

void init()
{
 TMOD=0x51;//T1计数。T0定时
 TH1=0;
 TL1=0;
 TH0=(65536-50000)/256;//T0初值为50ms
 TL0=(65536-50000)%256;
 TR0=1;
 TR1=1;
 EA=1;
 ET0=1;
}

void TT0() interrupt 1
{
 TH0=(65536-50000)/256;//重赋T0初值为50ms
 TL0=(65536-50000)%256;
 aa++;
 if(first == 0)//开始测频时,单片机进行粗略的计算
 {
  if(aa==20)
  {
   first =1;
   aa=0;
   f = (TH1*256 + TL1)+ff*65536;
   ff=0;
   TL1 = 0;
   TH1 = 0;
   diffence();//分挡位
  } 
  }
  else//分频后,精确测频
  {
   if(aa==20)
  {
   first =0;
   aa=0;
   f = (TH1*256 + TL1)+ff*65536;
   ff=0;
   TL1 = 0;
   TH1 = 0;
   display();//加入显示函数
  }
  }
 
}

void diffence()//分挡位
{
 if(f < 5000)
  count=0;
 else if(((f == 5000)||(f > 5000)) && ((f == 10000)||(f < 10000)))
  count=1;
 else if((f > 10000) && (f < 50000))
  count=2;
 else if((f>50000)&&(f<100000))
  count=3;
 else if((f>100000)&&(f<500000))
  count=4;
 else if((f>500000)&&(f<1000000))
  count=5;
 else if((f>1000000)&&(f<10000000))
  count=6;
 else if((f>100000000)&&(f<200000000))
  count=7;

 

 

}

void TT1() interrupt 3
{
 ff++;
}

void display()
{


 num++;
 num=(num%8);
 P1=0xff; 
 P0=0xff; 
 P0=Disp_Sel[num];
 switch(num)
 {
  case 0: P1=Disp[f%10];     break;
  case 1: P1=Disp[f%100/10];    break;
  case 2: P1=Disp[f%1000/100];   break;
  case 3: P1=Disp[f%10000/1000];   break;
  case 4: P1=Disp[f%100000/10000];  break;
  case 5: P1=Disp[f%1000000/10000];  break;
  case 6: P1=Disp[f%1000000/100000];  break;
  case 7: P1=Disp[f/1000000];    break;
  default:         break;
 } 
}

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章