点灯大师——LED跑马灯

1. 实现关键点

计数器级联 每500ms多亮一个灯。

主要代码:

//****************************************************************
 //--cnt_500ms
 //**************************************************************** 
 
 always @(posedge clk or negedge rst_n)begin 
    if(!rst_n)begin
        cnt_500ms <= 'd0;
    end 
    else if(add_cnt_500ms)begin 
        if(end_cnt_500ms)begin 
            cnt_500ms <= 'd0;
        end
        else begin 
            cnt_500ms <= cnt_500ms + 1'b1;
        end 
    end
 end 
 
 assign add_cnt_500ms = 1'b1;
 assign end_cnt_500ms = add_cnt_500ms && cnt_500ms == TM_500MS - 1'b1 ;

 //****************************************************************
 //--cnt_s
 //**************************************************************** 
 
 always @(posedge clk or negedge rst_n)begin 
    if(!rst_n)begin
        cnt_s <= 'd0;
    end 
    else if(add_cnt_s)begin 
        if(end_cnt_s)begin 
            cnt_s <= 'd0;
        end
        else begin 
            cnt_s <= cnt_s + 1'b1;
        end 
    end
 end 
 
 assign add_cnt_s = end_cnt_500ms ;
 assign end_cnt_s = add_cnt_s && cnt_s == MUX - 1'b1 ;

2. 完整代码:

/**************************************功能介绍***********************************
Description: 跑马灯		
Change history:    
*********************************************************************************/
    
//---------<模块及端口声名>------------------------------------------------------
module run_led( 
    input				clk		,
    input				rst_n	,
    output reg	[3:0]	led	
);	

//---------<参数定义>--------------------------------------------------------- 
    parameter  TM_500MS = 25_000_000,
               MUX = 8;  

//---------<内部信号定义>-----------------------------------------------------
    
    reg			[24:0]	cnt_500ms	   	;
    wire				add_cnt_500ms	;
    wire				end_cnt_500ms	;

    reg			[3:0]	cnt_s	   	    ;
    wire				add_cnt_s	    ;
    wire				end_cnt_s	    ;

 //****************************************************************
 //--cnt_500ms
 //**************************************************************** 
 
 always @(posedge clk or negedge rst_n)begin 
    if(!rst_n)begin
        cnt_500ms <= 'd0;
    end 
    else if(add_cnt_500ms)begin 
        if(end_cnt_500ms)begin 
            cnt_500ms <= 'd0;
        end
        else begin 
            cnt_500ms <= cnt_500ms + 1'b1;
        end 
    end
 end 
 
 assign add_cnt_500ms = 1'b1;
 assign end_cnt_500ms = add_cnt_500ms && cnt_500ms == TM_500MS - 1'b1 ;

 //****************************************************************
 //--cnt_s
 //**************************************************************** 
 
 always @(posedge clk or negedge rst_n)begin 
    if(!rst_n)begin
        cnt_s <= 'd0;
    end 
    else if(add_cnt_s)begin 
        if(end_cnt_s)begin 
            cnt_s <= 'd0;
        end
        else begin 
            cnt_s <= cnt_s + 1'b1;
        end 
    end
 end 
 
 assign add_cnt_s = end_cnt_500ms ;
 assign end_cnt_s = add_cnt_s && cnt_s == MUX - 1'b1 ;

 //****************************************************************
 //--led输出
 //****************************************************************
//always @(posedge clk or negedge rst_n)begin
//  if(!rst_n)begin
//    led <= 4'b0000;
//  end
//  else begin
//    case(cnt_s)
//        0,6 : led <= 4'b0001;
//        1,5 : led <= 4'b0011;
//        2,4 : led <= 4'b0111;
//        3,  : led <= 4'b1111;
//        7,  : led <= 4'b0000;
//    default : led <= 4'b1111;
//    endcase
//  end
//end

always @(*)begin
    case(cnt_s)
        0,6 : led <= 4'b0001;
        1,5 : led <= 4'b0011;
        2,4 : led <= 4'b0111;
        3,  : led <= 4'b1111;
        7,  : led <= 4'b0000;
    default : led <= 4'b1111;
    endcase
  end   

endmodule

3. 上板验证

