单片机编程中软定时器应用实例1——多路LED的闪烁
【单片机高级编程之软定时器的实现】 文中介绍了软定时器的实现,本文及后面几篇将介绍其应用实例,一来帮大家扩展应用思路,二来通过不同的实例更好的了解软定时器的用法及性能。
本文介绍利用软定时器实现三路LED的快闪,慢闪,常亮,关闭,将多种控制封装成一个简单的接口,让你能放心而优雅的调用。
硬件电路:
电路采用GPIO直驱方式,当GPIO输出低LED亮,输出高LED灭。
软件实现:
1.定义三颗灯
typedef enum{
LED1=0,
LED2,
LED3,
LED_MAX,
}led_t;
2.定义四种状态
typedef enum{
LED_OFF=0x00,
LED_FLASH_SLOW=0x10,
LED_FLASH_QUICK=0x20,
LED_ON=0x30,
}ledCtrl_t;
3.灯的开关函数,根据原理图来设置相应GPIO的输出电平
static void _ledSwitch(led_t led,u8 on)
{
if(led >= LED_MAX)return;
switch(led){
case LED1:
GP3 = on?0:1;
break;
case LED2:
GP5 = on?0:1;
break;
case LED3:
GP0 = on?0:1;
break;
}
}
4.封装的LED控制函数,供程序员调用
static void led_ctrl(u32 para)
{
static u8 flag=0; 保存LED上一次的状态,8bit对应8个LED
static u8 _tID[LED_MAX]={INVALID_ID,INVALID_ID,INVALID_ID,INVALID_ID};软定时器ID
ledCtrl_t _ledCtrl=(para&0xf0);从para中取出LED控制指令
led_t _led=(para&0x0f);从para中取出LED
switch(_ledCtrl){
case LED_OFF:
timer_delete(&_tID[_led]);删除可能开启的定时器
_ledSwitch(_led,0);关闭LED
break;
case LED_FLASH_SLOW:
case LED_FLASH_QUICK:
timer_start(&_tID[_led],MODE_SINGLE,LED_FLASH_QUICK?100:800,led_ctrl,para );启动定时器让GPIO翻转,快闪时100ms翻转一次,慢闪时800ms翻转一次,此处翻转时间可根据实际需要更改 ! 参数para继续传递给回调函数下次使用
_ledSwitch(_led,(flag>>_led)&0x1);
if((flag>>_led)&0x1) flag &= ~(1<<_led);
else flag |= (1<<_led);
break;
case LED_ON:
timer_delete(&_tID[_led]);删除可能开启的定时器
_ledSwitch(_led,1);打开LED
break;
}
}
5.初始化GPIO和软定时器
6.调用led_ctrl接口如下
led_ctrl(LEDx|LED_FLASH_SLOW);LEDx慢闪
led_ctrl(LEDx|LED_FLASH_QUICK);LEDx快闪
led_ctrl(LEDx|LED_ON);打开LEDx
led_ctrl(LEDx|LED_OFF);关闭LEDx
程序员想要改变LED灯的状态,随时可调用led_ctrl,它封装了所有的控制细节,不用担心定时器的开关和状态冲突问题,调用后立即生效。
简单的实例今天就说到这里,感兴趣的小伙伴可参考本文动手实现,有任何问题随时留言或私信小编。如果您觉得还不错,记得回来点赞评论关注转发哦~~ 下一篇【单片机编程中软定时器应用实例2——MIDI音乐播放】 ,敬请期待!!
取一缕光做琴弦,交互式光感电子古筝亮相
王玉在2019上海科技节指导小观众弹拨光感电子古筝
交互式光感电子古筝有21对激光传感器,模拟古筝的21根琴弦。演奏者通过手指遮挡激光感应弦,实现拨弦演奏。古筝设置有弯音轮控制滑音,12位的拨码开关实现转调。在演奏技法上,交互式光感电子古筝可以实现传统古筝的拨弦与扫弦等,也可以通过弯音轮控制滑音,实现复音滑音、烟雾演奏的创新演奏法。交互式光感电子古筝通过预先调制的采样音色库和连接的音响系统进行发声,操控简单,即使没有音乐基础的初学者也能轻松上手。其演奏的力度通过拨弦的速度控制。演奏者拨动激光感应弦的速度越快,演奏力度越大。触弦深度是交互式光感电子古筝的创新维度。遮挡光线的深浅也能够影响声音表现。目前,激光模拟触弦深度方面仍需进一步开发。由于激光的可塑性,也可以通过烟雾触发激光感应弦来演奏。交互式光感电子古筝将新媒体交互与乐器体验设计相结合,为新媒体艺术家提供更智能、易操控、表现力佳的展现平台,先后在上海设计之都十周年开幕式、上海科技节“AI之音:人工智能音乐艺术专场”、环同济设计周开幕式等活动登台,演奏《聚·慧》《AI乐之城》等作品,在IEMC国际电子音乐大赛、CSMT全国声音与音乐技术会议、丹尼奖国际电子音乐比赛等获得奖项。“演奏光对所有人来说都是全新的尝试。新媒体乐器设计让演奏的过程变得创新而有趣。”接下来,王玉将在乐器外形、交互机制、触弦深度等方面改进光感电子古筝,增强其实用性、美观性,以期实现市场应用。颠覆传统乐器概念- THE END -
“星标” 音乐周报 微信公众号
不错过 每条推送
Q:想订阅《音乐周报》?
A:发这里 yyzb1979@163.com
A:请点击下拉菜单“广告合作”。
相关问答
用c语言在 单片机 AT89C51编写音乐程序,求程序,求求你们了-ZOL问答把程序写到单片机内,需要写片器,也叫编程器,仿真机也可以(⊙o⊙)哇,学到了...虽然不是真正的MIDI编程,但能让你快速理解基本原理,并且对后续深入学习打下基础...