C语言检测过零的方法--等待过零检测法
时间:01-20 13:50 阅读:1730次
*温馨提示:点击图片可以放大观看高清大图
简介:在这里和大家分享一个用C语言检测过零的方法。
//***************************************
// 函数名称:Nop
// 函数功能:延时函数
// 入口参数:延时时间
// 出口参数:无
//***************************************
void Nopt(uint8 T_Dly)
{
while(T_Dly--);
return ;
}
//*************************************
// 函数名称:ReadZer0Pin
// 函数功能:重复读管脚电平 返回该管脚的电平状态值
// 入口参数:读该管脚的次数
// 出口参数:无
// 返回值: 该管脚的电平状态值
//***************************************
uint8 ReadZer0Pin(uint8 InValue)
{
uint8 Tcon = 0 ;
uint8 i ;
for(i=InValue;i>0;i--) //读10次
{
// Nopt(5) ;
Nopt(2) ;
if(P_ZER0 == 1)
{
Tcon ++ ;
}
}
if(Tcon > ((InValue>>1) + 1))//所读数据次数的一半以上为1 则认定该管脚为1
{
return 1 ;
}
else
{
return 0 ;
}
}
//*************************************
// 函数名称:ReadZ0
// 函数功能:检测过零信号
// 入口参数:无
// 出口参数:无
// 本检测方式为等待检测过零的方法
//***************************************
void ReadZ0(void)
{
while(1)
{
if((!ReadZer0Pin(5)) && F_PZL)
{
F_PZL = 0 ;
break ;
}
else if((ReadZer0Pin(5))&&(!F_PZL))
{
F_PZL = 1 ;
break ;
}
}
}
//---实例应用------
void main(void)
{
while(1)
{
ReadZ0() ;//如市电频率为50HZ 则10MS跑一次主循环
CmdKey() ; // 检测按键
CmdDisplay() ; //控制显示数据
.
.
.
}
}