你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-L476RG开发】mbed时钟系统2

[复制链接]
党国特派员 提问时间:2015-11-25 23:38 /
本帖最后由 党国特派员 于 2015-11-25 23:38 编辑

接上次,今天学习下mbed下的时钟系统之TimeOut和Ticker,今天要用到4个LED,因为开发板上只有一个,所以需要自己再添加3个LED
mbed Timeout的应用

mbed的Timeout对象主要用来在给定的时间后执行给定的函数,如下面的测试代码,运行后你会发现NUCLEO-L476RG的四个led分别点亮,由于timeout只会被执行一次,所以点亮后会保持不变:
  1. #include "mbed.h"

  2. #define LED2 PA_0
  3. #define LED3 PA_1
  4. #define LED4 PA_4
  5. //定义LED
  6. DigitalOut led1(LED1);
  7. DigitalOut led2(LED2);
  8. DigitalOut led3(LED3);
  9. DigitalOut led4(LED4);

  10. //定义TIMER
  11. Timeout timer_led1;
  12. Timeout timer_led2;
  13. Timeout timer_led3;
  14. Timeout timer_led4;

  15. void led1flip()
  16. {
  17.     led1=!led1;
  18. }

  19. void led2flip()
  20. {
  21.     led2=!led2;
  22. }

  23. void led3flip()
  24. {
  25.     led3=!led3;
  26. }

  27. void led4flip()
  28. {
  29.     led4=!led4;
  30. }

  31. int main() {
  32.    
  33.     timer_led1.attach(&led1flip,0.5);

  34.     timer_led2.attach(&led2flip,0.5*2);

  35.     timer_led3.attach(&led3flip,0.5*3);

  36.     timer_led4.attach(&led4flip,0.5*4);

  37.     while (1);
  38. }
复制代码


mbed Ticker的应用

mbed的Ticker对象主要用来执行各类需要定期执行的函数,它和Timeout的唯一不同就是Timeout相关的函数只会被执行一次,而Ticker相关的则会被定期执行,如下面的测试代码,运行后你会发现xbed LPC1768的四个led将按照不同的频率变换:

  1. #include "mbed.h"

  2. #define LED2 PA_0
  3. #define LED3 PA_1
  4. #define LED4 PA_4
  5. //定义LED
  6. DigitalOut led1(LED1);
  7. DigitalOut led2(LED2);
  8. DigitalOut led3(LED3);
  9. DigitalOut led4(LED4);

  10. //定义TIMER
  11. Ticker timer_led1;
  12. Ticker timer_led2;
  13. Ticker timer_led3;
  14. Ticker timer_led4;

  15. void led1flip()
  16. {
  17.     led1=!led1;
  18. }

  19. void led2flip()
  20. {
  21.     led2=!led2;
  22. }

  23. void led3flip()
  24. {
  25.     led3=!led3;
  26. }

  27. void led4flip()
  28. {
  29.     led4=!led4;
  30. }

  31. int main() {
  32.    
  33.     timer_led1.attach(&led1flip,0.5);

  34.     timer_led2.attach(&led2flip,0.5*2);

  35.     timer_led3.attach(&led3flip,0.5*3);

  36.     timer_led4.attach(&led4flip,0.5*4);

  37.     while (1);
  38. }
复制代码


我们在使用Ticker对象的过程中还可以随时对Ticker设定的间隔进行更改,更改后的时间是即时生效的,如下面的代码,我们发现,用户每按一次按钮,led1的闪烁频率就会加快一倍。

  1. #include "mbed.h"

  2. #define LED2 PA_0
  3. #define LED3 PA_1
  4. #define LED4 PA_4

  5. DigitalOut led1(LED1);
  6. InterruptIn btn(USER_BUTTON);
  7. Ticker timer_led1;
  8. float interval;

  9. void led1flip()
  10. {
  11.     led1=!led1;
  12. }

  13. void changefred()
  14. {
  15.     interval=interval /2.0;
  16.     timer_led1.attach(&led1flip,interval);
  17. }

  18. int main() {

  19.     interval=2;

  20.     btn.fall(&changefred);

  21.     timer_led1.attach(&led1flip,interval);

  22.     while (1);
  23. }
复制代码
TimeOut应用:
timeout.gif
Ticker应用:
ticker.gif

评分

参与人数 1 ST金币 +30 收起 理由
沐紫 + 30

查看全部评分

收藏 1 评论11 发布时间:2015-11-25 23:38

举报

11个回答
watershade 回答时间:2015-11-26 00:23:15
mbed比arduino强大多了
slotg 回答时间:2015-11-26 10:49:27
很不错,感谢分享。
安臣 回答时间:2015-11-26 11:38:59
很不错
wu1169668869 回答时间:2015-11-26 12:14:24
比较好奇gif用什么软件做的
风子 回答时间:2015-11-26 12:49:47
感谢楼主,学到不少东西
wamcncn 回答时间:2015-11-26 15:38:23
谢谢分享            
党国特派员 回答时间:2015-11-26 18:24:26
wu1169668869 发表于 2015-11-26 12:14
比较好奇gif用什么软件做的

photoshop 就可以完成。
埃斯提爱慕 回答时间:2015-11-26 20:52:02
提示: 作者被禁止或删除 内容自动屏蔽
zwei99999999 回答时间:2015-11-27 09:44:06
不错不错
alvin_ 回答时间:2015-11-27 18:07:27
现在流行动图了么?还是?
党国特派员 回答时间:2015-11-28 09:40:16
alvin_ 发表于 2015-11-27 18:07
现在流行动图了么?还是?

视频不方便。。。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版