光电开关信号检测C程序

光电开关信号检测C程序,第1张

最多24个光电开关,要用3个74HC165移位寄存器,每个74HC165接8个光电开关,如果为了节省S52的管脚,可以将3个74HC165串联在一起,如果这样接,C语言可以写成:

long int a1

clks=0//为了可靠期间,移位时钟脚先置0

for( i=0,i<24,i++)

{

clks=1;

clks=1;//重复的目的是为了延时,如果硬件反应速度慢。

clks=0;

a1=a1<<1

if(datas==1) //datas是74HC165串行数据的接入脚 ,读取1位光电开关

a1=a1|0x1//末尾置1

else

a1=a1&0xfffffffe //末尾置0

}

if (a1==0) b=1 //此处设光电管受光照,输出为0,b=1表示全0检测通过。

else b=0// b=0,表示有错

//后面的程序不用详细写了吧,需要关闭光源,再读入一次24个观点开关,a1=oxffffffff,则正确,否则出错。

经过有光和无光照两次检测,就可以判断光电开关的好坏了。

很简单,我写了个程序,放到编程软件里可以直接转换成梯形图。

I0.0接反馈 I0.1接报警复位 I0.2接总计数器复位 Q0.0接报警

VW100设定反馈时间, VW100的值要略微大于两个反馈信号的间隔时间。

例如:两个反馈信号间隔5秒,把VW100设定为6秒,就是说当反馈信号间隔大于5秒到达6秒还没有信号时报警输出。VW100的单位是100mS。

C1的值是总反馈。

Network 1

// 把检测信号转换成0和1

LD I0.0

LD C0

CTUC0, 2

Network 2

// 当接受到第一个信号的时候,时间继电器开始工作。

LD I0.0

S M0.0, 1

Network 3

// 复位。断开时间继电器。

LD I0.1

R M0.0, 1

Network 4

// 当CO=0是T37延时动作

LDW= C0, 0

A M0.0

TONT37, VW100

Network 5

// 当CO=1是T38延时动作

LDW= C0, 1

A M0.0

TONT38, VW100

Network 6

// 报警输出

LD T37

O T38

S Q0.0, 1

Network 7

// 报警复位

LD I0.1

R Q0.0, 1

Network 8

// 记录总反馈

LD I0.0

LD I0.2

CTUC1, 0

hcsr505人体感应模块是基于红外线技术的自动控制模块,灵敏度高、可靠性也可以,当有人进入其感应范围输出高电平,人离开感应范围延时输出低电平,连接51单片机只要检测所连ⅠO口的电平状态就可以了,即判断ⅠO口的电平高与低就可以确定在感应范围有没有人在。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存