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

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

[复制链接]

该用户从未签到

550

主题

9311

回帖

1万

积分

管理员

积分
13872
发表于 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;       //看门狗使能               
        }
}
回复 支持 反对 送花

使用道具 举报

该用户从未签到

550

主题

9311

回帖

1万

积分

管理员

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

使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 33 天

    [LV.5]常住居民I

    1

    主题

    15

    回帖

    229

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 07:44
  • 签到天数: 140 天

    [LV.7]常住居民III

    15

    主题

    535

    回帖

    1956

    积分

    金牌会员

    打工人

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

    打工人
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-5 04:27 , Processed in 0.061979 second(s), 53 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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