找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 816|回复: 4
打印 上一主题 下一主题
收起左侧

问个单片机问题 让一个LED灯以一定频率闪烁

[复制链接]
跳转到指定楼层
楼主
ID:1090365 发表于 2023-10-8 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想实现程序每次取值,取到这个值为0的时候(这个值是我用镊子在pcb板子上短接得到的),让一个LED灯以一定频率闪烁,假设闪烁频率是一秒亮,一秒灭,500ms亮,500ms灭。我想让我每次拿开镊子后再短接,让LED灯重新从一秒亮,一秒灭开始。只要拿开,再接上就从头开始,想问问思路。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:744809 发表于 2023-10-8 13:48 | 只看该作者
挺简单的吧,用状态机,短接的时候,就进入闪烁状态,断开的时候,恢复到初始状态就好了。
回复

使用道具 举报

板凳
ID:628113 发表于 2023-10-8 15:45 | 只看该作者
如果从理论来看,触发时 【启动或者重置】 定时器即可。但是这样会独占一个定时器资源。
一般来说,你不太可能直接让定时器直接输出1秒这么长时间,而且又闪烁频率不固定,所以定时器后面一定有计数器。
这样的话,如果采用 1000HZ 方波计数,定时器不去修改它,只操作后面计数器复位,最多也就是触发后,响应延迟了1/1000 秒,定时器不需要修改就可以直接运行,这样兼容性就会好很多。
例如:
计数数组:  unsigned int  ca[4]={1000,1000,500,500};     一组计数满了,就翻转; 下次触发从头计数。
回复

使用道具 举报

地板
ID:161164 发表于 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. }
复制代码
回复

使用道具 举报

5#
ID:1097455 发表于 2023-10-27 13:36 | 只看该作者
只要每次镊子短接你让计时清0;计时为0亮 为1灭  为2清0计时从头开始
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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