记录一个小实验吧,实验的目的是仅仅是塞塞牙缝而已,没其他意思,很简单。
功能:拨码开关控制led灯工作与否,拨码开关为on,led灯工作,否则不工作;导航按键up和down,也就是独立按键而已,控制led等流动方向。当按下导航开关up时,led灯从高到低流动,按下down时,led灯从低到高流动。
分析:拨码开关没啥说的,很简单,拨码开关为on,也就是为低电平时,用一个使能寄存器变量led_en控制led灯处于工作状态。
至于导航按键,存在一个抖动问题,所以需要进行去抖动操作,去抖动操作的方法有很多,这里依然沿用最简单的方式,见曾经的博文分析:《按键消抖与LED控制》实验的个人思考与总结
这里使用的代码是特权的,但是按键抖动部分,我改成了我能看懂的,也就是最简单的方式。
led灯的流动使用移位的方式实现。代码如下:
使用硬件平台实现的时候,记得进行物理约束,也即管脚约束即可。
/////////////////////////////////////////////////////////////////////////////
//工程硬件平台: Xilinx Spartan 6 FPGA
/////////////////////////////////////////////////////////////////////////////
//拨码开关SW3作为开关信号,导航按键UP和DOWN作为LED流动方向控制信号,实现8个LED开关、方向可控的流水灯功能
module sp6_ljs(
input ext_clk_25m, //外部输入25MHz时钟信号
input ext_rst_n, //外部输入复位信号,低电平有效
input switch, //拨码开关SW3输入,ON -- 低电平;OFF -- 高电平
input key_upup,key_down, //up和down两个导航按键输入,未按下为高电平,按下后为低电平