找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1019|回复: 6
收起左侧

单片机实战项目中怎样让一个灯闪烁3S 求思路

[复制链接]
ID:1043858 发表于 2022-12-9 15:07 | 显示全部楼层 |阅读模式
目前在做一个电饭煲项目,要选者煮饭按键时对应的led灯要闪烁3S,3S后常亮并且进入煮饭模式,目前while主循环4MS进入一次,怎样实现这个功能?
定时器是125us进入一起,希望大家给个思路
回复

使用道具 举报

ID:123289 发表于 2022-12-9 17:53 | 显示全部楼层
1、定义闪一次:亮0.3s,暗0.2s。需要两个计时器,分别:LT=0.3s=0.3s/125us=2400;AT=0.2s=0.2s/125us=1600。
2、闪三次。需要一个计时器,TT=3。
3、灯明亮用一个标记:B_LAMP。
现在可以写程序了:
键按下后做下例事件:
1、初化:LT、AT、TT、灯亮,
2、对依序对LT、AT、TT中<>0的进行计时,=0的则跳过。
中断服务程序:
1、LT =0,进入下一步(不在亮灯时间内)
   LT<>0,做LT-1<>0时:跳过以下各步。(灯亮还未结束,继续计时)
            LT-1 =0时:关灯B_LAMP=0。(灯亮结束)跳过以下各步。
2、AT =0,进入下一步(不在暗灯时间内)
   AT<>0,做AT-1<>0时:跳过以下各步。(灯暗还未结束,继续计时)
            AT-1 =0时:亮灯B_LAMP=1。(灯暗结束)跳过以下各步。
3、TT =0, 三次全部分过程结束了,跳出。
   TT<>0,做TT-1,复位LT=2400,AT=1600,亮灯B_LAMP=1(三次未到,继续再来)。
回复

使用道具 举报

ID:213173 发表于 2022-12-9 20:20 | 显示全部楼层
见此贴的回复,示例中用到闪烁功能,可以借鉴。
http://www.51hei.com/bbs/forum.php?mod=viewthread&tid=225635
回复

使用道具 举报

ID:401564 发表于 2022-12-9 21:44 | 显示全部楼层
大哥,你是认真的吗?
你都接手项目了,闪灯3秒钟的程序都写不了,那电饭煲后继的程序怎么办?
回复

使用道具 举报

ID:1043858 发表于 2022-12-10 08:51 | 显示全部楼层
Y_G_G 发表于 2022-12-9 21:44
大哥,你是认真的吗?
你都接手项目了,闪灯3秒钟的程序都写不了,那电饭煲后继的程序怎么办?

其他的都搞完了,客户那边要加这个闪烁,我现在想的是在4ms主循环里面放多一个时间函数 每进入一次主循环就记录一次,然后再弄个灯闪烁的子函数看看,灯闪烁的子函数里面主要是灯的取反
回复

使用道具 举报

ID:213173 发表于 2022-12-10 10:51 | 显示全部楼层
此函数放在4ms主循环中运行
  1. bit LED_make=0;//煮饭按键使能位

  2. void LED_flicker()
  3. {
  4.         static unsigned int count=0;//4ms计数
  5.         static bit flicker=0;//闪烁标志
  6.         static bit sec_3=0;//3秒标志

  7.         if(LED_make)//煮饭使能
  8.         {
  9.                 if((++count>=750) && !sec_3)
  10.                 {
  11.                         sec_3=1;
  12.                         flicker=0;
  13.                 }
  14.                 if(count%25==0)//闪烁周期200ms
  15.                 {
  16.                         flicker=~flicker;
  17.                 }
  18.                 if(!sec_3 && !flicker)
  19.                 {
  20.                         LED=0;//灭
  21.                 }
  22.                 else LED=1;//亮
  23.         }
  24.         else
  25.         {
  26.                 LED=0;//灭
  27.                 count=0;//复位清0
  28.                 flicker=0;//复位清0
  29.                 sec_3=0;//复位清0
  30.         }
  31. }
复制代码
回复

使用道具 举报

ID:1043858 发表于 2022-12-10 14:00 | 显示全部楼层
wulin 发表于 2022-12-10 10:51
此函数放在4ms主循环中运行

好我试一下,谢谢大神
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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