标题: 如何做到51单片机的高电平输入检测 [打印本页]

作者: InazumaGDI    时间: 2018-11-5 14:12
标题: 如何做到51单片机的高电平输入检测
本帖最后由 InazumaGDI 于 2018-11-5 14:14 编辑

如题,我在做一个由红外人体检测模块SR501 (默认输出低电平 触发输出高电平) 触发的蜂鸣器  
使用的单片机为STC89C52RC    代码如下

#include <reg52.h>
sbit  HW = P2^0;   //定义红外传感器针脚 P2.0

void delay(unsigned long time)                //延时
{
  unsigned long i,j;
  for(i=0;i<time;i++)
      for(j=0;j<19;j++)
          {}
}

void main()

{
        HW = 0;                 //初始化红外针脚为低电平
    P1 = 0xff;         //初始化P1针脚为1111 1111        
    while(1)         //循环
        {
         if(HW == 1);           //当红外探头被触发   默认低电平转换为高电平
         {
           P1 = 0x00;                //P1针脚转为 0000 0000
           delay(5000);                //延时5S
           P1 = 0xff;                 //关闭P1针脚
         }
    }
}

烧录后发现 P1针脚一直为低电平,后来查阅资料发现51单片机的针脚为准双向接口,检测输入的
时候需要输出一个1(高电平),然后外部输入0(低电平)才可以触发,也就是输入只能检测低电平,不可以检测高电平输入。 请问有没有方法从程序上实现高电平输入检测?
作者: xuyaqi    时间: 2018-11-5 16:38
端口先输出一个1(高电平),然后检查端口电平,如果是1那么说明端口是输入了高电平,否则是就是输入了低电平。
作者: Colin_zhai    时间: 2018-11-5 16:46
1.STC文档里面是有配置的,IO设成高阻输入,应可以解决(通过软件配置PxM0,PxM1)
2.实测STC89C52RC,IO初始化低,通过TLP521拉高是可以检测的(未配置PxM0,PxM1)。
3.普通外设可能无较强的驱动能力,是无法把51 IO口拉高的.
作者: Nan1996    时间: 2018-11-5 17:24
红外感应模块输出的电压太小,通过一个三极管放大电流就行了,可以通过普通引脚,直接去判断引脚电位,0或1,也可以通过外部中断来触发,再或者就是使用ad转换进行电位采集放大
作者: Nan1996    时间: 2018-11-5 17:27
红外感应模块输出的电位低,通过一个三极管放大之后就可以通过普通引脚进行检测电位,0或1,再或者就是通过ad转换进行程序内放大




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1