标题: 请教一个电路、思路或推荐一些芯片 想用按钮或旋转编码器控制24个或12个微型继电器 [打印本页]

作者: wer1234    时间: 2023-3-17 00:48
标题: 请教一个电路、思路或推荐一些芯片 想用按钮或旋转编码器控制24个或12个微型继电器
想控制24个或12个微型继电器。要求用按钮或旋转编码器控制。
按钮控制: 按下按钮A,继电器递增吸合,复位原来的。 按下按钮B,在原来的位置递减吸合。

旋转编码器控制: 正旋递增吸合,复位原来的。
反旋,递减吸合,复位原来的。

哪位大神有好的方法实现吗?越简单越好。
作者: xianfajushi    时间: 2023-3-17 05:29
同流水灯差不多单按键控制递增递减
作者: gongnn    时间: 2023-3-17 07:56
最简单的当然是单片机方案,随便个单片机+2003芯片+继电器。
作者: munuc_w    时间: 2023-3-17 08:28
这个用单片机做较简单,用单纯硬件做也可以,但电路会较繁琐。
作者: man1234567    时间: 2023-3-17 08:28
3V或5V继电器单片机引脚直驱就可以。
不过这造型是玩呢 ?
作者: 这一生只为你    时间: 2023-3-17 20:50
用个32脚的单片机,灌电流方式,印象中HK4100F-5V继电器吸合电流20ma左右,可以这么干,要是不放心的话就加个8050。
作者: 君工创    时间: 2023-3-17 21:24
每次一个继电器吸合,单片机直接驱动就可以了。
作者: 新乡家电维修    时间: 2024-9-5 11:42
CD4017简单,不用单片机,只能控制10个
作者: 蓝蓝小星星    时间: 2024-9-5 14:27
驱动2片595实现即可。
作者: 3wjkdhus    时间: 2024-9-7 22:22
按键一个递增一个减,改天我发一个595控制的

作者: 3wjkdhus    时间: 2024-9-7 22:23
#include<reg52.h>//头文件
#define unchar unsigned char  
#define unint unsigned int  

  sbit KEY1=P1^0; // 定义按键
  sbit KEY2=P1^1; // 定义按键
  sbit OUT1=P0^0; // 输出1
  sbit OUT2=P0^1; // 输出2
  sbit led=P0^2;  //led

  bit flag=1;     //定义控制运行符
  unchar Mod;     //定义亮灯模式   
  unint tt;       //定义中断次数  
  void Init_Mod() //初始化函数  

  {
   Mod=0;
   OUT1=0;
   OUT2=0;  
   }
         
  void Init_Timer()  
{  
  TMOD=0x01;  
  TR0=1;
  EA=1;
  ET0=0;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
         }
         
  void delay(unint z)  //延时函数,延时z(ms)
{
  unint x,y;
  for(x=z;x>0;x--)  for(y=110;y>0;y--);
  }
                 
  void Input_Mod()  //状态模式标记函数
    //////按键1程序
  {         
        if(Mod==6)  Mod=0;
        if(KEY1==0)           //按键按下
         
        {  delay(5);
           if(KEY1==0) //延时消抖
           Mod++;      //按键次数标记
                           }
        while(!KEY1)   //松手检测
        {; ;}
        
                                    
        if(Mod==6)  Mod=0;
        if(KEY2==0)           //按键按下
         
        {  delay(5);
           if(KEY2==0) //延时消抖
           Mod--;      //按键次数标记
                           }
        while(!KEY2)   //松手检测
        {; ;}
         }   
               

        //4种模式下的执行
         void run()     
        {  
          switch(Mod)
          {  case 0:{ET0=0;OUT1=0;OUT2=0;}break;// 模式1
             case 1:{ET0=0;OUT1=0;OUT2=1;}break;// 模式2
             case 2:{ET0=0;OUT1=1;OUT2=0;}break;// 模式3
             case 3:{ET0=0;OUT1=1;OUT2=1;}break;// 模式4
                                                 case 4:{ET0=0;led=0;}break;// 模式5
                                                 case 5:{ET0=0;led=1;}break;// 模式6
            }
           }

        void main()
        {  Init_Mod();
           Init_Timer();
           while(1)
         {  Input_Mod();
            if(flag==1) //flag 控制run的运行
          {  run();
             if(Mod==1||Mod==3||Mod==5)  flag=0;
           }
             if(Mod==0||Mod==2||Mod==4)  flag=1;  
           }
           }





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1