FPGA项目(8)——基于FPGA的电子密码锁设计

这篇具有很好参考价值的文章主要介绍了FPGA项目(8)——基于FPGA的电子密码锁设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        本次做的是基于FPGA的电子密码锁设计,先描述一下所实现的功能:该密码锁使用6位十进制密码,密码由开发板上的独立按键输入,有四个按键,一个按键控制系统开始启动,一个控制密码的自增,一个控制密码的自减,另一个用于确认密码输入。由于6位密码是一位一位输入的,所以这个“确认”按键要按六次,每按一次,所输入的数字都会在数码管上显示,并且是左移显示(新输入的数字会占据最低位,旧数字总体左移一位),当密码输入完成后,会判断密码是否正确,如果正确,则绿灯亮。否则,绿灯不亮。(系统开始运行时,红灯亮,用于指示系统的工作)。系统默认的密码可以在代码中修改。

        本次设计使用原理图输入方式,采用自顶层向下的设计思想。整体的原理图如下所示:

密码锁fpga,FPGA项目,fpga开发,嵌入式硬件

        大致分为按键消抖模块、密码处理模块(核心控制逻辑)、数码管动态显示模块。接下来一一为大家介绍。

        按键模块:

        本次使用的独立按键实物图如下:

密码锁fpga,FPGA项目,fpga开发,嵌入式硬件

        这种按键使用简单,但是有个缺点,就是抖动太大,再使用前要进行消抖处理。关于FPGA对按键进行消抖处理的原理,可以看我的这篇博客:

FPGA项目(3)--按键消抖_嵌入式小李的博客-CSDN博客FPGA按键消抖的原理https://blog.csdn.net/guangali/article/details/130674206?spm=1001.2014.3001.5501

        数码管显示模块:

        本次使用6位数码管,进行动态显示,将输入的密码时刻显示出来。数码管实物图如下:

密码锁fpga,FPGA项目,fpga开发,嵌入式硬件

        本次使用的是共阳极数码管,关于FPGA驱动数码管的具体原理,也可以看我的这篇博客:

FPGA项目(5)--FPGA控制数码管动态显示的原理_fpga数码管显示实验原理_嵌入式小李的博客-CSDN博客FPGA驱动数码管的动态显示https://blog.csdn.net/guangali/article/details/130754726?spm=1001.2014.3001.5501

        重点要讲的是输入密码和密码判断的逻辑控制。

        首先要定义四个按键,用于控制系统的开始,密码的输入和确认等等。然后要定义两个LED输出,还要定义一个24位宽的输出量,用于将6位十进制密码输出到数码管显示模块进行显示。复位的时候让所有变量都清0,只有当按下开始按键时,系统才开始工作。接下来,结合代码来讲解设计的思路:

密码锁fpga,FPGA项目,fpga开发,嵌入式硬件

        Password用于保存初始密码,如果要修改密码,就修改这里。

        Key_input用于保存实时输出的密码,例如第一次输入1,这个量就应该是等于24’d000_001,再输入一次2,它就等于24’d000_012,

        再把这个变量传入到数码管模块进行显示,就能达到实时显示输入密码的效果。

        Num是保存每一次输入的密码,默认值为5.例如第一次输入密码时,num=5,当按下密码自增键(k2时),num=6,再按一次k2,num=7,如果此时按下确认键(k1),那么num的值就会保存到key_input中,表示这是一次有效的密码输入,同时num返回到复位值5。

        Confi_times用于保存按下确认按键的次数,如果按下确认按键6次,那么说明密码已经全部输入完成了,此时要进行密码核对,如果密码正确,就亮绿灯。

        Flag按键用于标志系统开始运行,当开始键按下(k3),flag就置1,当flag被置1时,系统才开始运行,否则不运行。

        Flag相关代码如下:

密码锁fpga,FPGA项目,fpga开发,嵌入式硬件

        这部分代码全部给出:

module mima(
input	clk,
input	rst,								//复位  低电平有效   
input	k0,									//	-
input	k1,									// confirm
input	k2,									// +
input	k3,									// start
output	reg	led_red,
output	reg	led_green,
output	[23:0]	data						//将输入的密码输出到显示模块用于显示
);


parameter	password=24'h600417;				//设定密码   如要修改密码  则修改这里

reg [23:0]	key_input;					//用于保存输入的密码

reg [3:0]	num;						//用于寄存正在从键盘输入的数		默认为5
reg [3:0]	confirm_times;				//用于记录按下k1的次数  
reg			flag;						//用于标记k3已经按下  即系统已经开始工作


