找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8725|回复: 4
打印 上一主题 下一主题
收起左侧

如何做到51单片机的高电平输入检测

[复制链接]
跳转到指定楼层
楼主
ID:417605 发表于 2018-11-5 14:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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(低电平)才可以触发,也就是输入只能检测低电平,不可以检测高电平输入。 请问有没有方法从程序上实现高电平输入检测?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2018-11-5 16:38 | 只看该作者
端口先输出一个1(高电平),然后检查端口电平,如果是1那么说明端口是输入了高电平,否则是就是输入了低电平。
回复

使用道具 举报

板凳
ID:413475 发表于 2018-11-5 16:46 | 只看该作者
1.STC文档里面是有配置的,IO设成高阻输入,应可以解决(通过软件配置PxM0,PxM1)
2.实测STC89C52RC,IO初始化低,通过TLP521拉高是可以检测的(未配置PxM0,PxM1)。
3.普通外设可能无较强的驱动能力,是无法把51 IO口拉高的.

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:169851 发表于 2018-11-5 17:24 | 只看该作者
红外感应模块输出的电压太小,通过一个三极管放大电流就行了,可以通过普通引脚,直接去判断引脚电位,0或1,也可以通过外部中断来触发,再或者就是使用ad转换进行电位采集放大
回复

使用道具 举报

5#
ID:169851 发表于 2018-11-5 17:27 | 只看该作者
红外感应模块输出的电位低,通过一个三极管放大之后就可以通过普通引脚进行检测电位,0或1,再或者就是通过ad转换进行程序内放大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表