跑马灯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Zigbee是一种低功耗、低数据速率的无线通信协议,而CC2530是一款常用的Zigbee芯片。基于CC2530的BasicRF无线点灯控制LED灯亮灭的原理可以简单描述如下: 首先,在硬件方面,我们需要准备一颗CC2530芯片和一个可控制的LED灯。 然后,在软件方面,我们需要通过CC2530的开发工具来编写相应的代码。这里我们可以利用Z-Stack开发套件提供的API函数来实现无线通信和控制LED灯的功能。 首先,我们需要设置CC2530芯片的信道,使其能够与其他设备进行通信。然后,我们需要通过定义节点类型、网络密钥等参数进行网络配置。 接下来,我们需要编写代码实现无线通信功能。通过使用Z-Stack提供的函数,我们可以实现与其他设备之间的通信和数据交换。具体来说,我们可以使用无线命令来发送指令给其他设备,让其控制LED灯的亮灭。 最后,我们需要通过控制LED灯的接口,来实现LED灯的亮灭控制。通过调用相应的API函数,我们可以控制LED灯的开关状态。我们可以在代码中定义一些特定的指令来控制LED灯的亮灭,例如发送"0"表示关闭LED灯,发送"1"表示打开LED灯。 通过以上步骤,我们就可以实现通过Zigbee和CC2530控制LED灯的亮灭了。我们可以通过其他设备发送命令给基于CC2530的节点,来控制LED灯的开关状态。这样,我们就可以实现远程无线控制LED灯的亮灭功能。 ### 回答2: Zigbee CC2530 BasicRF无线点灯控制LED灯的亮灭是通过使用Zigbee通信协议和CC2530 BasicRF无线模块相结合实现的。以下是实现控制LED灯亮灭的步骤: 首先,我们需要准备以下硬件和软件: 1. Zigbee CC2530 BasicRF无线模块 2. 能够使用Zigbee协议的主控制器或网关 3. LED灯与电源 其次,我们需要进行以下步骤: 1. 将CC2530 BasicRF无线模块连接到主控制器或网关上。 2. 在主控制器或网关中配置Zigbee网络,并与CC2530 BasicRF无线模块进行配对或加入网络。 3. 在主控制器或网关上创建一个适当的设备或节点,并将其与CC2530 BasicRF无线模块关联。 4. 编写或使用主控制器或网关上的程序或脚本,通过Zigbee协议与CC2530 BasicRF无线模块进行通信,以控制LED灯的亮灭。 5. 编写或使用主控制器或网关上的程序或脚本,通过Zigbee协议向CC2530 BasicRF无线模块发送指令来控制LED灯的亮灭。可以发送开灯指令使LED灯亮起,也可以发送关灯指令使LED灯熄灭。 这样,当主控制器或网关向CC2530 BasicRF无线模块发送控制指令时,CC2530 BasicRF无线模块会接收并执行指令,从而控制LED灯的亮灭状态。这种无线点灯控制的方法可以实现对远程LED灯的亮灭控制,具有灵活性和便利性。 ### 回答3: ZigBee是一种低功耗的无线通信技术,它可以通过无线网络连接多个设备,并进行数据传输和控制。CC2530是一款常用的ZigBee芯片,它使用ZigBee协议实现低功耗通信。 ZigBee CC2530芯片可以用于构建无线点灯控制系统,实现对LED灯的远程控制。如何实现远程控制的方法如下: 首先,我们需要将CC2530芯片与LED灯进行连接。CC2530芯片可以通过GPIO引脚来控制LED灯的开关,通过PWM信号控制LED灯的亮度。将CC2530芯片的输出引脚与LED灯的正极相连,将CC2530芯片的地引脚与LED灯的负极相连,就可以实现对LED灯的控制。 然后,我们需要编程实现远程控制功能。我们可以使用CC2530芯片内置的Z-Stack协议栈,利用ZigBee协议进行通信。在编程中,我们可以定义一个控制器节点和多个被控节点。控制器节点即为控制端,可以发送指令给被控节点控制LED灯的状态。被控节点即为被控制端,接收到指令后,控制LED灯的开关和亮度。 最后,我们可以通过手机APP、电脑软件或者物联网网关等设备,将指令发送给控制器节点。控制器节点接收到指令后,通过ZigBee网络将指令传输给被控节点。被控节点接收到指令后,根据指令控制LED灯的状态。 通过以上的方法,我们可以实现对LED灯的远程控制。无论我们身在何处,只要通过合适的设备发送指令,就可以控制LED灯的亮灭状态。这样的无线点灯控制系统可以应用于家居、办公室、商店等不同场景,为我们的生活带来便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值