用51单片机测正弦波频率(50HZ工频左右),要详细过程,急,邮箱419269204@qq.com 谢谢!

我要原理图,c语言程序什么的,有的人慷慨下,帮助下小弟!
2025-02-27 09:34:07
推荐回答(2个)
回答1:

电路,需要一个过零比较器。
在50Hz工频左右,输出脉冲的周期为10ms左右。
测量出这个周期,换算,显示即可。
测量周期:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/6409d47e326f981229388a59.html

回答2:

哥哥。。。这个还需要什么原理图啊?
前级加个信号放大整形,用比较器加运放构成。
输出信号直接接单片机的定时/计数器0或定时/计数器1
两个定时/计数器,一个用于定时1s。另外一个用于计数。
采用中断方式。

矮油~~~还是附上我的程序吧。。。

//****12MHz晶振***////
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int

uchar code w_data[]={0x01,0x02,0x04,0x08};
uchar code d_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar data led[4];
uint data fre;
uchar cnt;

void delay(void)
{
uint i;
for(i=0;i<10;i++);
}

void led_show(void)
{
uchar k,i;
led[0]=fre%10;
led[1]=fre/10%10;
led[2]=fre/100%10;
led[3]=fre/1000;

for(k=0;k<4;k++)
{
P2=w_data[k];
i=led[k];
P0=d_data[i];
delay();
}
}

/********************50ms*********************************************/
//定时器初始化过程
//1、对TMOD赋值,以确定T0,T1的工作方式,
//计算初值,并将初值写入TH0/TL0或TH1/TL1
//中断方式时,对IE赋值,开放中断
//是TR0,TR1置位,启动定时器/计数器定时或计数
void Timer_Init (void)
{
TMOD=0x51; //5:工作在计数模式, 1:16位
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;

}

void T0_ISP(void) interrupt 1
{
cnt++;
if (cnt==20)
{
cnt=0;
EA=0;
fre=TL1+(TH1<<8); //体会为什么要这样写呢?TH1是计数高8位,TL1是低8位,这个16位数分2部分存放,
EA=1; //高8位和低8位进制是256。这里写成这样也可以fre=TH1*256+TL1
TL1=0;
TH1=0;
}
TH0=(65536-50000)/256; //注;为什么要在这里附上TH0,TL0的初值。(减小误差)
TL0=(65536-50000)%256;
}

void main()
{
uint i;
Timer_Init();
TR0=1;
TR1=1;

while(1)
{
for(i=0;i<5;i++)
{
led_show();
}
}
}