㈠ 51单片机和干簧管怎么连接,怎么用
干簧管,当有磁铁靠近干簧开关时(反之亦然)干簧片就会关闭
在单片机中的应用一般是用来作检测干簧管状态(开关的通断)来完成某种功能的检测。
㈡ 如何将干簧管脉冲信号通过单片机实现到数码管显示
将干簧管脉冲信号通过单片机实现到数码管显示:
/********************************************************************
*文件名:TLC549.c
*描述:该程序实现了对TLC549的控制。通过TLC549把电压转换为数字信号并通过数码管显示出来。实际工作中进行AD采样时,一般都要把AD信号处理后再用。在这里,采集了30次,去掉最大和最小的5个,中间20个取平均值,最大限度的保证了所要采集AD的准确性。
***********************************************************************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitAD_Out=P3^2;//TLC549输出端
sbitCS=P1^0;//TLC549片选信号
sbitAD_In=P1^1;//TLC549输入端
ucharcodetable[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
ucharcodetable_d[10]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};//带点数码管显示
/********************************************************************
*名称:AD_Change(void)
*功能:TLC549驱动程序,在“视频及教程”中有讲解。
*输入:无
*输出:temp(电压值)
***********************************************************************/
ucharAD_Change(void)
{
uchari,temp=0;
CS=0;
_nop_();
_nop_();
_nop_();
_nop_();
for(i=0;i<8;i++)
{
AD_In=1;
_nop_();
_nop_();
temp=temp<<1;
if(AD_Out==1)temp+=1;
AD_In=0;
_nop_();
_nop_();
}
CS=1;
returntemp;
}
/********************************************************************
*名称:Delay()
*功能:延时,延时时间为1ms*del
*输入:del
*输出:无
***********************************************************************/
voidDelay(uintdel)
{
uchari,j;
for(i=0;i
for(j=0;j<=148;j++)
;
}
/***********************************************************************
*名称:Average()
*功能:中位值平均滤波法,取一共三十个数据,最大和最小的五个数据不要
对中间的二十个数据求平均值
*输入:三十个待处理的值
*输出:得到一个中位的平均值
***********************************************************************/
uintAverage(uintbuffer[30])
{
uchari,j;
uinttemp;
for(i=1;i<30;i++)////先对整个数组的三十个值进行从小到大的排列
for(j=29;j>=i;--j)
{
if(buffer[j-1]>buffer[j])
{
temp=buffer[j-1];
buffer[j-1]=buffer[j];
buffer[j]=temp;
}
}
////对数组进行处理,去掉一个最大值和一个最小值,中间的二十个值再来求平均值
temp=0;
for(i=5;i<25;i++)
{
temp+=buffer[i];
}
temp=(uint)(((float)temp)/20+0.5);
return(temp);
}
/***********************************************************************
*名称:AD_Filter()
*功能:进行AD采集30次,并进行滤波处理
*输入:三十次AD采集值
*输出:经过处理后的AD值
***********************************************************************/
uintAD_Filter()
{
uintDate_Buffer[30]={0},temp;
uchari;
for(i=0;i<30;i++)
{
Date_Buffer[i]=AD_Change();
Delay(1);//延时1毫秒采集一次。这里可以根据工作需要调整时间。
}
temp=Average(Date_Buffer);
return(temp);
}
/********************************************************************
*名称:Main()
*功能:主函数
*输入:无
*输出:无
***********************************************************************/
voidMain()
{
uinti=0,temp;
uintj;
P2=0x00;
P1=0xff;
while(1)
{
temp=AD_Filter();
j=temp*2;
for(i=0;i<40;i++)
{
P0=table_d[j/100];
P2=0x04;
Delay(10);
P0=table[j/10%10];
P2=0x02;
Delay(10);
P0=table[j%10];
P2=0x01;
Delay(10);
}
}
}