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

📄 wave_measure.c

📁 自己的平时一些制作 现在整理一下 与大家一起分享
💻 C
字号:
//十.测低频信号周期/频率的一个程序
/************测低频信号周期的一个程序***********/
//	 经过数学变换后就可以用来测频率
//	 思路:数一个周期中有多少个2ms,用count放这个计数值
//    当然亦可数有多少个10ms,那样精度稍差。
/**************************************/

#include<reg51.h>
//定义全局变量用于存放计算值
unsigned char count;
sbit int0=P3^2;		//被测量信号,当然也可以接到其他的引脚
//下面两个变量就是用来 切换数码管的序号 和 存放显示的数据
unsigned char n; 
unsigned char d[4];

unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};  //数码管显示选择
unsigned char code tab[16]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,
                            7,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};  					 
                                              //显示0--9;a--f;

/********十进制到bcd码转换************/
void hextobcd (unsigned int hexs)	   
{
d[0]=hexs/1000;
hexs=hexs%1000;
d[1]=hexs/100;
hexs=hexs%100;
d[2]=hexs/10;
hexs=hexs%10;
d[3]=hexs;
}

/*********定时器初始化程序******/
void Init_Timer (void)
{
TMOD=0x11;   //定时器1和定时器0都工作在16位定时器方式
EA=1;        //cpu开中断
ET0=1;       //定时器0开中断
ET1=1;       //定时器1开中断
TH1=(65536-1000)/256;  //定时常数设置
TL1=(65536-1000)%256;
TR1=1;
}

/*********定时2毫秒*********/
void timer0(void) interrupt 1
{ 
 count++; //计数
 TH0=(65536-1843)/256;  //设定定时常数,定时2ms
 TL0=(65536-1843)%256;
}

/********中断显示***********/
void timer1(void) interrupt 3
{
 TH1=(65536-1000)/256;
 TL1=(65536-1000)%256;
 n=n++;
 if(n>3) n=0;
 P0=0; P2=digit[n];P0=tab[d[n]];
}


/********主函数********/
main()
{
unsigned int snumber;  //周期 单位ms
Init_Timer();
while(1)
	{
	count=0;
 	TH0=(65536-1843)/256;  //设定定时常数,定时2ms
 	TL0=(65536-1843)%256;
	while(int0==0) ; 	//测周期长度
	TR0=1;
	while(int0==1) ;
	while(int0==0) ;
	TR0=0;
	snumber=count*2;   //计算出有几个2ms,乘以2后得到周期。
	hextobcd(snumber);  //显示出有几个ms
	}
}

⌨️ 快捷键说明

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