以定时器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,呼吸灯效果相关推荐

  1. stm32定时器输出pwmIO口模拟pwm——呼吸灯

    文章目录 前言 一.pwm(脉冲宽度调制) 1.基本原理 2.PWM的优点 3.PWM波的控制方法 二.定时器的相关介绍 1.stm32定时器 2.通用定时器计数模式 3.定时器的基本工作原理 三.定 ...

  2. 软件模拟PWM——呼吸灯小程序的理解

    呼吸灯就是类似人的呼吸一样,一呼一吸,灯的变化是从亮到灭再到亮的过程,是一个循序渐进的过程,而不是一个跳变. 通过软件模拟PWM,可以达到呼吸灯的效果. PWM即脉冲宽度调制,简单地说,就是一段时间为 ...

  3. STM32 CubeMx(二)定时器中断和PWM呼吸灯

    STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...

  4. STM32 定时器2 CH1 CH2 PWM输出 产生呼吸灯效果

    PWM一般用来驱动电机(控制速度),控制LED亮度,驱动开关电源电路等等,本实例通过改变PWM占空比的方式来驱动LED灯,形成呼吸灯的效果.用这种方式来学习STM32 TIM2输出PWM的配置. 以S ...

  5. FPGA项目三:PWM呼吸灯

    文章目录 第一节 项目背景 第二节 设计目标 第三节 设计实现 3.1顶层设计 3.2 信号设计 3.3 信号定义 第四节 综合和上板 4.1 新建工程 4.2 综合 4.3 配置管脚 4.4 再次综 ...

  6. STM32CubeMX学习教程之五:PWM实现呼吸灯效果

    完整源码下载: https://github.com/simonliu009/STM32CubeMX-PWM-Output 软件: STM32CubeMX V4.25.0 System Workben ...

  7. Arduino ESP32利用PWM实现板载LED呼吸灯效果

    Arduino ESP32利用PWM实现板载LED呼吸灯效果 LEDC简介 LED控制(LEDC)外围设备主要用于控制LED的强度,尽管它也可以用于生成PWM信号用于其他目的.它具有16个通道,可以生 ...

  8. LabVIEW控制Arduino实现PWM呼吸灯(基础篇—5)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的模拟I/O函数库,通过LabVIEW和Arduino Uno控制板实现LED灯亮度的调节,产生灯会呼吸的效果 ...

  9. STM32F030C8T6单片机PWM呼吸灯寄存器配置

    STM32F030C8T6单片机PWM呼吸灯寄存器配置: TIM3_CR1:控制寄存器 BIT8~BIT9:CKD 与外部输入时钟有关,不使用外部时钟输入,所以不操作BIT8~BIT9,设置为00 B ...

最新文章

  1. linux grep 快速,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  2. 爱创课堂每日一题第四十天- 说说你对语义化的理解?
  3. 修改 Powerpoint 的 Master slide
  4. 根据端口查找是那个程序正在占用
  5. r语言ggplot2一夜多图_ggplot2绘图:多张图合并为一张
  6. zookeeper分布式锁原理及实现
  7. 大整数相乘 + 分治法(JS)
  8. 在pytorch中使用tensorboard
  9. 如何区分同一Class的不同实例对象
  10. reflections歌词翻译_Reflections中文歌词
  11. 第一次制作中秋博饼小游戏的心得与吐槽(软件工程)
  12. 计算机上数字代表那个音符,音乐简谱中数字上的点表示什么,别说你不知道哦 ^-^...
  13. 【Romance of the Three Kingdoms】
  14. 前端开发:Vue报错Avoid mutating a prop directly since the value will be…的解决方法
  15. SQL Server 数据库之常量
  16. java thrift异步调用_thrift异步调用 - thrift-cob_style-tnonblockingserver - ItBoth
  17. libGDX学习记录(一)
  18. 什么是函数指针?(理解及使用)
  19. 计算机移动互联网是学什么,学移动互联网开发需要学些什么课程?
  20. 时事评论---宣誓不欠薪,好一场秀

热门文章

  1. 牛客网wannafly挑战赛13-E(线段树)
  2. Re5ilio 5ync:资源神器
  3. 关于java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY异常处理
  4. 计算机在一个指令中的过程中,为从内存读取指令操作码,首先要将()的内容送到地址总线上
  5. 知乎里怎么看个人简介_如何做一份优秀的简历?
  6. 退烧方法及退烧药的选择
  7. 暴笑笑话集(全是最新经典!)
  8. 【SEMrush教程】SEO关键词魔法工具使用技巧
  9. 您有一篇Maven 常用命令的文章,请注意查收!
  10. 始祖双碳新闻 | 2022年8月12日碳中和行业早知道