找回密码
 立即注册
楼主: 想不出来

STC15单片机上电状态问题如何解决

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-12-22 19:31:23 | 显示全部楼层
大师的图都是高清的

截图202312221930297161.jpg
使用光耦去驱动三极管控制继电器,
极大地减少了电路之间的电磁干扰,还可以不共地

https://www.stcaimcu.com/forum.p ... ptid=4830&pid=33168


截图202312221935385420.jpg

回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

19

积分

新手上路

积分
19
发表于 2023-12-23 08:13:50 | 显示全部楼层
社区*** 发表于 2023-12-22 19:17
避开P3.2口。用P3.4口。

为什么避开P3.2
回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

19

积分

新手上路

积分
19
发表于 2023-12-23 08:16:11 | 显示全部楼层
神*** 发表于 2023-12-22 19:29
跟大师学电路,不要抄了一堆凌乱的图,还没人引导

我按照此图飞线改过还是会有这个,是不是程序原因
回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

19

积分

新手上路

积分
19
发表于 2023-12-23 09:21:33 | 显示全部楼层
神*** 发表于 2023-12-22 19:31
大师的图都是高清的

#include        "STC15F104E.H"
#include "intrins.h"
#define COUNT 2000                                               //状态改变延时时间 最高65535
unsigned int stateCnt[4]={0,0,0,0};         //状态计数变量组
unsigned char state=0;                                       //状态机状态:0为继电器吸合 1为继电器断开

void KSFSM()              //按键开关状态机
{                                                                                      //0为按键断开,1为按键按下
  if(P33&&P32)                              //11
        stateCnt[3]++;
        else if(P33&&!P32)                        //10
        stateCnt[2]++;
        else if(!P33&&P32)                        //01
        stateCnt[1]++;
        else if(!P33&&!P32)                        //00
        stateCnt[0]++;
       
        if((stateCnt[0]>=COUNT)||(stateCnt[1]>=COUNT)||(stateCnt[2]>=COUNT))
        {                                                                        //00、01、10 按键按下 继电器吸合
                unsigned char s;
                for(s=0;s<4;s++)
                stateCnt=0;        //状态计数变量组清0
                state=0;
        }
        else if(stateCnt[3]>=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;       //看门狗使能               
        }
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-12-23 12:43:16 | 显示全部楼层
程序你写个不动I/O口的 循环 烧进去测试下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:53
  • 最近打卡:2025-03-23 11:50:18

1

主题

18

回帖

311

积分

中级会员

积分
311
发表于 2023-12-26 20:52:06 | 显示全部楼层
把三极管BE哪里的NC1画的电容的符号改成5.1K下拉电阻 不要用电容就可以了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:488
  • 最近打卡:2025-05-02 07:02:30
已绑定手机

27

主题

693

回帖

1954

积分

金牌会员

打工人

积分
1954
发表于 2024-2-1 10:50:23 | 显示全部楼层
l1649*** 发表于 2023-12-26 20:52
把三极管BE哪里的NC1画的电容的符号改成5.1K下拉电阻 不要用电容就可以了

打工人
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 00:51 , Processed in 0.130040 second(s), 92 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表