标题: 问个单片机问题 让一个LED灯以一定频率闪烁 [打印本页]

作者: zpw123666    时间: 2023-10-8 09:56
标题: 问个单片机问题 让一个LED灯以一定频率闪烁
我想实现程序每次取值,取到这个值为0的时候(这个值是我用镊子在pcb板子上短接得到的),让一个LED灯以一定频率闪烁,假设闪烁频率是一秒亮,一秒灭,500ms亮,500ms灭。我想让我每次拿开镊子后再短接,让LED灯重新从一秒亮,一秒灭开始。只要拿开,再接上就从头开始,想问问思路。

作者: 123156fsadf    时间: 2023-10-8 13:48
挺简单的吧,用状态机,短接的时候,就进入闪烁状态,断开的时候,恢复到初始状态就好了。
作者: ppcbug    时间: 2023-10-8 15:45
如果从理论来看,触发时 【启动或者重置】 定时器即可。但是这样会独占一个定时器资源。
一般来说,你不太可能直接让定时器直接输出1秒这么长时间,而且又闪烁频率不固定,所以定时器后面一定有计数器。
这样的话,如果采用 1000HZ 方波计数,定时器不去修改它,只操作后面计数器复位,最多也就是触发后,响应延迟了1/1000 秒,定时器不需要修改就可以直接运行,这样兼容性就会好很多。
例如:
计数数组:  unsigned int  ca[4]={1000,1000,500,500};     一组计数满了,就翻转; 下次触发从头计数。
作者: lkc8210    时间: 2023-10-8 17:54
  1. uint Count = 0;
  2. sbit Key = P3^4;
  3. sbit Led = P1^0;

  4. if(Flag_1ms)//定时器产生1ms标志位
  5. {
  6.         Flag_1ms = 0;
  7.         if(!Key)
  8.         {
  9.                 Count++;
  10.                 if(Count<1000)Led = 0;
  11.                 else if(Count<2000)Led = 1;
  12.                 else if(Count<2500)Led = 0;
  13.                 else if(Count<3000)Led = 1;
  14.                 else Count=0;
  15.         }else
  16.                 Count=0;
  17. }
复制代码

作者: 圣博朗西斯    时间: 2023-10-27 13:36
只要每次镊子短接你让计时清0;计时为0亮 为1灭  为2清0计时从头开始




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1