![]() |
總覺得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); |