一个定时器实现IO模拟pwm,呼吸灯效果
以定时器1为例
uchar time1_10ms = 0;
uchar time1_100ms = 0;
bit IS_10ms = 0;
bit IS_100ms = 0;
uchar PWM_time = 0;//亮度级数
uchar pwm_time_flag = 0;//计时1s标志位
uchar duty_cycle = 0;//可调占空比
定时器中断函数
//-----------------------------------------------------------------//
//函数名称: void Timer1_ISR() interrupt 3
//函数功能: 定时器1中断子函数
//-----------------------------------------------------------------//
void Timer1_ISR() interrupt 3 / /100us进入一次中断
{
T1_INT_FLAG_CLR;//清除Timer1中断标志
TH1 = TH1_Reload;
TL1 = TL1_Reload;
//增计数到1s后,减;
//初值的定义,1s增,1s减,此为呼吸灯效果
time1_10ms++;
if(time1_10ms >= 100) //计数至10ms
{
time1_10ms= 0;
IS_10ms = 1;
time1_100ms++;
if(time1_100ms == 10) //计数至100ms
{
time1_100ms = 0;
IS_100ms = 1;
if(led_data && power_flag)
{
LED_Scan();
}
}
if(pwm_LED && power_flag)//如果接收到某个呼吸灯使能指令
{
switch(pwm_time_flag)
{
case 0:
PWM_time++;
if(PWM_time >= 100)//1s计数时间到
{
pwm_time_flag = 1;
}
break;
case 1:
PWM_time--;
if(PWM_time < 1)//1s计数时间到
{
pwm_time_flag = 0;
}
break;
}
}
}
//100us判断一次占空比
if(pwm_LED && power_flag)
{
duty_cycle++;
if(duty_cycle >= 100)
{
duty_cycle = 0;
}
if(PWM_time == 0)
{
if((pwm_LED & 0x01) && (!(led_data & 0x01)))
LED_POWER_GREEN_OFF;
if((pwm_LED & 0x02) && (!(led_data & 0x02)))
LED_POWER_RED_OFF;
if((pwm_LED & 0x04) && (!(led_data & 0x04)))
LED_PHONE_OFF;
if((pwm_LED & 0x08) && (!(led_data & 0x08)))
LED_MODE_WHITE_OFF;
if((pwm_LED & 0x10) && (!(led_data & 0x10)))
LED_MODE_BLUE_OFF;
if((pwm_LED & 0x20) && (!(led_data & 0x20)))
LED_MUTE_OFF;
if((pwm_LED & 0x40) && (!(led_data & 0x40)))
LED_RECORD_OFF;
}
else
{
if(duty_cycle < PWM_time)
{
if((pwm_LED & 0x01) && (!(led_data & 0x01)))
LED_POWER_GREEN_ON;
if((pwm_LED & 0x02) && (!(led_data & 0x02)))
LED_POWER_RED_ON;
if((pwm_LED & 0x04) && (!(led_data & 0x04)))
LED_PHONE_ON;
if((pwm_LED & 0x08) && (!(led_data & 0x08)))
LED_MODE_WHITE_ON;
if((pwm_LED & 0x10) && (!(led_data & 0x10)))
LED_MODE_BLUE_ON;
if((pwm_LED & 0x20) && (!(led_data & 0x20)))
LED_MUTE_ON;
if((pwm_LED & 0x40) && (!(led_data & 0x40)))
LED_RECORD_ON;
}
else
{
if((pwm_LED & 0x01) && (!(led_data & 0x01)))
LED_POWER_GREEN_OFF;
if((pwm_LED & 0x02) && (!(led_data & 0x02)))
LED_POWER_RED_OFF;
if((pwm_LED & 0x04) && (!(led_data & 0x04)))
LED_PHONE_OFF;
if((pwm_LED & 0x08) && (!(led_data & 0x08)))
LED_MODE_WHITE_OFF;
if((pwm_LED & 0x10) && (!(led_data & 0x10)))
LED_MODE_BLUE_OFF;
if((pwm_LED & 0x20) && (!(led_data & 0x20)))
LED_MUTE_OFF;
if((pwm_LED & 0x40) && (!(led_data & 0x40)))
LED_RECORD_OFF;
}
}
}
}
一个定时器实现IO模拟pwm,呼吸灯效果相关推荐
- stm32定时器输出pwmIO口模拟pwm——呼吸灯
文章目录 前言 一.pwm(脉冲宽度调制) 1.基本原理 2.PWM的优点 3.PWM波的控制方法 二.定时器的相关介绍 1.stm32定时器 2.通用定时器计数模式 3.定时器的基本工作原理 三.定 ...
- 软件模拟PWM——呼吸灯小程序的理解
呼吸灯就是类似人的呼吸一样,一呼一吸,灯的变化是从亮到灭再到亮的过程,是一个循序渐进的过程,而不是一个跳变. 通过软件模拟PWM,可以达到呼吸灯的效果. PWM即脉冲宽度调制,简单地说,就是一段时间为 ...
- STM32 CubeMx(二)定时器中断和PWM呼吸灯
STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...
- STM32 定时器2 CH1 CH2 PWM输出 产生呼吸灯效果
PWM一般用来驱动电机(控制速度),控制LED亮度,驱动开关电源电路等等,本实例通过改变PWM占空比的方式来驱动LED灯,形成呼吸灯的效果.用这种方式来学习STM32 TIM2输出PWM的配置. 以S ...
- FPGA项目三:PWM呼吸灯
文章目录 第一节 项目背景 第二节 设计目标 第三节 设计实现 3.1顶层设计 3.2 信号设计 3.3 信号定义 第四节 综合和上板 4.1 新建工程 4.2 综合 4.3 配置管脚 4.4 再次综 ...
- STM32CubeMX学习教程之五:PWM实现呼吸灯效果
完整源码下载: https://github.com/simonliu009/STM32CubeMX-PWM-Output 软件: STM32CubeMX V4.25.0 System Workben ...
- Arduino ESP32利用PWM实现板载LED呼吸灯效果
Arduino ESP32利用PWM实现板载LED呼吸灯效果 LEDC简介 LED控制(LEDC)外围设备主要用于控制LED的强度,尽管它也可以用于生成PWM信号用于其他目的.它具有16个通道,可以生 ...
- LabVIEW控制Arduino实现PWM呼吸灯(基础篇—5)
目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的模拟I/O函数库,通过LabVIEW和Arduino Uno控制板实现LED灯亮度的调节,产生灯会呼吸的效果 ...
- STM32F030C8T6单片机PWM呼吸灯寄存器配置
STM32F030C8T6单片机PWM呼吸灯寄存器配置: TIM3_CR1:控制寄存器 BIT8~BIT9:CKD 与外部输入时钟有关,不使用外部时钟输入,所以不操作BIT8~BIT9,设置为00 B ...
最新文章
- linux grep 快速,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- 爱创课堂每日一题第四十天- 说说你对语义化的理解?
- 修改 Powerpoint 的 Master slide
- 根据端口查找是那个程序正在占用
- r语言ggplot2一夜多图_ggplot2绘图:多张图合并为一张
- zookeeper分布式锁原理及实现
- 大整数相乘 + 分治法(JS)
- 在pytorch中使用tensorboard
- 如何区分同一Class的不同实例对象
- reflections歌词翻译_Reflections中文歌词
- 第一次制作中秋博饼小游戏的心得与吐槽(软件工程)
- 计算机上数字代表那个音符,音乐简谱中数字上的点表示什么,别说你不知道哦 ^-^...
- 【Romance of the Three Kingdoms】
- 前端开发:Vue报错Avoid mutating a prop directly since the value will be…的解决方法
- SQL Server 数据库之常量
- java thrift异步调用_thrift异步调用 - thrift-cob_style-tnonblockingserver - ItBoth
- libGDX学习记录(一)
- 什么是函数指针?(理解及使用)
- 计算机移动互联网是学什么,学移动互联网开发需要学些什么课程?
- 时事评论---宣誓不欠薪,好一场秀
热门文章
- 牛客网wannafly挑战赛13-E(线段树)
- Re5ilio 5ync:资源神器
- 关于java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY异常处理
- 计算机在一个指令中的过程中,为从内存读取指令操作码,首先要将()的内容送到地址总线上
- 知乎里怎么看个人简介_如何做一份优秀的简历?
- 退烧方法及退烧药的选择
- 暴笑笑话集(全是最新经典!)
- 【SEMrush教程】SEO关键词魔法工具使用技巧
- 您有一篇Maven 常用命令的文章,请注意查收!
- 始祖双碳新闻 | 2022年8月12日碳中和行业早知道