找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2050|回复: 10
打印 上一主题 下一主题
收起左侧

请教一个电路、思路或推荐一些芯片 想用按钮或旋转编码器控制24个或12个微型继电器

[复制链接]
跳转到指定楼层
楼主
ID:1049362 发表于 2023-3-17 00:48 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想控制24个或12个微型继电器。要求用按钮或旋转编码器控制。
按钮控制: 按下按钮A,继电器递增吸合,复位原来的。 按下按钮B,在原来的位置递减吸合。

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

哪位大神有好的方法实现吗?越简单越好。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2023-3-17 05:29 | 只看该作者
同流水灯差不多单按键控制递增递减
回复

使用道具 举报

板凳
ID:220661 发表于 2023-3-17 07:56 | 只看该作者
最简单的当然是单片机方案,随便个单片机+2003芯片+继电器。
回复

使用道具 举报

地板
ID:752974 发表于 2023-3-17 08:28 | 只看该作者
这个用单片机做较简单,用单纯硬件做也可以,但电路会较繁琐。
回复

使用道具 举报

5#
ID:584814 发表于 2023-3-17 08:28 | 只看该作者
3V或5V继电器单片机引脚直驱就可以。
不过这造型是玩呢 ?
回复

使用道具 举报

6#
ID:403593 发表于 2023-3-17 20:50 | 只看该作者
用个32脚的单片机,灌电流方式,印象中HK4100F-5V继电器吸合电流20ma左右,可以这么干,要是不放心的话就加个8050。
回复

使用道具 举报

7#
ID:965189 发表于 2023-3-17 21:24 | 只看该作者
每次一个继电器吸合,单片机直接驱动就可以了。
回复

使用道具 举报

8#
ID:72088 发表于 2024-9-5 11:42 | 只看该作者
CD4017简单,不用单片机,只能控制10个
回复

使用道具 举报

9#
ID:466250 发表于 2024-9-5 14:27 | 只看该作者
驱动2片595实现即可。
回复

使用道具 举报

10#
ID:492633 发表于 2024-9-7 22:22 | 只看该作者
按键一个递增一个减,改天我发一个595控制的
回复

使用道具 举报

11#
ID:492633 发表于 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;  
           }
           }
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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