前言
按照要求,应该实现如下功能:
实验目的:
掌握按键消抖原理,实现按键控制流水灯
实验要求:
设计 8 种彩灯效果,选择一个按键作为控制输入,按下一次换一种显示效果
依然使用官方提供的Demo,再次基础上学习实现功能。
1 代码分析
官方提供的实力代码其实已经实现了题目要求实现的功能,所以我主要的目的就是学习实力代码的实现方案,了解如何实现的。
官方代码使用4个文件来实现:
其中:
- key_led_rgb_top:顶层模块实现,主要定义了信号,端口和模块名称,然后调用子模块key_ctl对按键做控制,调用子模块led_rgb对RGB做控制;
- key_ctl:定义一个模块,名字为key_ctl,实现按钮控制代码,通过调用按键去抖子模块btn_deb实现按键消抖,然后计算按键按下的次数,返回控制命令;
- U_btn_deb:定义一个模块,名字为btn_deb,实现对按键信号的消抖;
- u_led_rgb:定义一个模块,名字为led_rgb,通过参数ctrl实现对rgb的控制。
2 代码更新
示例代码实现的是4哥RGB LED同时控制,我更新代码是控制一个RGB LED,如下:
begin
case(ctrl)
3'd0 : //R
led_rgb<=`UD 12'b0111_1111_1111;
3'd1 : //G
led_rgb<=`UD 12'b1111_0111_1111;
3'd2 : //B
led_rgb<=`UD 12'b1111_1111_0111;
3'd3 : //RG
led_rgb<=`UD 12'b0111_0111_1111;
3'd4 : //RB
led_rgb<=`UD 12'b0111_1111_0111;
3'd5 : //GB
led_rgb<=`UD 12'b1111_0111_0111;
3'd6 : //RGB
led_rgb<=`UD 12'b0111_0111_0111;
default:led_rgb<=`UD 12'b1111_1111_1111;
endcase
end
3 实验效果
下载代码,实现效果见视频
4 学习总结
通过该实验,学习了按键消抖的实现原理,RGB的控制原理以及多文件实现,模块实现的方法,收获颇丰