找回密码
 立即注册
查看: 995|回复: 20

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-29 11:39:58 | 显示全部楼层 |阅读模式
这个是做的个手电驱动

三档调pwm占空比
只能用作循环.  0    10   35   95
想加一个 打开后, 选择一个亮度 比如10 的占空比,如果三秒后没有按键,  再次按键关闭手电.   最好是下次开机继续保持当前关闭的档位  (好像这个要用到eeprom)
  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. //#define ld 1
  9. typedef unsigned char u8;
  10. typedef unsigned int u16;
  11. u8 ld=0;
  12. u8 gear = 0;
  13. u8 noShiftTime = 0; // 自上次换挡以来的时间  
  14. void pwm_init(void);
  15. void delayms(u16 ms);       
  16. void timer0_init() {  
  17.    
  18.     TMOD &= 0xF0;
  19.     TMOD |= 0x01;
  20.     TH0 = (65536 - 50000) / 256;   
  21.     TL0 = (65536 - 50000) % 256;  
  22.     ET0 = 1; // 开启Timer0中断  
  23.     EA = 1;  // 开启全局中断  
  24.     TR0 = 1; // 启动Timer0  
  25. }  
  26.   
  27. void Timer0_ISR() interrupt 1 {  
  28.     TH0 = (65536 - 50000) / 256;
  29.     TL0 = (65536 - 50000) % 256;  
  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 / 1) {
  49.                     ld = 0; // 关闭LED  
  50.                         }
  51.                        
  52.                 gear = (gear + 1) % 4; // 切换档位,循环回到0  
  53.                 while (!KEY1); // 等待按钮释放  
  54.                  noShiftTime = 0;        
  55.             }  
  56.         }  
  57.          
  58.         switch (gear) {  
  59.             case 0:  
  60.                         ld=0;
  61.                 break;  
  62.             case 1:  
  63.                 ld=15;  
  64.                 break;  
  65.             case 2:  
  66.                 ld=35;  
  67.                 break;  
  68.             case 3:  
  69.    
  70.                 ld=95;  
  71.                 break;  
  72.         }  
  73.   delayms(10);
  74.     }  
  75. }
  76. void pwm_init(void)
  77. {
  78.        
  79.     CCON = 0x00;
  80.     CMOD = 0x08;
  81.     CL = 0x00;
  82.     CH = 0x00;
  83.     CCAPM1 = 0x42;
  84.     PCA_PWM1 = 0x00;
  85.     CCAP1L = ld;                  
  86.     CCAP1H = ld;
  87.         CR=1;       
  88. //        while(1);
  89. }
  90. void delayms(u16 ms)
  91. {
  92.         u16 i;
  93.         do{
  94.                 i = MAIN_Fosc /10000;
  95.                 while(--i);
  96.         }while(--ms);
  97. }
复制代码


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-29 12:12:48 | 显示全部楼层
你这个很容易啊,用一个8脚的单片机配合一键开关机电路,一个按键不仅可以开关机,还可以调PWM,eeprom不考虑成本可以用外部eeprom,节约就用单片机内部的eeprom
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-29 12:17:52 | 显示全部楼层
xxxe*** 发表于 2024-6-29 12:12
你这个很容易啊,用一个8脚的单片机配合一键开关机电路,一个按键不仅可以开关机,还可以调PWM,eeprom不考 ...

代码不会写了
要不您有空看看我的代码?
帮我优化一下  3秒不换挡,再按就关机? eeprom先不管,我后续再弄
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-29 12:38:23 | 显示全部楼层
你这样写明显不合理嘛,难道必须开机就调亮度,中途调亮度就不行?你把key1设成长短按不就很好解决了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-29 14:56:50 来自手机 | 显示全部楼层
xxxevery 发表于 2024-6-29 12:38
你这样写明显不合理嘛,难道必须开机就调亮度,中途调亮度就不行?你把key1设成长短按不就很好解决了 ...

哥,帮帮忙其实我的设想是这样
单击开机,长按增加亮度,松手再长按减少亮度[无极调光]  单击关机,记忆上次无极调光的亮度,,下次开机直接就是上次关机的亮度
双击极亮,关机的时候长按,进入 微亮 %0.1模式
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-29 15:23:45 | 显示全部楼层
你这个功能逻辑看上去没啥毛病,你用按键状态机的方式实现应该容易些,不要用那种主循环中扫描按键的方式
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-6-29 15:41:35 来自手机 | 显示全部楼层
用ai自动生成基础代码在修改
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-03 00:27:19
已绑定手机

130

主题

1521

回帖

1865

积分

金牌会员

积分
1865
发表于 2024-6-29 17:25:29 来自手机 | 显示全部楼层
soma 发表于 2024-6-29 15:41
用ai自动生成基础代码在修改

比如说?我就懂文言一心
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-6-29 19:03:23 来自手机 | 显示全部楼层
vb2002 发表于 2024-6-29 17:25
比如说?我就懂文言一心

也可以,阿里,百度都有,vscode插架可以自己生成代码。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-05-03 07:54:16

5

主题

296

回帖

2068

积分

金牌会员

积分
2068
发表于 2024-6-29 20:21:07 | 显示全部楼层
这个功能挺简单的
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 08:13 , Processed in 0.153416 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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