您当前的位置:五五电子网电子知识元器件介绍元器件检测用51单片机的外部中断来测频率 正文
用51单片机的外部中断来测频率

用51单片机的外部中断来测频率

点击数:7840 次   录入时间:03-04 11:33:32   整理:http://www.55dianzi.com   元器件检测

    //晶振:12M
//实验方法:首先要把51hei单片机开发板上的ne555的方波输出信号J7的第一脚用杜邦线
//引入P3.2口,数码管即可显示ne555震荡电路当前的频率值,旋动PR1电位器可
//发现数字有变化.
//原理:1秒钟内计数外部脉冲个数,如计数1000次,则表示频率为1000Hz
//1秒钟定时采用51单片机定时器0实现,外部脉冲由外部中断0引脚接入
#include<reg51.h>
#include"51hei.h"
#define uchar unsigned char
uchar counter1;
sbit duan=P2^6;    //74HC573的LE端  U5  LED的段选端
sbit wei=P2^7;      //74HC573的LE端  U4  LED的位选端
unsigned int counter2,tmp;
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 共阳型数码管0—9显示 
unsigned int dis[6];               
uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阳型数码管控制端 
init();
delay(uchar);
display();
jishu();

   
void main()
{guandz();
 init();
 while(1)
 {
    jishu();
    }   
}
//定时器0和外部中断0的初始化
init()

 EA=1;
 EX0=1;
 ET0=1;
 IT0=1;
 TMOD=0x01;
 TH0=0x3c;
 TL0=0xaf;
 TR0=1;
}

    //延时程序
delay(uchar x)
{
 uchar a,b;
 for(a=x;a>0;a--)
  for(b=20;b>0;b--);
}
//外部中断0中断程序
void external0()  interrupt 0
{
    tmp++;
 
}

    //定时器0中断程序
void timer0()  interrupt 1
{
 TH0=0x3c;
 TL0=0xaf;
 counter1++;
}

    //显示程序
display()
{
 uchar i;
    dis[0]=counter2/10000; //获取计数值的万位
 dis[5]=counter2%10000;
 dis[1]=dis[5]/1000;    // 获取计数值的千位
 dis[5]=dis[5]%1000;
 dis[2]=dis[5]/100;    // 获取计数值的百位
 dis[5]=dis[5]%100;
 dis[3]=dis[5]/10;    // 获取计数值的十位
 dis[4]=dis[5]%10;    // 获取计数值的个位
 for(i=0;i<5;i++)  //依次显示万、千、百、十、个位,动态显示
  {
    // P0=0xff;
  P0=con[i];
  wei=1;
  wei=0;
  P0=table[dis[i]];
  duan=1;
  duan=0;
  delay(1);
  P0=0;
  duan=1;
  duan=0;
  } 
}

    jishu()
{
  if(counter1==20)  //定时器定时50ms,故20次中断就表示1秒钟到达
    {
  counter2=tmp;
  display();
  tmp=0;
  counter1=0;
  }
  else
    display();
}
 




本文关键字:单片机  元器件检测元器件介绍 - 元器件检测