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

    2021-04-07 11:10:05
    呼吸灯设计 4秒1次循环,每2ms秒变化1次,(前2秒亮度增大,后2秒亮度减小)这里暂时不会实现 module breathing_led(clk,rst_n,led,cnt_2ms,cnt_2ms_num,cnt_2s,cnt_2s_num,flag_2ms,flag_2s); input clk,rst_n; ...

    呼吸灯设计

    4秒1次循环,每2ms秒变化1次,(前2秒亮度增大,后2秒亮度减小)这里暂时不会实现

      module breathing_led(clk,rst_n,led,cnt_2ms,cnt_2ms_num,cnt_2s,cnt_2s_num,flag_2ms,flag_2s);
    
        input clk,rst_n;
    	 output reg [19:0]cnt_2ms;     //2ms的计数位宽
    	 output reg [19:0]cnt_2s; 
    	 output reg  [1:0] cnt_2s_num;
    	 output reg  [11:0]cnt_2ms_num;  //计数多少个2ms的位宽
    	 output led;
    	 
    	 output reg flag_2ms;   //2ms中电平的高低
    	 output reg flag_2s;     //2s电平高低
    
    //实现2ms计数器	 
    always @(posedge clk or negedge rst_n)begin
       if(!rst_n)begin
    	  cnt_2ms <= 8'b0;
    	  flag_2ms <= 1'b0;
    	  end
    	else if (cnt_2ms == 99)begin
    	   cnt_2ms <= 8'b0;
    		flag_2ms <= 1'b0;
    		end
    	else begin
    		cnt_2ms<= 	cnt_2ms + 8'b1;
    		flag_2ms <= 1'b1;
       end   
    end
    		
    //实现需要计数多少个2ms
    always @(posedge clk or negedge rst_n)begin
       if(!rst_n)
    	   cnt_2ms_num <= 12'b0;
    	else if ( cnt_2ms_num == 999)
    	    cnt_2ms_num <= 12'b0;
    	else
           cnt_2ms_num <= cnt_2ms_num + 12'b1;
        
    end
    
    //实现2秒计数器
    
    always @(posedge clk or negedge rst_n)begin
       if(!rst_n)begin
    	   cnt_2s <= 20'b0;
    		flag_2s <= 0;
    		end
    	else if ( cnt_2s== 100000)begin
    	    cnt_2s <= 20'b0;
    		 flag_2s <= 0;
    		end 
    	else begin
           cnt_2s <= cnt_2s+ 20'b1;
    		 flag_2s <= 1;
        end
    end
    
    
    
    //实现每两秒计一次
    
    always @(posedge clk or negedge rst_n)begin
       if(!rst_n)
    	   cnt_2s_num <= 0;
    	else if ( cnt_2s_num == 2)
    	    cnt_2s_num <= 0;
    	else
           cnt_2s_num<= 1;
        
    end
    
    
    
    assign  led = 	 flag_2ms; 
    	 
    	 
    	 
    endmodule
    
    
    	
    	
    	
    	`timescale 1ns/1ps //时间精度
    	`define Clock 20 //时间周期
    	
    	module breathing_led_tb;
    	
    			reg  rst_n;
    			reg  clk;
    			wire led;
    			wire[11:0]cnt_2ms_num;
    		   wire [19:0]cnt_2s;
    			wire[1:0]cnt_2s_num;
    			wire[7:0] cnt_2ms;  
    			
    			wire flag_2s;
    			wire flag_2ms;
    		
    	breathing_led counter
    				(
    				  .clk(clk),
    				  .rst_n(rst_n),
    				  .led (led),
    				  .cnt_2s_num(cnt_2s_num),
    				  .cnt_2s(cnt_2s),
    				  .cnt_2ms_num(cnt_2ms_num),
    				  .flag_2s(flag_2s),
    				  .flag_2ms(flag_2ms),
    				  .cnt_2ms(cnt_2ms)
    	);
    	initial		
    	    clk = 0;
    	always #(`Clock/2) clk= ~clk;
    	
    	initial begin
    	   rst_n=0 ;#(`Clock*20+1);
    	   rst_n=1;
    	end	
    	
    	initial begin
    	    #(`Clock*1000000);
    	   $stop;
    	end
    	endmodule 
    

    在这里插入图片描述
    其中flag_2s,能看出每2s(2000000ns)计数一次,同时2s内还包含有2ms的计数变化。
    在这里插入图片描述
    flag_2ms的话是每2ms变化一次。

    展开全文
  • 基于51单片机的呼吸灯设计程序,通过PWM脉冲调制,实现呼吸灯的动态效果
  • 模拟呼吸灯设计.zip

    2021-01-02 02:14:19
    通信工程,信息工程等相关专业;大二上模拟电子技术实习——模拟呼吸灯设计.
  • 38-Vivado 呼吸灯设计.7z

    2021-03-16 23:49:17
    Vivado 呼吸灯设计,Vivado仿真工程
  • PWM呼吸灯设计

    2015-07-29 21:15:21
    STM32F103C8 芯片型号 PWM呼吸灯设计代码
  • 呼吸灯设计,里面包含keil源码和proteus工程文件,已成功测试,下载直接可用,里面还附有一些有关呼吸灯知识介绍的文章网址可供学习!
  • verillog呼吸灯设计

    2020-07-26 11:29:19
    呼吸灯,Verilog语言,自己写的,可以直接调用到自己模块里面,和还有有一些其他基础模块以后上传。
  • 基于51单片机呼吸灯设计(包含仿真和源程序)
  • STM32之呼吸灯设计

    2020-08-12 03:27:15
    听说呼吸灯是很久以前的事情了,那时候刚刚学习51单片机,没有单片机的基础。后来在网上看到了一个呼吸灯的电路图,甚是复杂,根本看不懂,无奈之下放弃了呼吸灯的制作。在接触了STM32后,发现呼吸灯还是比较容易...
  • 基于51单片机的呼吸灯设计C语言.doc
  • C8051F410模拟PWM完成呼吸灯设计,简单易懂,可以移植成为控制舵机、步进电机等等功能。算法独特。
  • 呼吸灯设计案例案例1:呼吸灯0案例2:呼吸灯1案例3:呼吸灯2 案例1:呼吸灯0 实现功能:4个LED同时改变,亮度由PWM信号控制。 实验现象: 4个LED,灭→亮,逐渐变亮,到达最亮后熄灭,再从灭→亮,重复进入下一次...

    案例1:呼吸灯0

    实现功能:4个LED同时改变,亮度由PWM信号控制。

    实验现象:

    4个LED,灭→亮,逐渐变亮,到达最亮后熄灭,再从灭→亮,重复进入下一次循环。

    代码实现:

    module pwm(
        input clk,
        input rst_n,
        
        output reg  [3:0] led
    );
    
    reg [15:0] pwm0,count;
    
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n)
            count <= 16'b0;
        else begin
            count <= count + 1'b1;
            if(count[15]==1)    //打到周期预设定的数值,就清零
               count <= 16'b0;
    
            if(count < pwm0)        //如果本周期中,周期小于PWM脉宽计数,那么LED就=1
                led <= 4'b1111;
            else 
                led <= 4'b0000;            //PWM的低脉冲时候,就为0
            end
     end
     
     
     always @(posedge count[14]) begin         //一个周期前面一点,产生PWM加/减 信号
     
       pwm0 <= pwm0 + 1'b1;                                //PWM 在一个周期完成之前加1,用于下一个周期的信号宽度
       if(pwm0[13]==1)                               //脉宽达到预设定的数值
        pwm0 <= 16'b0;
        
     end 
    
    endmodule
    

    案例2:呼吸灯1

    实现功能:4个LED同时改变,亮度由PWM信号控制。

    实验现象:

    第1秒:灭→亮,逐渐变亮,达到最亮,

    第2秒:亮→灭,逐渐变暗;

    ……

    2s一个周期,重复进入下一次循环。

    代码实现:

    module breath_led(
       input        clk,
       input        rst_n,
       output  reg [3:0] led
     );
     
     reg flag;
     
     // 计数器cnt_2us循环计数,计到99为2us 
     parameter cnt_2us_max = 7'd100 - 1'b1;
     reg [6:0] cnt_2us;
    
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
         cnt_2us <= 7'd0;
       else if(cnt_2us == cnt_2us_max)
         cnt_2us <= 7'd0;
       else
         cnt_2us <= cnt_2us + 1'b1;
     end
    
     // 计数器cnt_2ms循环计数,计到999为2ms 
     parameter cnt_2ms_max = 10'd1000 - 1'b1;
     reg [9:0] cnt_2ms;
    
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
          cnt_2ms <= 10'd0;
       else if(cnt_2us == cnt_2us_max && cnt_2ms == cnt_2ms_max)
          cnt_2ms <= 10'd0;
       else if(cnt_2us == cnt_2us_max)
          cnt_2ms <= cnt_2ms + 1'b1;
       else
          cnt_2ms <= cnt_2ms;
     end
    
     // 计数器cnt_2s循环计数,计到999为2s 
     parameter cnt_2s_max = 10'd1000 - 1'b1;
     reg [9:0] cnt_2s;
    
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
          cnt_2s <= 10'd0;
       else if(cnt_2us == cnt_2us_max && cnt_2ms == cnt_2ms_max && cnt_2s == cnt_2s_max)
          cnt_2s <= 10'd0;
       else if(cnt_2us == cnt_2us_max && cnt_2ms == cnt_2ms_max)
          cnt_2s <= cnt_2s + 1'b1;
       else
          cnt_2s <= cnt_2s;
     end
     
     //flag标志
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
          flag <= 1'd0;
       else if(cnt_2us == cnt_2us_max && cnt_2ms == cnt_2ms_max && cnt_2s == cnt_2s_max)
          flag <= ~flag;
       else 
          flag <= flag;
     end 
     
    
     //brearh_led控制
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
          led <= 4'b0000;
       else if(cnt_2s >= cnt_2ms && flag == 1'b0)
          led <= 4'b1111;
       else if(cnt_2s < cnt_2ms && flag == 1'b0)
          led <= 4'b0000; 
        else if(cnt_2s >= cnt_2ms && flag == 1'b1)
          led <= 4'b0000;  
       else if(cnt_2s < cnt_2ms && flag == 1'b1)
          led <= 4'b1111;      
       else 
          led <= 4'b0000;
     end
     
     endmodule
    

    案例3:呼吸灯2

    实现功能:4个LED同时改变,亮度由PWM信号控制。

    实验现象:

    占空比越大,LED灯越暗;
    占空比越小,LED灯越亮。

    第1个2秒: pwm_time <= 19’d450_000;//占空比90%

    第2个2秒: pwm_time <= 19’d350_000;//占空比70%

    第3个2秒:pwm_time <= 19’d250_000;//占空比50%

    第4个2秒:pwm_time <= 19’d100_000;//占空比20%

    第5个2秒:pwm_time <= 19’d50_000;//占空比10%

    第6个2秒: pwm_time <= 19’d5_000;//占空比1%

    第7个2秒: pwm_time <= 19’d100_000;//占空比20%

    第8个2秒:pwm_time <= 19’d250_000;//占空比50%

    第9个2秒:pwm_time <= 19’d350_000;//占空比70%

    第10个2秒: pwm_time <= 19’d450_000;//占空比90%

    ……

    20s一个周期,重复进入下一次循环。

    代码实现:

    module breathing_led(
       input        clk,
       input        rst_n,
       output  reg [3:0] led
     );
     
     reg flag;
     
     // 计数器cnt_10ms循环计数,计到499999为10ms 
     parameter cnt_10ms_max = 19'd500_000 - 1'b1;
     reg [18:0] cnt_10ms;
    
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
         cnt_10ms <= 19'd0;
       else if(cnt_10ms == cnt_10ms_max)
         cnt_10ms <= 19'd0;
       else
         cnt_10ms <= cnt_10ms + 1'b1;
     end
    
     // 计数器cnt_2s循环计数,计到199为2s 
     parameter cnt_2s_max = 8'd200 - 1'b1;
     reg [7:0] cnt_2s;
    
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
          cnt_2s <= 8'd0;
       else if(cnt_10ms == cnt_10ms_max && cnt_2s == cnt_2s_max)
          cnt_2s <= 8'd0;
       else if(cnt_10ms == cnt_10ms_max)
          cnt_2s <= cnt_2s + 1'b1;
       else
          cnt_2s <= cnt_2s;
     end
    
     // 计数器cnt_20s循环计数,计到9为20s 
     parameter cnt_20s_max = 4'd10 - 1'b1;
     reg [3:0] cnt_20s;
    
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
          cnt_20s <= 4'd0;
       else if(cnt_10ms == cnt_10ms_max && cnt_2s == cnt_2s_max && cnt_20s == cnt_20s_max)
          cnt_20s <= 4'd0;
       else if(cnt_10ms == cnt_10ms_max && cnt_2s == cnt_2s_max)
          cnt_20s <= cnt_20s + 1'b1;
       else
          cnt_20s <= cnt_20s;
     end
    
     
    reg [18:0] pwm_time;
    
     //pwm控制brearhing_led
     always @(posedge clk or negedge rst_n) begin
       if (!rst_n)
          led <= 4'b0000;
       else if(cnt_10ms == pwm_time-1'b1)
          led <= 4'b1111;     
       else if(cnt_10ms == cnt_10ms_max) 
          led <= 4'b0000;
       else
          led <= led;
     end
     
     //改变pwm信号的占空比
     always @(*) begin
       case(cnt_20s)
          4'd0: pwm_time <= 19'd450_000;//90%     
          4'd1: pwm_time <= 19'd350_000;//70% 
          4'd2: pwm_time <= 19'd250_000;//50% 
          4'd3: pwm_time <= 19'd100_000;//20%
          4'd4: pwm_time <= 19'd50_000;//10%
          4'd5: pwm_time <= 19'd5_000;//1%
          4'd6: pwm_time <= 19'd100_000;//20% 
          4'd7: pwm_time <= 19'd250_000;//50% 
          4'd8: pwm_time <= 19'd350_000;//70%  
          4'd9: pwm_time <= 19'd450_000;//90% 
          default: pwm_time <= 19'd0;
     endcase 
     end
     
     endmodule
    

    说明:

    本文的3个案例,在正点原子FPGA开拓者开发板上亲测有效。

    案例中LED的管脚分配如下:
    在这里插入图片描述
    参考资料0: 最简单的FPGA verilog写的 PWM 例子.

    参考资料1: FPGA实现呼吸灯功能实验.

    展开全文
  • 基于STM32F103 PWM呼吸灯设计

    千次阅读 2020-07-29 23:02:35
    基于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);
    	}
    }
    
    展开全文
  • 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

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

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

    2021-07-03 21:34:56
    下面来说下高通平台3020的呼吸灯设计,这也是我之前做项目的时候写好的并且已经量产了的。下面就说下代码吧 不多说了,贴代码: // 呼吸灯进行处理函数 void handleBreathLamp(Task task, MessageId id, ...
  • 奋斗的小孩系列 FPGA学习altera系列: 第二十篇 呼吸灯设计 作者:奋斗的小孩 郝旭帅(转载请注明出处) 大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、...
  • 基于FPGA的呼吸灯设计

    万次阅读 2016-09-28 16:16:42
    网上类似的标题很多,有一些呼吸灯设计是基于单片机的,还有一部分设计是基于FPGA的,我也一时手痒,将这两天自己重新写的verilog描述语句晒出来,免得压箱底放久了,出现发霉点。 为什么说重新写的呢,之前有...
  • 运用至简设计法进行呼吸灯设计 本文为明德扬原创文章,转载请注明出处!   呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机、电脑等电子产品之上,并成为各大...
  • 课程设计报告书题目: 基于51单片机的呼吸灯设计信息工程学院课程设计任务书学 号1学生姓名专业(班级)设计题目基于51单片机的呼吸灯设计设计技术参数8个LED按照顺序逐个实现呼吸效果。加以其他闪烁花样增加更炫彩的...
  • 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机之上,并成为各大品牌新款手机的卖点之一,起到一个通知提醒的作用。 现在分享一个呼吸灯PWM控制的仿真原理图如下...
  • 使用8086,要求系统电路含有16个LED和按键,按键控制的不同闪烁方式(跑马),按键使用中断方式。使用定时器T1方式1实现1个心跳,中断方式。在PROTEUS上仿真实现,系统功能自定义。 资源包括proteus仿真文件...
  • 基于FPGA的VHDL语言呼吸灯设计

    千次阅读 2018-06-07 09:08:22
    1.系统概述 本设计在AlteraCyclone II EP2C35 FPGA平台上,利用锁相环、计数器等数字电路,产生占空比可随时间自动变化的PWM波形,从而控制LED的亮度变化,实现以2s为周期的LED呼吸显示效果。2.系统原理图 ...
  • 定时器实现led呼吸灯 实验原理: 灯在高速闪烁时,光信号传入大 脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失。每次循环时,前半部分先让亮的时间逐渐增加,暗的时间逐渐减小;后半部分先让...
  • 针对ETP-MB-1开发板,采用VHDL语言,设计合适的数字逻辑系统,实现4路LED灯控制,LED亮度从0~100%变化,各 LED灯组合产生呼吸灯效果,每位灯按照1s周期线性亮起,按照2s周期线性熄灭,4位灯之间相位相差90度。...
  • 二、设计思路 16个LED共阳极由P0口和P2口提供低电平信号,按键的信号由P1口采集,按键使用中断方式控制的不同闪烁方式。我们组采用的是先读取按键的键值,然后进入中断,运用外部中断0(中断号为0,P3.2引脚...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,628
精华内容 1,451
关键字:

呼吸灯设计