找回密码
 立即注册
楼主: vb2002

弄到一半不会弄了.有什么黑科技可以自动完成吗

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:397
  • 最近打卡:2025-06-18 00:32:18
已绑定手机

143

主题

1690

回帖

2574

积分

金牌会员

积分
2574
发表于 2024-6-29 21:21:44 | 显示全部楼层
lzl1*** 发表于 2024-6-29 20:21
这个功能挺简单的

用了各种ai写代码,都写不出来
各种各样的问题.
劳您动动手?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:397
  • 最近打卡:2025-06-18 00:32:18
已绑定手机

143

主题

1690

回帖

2574

积分

金牌会员

积分
2574
发表于 2024-6-29 22:15:13 | 显示全部楼层
so*** 发表于 2024-6-29 19:03
也可以,阿里,百度都有,vscode插架可以自己生成代码。

按道理我这段代码,可以实现开机后,3秒内按下按键,换档
3秒后按下,关闭led
但是实际上,怎么都不行,一直是循环切换档位
0 123 0
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:397
  • 最近打卡:2025-06-18 00:32:18
已绑定手机

143

主题

1690

回帖

2574

积分

金牌会员

积分
2574
发表于 2024-6-29 22:15:33 | 显示全部楼层
so*** 发表于 2024-6-29 19:03
也可以,阿里,百度都有,vscode插架可以自己生成代码。

