精华内容
下载资源
问答
  • 模拟呼吸灯设计.zip

    2021-01-02 02:14:19
    通信工程,信息工程等相关专业;大二上模拟电子技术实习——模拟呼吸灯设计.
  • 呼吸灯设计,里面包含keil源码和proteus工程文件,已成功测试,下载直接可用,里面还附有一些有关呼吸灯知识介绍的文章网址可供学习!
  • verillog呼吸灯设计

    2020-07-26 11:29:19
    呼吸灯,Verilog语言,自己写的,可以直接调用到自己模块里面,和还有有一些其他基础模块以后上传。
  • STM32之呼吸灯设计

    2020-08-12 03:27:15
    听说呼吸灯是很久以前的事情了,那时候刚刚学习51单片机,没有单片机的基础。后来在网上看到了一个呼吸灯的电路图,甚是复杂,根本看不懂,无奈之下放弃了呼吸灯的制作。在接触了STM32后,发现呼吸灯还是比较容易...
  • 51单片机的矩阵键盘、跑马灯和呼吸灯设计 目录51单片机的矩阵键盘、跑马灯和呼吸灯设计一、功能要求二、设计思路三、仿真图四、结语 一、功能要求 使用8086,要求系统电路含有16个LED灯和按键,按键控制灯的不同闪烁...

    51单片机的矩阵键盘、跑马灯和呼吸灯设计

    一、功能要求

    使用8086,要求系统电路含有16个LED灯和按键,按键控制灯的不同闪烁方式(跑马灯),按键使用中断方式。使用定时器T1方式1实现1个心跳灯,中断方式。在PROTEUS上仿真实现,系统功能自定义。

    二、设计思路

    16个LED灯共阳极由P0口和P2口提供低电平信号,按键的信号由P1口采集,按键使用中断方式控制灯的不同闪烁方式。我们组采用的是先读取按键的键值,然后进入中断,运用外部中断0(中断号为0,P3.2引脚低电平或下降沿信号触发中断,ITO=0时为下降沿触发)在中断函数中根据不同的键值,执行不同的跑马灯函数。
    2.使用定时器T1方式1(TMOD=0X10)实现1个心跳灯,采用定时器1中断(中断号为3,计数回0溢出中断)。
    3.心跳灯每过一秒进行一次状态翻转。系统为12MHZ晶振,分频系数为12,则定时脉冲周期为1us。50ms=50000*1us。若给定时器赋初值65535-1000+1=15536=3CB0H,则定时器1定时50ms后触发中断。运用循环数j,定时器每触发一次中断j++,当j=20时,心跳灯状态翻转一次。
    4.外部中断0的中断优先级比定时器1中断的中断优先级要高,因此在跑马灯时心跳灯的状态不会翻转。
    在这里插入图片描述

    三、仿真图

    在这里插入图片描述
    主要结构是AT89C51单片机,上拉电阻,复位控制电路,按键以及LED灯构成。
    采用十六个LED灯和16个按键组成,每个按键都有不同的功能,按键不放,跑马灯会按照既定规则不间断的跑,但按键马上放开跑马灯只会跑一次

    四、结语

    总体上完成了功能,但是有一个缺点:在实现跑马灯时,呼吸灯会停止工作。
    附:51单片机的矩阵键盘、跑马灯和呼吸灯设计Proteus仿真、KEIL代码、PPT
    https://download.csdn.net/download/alongiii/14935409

    展开全文
  • 基于STM32F103 PWM呼吸灯设计 1、线性呼吸灯 bsp.c #include<includes.h> void RCC_Configuration(void); /* 初始化系统时钟 */ void TIM3_Configuration(void); /* PWM配置 */ void BSP_Init (void) { RCC...

    基于STM32F103 PWM呼吸灯设计

    1、线性呼吸灯

    bsp.c

    #include<includes.h>
    
    void RCC_Configuration(void);	/* 初始化系统时钟 */
    void TIM3_Configuration(void);	/* PWM配置 */
    
    void  BSP_Init (void)
    {
    	RCC_Configuration();	/* 初始化系统时钟 */
    	TIM3_Configuration();	/* PWM配置 */
    }
    /*********************************************************************************************************
    * 名    称 :RCC_Configuration
    * 功能描述 : 初始化系统时钟
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void RCC_Configuration(void)
    {
    	SystemInit(); 
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
    }
    
    /*********************************************************************************************************
    * 名    称 :TIM3_Configuration
    * 功能描述 : 初始化定时器  PWM
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void TIM3_Configuration(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	TIM_OCInitTypeDef TIM_OCInitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	
    	//通道1 PA7
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	
    	//通道2 PA6
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	//通道3 PB0  
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	
    		
    	//通道4 PB1
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	        	
    	/* Time base configuration */
    	TIM_TimeBaseStructure.TIM_Period = (100- 1);					//arr  设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    	TIM_TimeBaseStructure.TIM_Prescaler = (40-1);	 			 	//分频	psc  影响周期
    	TIM_TimeBaseStructure.TIM_ClockDivision = 0;				 	//时钟分割,一般写0
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	 	//设置为向上计数模式
    	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    
    	/* PWM1 Mode configuration: Channel1*/
    	TIM_OCInitStructure.TIM_Pulse =0;						// 初始值
    	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;			   //pwm模式1
    	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//使能通道
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;	//高电平
    	
    	
    	//通道1
    	TIM_OC1Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
      //通道2 
    	TIM_OC2Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道3 
    	TIM_OC3Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道4
    	TIM_OC4Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
    	TIM_Cmd(TIM3, ENABLE);	/* 使能 */
    }
    
    
    

    main.c

    
    #include <includes.h>
    #include <stdlib.h> 
    
    extern void  BSP_Init (void);
    
    /*********************************************************************************************************
    * 名    称 :main
    * 功能描述 : 初始化STM32
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/ 
    int main(void)
    {
    	int  n1,n2,n3,n4;
    	int i;
    	n1=100;
    	n2=100;
    	n3=100;
    	n4=100;
    	BSP_Init();
    	while(1)
    	{     
    		for(i=0;i<100;i++)
    		{
    		  TIM_SetCompare1(TIM3,i);
    		  TIM_SetCompare2(TIM3,i);
    		  TIM_SetCompare3(TIM3,i);
    		  TIM_SetCompare4(TIM3,i);
    			delay_ms(19);
    		}
    		for(i=100;i>=0;i--)
    		{
    		  TIM_SetCompare1(TIM3,i);
    		  TIM_SetCompare2(TIM3,i);
    		  TIM_SetCompare3(TIM3,i);
    		  TIM_SetCompare4(TIM3,i);
    			delay_ms(19);
    		}
    		delay_ms(300);
    	}
    }
    
    2、正弦函数呼吸灯

    bsp.c

    #include<includes.h>
    
    void RCC_Configuration(void);	/* 初始化系统时钟 */
    void TIM3_Configuration(void);	/* PWM配置 */
    
    void  BSP_Init (void)
    {
    	RCC_Configuration();	/* 初始化系统时钟 */
    	TIM3_Configuration();	/* PWM配置 */
    }
    /*********************************************************************************************************
    * 名    称 :RCC_Configuration
    * 功能描述 : 初始化系统时钟
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void RCC_Configuration(void)
    {
    	SystemInit(); 
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
    }
    
    /*********************************************************************************************************
    * 名    称 :TIM3_Configuration
    * 功能描述 : 初始化定时器  PWM
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/
    void TIM3_Configuration(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	TIM_OCInitTypeDef TIM_OCInitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	
    	//通道1 PA7
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	
    	//通道2 PA6
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    	
    	//通道3 PB0  
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	
    		
    	//通道4 PB1
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;	                   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;		 //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    	        	
    	/* Time base configuration */
    	TIM_TimeBaseStructure.TIM_Period = (100- 1);					//arr  设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    	TIM_TimeBaseStructure.TIM_Prescaler = (40-1);	 			 	//分频	psc  影响周期
    	TIM_TimeBaseStructure.TIM_ClockDivision = 0;				 	//时钟分割,一般写0
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	 	//设置为向上计数模式
    	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    
    	/* PWM1 Mode configuration: Channel1*/
    	TIM_OCInitStructure.TIM_Pulse =0;						// 初始值
    	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;			   //pwm模式1
    	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//使能通道
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;	//高电平
    	
    	
    	//通道1
    	TIM_OC1Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
      //通道2 
    	TIM_OC2Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道3 
    	TIM_OC3Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    		
    	//通道4
    	TIM_OC4Init(TIM3, &TIM_OCInitStructure);	                  
    	TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);			//使能或者失能TIMx在CCR3上的预装载寄存器
    	
    	TIM_Cmd(TIM3, ENABLE);	/* 使能 */
    }
    
    
    

    main.c

    
    #include <includes.h>
    #include <stdlib.h> 
    #include <math.h>
    extern void  BSP_Init (void);
    
    /*********************************************************************************************************
    * 名    称 :main
    * 功能描述 : 初始化STM32
    * 输入参数 : none
    * 返回参数 : none.
    * 作    者 : 
    * 修    改 :(日期、修改人名、修改原因)
    * 特殊说明 : (特殊功能说明,例如:有参数检查等)
    *********************************************************************************************************/ 
    int main(void)
    {
    	int  n1,n2,n3,n4;
    	int i;
    	n1=100;
    	n2=100;
    	n3=100;
    	n4=100;
    	BSP_Init();
    	while(1)
    	{     
    		for(i=0;i<314;i++)
    		{
    		  TIM_SetCompare1(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare2(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare3(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare4(TIM3,100*sin(i/100.0));
    			delay_ms(10);
    		}
    		for(i=314;i>=0;i--)
    		{
    		  TIM_SetCompare1(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare2(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare3(TIM3,100*sin(i/100.0));
    		  TIM_SetCompare4(TIM3,100*sin(i/100.0));
    			delay_ms(10);
    		}
    		delay_ms(300);
    	}
    }
    
    展开全文
  • C8051F410模拟PWM完成呼吸灯设计,简单易懂,可以移植成为控制舵机、步进电机等等功能。算法独特。
  • 运用至简设计法进行呼吸灯设计 本文为明德扬原创文章,转载请注明出处!   呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机、电脑等电子产品之上,并成为各大...

    【教程】看完就懂!运用至简设计法进行呼吸灯设计

    本文为明德扬原创文章,转载请注明出处!

      呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机、电脑等电子产品之上,并成为各大品牌新款手机的卖点之一,起到一个通知提醒的作用。每个人都应该使用过带有呼吸灯的手机,看着灯光由暗淡逐渐一点点变亮,继而在最亮的时刻开始逐渐变暗、熄灭最后归于虚无,就像酣睡中随着人的呼吸而起伏的胸膛。在这里插入图片描述
      每当看到手机屏幕上的呼吸灯闪烁时,你是否想过,如何自己设计一个呼吸灯,让它伴随着你的呼吸变亮变暗。没有做过呼吸灯的同学不要紧,我将会为大家展示一个使用清晰整洁的代码设计出来的呼吸灯。

      认真看完这篇文章,我可以保证你能够真正了解呼吸灯是使用怎样的原理设计的,并且可以自己独立设计出自己的呼吸灯。

      快去点亮它吧!
    在这里插入图片描述
      首先介绍一下呼吸灯设计的基本原理:

      呼吸灯是通过控制led灯闪烁的频率来控制其亮度的。

      Q1:什么是闪烁的频率?

      比如我们让led灯在1s内持续为亮,那么这个led灯将会一直以最大的亮度闪亮,亮的频率就是1;当我们让led灯在1s内持续为暗,那么led灯将会一直熄灭,亮的频率就是0;若是我们让led灯在1s中前0.5s内为亮、后0.5s内为灭,那么led灯将会一直一闪一灭,持续下去…我们可以大胆的想象一下,如果我们能够控制led灯在1s内一开始亮的频率为0,然后一点一点的增大亮的频率直至为1,那么led灯是否就可以由暗慢慢变到最亮。

      道理已经明白了?
    在这里插入图片描述
    Q2:那么我们要怎样控制led灯亮的频率呢?

      通过控制led灯亮的时间长度。

    Q3:怎样控制灯亮的时间?

      通过计数FPGA的时钟个数。

    Q4:该怎样计数FPGA的时钟个数?

      本设计的基本思想:

      我们让led灯在1s内由暗慢慢点亮,那么我们不妨将1s先分成1000等份,每一等份就是1ms,用一个计数ms个数的计数器cnt_ms来计数。1ms分成1000等份,每一等份就是1us,用计数器cnt_us来标示。由于MP801开发板的FPGA时钟频率是20ns,那么我们就将1us分成50份,每一份就是20ns,即一个时钟周期。通过计数时钟周期的个数,计数到第50个时,就到达了1us,计数器cnt_us就开始加1;cnt_us计数到1000个时,就到达了1ms,接着计数到1s…

    Q5:时间已经划分好了,那么我们该怎么控制led灯亮的时间?

      通过PWM原理来控制led亮灭。

      不了解PWM原理不重要,只要能读懂下面一句话即可:

      在0-1S内:让led灯在第0-1ms之间亮的时间为0us;在第1-2ms内亮1us,在第2-3ms内亮2us…在第999-1000Ms内亮999us。

      思路已经很清晰了,接下来我们就可以进行电路设计。

      信号列表:
    在这里插入图片描述
    计数us信号:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
       OK,将工程综合编译,分配好管脚,烧录到MP801开发板中,即可观察到属于你自己的呼吸灯。
    在这里插入图片描述
      可以看出,使用至简设计法设计出的代码,思路清晰,代码简洁干净、有迹可循,只要设计的思路清晰,设计出的代码也同样是易读易懂,每个信号都有其特定的功能。

      因此FPGA设计的核心是设计思路,而不是设计代码,代码只是用来告诉编译器我们的设计思路,再由编译器综合成硬件电路。使用一种规范简洁的代码设计方法可以帮助我们更好的表现出我们的设计思路,这在我们进行FPGA设计过程中可以极大提高我们的设计效率。

    展开全文
  • 呼吸灯设计与实现

    2020-01-22 21:28:35
    设计一个周期为4s的呼吸灯,实现LED灯慢慢变亮,然后变亮以后又慢慢变灭,从全暗到全亮需要2s,从全亮到全暗需要2s。 (二)源码展示 module led_breath( clk, rst_n, led ); input clk; //系统输入时钟,50...

    (一)需求分析:

                设计一个周期为4s的呼吸灯,实现LED灯慢慢变亮,然后变亮以后又慢慢变灭,从全暗到全亮需要2s,从全亮到全暗需要2s。

    (二)源码展示

    module led_breath(
        clk,
        rst_n,
        led
    );

        input clk;         //系统输入时钟,50MHz
        input rst_n;    //复位
        output reg led;//呼吸灯
        
        parameter CNT_2S_END = 10'd999;     //设置2s的计数值
        parameter CNT_2MS_END = 10'd999;     //设置2ms的计数值
        parameter CNT_2US_END = 7'd99;         //设置2us的计数值
        
        reg [9:0] cnt_2s;     //999转换为二进制11_1110_0111,共需要10位位宽,所示设置为[9:0]
        reg [9:0] cnt_2ms;    //999转换为二进制11_1110_0111,共需要10位位宽,所示设置为[9:0]
        reg [6:0] cnt_2us;    //99转换为二进制0110_0011,共需要7位位宽,所示设置为[6:0]
        reg flag;                //标志信号,0为由灭到亮的呼吸过程,1为由亮到灭的呼吸过程
        
        //cnt_2us
        always@(posedge clk or negedge rst_n)begin
            if(!rst_n)
                cnt_2us <= 7'd0;
            else if(cnt_2us == CNT_2US_END) /*系统输入时钟为50MHz,故每个时钟节拍为20ns,
                                                所以时钟上升沿采集100次为2us */
                cnt_2us <= 7'd0;
            else
                cnt_2us <= cnt_2us + 1'b1;
        end
        
        //cnt_2ms
        always@(posedge clk or negedge rst_n)begin
            if(!rst_n)
                cnt_2ms <= 10'd0;
            else if(cnt_2us == CNT_2US_END)begin
                if(cnt_2ms == CNT_2MS_END)
                    cnt_2ms <= 10'd0;
                else
                    cnt_2ms <= cnt_2ms + 1'b1;
            end
            else
                cnt_2ms <= cnt_2ms;
        end
        
        //cnt_2s
        always@(posedge clk or negedge rst_n)begin
            if(!rst_n)
                cnt_2s <= 10'd0;
            else if((cnt_2us == CNT_2US_END)&&(cnt_2ms == CNT_2MS_END))begin
                if(cnt_2s == CNT_2S_END)
                    cnt_2s <= 10'd0;
                else
                    cnt_2s <= cnt_2s + 1'b1;
            end
            else
                cnt_2s <= cnt_2s;
        end
        
        always@(posedge clk or negedge rst_n)begin
            if(!rst_n)
                flag <= 1'b0;
            else if((cnt_2us == CNT_2US_END)&&(cnt_2ms == CNT_2MS_END)&&(cnt_2s == CNT_2S_END))
                flag <= ~flag;
            else
                flag <= flag;
        end
        
        //led
        always@(posedge clk or negedge rst_n)begin
            if(!rst_n)
                led <= 0;
            else if(!flag)begin 
                if(cnt_2s > cnt_2ms)
                        led <= 1;
                else
                        led <= 0;
            end
            else begin
                if(cnt_2s > cnt_2ms)
                        led <= 0;
                else
                        led <= 1;
            end
        end
    endmodule

    //testbench

    `timescale 1ns/1ns
    `define CLK_PERIOD 20

    module led_breath_tb();
        
        reg clk;     
        reg rst_n;    
        wire led;

        led_breath led_breath0(
            .clk(clk),
            .rst_n(rst_n),
            .led(led)
        );
        
        defparam led_breath0.CNT_2S_END  = 9;
        defparam led_breath0.CNT_2MS_END = 9;
        defparam led_breath0.CNT_2US_END = 9;
        
        initial clk = 0;
        always #(`CLK_PERIOD/2) clk = ~clk;
        
        initial begin
            rst_n = 0;
            #(`CLK_PERIOD*5+1); rst_n = 1;
            #(`CLK_PERIOD*5000);$stop;
        end

    endmodule

    展开全文
  • 基于FPGA的呼吸灯设计

    万次阅读 2016-09-28 16:16:42
    网上类似的标题很多,有一些呼吸灯设计是基于单片机的,还有一部分设计是基于FPGA的,我也一时手痒,将这两天自己重新写的verilog描述语句晒出来,免得压箱底放久了,出现发霉点。 为什么说重新写的呢,之前有...
  • 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机、电脑等电子产品之上,并成为各大品牌新款手机的卖点之一,起到一个通知提醒的作用。每个人都应该使用过带有呼吸灯...
  • 使用8086,要求系统电路含有16个LED和按键,按键控制的不同闪烁方式(跑马),按键使用中断方式。使用定时器T1方式1实现1个心跳,中断方式。在PROTEUS上仿真实现,系统功能自定义。 资源包括proteus仿真文件...
  • 奋斗的小孩系列 FPGA学习altera系列: 第二十篇 呼吸灯设计 作者:奋斗的小孩 郝旭帅(转载请注明出处) 大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、...
  • 二、设计思路 16个LED共阳极由P0口和P2口提供低电平信号,按键的信号由P1口采集,按键使用中断方式控制的不同闪烁方式。我们组采用的是先读取按键的键值,然后进入中断,运用外部中断0(中断号为0,P3.2引脚...
  • 基于FPGA的VHDL语言呼吸灯设计

    千次阅读 2018-06-07 09:08:22
    1.系统概述 本设计在AlteraCyclone II EP2C35 FPGA平台上,利用锁相环、计数器等数字电路,产生占空比可随时间自动变化的PWM波形,从而控制LED的亮度变化,实现以2s为周期的LED呼吸显示效果。2.系统原理图 ...
  • 针对ETP-MB-1开发板,采用VHDL语言,设计合适的数字逻辑系统,实现4路LED灯控制,LED亮度从0~100%变化,各 LED灯组合产生呼吸灯效果,每位灯按照1s周期线性亮起,按照2s周期线性熄灭,4位灯之间相位相差90度。...
  • 定时器实现led呼吸灯 实验原理: 灯在高速闪烁时,光信号传入大 脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失。每次循环时,前半部分先让亮的时间逐渐增加,暗的时间逐渐减小;后半部分先让...
  • 此学习心得是本人之前所写,所用设计软件为Quartus II 13.1,现Quartus II 新版本已更新到19+,以下仅供初学者学习参考。后续会更新其他系列,敬请关注。话不多说,上货。 对于每一个的小实验,我们都可以把...
  • 简述PWM  PWM——脉宽调制信号(Pulse ... LED特效呼吸灯原理  采用pwm的方式,在固定的频率下,采用占空比的方式来实现LED亮度的变化。占空比为0,LED灯不亮,占空比为100%,则LED灯最亮。所以将占空比从0到...
  • ...通过这种简单的控制每个周期的高电平占空比便可以控制LED实现呼吸灯的效果。 以上,欢迎各位看客共同讨论,共同进步!!! 转载于:https://www.cnblogs.com/lightmonster/p/10126745.html
  • ZYNQ进阶之路2-PL端PWM输出呼吸灯设计

    千次阅读 2019-01-13 23:50:36
    在 ZYNQ进阶之路1 中我们讲解了PL端LED流水的工程的建立,编码,综合和下载!本节主题,PL端PWM输出设计,讲解怎么用ZYNQ PL端简单实现2通道PWM波输出,其中工程创建过程以及综合生成bit文件过程不再累述! 首先...
  • 本文主要讲了呼吸灯电路图设计原理,希望对你的学习有所帮助。
  • 有些手机的呼吸灯设计的还十分炫酷。比如小米2s,呼吸灯可以设置红、黄、蓝三种颜色,分别代表不同的通知美容。可惜,现在很多手机都将呼吸灯功能砍掉了。为什么现在的手机要取消呼吸灯?第一,设计需求。曾经的手机...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 185
精华内容 74
关键字:

呼吸灯设计