使用光耦去驱动三极管控制继电器,
极大地减少了电路之间的电磁干扰,还可以不共地
https://www.stcaimcu.com/forum.p ... ptid=4830&pid=33168
社区闲人 发表于 2023-12-22 19:17
避开P3.2口。用P3.4口。
为什么避开P3.2 神农鼎 发表于 2023-12-22 19:29
跟大师学电路,不要抄了一堆凌乱的图,还没人引导
我按照此图飞线改过还是会有这个,是不是程序原因 神农鼎 发表于 2023-12-22 19:31
大师的图都是高清的
#include "STC15F104E.H"
#include "intrins.h"
#define COUNT 2000 //状态改变延时时间 最高65535
unsigned int stateCnt={0,0,0,0}; //状态计数变量组
unsigned char state=0; //状态机状态:0为继电器吸合 1为继电器断开
void KSFSM() //按键开关状态机
{ //0为按键断开,1为按键按下
if(P33&&P32) //11
stateCnt++;
else if(P33&&!P32) //10
stateCnt++;
else if(!P33&&P32) //01
stateCnt++;
else if(!P33&&!P32) //00
stateCnt++;
if((stateCnt>=COUNT)||(stateCnt>=COUNT)||(stateCnt>=COUNT))
{ //00、01、10 按键按下 继电器吸合
unsigned char s;
for(s=0;s<4;s++)
stateCnt=0; //状态计数变量组清0
state=0;
}
else if(stateCnt>=COUNT)
{ //11状态按键都未按下 继电器断开
unsigned char s;
for(s=0;s<4;s++)
stateCnt=0;
state=1;
}
}
void RlyFSM() //继电器状态机
{
if(state==0) //继电器闭合
{
P35 = 0;
}
else if(state==1) //继电器断开
{
P35 = 1;
}
}
void main()
{
// P3M0 = 0x00;
// P3M1 = 0x00;
P3 = 0xFF;
WDT_CONTR=0x34; //看门狗使能
while (1)
{
KSFSM(); //按键开关状态机
RlyFSM(); //继电器状态机
WDT_CONTR=0x34; //看门狗使能
}
} 程序你写个不动I/O口的 循环 烧进去测试下 把三极管BE哪里的NC1画的电容的符号改成5.1K下拉电阻 不要用电容就可以了 l164908060 发表于 2023-12-26 20:52
把三极管BE哪里的NC1画的电容的符号改成5.1K下拉电阻 不要用电容就可以了
{:4_250:}
页:
1
[2]