微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助51单片机如何检测输入的高电平

求助51单片机如何检测输入的高电平

时间:10-02 整理:3721RD 点击:
最近再弄HC-SR505人体红外传感器,如果有人在传感器就输出3.3V。由于51单片机默认为高电平输出,我要怎么检测传感器输入给51单片机的高电平呢。我试了如果我直接用if(key1==1)来判断,由于默认输出高电平,即使不插上传感器也能让led亮,所以我试了先拉低,再判断高电平,但是输入的高电平却被这一句初始化给拉低了。
实测传感器输出3.3V,加了驱动电路输出5V。我要怎么样才能让51检测到输入的高电平呢?或者HC-SR505你们是怎么使用的?谢谢大家。
以下是我输入5V被拉低的程序,如果去掉初始化key1=0;那么不加传感器也能让led亮,所以也不行。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P0^1;
sbit led=P1^0;
void main()
{
        key1=0;
        while(1)
        {
                if(key1==1)
                {
                        delay();
                        if(key1==1)
                        {
                                led=0;
                        }
                }
                else
                        led=1;
        }
}

51单片机的P0口没有内部弱上拉电阻,属开漏型I/O口,需要外接10K电阻上拉才能读P0口,根据你所述的应用,可以外接一个10K电阻上拉,再接一个1K电阻下拉,不对此端口初始化设置,就可以直接读取端口电平:有输入为高,无输入为低。如果用P1~P3的其他端口做输入端,只要外接一个1K电阻下拉就可以了。

可以先用一个开关来代替传感器,来调试这段程序

如果时P1口就直接接个1k的电阻接地就可以读取高电平了吗?我试试

是这样的。字数补丁,字数补丁。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top