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口的电平高与低就可以确定在感应范围有没有人在。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)