⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 频率计.c

📁 频率计C语言源码
💻 C
字号:
#include<AT89X52.H>

unsigned char Tab[]={0x3f,0x06,0x5b,0x4f,0x66,
                     0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispcount;
unsigned char count;
unsigned char timecount;
bit flag;    //将flag定义为位变量//
unsigned long a;
unsigned char b1,b2,b3,b4,b5,b6;

void main(void)
{
 IP=0x02;      //将T0定义为高优先级,使CPU优先响应其中断//
 count=0;      //计数脉冲赋初值0//
 TMOD=0x15;    //给TOMD送方式控制字,使T0为计数方式,T1为定时方式//
 TH0=0;        
 TL0=0;
 TH1=0XF0;
 TL1=0X60;
 TR1=1;
 ET1=1;
 TR0=1;
 ET0=1;
 EA=1;
 while(1)
{
  if(flag==1)
  {flag=0;   //位变量清0//
   a=count*65536+TH0*256+TL0;   // 计算脉冲个数//   
  
   b1=a%10;   //计算b1位//
   a=a/10; 
   b2=a%10;  // 计算b2位//
   a=a/10; 
   b3=a%10;   //计算b3位//
   a=a/10; 
   b4=a%10;   //计算b4位//
   a=a/10; 
   b5=a%10;  // 计算b5位//
   a=a/10; 
   b6=a%10;   //计算b6位//
   a=a/10; 
   timecount=0;  //重新使T0计数//
   count=0;
   TH0=0;
   TL0=0;
   TR0=1;
   }
   switch(dispcount)     // 六位动态扫描显示//
      { 
     case 0:P0=Tab[b1];P2=0xFE;break; 
     case 1:P0=Tab[b2];P2=0xFD;break; 
     case 2:P0=Tab[b3];P2=0xFB;break; 
     case 3:P0=Tab[b4];P2=0xF7;break; 
     case 4:P0=Tab[b5];P2=0xEF;break; 
     case 5:P0=Tab[b6];P2=0xDF;break; 
      }
   
 }
}

void to (void) interrupt 1 using 0    // 中断服务函数说明//
{
 count++;      //溢出的次数//
}
 
void t1 (void) interrupt 3 using 1     //中断服务函数说明//
{
 TH1=0XF0;          //重新给T1填装定时初值//
 TL1=0X60;
 timecount++;dispcount++;
 if(dispcount==6)
 { 
  dispcount=0;     //  6位扫描完后清0//
  }
 if(timecount==250)
  { 
   TR0=0;            //时间到1秒关掉计数器//
   timecount=0;
   flag=1;           //位变量置1//
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -