当前位置: 首页 > news >正文

GPIO+TIM(无PWM)实现呼吸灯功能

程序特点:

1、模块化,可快速移植,5分钟便可完成移植。

2、通过GPIO+普通定时器,实现呼吸灯功能。

3、PWM周期为5ms,占空比调节时间为20ms,占空比为100等份,即呼吸灯从暗到亮需要20ms*100=2s。

4、可以通过更改参数来更改占空比等份数和呼吸灯周期。

BreathLed.c

#include "Breathled.h"Breath_LED Breathled;void Breath_Led_Init()
{Breathled.EN=0;Breathled.DIR=1;Breathled.pwm_cnt=0;Breathled.stall=0;Breathled.pwm_period=100;Breathled.pwm_duty=0;Breathled.cnt=0;
}void Breath_Led_Driver()//放在50us中断
{if(!Breathled.EN)return;if(Breathled.pwm_cnt<Breathled.pwm_period)//50*100=5msBreathled.pwm_cnt++;else{Breathled.pwm_cnt=0;if(Breathled.stall<4)//5ms*4=20msBreathled.stall++;else{Breathled.stall=0;if(Breathled.DIR){if(Breathled.pwm_duty<Breathled.pwm_period)//20ms*100=2sBreathled.pwm_duty++;else{Breathled.EN=0;Breathled.DIR=0;}}else{if(Breathled.pwm_duty)Breathled.pwm_duty--;else{Breathled.EN=0;Breathled.DIR=1;}}}}		if(Breathled.pwm_cnt<Breathled.pwm_duty)Set_ALL_LED_ON();elseSet_ALL_LED_OFF();
}

BreathLed.h

#ifndef BREATHLED_H
#define BREATHLED_H
struct Breath_LED
{byte EN	:1;byte DIR:1;byte pwm_cnt;byte pwm_duty;byte pwm_period;byte stall;byte cnt;
};extern Breath_LED Breathled;#endif

tim.c

#include "tim.h"void TIM2_Init()
{tm2ct = 0;					tm2b = 200;				$ TM2C SYSCLK,Disable,Period;						$ TM2S 8BIT,/1,/1;INTEN.TM2 = 1;INTRQ.TM2 = 0;
}

main.c

#include "tim.h"
#include "Breathled.h"int main(void)
{TIM2_Init();Breath_Led_Init();Breathled.EN=1;//呼吸灯从暗到亮,然后全亮并停止呼吸。while(){}
}void Interrupt (void)
{pushaf;if(Intrq.TM2)//50us{Intrq.TM2=0;Breath_Led_Driver();	}popaf;
}

http://www.lryc.cn/news/510254.html

相关文章:

  • 贪心算法.
  • Linux系统和makefile详解
  • GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily
  • 【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用
  • PTA数据结构编程题7-1最大子列和问题
  • 深入浅出:AWT的基本组件及其应用
  • MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结
  • WebRTC服务质量(11)- Pacer机制(03) IntervalBudget
  • .NET常用的ORM框架及性能优劣分析总结
  • Ubuntu网络配置(桥接模式, nat模式, host主机模式)
  • 光通信复习
  • 数字化转型中的投资决策:IT平台投资与业务应用投资的思考
  • Linux快速入门-Linux的常用命令
  • 【ORB-SLAM3:相机针孔模型和相机K8模型】
  • Python函数(十二):函数的创建和调用、参数传递、返回值
  • 掌握Docker命令与Dockerfile实战技巧:快速构建高效容器化应用
  • Virtualbox硬盘扩容
  • 10G光纤反射内存卡
  • 信创数据防泄漏中信创沙箱是什么样的安全方案
  • 虚幻引擎结构之TArray
  • 【搭建一个网上商城系统】
  • 【gopher的java学习笔记】Spring Boot Starter初探
  • web服务器之云主机、物理机租用、服务器托管的区别
  • centos制作离线安装包
  • 论文解读——掌纹生成网络 RPG-Palm升级版PCE-Palm
  • Android修行手册 - 移动端几种常用动画方案对比
  • 16 循环语句——for循环
  • 代码随想录-笔记-其八
  • Effective C++ 条款 15:在资源管理类中提供对原始资源的访问
  • Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器/查找替换/分屏操作/vim的配置)