找回密码
 立即注册
查看: 651|回复: 13

闪烁按钮

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-04-07 10:31:45
已绑定手机

12

主题

57

回帖

416

积分

中级会员

积分
416
发表于 2024-8-5 13:47:46 | 显示全部楼层 |阅读模式


大家好,我想实现按一下P3.5按钮,P2.7灯一直闪烁。
再按一下P3.5按钮,灯全部关闭。
这个程序怎么写,现在关不了!!!头疼

截图202408051342214915.jpg

回复

使用道具 举报 送花

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

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-8-5 14:07:56 | 显示全部楼层
加一个标志位取判断
  1. vois main()
  2. {
  3.         while(1)
  4.         {
  5.                 if(!P35)
  6.                 {
  7.                         Delay1ms(20);
  8.                         if(!P35)
  9.                         {
  10.                                 Flash_En = !Flash_En;
  11.                                 while(!P35);
  12.                         }
  13.                 }
  14.                 if(Flash_En)
  15.                 {
  16.                         P27 = !P27;
  17.                         Delay1000ms(1);
  18.                 }
  19.                 else
  20.                 {
  21.                         P27 = 1;
  22.                 }
  23.         }
  24. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-04-07 10:31:45
已绑定手机

12

主题

57

回帖

416

积分

中级会员

积分
416
发表于 2024-8-5 14:15:21 | 显示全部楼层
Lkck*** 发表于 2024-8-5 14:07
加一个标志位取判断

感觉这样都点复杂阿,while 嵌套是不是有弊端?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:352
  • 最近打卡:2025-05-07 11:05:22
已绑定手机

14

主题

145

回帖

506

积分

高级会员

积分
506
发表于 2024-8-5 14:32:59 | 显示全部楼层
这不if(!P35)退出后if(!P35&P27)立马又成立了
回复 支持 反对

使用道具 举报 送花

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

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-8-5 14:35:24 | 显示全部楼层
DEVI*** 发表于 2024-8-5 14:15
感觉这样都点复杂阿,while 嵌套是不是有弊端?

2024-08-05_143516.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:369
  • 最近打卡:2025-05-07 11:36:20

6

主题

319

回帖

2222

积分

金牌会员

积分
2222
发表于 2024-8-5 14:38:31 | 显示全部楼层
这个容易做,
闪灯不要用大延时,声明大循环计数器变量和闪灯频率计数器,大循环计数器做时间基准,再声明个闪灯标志,按键有效就把闪灯标志取反,
大循环里不断判断闪灯标志,若闪灯标志有效就处理闪灯部分,否则关闭灯,
闪灯部分利用闪灯计数器作判断,闪灯计数器大于某值就亮灯,小于某值就灭灯,
这种简单的时间片断处理方式没有大延时影响主循环运行,不影响其他功能处理,是很常用的手法
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:428
  • 最近打卡:2025-05-07 00:13:45
已绑定手机

19

主题

3194

回帖

4948

积分

论坛元老

积分
4948
发表于 2024-8-5 14:44:02 来自手机 | 显示全部楼层
这个AI就能生成吧,建议最后加个while (!P35)等待按键释放。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:369
  • 最近打卡:2025-05-07 11:36:20

6

主题

319

回帖

2222

积分

金牌会员

积分
2222
发表于 2024-8-5 15:12:59 | 显示全部楼层
本帖最后由 网老四 于 2024-8-5 15:24 编辑
  1. uint main_loop_count=0;  //大循环计数器,作为软件定时基准,备用
  2. uint flash_count=0;          //闪灯计数器
  3. bit LED_flash_flag=0;       //闪灯标志
  4. bit P35_old;  //按键状态缓存
  5. void main(void)
  6. {
  7.     while(1)
  8.    {
  9.       if((P35==0)&&(P35_old==1))LED_flash_flag=!LED_flash_flag;   //检测按键按下前沿,闪灯标志取反
  10.       P35_old=P35;    //保存当前按键状态
  11.       if((LED_flash_flag)&&(flash_count<1000))P27=0;  //亮灯
  12.       else P27=1;   //灭灯
  13.       (flash_count<2000)?(flash_count++):(flash_count=0);    //闪灯计数器累加并限幅,控制闪灯占空比和周期
  14.       main_loop_count++;   //大循环计数器累加
  15.       Delay_ms(1);   //粗略的大循环周期控制,也可以改用硬件定时器嘀嗒计数来实现精确控制
  16.    }
  17. }
复制代码

点评

你的最符合楼主的期望,实现了灯闪烁和控制.  发表于 2024-8-6 13:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-04-07 10:31:45
已绑定手机

12

主题

57

回帖

416

积分

中级会员

积分
416
发表于 2024-8-5 16:29:27 | 显示全部楼层
感谢各位指导
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-04-07 10:31:45
已绑定手机

12

主题

57

回帖

416

积分

中级会员

积分
416
发表于 2024-8-5 16:29:45 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 11:51 , Processed in 0.133761 second(s), 120 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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