数码之家

 找回密码
 立即注册
搜索
查看: 1052|回复: 17

求一51单片机实现点动开关功能的程序

[复制链接]
发表于 2023-2-9 11:47:30 | 显示全部楼层 |阅读模式
500家元
微信图片_20230106135324.jpg

偶然得到一堆米家蓝牙Mesh模组,上边是原理图,三路开关,只能打开和关闭
KEY低有效,每次开关状态翻转一次,CNT是输出引脚,
CNT=0,LED=1;CNT=1,LED=0;
我想通过一个单片机实现点动功能,初步想法是通过检测LED引脚的电平,
当开关在手机端打开时,LED=0,cnt=1,单片机检测到低电平时,延时200ms后让KEY低一次,开关就又被关闭了,从而实现点动功能,
不知道该怎么实现,或者有什么更好的方法吗?
打算用STC8G1K08A



下面是我写的,不知道对不对


  1. #include <INTRINS.H>
  2. #include <STC8G.H>

  3. void Delay(unsigned int xms)                //@12.000MHz
  4. {
  5.         unsigned char i, j;
  6.                 while(xms)
  7. {
  8. i = 16;
  9.         j = 147;
  10.         do
  11.         {
  12.                 while (--j);
  13.         } while (--i);
  14.                 xms--;
  15. }
  16.         
  17. }


  18. void main()
  19.         {
  20. P3M0=0x00;
  21. P3M1=0x00;
  22. P5M0=0x00;
  23. P5M1=0x00;

  24. while(1)
  25. {
  26.                  
  27.      if(P54==0)
  28.                                         {
  29.                                                 Delay(200);
  30.                                                 P55 = 0;
  31.                                                 Delay(500);
  32.                                                 P55 = 1;
  33.             Delay(200);
  34.                                         }
  35. else if(P33==0)
  36.                                         {
  37.                                                 Delay(200);
  38.                                                 P32 = 0;
  39.                                                 Delay(500);
  40.                                                 P32 = 1;
  41.             Delay(200);
  42.                                         }
  43. else if(P31==0)
  44.                                         {
  45.                                                 Delay(200);
  46.                                                 P30 = 0;
  47.                                                 Delay(500);
  48.                                                 P30 = 1;
  49.             Delay(200);
  50.                                         }

  51. else
  52. {



  53. }
  54. }

  55.         }
复制代码



发表于 2023-2-9 12:18:01 | 显示全部楼层
电动功能不需要单片机  找一个合适的电容接上去就可以实现了   LED接KEY键  选择合适大小的电容和放电电阻即可
回复

使用道具 举报

 楼主| 发表于 2023-2-9 13:16:12 | 显示全部楼层
zhang_yy007 发表于 2023-2-9 12:18
电动功能不需要单片机  找一个合适的电容接上去就可以实现了   LED接KEY键  选择合适大小的电容和放电电阻 ...

RC延时?
回复

使用道具 举报

 楼主| 发表于 2023-2-9 13:23:04 | 显示全部楼层
zhang_yy007 发表于 2023-2-9 12:18
电动功能不需要单片机  找一个合适的电容接上去就可以实现了   LED接KEY键  选择合适大小的电容和放电电阻 ...

具体怎么接呢?key平常是高电平
回复

使用道具 举报

发表于 2023-2-9 13:52:31 | 显示全部楼层
楼主 可以参考这份


#include <regx52.h>

sbit kg = P1^1;  //定义开关io口
sbit led = P1^0;  //定义led io口

#define uint unsigned int  

void delay(uint i){while(i--);}  //定义延时函数

void mian()
{
    while(1)
    {
       if(kg==0) //判断开关状态
        {
         delay(10500);
        if(kg==0){led=~led;}//在一次判断开关状态
        }
}

}
回复

使用道具 举报

 楼主| 发表于 2023-2-9 14:12:53 | 显示全部楼层
本帖最后由 47977453 于 2023-2-9 14:18 编辑
MarcoWang 发表于 2023-2-9 13:52
楼主 可以参考这份

我要对模组进行操作,不是单片机直接控制LED
key低一次,开关状态翻转一次,key的状态并不是控制开关状态,只是翻转
回复

使用道具 举报

发表于 2023-2-9 22:51:14 | 显示全部楼层
详细说说,特别是有几个模组?多的话给个10个8个的,代码帮你写好实现好
回复

使用道具 举报

 楼主| 发表于 2023-2-12 10:17:30 | 显示全部楼层
asd3330303 发表于 2023-2-9 22:51
详细说说,特别是有几个模组?多的话给个10个8个的,代码帮你写好实现好

也就几十片吧,有需要的留言,我帮你们买,15块一片
回复

使用道具 举报

发表于 2023-2-13 10:12:39 | 显示全部楼层
直接
while(1)
{
  P55=P54;
  P32=P33;
  P30=P31;
}
回复

使用道具 举报

发表于 2023-2-13 11:37:13 | 显示全部楼层
        // 你这需求逻辑不够详细啊
        
        // 以下代码逻辑是:
        // 检测到led低电平触发一次key的输出
        led_state=0;        
        while(1){               
                if(LED==0){
                        if(led_state==0){                                
                                delay_ms(200);        
                                key=0;
                                delay_ms(500);        
                                key=1;
                                led_state=1;                                
                        }                        
                }else{        led_state=0;}               
        }
回复

使用道具 举报

发表于 2023-3-3 16:04:25 | 显示全部楼层
可以用位运算
回复

使用道具 举报

发表于 2023-3-20 11:27:57 | 显示全部楼层
LED加个光耦key加个9012/8050+RC延时
回复

使用道具 举报

 楼主| 发表于 2023-3-22 09:44:03 | 显示全部楼层
yklsporject 发表于 2023-3-20 11:27
LED加个光耦key加个9012/8050+RC延时

能详细点吗?画个图?
回复

使用道具 举报

发表于 2024-3-15 15:57:05 | 显示全部楼层
过来学习一下,谢谢大佬们的分享!!!
回复

使用道具 举报

发表于 2024-5-14 11:47:24 | 显示全部楼层
51有些忘记了,avr能想起来一些!!
回复

使用道具 举报

发表于 2024-5-15 11:59:34 来自手机浏览器 | 显示全部楼层
是个单片机不都行吗
回复

使用道具 举报

发表于 2024-5-17 08:23:52 | 显示全部楼层
谢谢大佬们的分享!!!
回复

使用道具 举报

发表于 2024-5-25 16:49:36 | 显示全部楼层
看看怎么样。
回复

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-6-2 13:31 , Processed in 0.312000 second(s), 8 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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