【每周一练】盘古1K开发板+密码锁+修改显示刷新频率 - FPGA开发者技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

zealsoft 关注 私信

【每周一练】盘古1K开发板+密码锁+修改显示刷新频率

感谢发烧友爱好者和小眼睛科技公司提供的FPGA测试机会。前面已经完成了3次测试,今天来完成第4个测试。这次的目的是拨码开关SW1- SW4 设置 2 位数密码,每两位设置一位密码,BM[0:1]设置第一位对应 BM1和

BM2,BM[2:3]设置第二位。所以密码是由0,1,2,3 组成的四位数。KEY1-KEY2 作为密码输入,按键按一下数字加 1,数字由数码管显示,数字在 0,1,2,3 中循环。K4 作为确认按键,按下

K4,输入的密码与设置的密码比对,如相同则显示 8888,若不同则显示 7777。 按下 K3 清零,按下后数码管显示 0000,可以重新输密码。在《MES2KG开发板实验指导》中提供了相应的说明,这次我们还是参考相关介绍来介绍demo的工作原理,并做一些补充和修改。

一、键盘控制

按键控制部分主要完成了以下工作:1、对 4 个按键输入信号均做消抖处理,2、KEY4

和 KEY3 取下降沿输出,3、KEY[2:1]以下降沿来变更各自的输入密码,每次数字加 1(0~3 循环,2bit 即可)

密码验证部分是通过KEY4完成的。KEY4 下降沿触发使能工作; KEY4 下降沿触发所存输入密码,并与拨码开关设置的密码进行比较;输出密码比较结果,提供个数码管显示模块。

`define UD #1
module compare(
    input        clk,
    input [3:0]  sw,
    input [3:0]  ctrl,
    input        enter_trig,
    
    output       com_result
);

//==============================================================================
    //锁存当前的输入密码;
    reg [3:0] ctrl_1d;
    always @(posedge clk)
    begin
        if(enter_trig)
            ctrl_1d <= `UD ctrl;
    end

    assign com_result = (ctrl_1d == sw);
    
endmodule

二、 显示频率的修改

第3次测试中介绍了显示刷新的原理。官方示例给的显示刷新频率不太合适,会出现闪烁的问题。

仿照上一次测试修改了显示频率部分:

`define UD #1
module div_clk
(
	input clk,//40M
	output  clk_1khz//0.1M
);
reg [8:0]cnt;
always @(posedge clk)
begin
	if(cnt == 9'd399)
		cnt<= `UD 9'd0;
	else 
		cnt <= `UD cnt + 1'b1;
end  

reg flag=1'b0;
always @(posedge clk)
begin
	if(cnt == 9'd199)
		flag <= `UD 1'b1;
	else if(cnt == 9'd399)
		flag <= `UD 1'b0;
end 
assign clk_1khz = flag;

endmodule

然后重新编译、下载程序即可。

下面的视频就是最终显示的效果。

密码锁

更多回帖

×
发帖