总觉得51单片机比较过时了,当时我做 我老师跟我说现在还是用STM32单片机比较合适,功能什么的也更多 |
mtt661 发表于 2024-5-12 19:05 那个24V被挡住了,看不清楚 修正为以下电路 ![]() |
AT89C51是准双向口输出,不能设置整高阻输入,所以你不按键也是高电平。 换STC8系列的吧,IO设置为高阻即可实现。 |
当然可以实现 |
原理没问题,电压相差较大建议隔离。尤其是24V不知道是哪里来的,电压波动大或R9悬空容易出问题。 |
楼主这个图R11上面是24V,用38k和10K电阻分压后得到5V,所以这个接法没有错啊。 |
不建议这样做,24V直接接过来,运气不好的话可能干掉其他电路,建议用光耦隔离,电路大把可百度。 |
SW3到P3.7加一个反相器,程序上P3.7改为低电平检测。 |
你这个不能用 P37 要用P0,因为你要检测的是 +24v |
C:\Users\Administrator\Desktop\1.PNG p3-7脚 始终是处于高电平状态,电压拉不下来 |
大林飞 发表于 2024-5-9 13:55 人家都说了是高电平来的时候灯亮,你这好像不对吧 这样: P3_6 =!P3_7; 也不对,也许楼主的灯不是正极接VCC的而是负极接GND的 |
#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;//亮灯 } } } |
不是啊,你的哪里按下去是啥,不是短路了吗你实物焊起来,我学识不够能解释下吗 |
正确的 ![]() |
可以这样接![]() P37=1; 由于8051引脚输出高的能力很弱(~250uA) P37会被1k电阻拉低到0.25V, 被当作低电平 |
chang_an 发表于 2024-5-9 01:43 不懂不要随便乱教 8051的引脚结构输出0是对地短路的 不可能从外部拉高 |
rayin 发表于 2024-5-9 07:44 楼主说的5V信号可能只有高电平驱动能力,没有下拉驱动能力,所以有必要提供一个主动下拉。实际上大多数信号例如开关我们都习惯接到低电平。例如接近开关多数NPN开路输出,当然也有PNP开路输出的,那不是就需要主动下拉吗?当然PNP还得注意输出电压,不要超过5V。所以我们还是建议使用NPN的。 |
这是51单片机最基本的操作了: 首先设置P3.7端口为准双向:P3.7=1. 就能够读P3.7的高低电平了, 程序判断P3.7 为高或低, 再来P3.6=0, 就可以让P3.6接的LED灯发光了. |
设为标准IO,然后加一个比如1K的下拉电阻,等着接收你的高电平就行了,当然这个高电平要有一定的驱动能力 |
sbit P36=P3^6; sbit P37=P3^7; P36=!P37; |
原理可以参考按键输入,程序里面先给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;//亮灯 } } |
原理可以参考按键输入,程序里面先给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;//亮灯 } } |
sbit P36=P3^6; P36=!(P3&0x80); |