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

📄 pinlvji.txt

📁 基于51单片机实现的频率计程序,通过51单片机的计数器来实现频率测量
💻 TXT
字号:
#include <stdio.h>
#include <reg51.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define del 200
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p15=P1^5;
sbit p16=P1^6;
sbit p17=P1^7;
sbit p34=P3^4;
//uchar code pianxuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 
uchar code zhixing[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0xFD,0x02};
//数码管输出字型0.1.2.3.4.5.6.7.8.9.0..- 
uchar temp[]={0,0,0,0,0,0,0,0}; 
uchar a;
//uchar a,b,c,d,e,f,g,h,i,j;
uchar i; 
uint t0c=0;
uint t1c=0; 
uint t1c1=0;
uchar f;
ulong pinlv;
void xianshi(ulong x);
void delay(uint de);
void mk(void);
void pl(void);

void main(void)
{  while(1)
   {
     if(p10==1)
     pl();
     else if(p10==0)
     mk();
   }    
}
void mk()     //maikuai
{  unsigned int highlevel,m;
    TMOD=0x09;
    while(p34==1);
    TH0=0; 
    TL0=0;
    while(p34==0);
    TR0=1;
    while(p34==1);
    TR0=0;
    highlevel=TH0*256+TL0;
   /* c=highlevel%10;
   SBUF=zhixing[c];
    while(!TI);
    TI=0;
    d=highlevel/10%10;
    SBUF=zhixing[d];
    while(!TI);
    TI=0;
   e=highlevel/100%10;
    SBUF=zhixing[e];
    while(!TI);
   TI=0;
  f=highlevel/1000%10;
  SBUF=zhixing[f];
   while(!TI);
   TI=0;
   g=highlevel/10000%10;
   SBUF=zhixing[g];
   while(!TI);
   TI=0;
   h=highlevel/100000%10;
   SBUF=zhixing[h];
   while(!TI);
   TI=0;
   i=highlevel/1000000%10;
   SBUF=zhixing[i];
   while(!TI);
   TI=0;
   j=highlevel/10000000%10;
   SBUF=zhixing[j];
   while(!TI);
   TI=0;*/
   //delay(1000)
   xianshi(highlevel);
   for(m=0;m<50000;m++);
   
    
    
}

void pl() 
{  
  TMOD=0x15;
  SCON=0x00; 
  TH0=0; //To初始化
  TL0=0; 
  TH1=0xf0; ////T1初始化
  TL1=0x60; 
  TR1=1; 
  TR0=1; 
  ET0=1; 
  ET1=1; 
  EA=1;   //开中断
  while(1) 
   { 
    if(f==1) 
     { 
         f=0; 
         pinlv=TH0*256+TL0; //总脉冲数t0c*65536+
  //     pinlv=(uint)(x/(0.004*t1c1));
         pinlv=(uint)(998*pinlv/1000);
         xianshi(pinlv); 
         t0c=0; 
         TH0=0; 
         TL0=0;
         TH1=0xf0; //定时预置数
         TL1=0x60;
         TR0=1;
         TR1=1; 
       } 
   }
} 
void t0(void) interrupt 1 using 0 
{ 
  t0c++;      //脉冲计数
} 
void t1(void) interrupt 3 using 0 
{ 
  TH1=0xf0; //定时预置数
  TL1=0x60; 
  t1c++; 
  if(t1c==250) //定时时间调整
    { 
      TR0=0; //先关定时器
      TR1=0;
      t1c1=t1c;
      t1c=0;
      f++; //计数完成位 
    } 
}
void xianshi(ulong x) {
    uchar i,a;
     for(i=0;x/10;i++){ 
             temp[i]=x%10; 
             x=x/10;  
         } 
     temp[i]=x;
     for(a=0;a<8;a++){
         SBUF=zhixing[temp[a]];
         temp[a]=0;
         while(!TI);
         TI=0;
     }
}

void delay(uint de){
    uint a;
    while(de--)
      for(a=100;a>0;a--);
}  

⌨️ 快捷键说明

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