如何用单片机控制多个led以不同频率闪烁

[复制链接]
290|8
 楼主 | 2019-11-28 14:54 | 显示全部楼层 |阅读模式
while循环里用这种结构怎么控制多个led灯呢
        led(LED0, LED_ON);                  //LED0 亮
        DELAY_MS(1000);                      //延时500ms
        led(LED0, LED_OFF);                 //LED0 灭
        DELAY_MS(1000);
        

使用特权

评论回复
 楼主 | 2019-11-28 15:10 | 显示全部楼层
以及,led翻转是什么意思啊

使用特权

评论回复

评论

dirtwillfly 2019-11-29 08:29 回复TA
翻转就是改变灯的状态,开变关,或者关变开,都叫翻转 
| 2019-11-28 15:34 | 显示全部楼层
jfy000826 发表于 2019-11-28 15:10
以及,led翻转是什么意思啊
  1. switch(state)
  2. {
  3. case 0:
  4.         led(LED0,LED_ON)
  5.         state=1;
  6.         break;
  7. case 1:
  8.         if(++delay_acc>ON_TIME)
  9.         {
  10.                 state=2;
  11.                 delay_acc=0;
  12.         }
  13.         break;
  14. case 2:
  15.         led(LED0,LED_OFF)
  16.         state=3;
  17.         break;
  18. case 3:
  19.         if(++delay_acc>OFF_TIME)
  20.         {
  21.                 state=0;
  22.                 delay_acc=0;
  23.         }
  24.         break;
  25. default:
  26.         break;
  27. }
复制代码
写成状态机的形式就可以了。

使用特权

评论回复
| 2019-11-28 15:43 | 显示全部楼层
这程序写的????
led(LED0, LED_ON);就一个LED开关还弄个函数,还加LED序号,还加LED开关。
不知道函数的具体内容,多个直接在这个函数做,都不敢给你说什么。
一般IO,基本上可以位操作,直接用宏定义,实现LED亮灭就可以了嘛。
类似的
#define   LED_0_OFF  P0.1=0
#define   LED_0_ON   P0.1=1

循环里面直接这样用
LED_0_OFF;
LED_0_ON;

至于控制多个,而且不同频率,则一般需要采用中断,做起来比较准确,比如一个频率0.5Hz,一个是0.3Hz,则设置一个定时中断,100mS的,一个中断计数到3,翻转LED,一个在中断计数到5,翻转LED。考虑到状态不能混乱,最后中断计数进位归零值,必须是2个周期计数的公倍数*2。也就是说,中断计数到者30或者60.....清零

使用特权

评论回复
| 2019-11-28 17:35 | 显示全部楼层
楼楼写出来了嘛

使用特权

评论回复
| 2019-11-29 09:45 | 显示全部楼层
学习

使用特权

评论回复
| 2019-11-29 12:50 | 显示全部楼层
在STM32中,可以用滴答定时器做为时标,写个LED驱动函数调用

使用特权

评论回复
| 2019-12-2 10:52 | 显示全部楼层
1.延时——最笨的办法,也是最简单的办法,顺序执行考虑时间。要是灯多时间长,就上SWITCH语句。
2.定时器中断+多标志位。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表