基于PWM的呼吸灯设计(Verilog版)

module Breath_Led(clk,rst,led);
input clk,rst;
output reg led;
reg[19:0] count;
reg[19:0] duty_cycle;
always @(posedge clk)
begin
    if(!rst)
    begin
        led<=1‘b0;
        count<=1‘b0;
    end
    else
    begin
        if(count<20‘d999_999)
        begin
            count<=count+1‘b1;
            if(count<duty_cycle)
                led<=1‘b1;
            else
                led<=1‘b0;
        end
        else
            count<=1‘b0;
    end
end
reg flag;
always @(posedge led)
begin
    if(!rst)
    begin
        duty_cycle<=1‘b1;
        flag<=1‘b0;
    end
    else
    begin
        if(flag==1‘b0)
        begin
            if(duty_cycle<20‘d979_511)
            begin
                duty_cycle<=duty_cycle+15‘d9990;
                flag<=1‘b0;
            end
            else
            begin
                duty_cycle<=duty_cycle-15‘d9990;
                flag<=1‘b1;
            end
        end
        else
        begin
            if(duty_cycle>1‘b1)
            begin
                duty_cycle<=duty_cycle-15‘d9990;
                flag<=1‘b1;
            end
            else
            begin
                duty_cycle<=duty_cycle+15‘d9990;
                flag<=1‘b0;
            end
        end
    end
end
endmodule

记录自己写的呼吸灯小程序,程序未经重构,总体较粗糙,望看官见谅。

主体思想是基于PWM脉冲宽度调制来控制LED呈现出一种由暗到亮-由亮到暗的渐变效果;

由于程序比较简单,故程序中没有给出详细注释,在这里大概说一下其两个always块的作用,

第一个always块下面主要是实现一个闪烁频率为50Hz的LED功能,但每个闪烁周期的亮与灭的占空比由下面的always块控制。

第二个always块通过对占空比变量赋初值1的方式开始递增,当达到接近闪烁周期时(此程序中不要超过闪烁周期,否则会出问题,可以修改触发沿或其他方式控制,这里不做讨论)做递减操作。

通过这种简单的控制每个周期的高电平占空比便可以控制LED实现呼吸灯的效果。

以上,欢迎各位看客共同讨论,共同进步!!!

原文地址:https://www.cnblogs.com/lightmonster/p/10126745.html

时间: 2024-07-28 23:43:48

基于PWM的呼吸灯设计(Verilog版)的相关文章

STM8S PWM 应用 呼吸灯

//主功能接受:使用MCU STM8S105C6 的PWM通道2 PC2 来做呼吸灯 已经验证OK,呵 //呵,这个PWM设置刚开始用还是有点麻烦,因为是自己摸索,花点时间,还是攻克了 . //所用子函数都是调用STM8S的库函数stm8s_tim.c 中的. 宏定义: //分频宏 //计数器的时钟频率(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1). #define TIM1_PRESCALER_1 ((u16)0x00) #define TIM1_PRESCALER_2

PWM(脉宽调制)——LED特效呼吸灯设计

简述PWM PWM--脉宽调制信号(Pulse Width Modulation),它利用微处理器的数字输出来实现,是对模拟电路控制的一种非常有效的技术,广泛应用于测量.通信.功率控制与变化等许多领域. LED特效呼吸灯原理 采用pwm的方式,在固定的频率下,采用占空比的方式来实现LED亮度的变化.占空比为0,LED灯不亮,占空比为100%,则LED灯最亮.所以将占空比从0到100%,再从100%到0不断变化,就可以实现LED灯实现特效呼吸. 设计思路.框图 变亮:当cnt2 < cnt3时为高

【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯

实验指导书及代码包下载: http://pan.baidu.com/s/1dEnH5dB iCore3 购买链接: https://item.taobao.com/item.htm?id=524229438677

(原创)用Verilog实现一个参数化的呼吸灯(Verilog,CPLD/FPGA)

1.Abstract     观察到一个有趣的现象,每当把Apple笔记本合上的时候,那个白色的呼吸灯就会反复地由暗渐明,然后又由明渐暗,乍一看就像Apple笔记本在打盹休息一样,十分可爱!于是突发奇想,要不用Verilog也写一个吧,资源也不需要太多,一个LED灯就可以了.为了使用方便,可以把它做成参数化的,可以根据时常进行参数调节:深睡.浅睡跟清醒的时候呼吸频率似乎是不一样的-     下面就来分析和实践一下. 2.Content   2.1 理论分析     根据上述描述的现象,仔细分析一

nrf51822之PWM呼吸灯程序

额外链接: 1.JLink-SWD烧写之引脚定义:http://www.openedv.com/posts/list/1747.htm 2.百度文库c语言之PWMhttp://wenku.baidu.com/link?url=2QeCZppvhH81D4OYAyi9eEDP8Sk0p0OQhPKPfo0OXWiWZ5PxBvSMXtP8ejxZw-sxrSOGwrFj3K3q2ewwkM_vAQlk-QMyWnD1eVuLNaANxZm 3.菜农M0助学板PWM呼吸灯小练(寄存器操作方式):ht

C语言基于NIOSII的软件开发及流水灯设计

一.Quartus II 12.1 (32-Bit)进行硬件设计 1.所需要的系统元器件组成 2.系统电路图 二.Nios II 12.1 Software Build Tools for Eclipse进行软件学号及流水灯设计 1.程序代码 /* * "Hello World" example. * * This example prints 'Hello from Nios II' to the STDOUT stream. It runs on * the Nios II 'st

NE555-DIY呼吸灯的电路图

NE555设计的呼吸灯电路图 再提供一个LM358设计的呼吸灯电路图.

基于FPGA的数字频率计(设计全过程)

小序: 前几天看全国大学生电子设计竞赛历年试题,无意间发现了一道题目<简易数字频率计>,跟之前我用verilog写的一个频率计差不多,于是想尝试做一下,题目具体要求如下图中所示,我所用的开发板为 xilinx spartan 3ES, 最后结果还算理想,在要求的范围内的频率测量精度比较高,但是由于板子的限制没能实现脉冲宽度测量等功能,但是其原理比较简单,下文中将会给出设计过程,结果展示图片以及整个工程代码的下载链接. 数字频率计总体设计采用分块的思想,自底向上设计方向,三个子模块包括频率测量模

STM32呼吸灯

使用STM32开发板和mbed平台实现的一个呼吸灯.材料,LED灯,电阻,STM32开发板. 先上一张效果图. 背景: 我们之前设置GPIO口使用了DigitalOut,数字信号输出.只能是GPIO口为0或1两个值.在LED上体现的即是灭和亮.然而现实世界大量的信号都是模拟信号,如温度.声音.加速度等.百度上:“模拟信号是指信息参数在给定范围内表现为连续的信号. 或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号.” 理论知识(可以跳过): 模拟信号即可以简单理解为,