标题: 51单片机引脚输入高电平,能实现吗? [打印本页]

作者: 大林飞    时间: 2024-5-8 23:07
标题: 51单片机引脚输入高电平,能实现吗?
P3.7端口检测有5V输入,P3.6端口指示灯亮,能否实现?如果实现不了那种芯片可以?请大神们指教一下,谢谢!

1.png (15.99 KB, 下载次数: 51)

1.png

作者: Hephaestus    时间: 2024-5-8 23:29
sbit P36=P3^6;
P36=!(P3&0x80);
作者: chang_an    时间: 2024-5-9 01:43
原理可以参考按键输入,程序里面先给3_7置低,当他被5V拉高时执行P3_6亮灯
sbitP3_6=P3^6;
sbitP3_7=P3^7

P3_7=0;//首先拉低
P3_6=1;//默认灯不亮

while(1)
{
if(P3_7==1)
{
P3_6=0;//亮灯
}
}

作者: chang_an    时间: 2024-5-9 01:43
原理可以参考按键输入,程序里面先给3_7置低,当他被5V拉高时执行P3_6亮灯
sbitP3_6=P3^6;
sbitP3_7=P3^7

P3_7=0;//首先拉低
P3_6=1;//默认灯不亮

while(1)
{
if(P3_7==1)
{
P3_6=0;//亮灯
}
}



作者: wdgao    时间: 2024-5-9 03:53

sbit P36=P3^6;
sbit P37=P3^7;
P36=!P37;
作者: xiaobendan001    时间: 2024-5-9 07:21
设为标准IO,然后加一个比如1K的下拉电阻,等着接收你的高电平就行了,当然这个高电平要有一定的驱动能力
作者: rayin    时间: 2024-5-9 07:44
这是51单片机最基本的操作了:

首先设置P3.7端口为准双向:P3.7=1. 就能够读P3.7的高低电平了,

程序判断P3.7 为高或低, 再来P3.6=0, 就可以让P3.6接的LED灯发光了.
作者: xiaobendan001    时间: 2024-5-9 08:56
rayin 发表于 2024-5-9 07:44
这是51单片机最基本的操作了:

首先设置P3.7端口为准双向:P3.7=1. 就能够读P3.7的高低电平了,

楼主说的5V信号可能只有高电平驱动能力,没有下拉驱动能力,所以有必要提供一个主动下拉。实际上大多数信号例如开关我们都习惯接到低电平。例如接近开关多数NPN开路输出,当然也有PNP开路输出的,那不是就需要主动下拉吗?当然PNP还得注意输出电压,不要超过5V。所以我们还是建议使用NPN的。
作者: lkc8210    时间: 2024-5-9 11:14
chang_an 发表于 2024-5-9 01:43
原理可以参考按键输入,程序里面先给3_7置低,当他被5V拉高时执行P3_6亮灯
sbitP3_6=P3^6;
sbitP3_7=P3^7 ...

不懂不要随便乱教
8051的引脚结构输出0是对地短路的
不可能从外部拉高
作者: lkc8210    时间: 2024-5-9 11:22
可以这样接



P37=1;
由于8051引脚输出高的能力很弱(~250uA)
P37会被1k电阻拉低到0.25V, 被当作低电平

作者: ZBH2006    时间: 2024-5-9 12:26
lkc8210 发表于 2024-5-9 11:22
可以这样接

正确的
作者: ZBH2006    时间: 2024-5-9 12:28
不是啊,你的哪里按下去是啥,不是短路了吗你实物焊起来,我学识不够能解释下吗

作者: 大林飞    时间: 2024-5-9 13:55
#include<reg52.h>//头文件
#include <intrins.h>


sbit P3_6=P3^6;
sbit P3_7=P3^7;

void main (void)
{  

P3_7=1;
P3_6=1;//默认灯不亮


while(1)
{
if(P3_7==0)
{
P3_6=0;//亮灯
}
} }

作者: xiaobendan001    时间: 2024-5-9 14:06
大林飞 发表于 2024-5-9 13:55
#include//头文件
#include

人家都说了是高电平来的时候灯亮,你这好像不对吧
这样:
P3_6  =!P3_7;
也不对,也许楼主的灯不是正极接VCC的而是负极接GND的
作者: 大林飞    时间: 2024-5-9 14:10
C:\Users\Administrator\Desktop\1.PNG
p3-7脚  始终是处于高电平状态,电压拉不下来
作者: 188610329    时间: 2024-5-9 20:03
你这个不能用 P37  要用P0,因为你要检测的是 +24v
作者: cy009    时间: 2024-5-10 00:24
SW3到P3.7加一个反相器,程序上P3.7改为低电平检测。
作者: LaoYuTou    时间: 2024-5-11 17:37
不建议这样做,24V直接接过来,运气不好的话可能干掉其他电路,建议用光耦隔离,电路大把可百度。
作者: mtt661    时间: 2024-5-12 19:05
lkc8210 发表于 2024-5-9 11:22
可以这样接

楼主这个图R11上面是24V,用38k和10K电阻分压后得到5V,所以这个接法没有错啊。
作者: LaoYuTou    时间: 2024-5-13 08:03
原理没问题,电压相差较大建议隔离。尤其是24V不知道是哪里来的,电压波动大或R9悬空容易出问题。
作者: XuanxX    时间: 2024-5-13 09:48
当然可以实现
作者: coody_sz    时间: 2024-5-13 10:39
AT89C51是准双向口输出,不能设置整高阻输入,所以你不按键也是高电平。
换STC8系列的吧,IO设置为高阻即可实现。
作者: lkc8210    时间: 2024-5-13 11:44
mtt661 发表于 2024-5-12 19:05
楼主这个图R11上面是24V,用38k和10K电阻分压后得到5V,所以这个接法没有错啊。

那个24V被挡住了,看不清楚
修正为以下电路


作者: 11111222aggwkjd    时间: 2024-5-15 21:43
总觉得51单片机比较过时了,当时我做 我老师跟我说现在还是用STM32单片机比较合适,功能什么的也更多




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