如何将干簧管脉冲信号通过单片机实现到数码管显示?

如何将干簧管脉冲信号通过单片机实现到数码管显示?,第1张

将干簧管脉冲信号通过单片机实现到数码管显示:

/********************************************************************

* 文件名  : TLC549.c

* 描述    :  该程序实现了对TLC549的控制。通过TLC549把电压转换为数字信号并通过数码管显示出来。实际工作中进行AD采样时,一般都要把AD信号处理后再用。在这里,采集了30次,去掉最大和最小的5个,中间20个取平均值,最大限度的保证了所要采集AD的准确性。

***********************************************************************/

#include

#include

#define uchar unsigned char

#define uint  unsigned int

sbit AD_Out = P3^2    //TLC549输出端

sbit CS = P1^0     //TLC549片选信号

sbit AD_In = P1^1    //TLC549输入端

uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09}

uchar code table_d[10] = {0x02, 0x9e, 0x24, 0x0c, 0x98, 0x48, 0x40, 0x1e, 0x00, 0x08}     //带点数码管显示

/********************************************************************

* 名称 : AD_Change(void)

* 功能 : TLC549驱动程序,在“视频及教程”中有讲解。

* 输入 : 无

* 输出 : temp (电压值)

***********************************************************************/

uchar AD_Change(void)

{

uchar i,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

return temp

}

/********************************************************************

* 名称 : Delay()

* 功能 : 延时,延时时间为 1ms * del

* 输入 : del

* 输出 : 无

***********************************************************************/

void Delay(uint del)

{

uchar i, j

for(i=0 i

for(j=0 j<=148 j++)

}

/***********************************************************************

* 名 称: Average()

* 功 能: 中位值平均滤波法,取一共三十个数据,最大和最小的五个数据不要

对中间的二十个数据求平均值

* 输 入: 三十个待处理的值

* 输 出:得到一个中位的平均值

***********************************************************************/

uint Average(uint buffer[30])

{

uchar i,j

uint temp

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值

***********************************************************************/

uint AD_Filter()

{

uint Date_Buffer[30] = {0}, temp

uchar i

for(i=0 i<30 i++)

{

Date_Buffer[i] = AD_Change()

Delay(1) //延时1毫秒采集一次。这里可以根据工作需要调整时间。

}

temp = Average(Date_Buffer)

return(temp)

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main()

{

uint i = 0,temp

uint j

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)

}

}

}

停车传感器又名地磁传感器,在智能交通里,比如说任何一个车在公路上开的时候,如果你公路上放一个磁传感器,车走过的轨迹你把它记录下来,就可以建设高速公路的车流。磁感应传感器的主要构成的材料来自于干簧管。干簧管是一种磁敏的特殊开关。它通常由两个或三个既导磁又导电材料做成的簧片触点,被封装在充有惰性气体(如氮、氦等)或真空的玻璃管里,玻璃管内管内平行封装的簧片端部重叠,并留有一定间隙或相互接触以构成开关的常开或常闭接点。当永久磁铁靠近干簧管时,或者由绕在干簧管上面的线圈通电后形成磁场使簧片磁化时,簧片的接点就会感应出极性相反的磁极。由于磁极极性相反而相互吸引,当吸引的磁力超过簧片的抗力时,分开的接点便会吸合当磁力减小到一定值时,在簧片抗力的作用下接点又恢复到初始状态。这样便完成了一个开关的作用。因此可以作为传感器用,用于计数,限位等等。所以能当做停车传感器。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12025609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存