神农鼎 发表于 2023-12-22 19:31:23

大师的图都是高清的


使用光耦去驱动三极管控制继电器,
极大地减少了电路之间的电磁干扰,还可以不共地
https://www.stcaimcu.com/forum.p ... ptid=4830&pid=33168




想不出来 发表于 2023-12-23 08:13:50

社区闲人 发表于 2023-12-22 19:17
避开P3.2口。用P3.4口。

为什么避开P3.2

想不出来 发表于 2023-12-23 08:16:11

神农鼎 发表于 2023-12-22 19:29
跟大师学电路,不要抄了一堆凌乱的图,还没人引导




我按照此图飞线改过还是会有这个,是不是程序原因

想不出来 发表于 2023-12-23 09:21:33

神农鼎 发表于 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;       //看门狗使能               
        }
}

神农鼎 发表于 2023-12-23 12:43:16

程序你写个不动I/O口的 循环 烧进去测试下

l164908060 发表于 2023-12-26 20:52:06

把三极管BE哪里的NC1画的电容的符号改成5.1K下拉电阻 不要用电容就可以了

zhudean11 发表于 2024-2-1 10:50:23

l164908060 发表于 2023-12-26 20:52
把三极管BE哪里的NC1画的电容的符号改成5.1K下拉电阻 不要用电容就可以了

{:4_250:}
页: 1 [2]
查看完整版本: STC15单片机上电状态问题如何解决