将干簧管脉冲信号通过单片机实现到数码管显示:
/********************************************************************
* 文件名 : 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)
}
}
}
RSD BIT P1.4 //热释电人接近汽车检测输入GHG BIT P1.5干簧管车门开启检测输入
ZDJC BIT P1.6振动检测输入
DPLJC BIT P1.7多普勒检测人接近驾驶座输入
BJFS BIT P2.1报警发射输出端
FDJC BIT P2.2防盗解除遥控接收输入端
FDBF BIT P2.3防盗布防遥控接收输入端
VT BIT P2.4遥控接收有效输入端
YXBJ BIT P2.5音响报警信号输出端
DHKZ BIT P2.6发动机点火控制输出端
CMBF BIT P2.7车门开启检测布防控制信号输出端
BFBZ DATA 30H //定义防盗布防标志
JCBZ DATA 31H //定义防盗解除标志
ORG 00H
LJMP MAIN
ORG 30H
MAIN:
MOV BFBZ,#0 //定义防盗布防标志
MOV JCBZ,#1 //定义防盗解除标志
SETB EA 开总中断
SETB IT0 外部中断1设置为下降沿触发
SETB EX0开外部中断1
LOOP:
JNB VT,ZT1
JNB FDBF,XZ2 接收到布防遥控指令
XZ1:
MOV R7,#100
MOV R6,#0
ACALL DELAY按键消抖
MOV BFBZ,1置布防状态标志
MOV JCBZ,0清解除状态标志
XZ2:
JNB FDJC,ZT1接收到布防解除指令
MOV R7,#100
MOV R6,#0
ACALL DELAY按键消抖
MOV BFBZ,0清布防状态标志
MOV JCBZ,1置解除状态标志
ZT1:
MOV A,BFBZ
CJNE A,#1, ZT2布防状态
SETB DHKZ发动机点火闭锁
SETB CMBF开启车门开启检测
ZT2:
MOV A,JCBZ
CJNE A,#1, ZT2解除状态
CLR DHKZ发动机点火允许
CLR CMBF关闭车门开启检测
LJMP LOOP
DELAY:延时,给R6、R7赋值,R7表示X的低8位,R6为表示X的高8位
CLR A
MOV R5,A
MOV R4,A
D0:
CLR C
MOV A,R5
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC D4
CLR A
MOV R3,A
MOV R2,A
D1:
INC R3
CJNE R3,#0,D2
INCR2
D2:
MOV A,R3
XRL A,#64H100
ORL A,R2
JNZ D1
INC R5
CJNE R5,#0,D3
INC R4
D3:
SJMP D0
D4:
RET
END
(未完)
指纹锁输入密码后显示门已反锁:门锁确实已经被从内反锁!
指纹锁内锁上面一般都会有一个反锁旋钮
对应的有两个英文单词:
OPEN :开
CLOSE:关
当反锁旋钮被旋转到:CLOSE位置的时候,从外面用指纹或密码开锁就会显示门已反锁
处理方式:
1、呼叫屋内的人,将内锁上的反锁旋钮旋转到OPEN位置
2、有的指纹锁是带机械钥匙的,有的机械钥匙具有开反锁的功能,可以用机械钥匙开门试试。
现在市面上用的指纹密码锁主板上面大多都会有一个干簧管
而指纹锁内锁的反锁旋钮上面会固定一小块磁铁
屋内的人通过旋转反锁旋钮对门进行反锁的原理:
1、反锁旋钮转动带动连接锁芯的小方轴转动,从而带动锁芯内部的机械构件d出反锁用的方舌,达到反锁的效果;
2、当反锁旋钮被旋转到CLOSE位置的时候,反锁旋钮上面的磁铁会随着旋钮的转动而移动,并且刚刚处在内锁主板干簧管的感应区域以内;
3、门锁主板上面是烧写好了工程师所写的门锁运行系统程序的。当干簧管感应到了磁铁,门锁系统就会自动运行到反锁状态。所以从门外用指纹或者密码开门,外锁的显示屏上面会显示门已反锁。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)