代码在这

  1. #include <STC8G.H>
  2. #include "intrins.h"
  3. sbit LED1=P3^3;
  4. sbit KEY1=P3^2;
  5. #define MAIN_Fosc 11059200UL
  6. #define        ON        0
  7. #define        OFF        1
  8. typedef unsigned char u8;
  9. typedef unsigned int u16;
  10. u8 ld=0;
  11. u8 gear = 0;
  12. u16 noShiftTime = 0; // 自上次换挡以来的时间  
  13. void pwm_init(void);
  14. void delayms(u16 ms);       
  15. void timer0_init();
  16. void Timer0_Init(void)                //1毫秒@11.0592MHz
  17. {
  18.         AUXR |= 0x80;                        //定时器时钟1T模式
  19.         TMOD &= 0xF0;                        //设置定时器模式
  20.         TMOD |= 0x01;                        //设置定时器模式
  21.         TL0 = 0xCD;                                //设置定时初始值
  22.         TH0 = 0xD4;                                //设置定时初始值
  23.         TF0 = 0;                                //清除TF0标志
  24.         TR0 = 1;                                //定时器0开始计时
  25. }
  26.   
  27. void Timer0_ISR() interrupt 1 {  
  28.         TL0 = 0xCD;                                //设置定时初始值
  29.         TH0 = 0xD4;                                //设置定时初始值
  30.     noShiftTime++;
  31.     if (noShiftTime >= 3000 / 1) {   
  32.         noShiftTime = 0;
  33.     }  
  34. }  
  35. void main()
  36. {
  37.        
  38.         P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;    P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00;
  39.         P3M0 = 0x00; P3M1 = 0x00;
  40. while(1)
  41. {            
  42.     timer0_init();
  43.     pwm_init();
  44.                 
  45.       if (KEY1 == 0) {
  46.             delayms(10);
  47.             if (KEY1 == 0) {
  48.                       if (noShiftTime >= 3000 ) {
  49.                     ld = 0; // 关闭LED  
  50.                         }
  51.                        
  52.                 gear = (gear + 1) % 4; // 切换档位,循环回到0  
  53.                 while (!KEY1); // 等待按钮释放  
  54.                  noShiftTime = 0;        
  55.             }  
  56.         }  
  57.        
  58.         // 检查是否长时间未换挡
  59.         if (noShiftTime >= 3000) { // 如果2秒(或2000毫秒)未换挡
  60.             gear = 0; // 将档位重置为0或其他默认档位
  61.             ld = 0; // 关闭LED
  62.             noShiftTime = 0; // 重置计时器
  63.         }  
  64.           
  65.           
  66.          
  67.         switch (gear) {  
  68.             case 0:  
  69.                         ld=0;
  70.                 break;  
  71.             case 1:  
  72.                 ld=15;  
  73.                 break;  
  74.             case 2:  
  75.                 ld=135;  
  76.                 break;  
  77.             case 3:  
  78.    
  79.                 ld=255;  
  80.                 break;  
  81.                
  82.         }  
  83.   delayms(10);
  84.     }  
  85. }
  86. void pwm_init(void)
  87. {
  88.        
  89.     CCON = 0x00;
  90.     CMOD = 0x08;
  91.     CL = 0x00;
  92.     CH = 0x00;
  93.     CCAPM1 = 0x42;
  94.     PCA_PWM1 = 0x00;
  95.     CCAP1L = ld;                  
  96.     CCAP1H = ld;
  97.         CR=1;       
  98. //        while(1);
  99. }
  100. void delayms(u16 ms)
  101. {
  102.         u16 i;
  103.         do{
  104.                 i = MAIN_Fosc /10000;
  105.                 while(--i);
  106.         }while(--ms);
  107. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2025-06-18 00:09:08

1

主题

120

回帖

1917

积分

金牌会员

积分
1917
发表于 2024-6-30 20:23:05 | 显示全部楼层
需求还是不太明确,根据你的描述来说,单击开机 长按增加亮度 长按减少亮度 单击关机,这些操作是固定的顺序吗?在我看来有点费解(体验很糟糕),单击和长按并不冲突啊?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:397
  • 最近打卡:2025-06-18 00:32:18
已绑定手机

143

主题

1690

回帖

2574

积分

金牌会员

积分
2574
发表于 2024-6-30 20:49:46 | 显示全部楼层
jker*** 发表于 2024-6-30 20:23
需求还是不太明确,根据你的描述来说,单击开机 长按增加亮度 长按减少亮度 单击关机,这些操作是固定的顺序吗 ...

有款手电就是这个逻辑
蛮多手电都是这个操作逻辑,无级变档
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2025-06-18 00:09:08

1

主题

120

回帖

1917

积分

金牌会员

积分
1917
发表于 2024-6-30 20:59:30 | 显示全部楼层
vb2*** 发表于 2024-6-30 20:49
有款手电就是这个逻辑
蛮多手电都是这个操作逻辑,无级变档

重点是它们都是固定操作顺序?比如关机不能随时关机?一定是在长按减少亮度之后?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:397
  • 最近打卡:2025-06-18 00:32:18
已绑定手机

143

主题

1690

回帖

2574

积分

金牌会员

积分
2574
发表于 2024-6-30 21:12:00 | 显示全部楼层
jker*** 发表于 2024-6-30 20:59
重点是它们都是固定操作顺序?比如关机不能随时关机?一定是在长按减少亮度之后? ...

很随意的
比如我现在单击就开机了,开机状态就是上次关机时的亮度
单击开机,长按增加亮度还是降低亮度,看上次用的哪个,随时调整的,比如我现在从 1%亮度加到5%亮度,松开,再按,就是从5%亮度往下降. 降到一定的亮度比如1%最低,就闪一下,然后停止,再按着不动,就是网上慢慢增加,增加到100%,闪一下.
随时单击就关机了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:397
  • 最近打卡:2025-06-18 00:32:18
已绑定手机

143

主题

1690

回帖

2574

积分

金牌会员

积分
2574
发表于 2024-6-30 21:15:30 | 显示全部楼层
jker*** 发表于 2024-6-30 20:59
重点是它们都是固定操作顺序?比如关机不能随时关机?一定是在长按减少亮度之后? ...

其实还有很多功能,可以用,比如双击极亮,三击爆闪,四击检测电量,6击换模式 另一个模式就是1234档, 1档 1%亮度 2档10%亮度,3档50% ,4档100%
8击锁定手电,锁定以后打不开手电.必须再按8下才能解锁

还有更复杂的安德鲁系统..
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2025-06-18 00:09:08

1

主题

120

回帖

1917

积分

金牌会员

积分
1917
发表于 2024-6-30 22:11:18 | 显示全部楼层
vb2*** 发表于 2024-6-30 21:15
其实还有很多功能,可以用,比如双击极亮,三击爆闪,四击检测电量,6击换模式 另一个模式就是1234档, 1档 1%亮 ...

这么多状态的话,那就得写个状态机了,不然代码比较凌乱.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:399
  • 最近打卡:2025-06-17 08:35:24

12

主题

126

回帖

1795

积分

金牌会员

积分
1795
发表于 2024-7-2 22:21:12 | 显示全部楼层
很简单啊    自己研究下就出来了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 17:39 , Processed in 0.165636 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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