电子锁实验报告文档格式.docx
《电子锁实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《电子锁实验报告文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
根据本次设计的特点,可以根据对密码的处理方式分为密码输入模块,密码存储模块,密码设置模块,密码显示模块。
如下图所示:
图1
其中,密码输入模块即为按键编码电路,其原理图如下。
其中n[9..0]为按键输入端口,sout[3..0]为输出端口。
按键输入编码通过案件输入高低电平,每按一个键通过编码显示对应的数字。
图2
密码存储模块即使用EPF10K10LC84-3芯片中的寄存器模块。
密码控制模块的原理图如所示。
其中set为密码设置端口,check为密码检验端口,close为关锁端口,back为删除密码端口,clk时钟输入端口,dn[3..]为数字输入端口,sout[15..0]为16位输出端口,lock密码锁状态显示端口。
图3
软件设计
软件思想
为了简化设计过程,根据fpga的设计特点,我在本次设计过程中将整个软件设计分成不同的功能模块:
键盘输入模块,数码管显示模块,密码存储模块,密码匹配模块。
对上述每个模块进行程序编程和波形仿真正确以后,再把它们添加至工程下进行整体编译,管脚分配和整体原理图生成。
最后对整个工程进行功能仿真。
流程图
整体流程图
图4
密码设置流程图
图6
源程序及程序注释
键盘输入电路的VHDL语言源程序
libraryieee;
---定义实体
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytrais
port(n:
instd_logic_vector(9downto0);
---定义按键输入端口
sout:
outstd_logic_vector(3downto0));
----定义编码输入端口
endtra;
architectureatoftrais-----定义结构体
signaltemp:
std_logic_vector(3downto0);
begin
process(n)
casenis----输入键编码
when"
0000000001"
=>
temp<
="
0001"
;
0000000010"
0010"
0000000100"
0011"
0000001000"
0100"
0000010000"
0101"
0000100000"
0110"
0001000000"
0111"
0010000000"
1000"
0100000000"
1001"
1000000000"
0000"
whenothers=>
1111"
endcase;
endprocess;
sout<
=temp;
----sout怎么传出的
endat;
数码管显示电路的VHDL语言源程序
entityledsis-----定义实体
port(din:
instd_logic_vector(15downto0);
----16输入信号
clk:
instd_logic;
---时钟信号
con:
bufferstd_logic_vector(1downto0);
led7:
outstd_logic_vector(6downto0);
---七段数码管输入信号
sn:
outstd_logic_vector(2downto0));
----数码管七段译码信号
endleds;
architectureheofledsis-----定义结构体
signaldb:
begin
process(clk,din)
ifclk'
eventandclk='
1'
then
con<
=con+1;
----数码管的片选计数
endif;
if(con="
00"
)then---片选为0,0~3位显示
db<
=din(3downto0);
sn<
000"
elsif(con="
01"
)then----片选为1,4~7位显示
=din(7downto4);
001"
10"
)then----片选为2,8~11位显示
=din(11downto8);
010"
11"
)then----片选为3,12~15位显示
=din(15downto12);
011"
casedbis----数码管的译码
led7<
0111111"
0000110"
1011011"
1001111"
1100110"
1101101"
1111101"
0000111"
1111111"
1101111"
0000000"
endhe;
密码存储电路的VHDL语言源程序
entityregmis---实体定义port(set,check:
c:
a,b:
outstd_logic_vector(15downto0);
clr:
outstd_logic);
endregm;
architecturebehvofregmis----结构体定义
process(set,check,clk)
ifset='
then---设置密码时,输入数据送给a,显示电路清零
a<
=c;
clr<
='
0'
elseclr<
ifcheck='
then----检验时,输入数据送给b
b<
endbehv;
密码匹配电路的VHDL语言源程序
entitycompareis---实体定义
port(a,b:
sd0:
endcompare;
architectureaofcompareis----结构体定义
begin
process(a,b)
ifa>
"
0000000000000000"
andb>
then----若有按键
ifa=bthen----若a=b
sd0<
---触发器置位为1
elsifa="
1000100010001000"
then---或为万能密码,触发器置位为1
sd0<
elsesd0<
enda;
密码控制电路的VHDL语言源程序
---实体定义
entityzhangis
port(blk:
inack,cstd_logic;
n:
std_logic_vector(15downto0));
endzhang;
architectureatofzhangis----结构体定义
signalfn:
std_logic;
signalacc:
std_logic_vector(15downto0);
signalnc:
std_logic_vector(2downto0);
process(clk,n)
then----输入开关编码
casenis
fn<
=not(temp(3)andtemp
(2)andtemp
(1)andtemp(0));
----设置输入上升沿
nc:
iffn='
ifnc<
4then----输入左移控制
acc<
=acc(11downto0)&
temp;
nc<
=nc+1;
endif;
ifback='
then----删除右移控制
ifnc>
=0then
&
acc(15downto4);
=nc-1;
密码开启显示电路VHDL语言源程序
entitydiffis---实体定义
port(d,close,sd0:
lock:
enddiff;
architectureartofdiffis----结构体定义
begin
process(close,sd0)
variablelock_1:
lock_1:
ifsd0='
thenlock_1:
---若输入正确的密码锁开
ifclose='
then
lock_1:
=d;
lock<
=lock_1;
endart;
调试记录及结果分析
功能仿真波形及结果分析
键盘输入电路功能仿真图
图7
数码管显示电路功能仿真图
图8
密码存储模块电路功能仿真图
图9
整体电路功能仿真图
图10
结果分析
总结
参考资料5篇以上
附录:
程序清单