//记录k3已经被按下
always @(posedge clk or negedge rst) begin
	if(!rst)
		flag<=1'b0;
	else if(k3==1'b0)
		flag<=1'b1;
	else
		flag<=flag;
end




//控制密码的输入  判断密码是否正确
always @(posedge clk or negedge rst) begin
	if(!rst)
		begin
		led_green<=1'b0;
		led_red<=1'b0;
		key_input<=24'd0;
		confirm_times<=4'd0;
		num<=4'd5;					//默认为5
		end
	else if(flag==1'b1)				//如果系统已经开始工作
		begin
		key_input[3:0]<=num;
		led_red<=1'b1;				//系统开启时  红灯亮
		if(k2==1'b0)
			num<=num+4'd1;
		else if(k0==1'b0)
			num<=num-4'd1;
		else if(k1==1'b0)
			begin
			if(confirm_times>=4'd5)				//如果按了6次k1  说明密码全部输入完毕  此时判断密码是否正确				
				begin
				confirm_times<=4'd0;			//清0   以便下一次输入密码
				if(key_input==password)			//密码正确
					led_green<=1'b1;				//绿灯亮
				else
					led_green<=1'b0;
				end
			else	//按下k1次数不满6次  说明密码没有输入完  则继续输入
				begin
				confirm_times<=confirm_times+4'd1;
				key_input<=key_input<<4;			//一个十进制数占了四位  所以左移四位看起来就是十进制数左移了一位
				num<=4'd5;							//num恢复为默认值
				end
			end
		end
	else
		begin
		led_green<=led_green;
		led_red<=led_red;
		key_input<=key_input;
		confirm_times<=confirm_times;
		num<=num;
		end		
end


//数据输出
assign data=key_input;

endmodule

        相信大家通过我上面的讲解以及代码里面的注释,能够弄懂这个设计!文章来源地址https://www.toymoban.com/news/detail-715979.html

到了这里,关于FPGA项目(8)——基于FPGA的电子密码锁设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Verilog 语言开发的FPGA密码锁工程

    基于Verilog 语言开发的FPGA密码锁工程。 通过矩阵键盘输入按键值。 输入12修改密码,13清除密码,可以修改原来默认的密码,修改时首先要输入当前密码进行验证,正确后才能更新当前密码,否则修改不成功。 修改结束后按键15,确认修改成功。 也直接使用默认密码作为最终

    2024年02月10日
    浏览(44)
  • 密码锁设计Verilog代码Quartus 睿智FPGA开发板

    名称:密码锁设计Verilog代码Quartus  睿智FPGA开发板(文末获取) 软件:Quartus 语言:Verilog 代码功能: 1、设计一个密码锁的控制电路,当输入正确代码时,输岀开锁信号用红灯亮、绿灯 熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁 2、在锁的控制电路中储存一个可以修改的4位代

    2024年01月18日
    浏览(37)
  • 基于单片机智能电子密码锁设计

    ** 单片机设计介绍,基于单片机智能电子密码锁设计   基于单片机的智能电子密码锁设计是一种利用单片机(如Arduino、Raspberry Pi等)和相关电子元件来实现的电子密码锁系统。下面是一个基本设计的介绍: 系统组成: 单片机模块:负责控制和处理密码输入、验证和锁控制

    2024年02月03日
    浏览(45)
  • 基于单片机的电子密码锁设计

    1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的电子密码锁,可设置四位密码,输入错误三次,报警灯亮起(红灯亮起),输入正确,绿灯闪烁三次。可通过LCD显示屏查看密码,并可通过特殊键位清除密码。 本系统由AT89C51单片机系统(主要是AT89C51单片机最小系

    2024年02月02日
    浏览(36)
  • 基于51单片机的电子密码锁设计

    一.硬件方案         本系统由STC89C52单片机、4*4矩阵键盘,蜂鸣器,复位电路和晶振电路、继电器等组成,4*4键盘主要用于密码的输入和修改,蜂鸣器报警,复位电路和晶振电路与STC89C52单片机组成单片机最小系统。它具有设置、修改6位用户密码、输错报警、密码错误报

    2024年02月16日
    浏览(35)
  • (含代码)基于51单片机电子密码锁设计

    一.硬件说明 采用STC89C51作为主控芯片,结合矩阵按键输入模块、数码管显示模块、LCD1602液晶显示、LED、蜂鸣器报警器等电路模块实现开锁、上锁、报警、密码更改等功能,设计一款可修改密码且具有报警功能的液晶显示电子密码锁。 主要由STM32单片机+最小系统+LCD1602液晶显

    2024年01月16日
    浏览(36)
  • 基于AT89C51单片机的电子密码锁设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87760996?spm=1001.2014.3001.5503 源码获取 主要内容: (1)本设计为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号。 (2)设计开锁密码位六位密码的电子密码锁。 (3)能够LCD显示在密码正确

    2024年02月03日
    浏览(34)
  • 基于FPGA的3位十进制密码锁VHDL代码Quartus DE2-115开发板

    名称:基于FPGA的3位十进制密码锁VHDL代码Quartus  DE2-115开发板(文末获取) 软件:Quartus 语言:VHDL 代码功能: 借助EDA工具和设计方法,学习硬件描述语言VHDL用编程的方法来设计电路,在QUARTUSⅡ软件环境中,基于EDA实验室的开发装置DE2-115,其FPGA芯片型号为EP4CE115F29C7,进行电

    2024年03月13日
    浏览(39)
  • 【毕业设计】11-基于单片机的电子密码锁设计(原理图+仿真工程+答辩论文+答辩PPT)

    资料链接 包含此题目毕业设计全套资料: 原理图工程文件 原理图截图 仿真工程文件 源代码工程文件 答辩论文(低重复率),18046字 主要研究内容: 基于51单片机作为主控,矩阵键盘、液晶显示器和密码存储等为外围电

    2024年02月13日
    浏览(30)
  • 基于51单片机的电子密码锁

    主要功能: 1、6位密码开锁 可以修改用户密码和管理员密码 断电记忆 3次错误报警锁住键盘

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包