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

被这个代码卡脖子了..有大佬伸出援助之手吗?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-4 19:55:55 来自手机 | 显示全部楼层
wnagming 发表于 2024-8-4 18:32
看看你的代码,逻辑有问题,Switch(dat) 你没有获取dat的数据,跑不了

switch可以跑,但是那个else里面不行,我是直接把那个switch剪切到那个中段里面,好几种办法我都试了,可以正常循环,但是就是不可以记忆上次的亮度
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-4 23:24:09 | 显示全部楼层
现在是 switch里面没问题..就是过了3秒不能执行 还是会换挡

截图202408042323251076.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-5 10:56:04 | 显示全部楼层
wnag*** 发表于 2024-8-5 06:16
这个程序的问题是不能检测什么时候关机,所以就不检测了,每次开机按照原来的代码切换亮度,然后时间过了 ...

好像懂了,,就是再程序开头已经定型了.
后面想加检测,不好加了.
只能通过曲线救国的方法来了
3秒内eepromid +1 ,,3秒后+2,来达到目的..
确实是有点浪费,我先实现功能先.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-5 13:29:41 | 显示全部楼层
wnag*** 发表于 2024-8-5 13:04
你在中断中写小于3S改EEPROM中的数据,大于3S不改,你怎么知道什么时候关机,要是不知道,那么我4S关机, ...

比如我是4个档位
正常是 eepromid +1
那我设定
if(time<=3000)
eepromid +1
else
eepromid +3  (正好是一个循环回来这个档,,不过有点浪费eeprom)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:289
  • 最近打卡:2025-04-30 17:31:36
已绑定手机

2

主题

182

回帖

1240

积分

金牌会员

积分
1240
发表于 2024-8-5 14:24:47 | 显示全部楼层
加个铁电吧,这样就不用考虑FLASH的寿命了
不抛弃,不放弃
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-5 15:59:52 来自手机 | 显示全部楼层
李鑫发 发表于 2024-8-5 14:24
加个铁电吧,这样就不用考虑FLASH的寿命了

手电驱动本来空间就小,不说成本,就是空间也捉襟见肘
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-8-5 16:26:54 | 显示全部楼层
本帖最后由 Lkck8210 于 2024-8-5 16:31 编辑

可以善用EEProm可写零的原理
上电后每375ms清零一个bit
关机再开机后读取EEProm,不等于零代表上次开机没到3秒,等于零代表过了3秒
流程如下
WhatsApp Image 2024-08-05 at 16.30.59.jpeg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-5 17:35:27 | 显示全部楼层
把这个判定放在初始化去?
然后上电就判定一次,判定3000ms

我去试试...
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-5 17:37:14 | 显示全部楼层
Lkck*** 发表于 2024-8-5 16:26
可以善用EEProm可写零的原理
上电后每375ms清零一个bit
关机再开机后读取EEProm,不等于零代表上次开机没到3 ...

这个逻辑是不是 过了3s就卡一个eeprom的数值,让其不为ff,就写不进去了. 然后就是读取当前值
好像是可以实现.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1521

回帖

1861

积分

金牌会员

积分
1861
发表于 2024-8-6 02:25:53 | 显示全部楼层
wnag*** 发表于 2024-8-5 20:49
这个方法需要好好理解一下,新手不太容易想明白,而且我说的方法只需写入1-2次,我觉得我的方法比较好 ...

已经成功了.
第一次是第一个代码,,,但是在2亮度那个档位,会时不时跳到0 去,有时灵,有时不灵...第二个方案是按你说的+2...试了很多次,,除了3秒内的换挡有时候会错乱...3秒后的基本不会错....为什么会错,我想不明白
  1. void Timer0_Isr(void) interrupt 1
  2. {
  3.        
  4.                                 if(time<=100)
  5.                 {
  6.                                 switch(dat)
  7.                         {       
  8.                                 case 253: IapProgram(EEPROMId+1,2);break;
  9.                                 case 2: IapProgram(EEPROMId+1,16);break;
  10.                                 case 16: IapProgram(EEPROMId+1,56);break;
  11.                                 default: IapProgram(EEPROMId+1,253);break;
  12.                         }       
  13.                 }
  14.                 else
  15.                 {
  16.                                 switch(dat)
  17.                         {       
  18.                                
  19.                                 case 2:  IapProgram(EEPROMId+2,dat);break;
  20.                                 case 16: IapProgram(EEPROMId+2,dat);break;
  21.                                 case 56: IapProgram(EEPROMId+2,dat);break;
  22.                                 case 253: IapProgram(EEPROMId+2,dat);break;
  23.                                 default:IapProgram(EEPROMId+2,2); break;
  24.                         }       
  25.                 }
  26.                
  27.         if(time<=200) time++;
  28.        
  29. }
复制代码

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 15:28 , Processed in 0.128673 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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