久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3731|回復: 1
打印 上一主題 下一主題
收起左側

VHDL語言實現電子密碼鎖(門鈴)程序設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:670450 發表于 2019-12-22 15:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

1.開鎖代碼為8位二進制數,當輸入代碼的位數和位值與鎖內給定的密碼一致,且按規定程序開鎖時,方可開鎖,并點亮開鎖指示燈LT。否則,系統進入“錯誤”狀態,并發出報警信號。

2.開鎖程序由設計者確定,并要求鎖內給定的密碼是可調的,且預置方便,保密性好。

3.串行數字鎖的報警方式是點亮77指示燈LF,并使喇叭鳴叫來報警,報警動作響1分鐘,停10秒鐘后再重復出現,直到按下復位開關,報警才停止。此時,數字鎖自動進入等待下一次開鎖的狀態。

4.報警器可以兼作門鈴用,門鈴響的時間通常為7~10秒。

2 設計分析及系統方案設計

系統的結構圖如下圖所示:

本實驗要求串行輸入八位密碼,密碼可以隨意設置,可以任意更改, 并且能夠存儲.而且能夠顯示出當前已經輸入或者設置的位數,待輸入八位后通過比較電路與預先設置的密碼進行比較.如果輸入的密碼與存儲的密碼相同鎖體打開 如果輸入的密碼與存儲的密碼不同則報警系統打開發出警報.由于還要求有門鈴功能所以增加一個門鈴輸入當門鈴按下后 門鈴響十秒鐘。


對于密碼存儲以及密碼輸入比較部分主要由load 控制。


Load

0

1

li

0

1

La

1

0

系統功能

設置密碼

輸入密碼


load為0時系統功能為設置密碼,此時只需要順序串行輸入八位0/1密碼即可,系統將輸入的密碼自動保存在存儲器內以便于輸入的密碼進行比較,當load為1時系統功能為輸入密碼,此時只需要順序串行輸入八位0/1即可,待輸入八位后系統自動將剛輸入的密碼與存儲器內的密碼進行比較如果密碼正確則開鎖信號lt為1,否則警報信號lf 和響鈴信號alm為1 lt為0

對于門鈴部分 當檢測到press信號的下降沿時門鈴開始響,計數器開始計數,此時始終脈沖頻率為50MHz/16MHz=3.125Hz ,此時當計數器為30時既時間為30/3.125=9.6秒時門鈴自動關閉。

3系統以及模塊硬件電路設計

   

系統電路圖


系統電路圖如上如所示 其中clk1腳接入50MHz的方波,load有兩種狀態----高電平和低電平狀態。k0 k1 press clr 分別接到四個去抖開關上開關按下去為低電平 lt alm2 lf alm分別接到四個發光二級管上,當輸出為1時二極管發光。y0[0~6]分別接到HEX7對應的引腳上實現數碼管顯示功能。Y1[0~6]分別接到HEX5對應的引腳上實現數碼管顯示功能。其余各種邏輯功能由芯片內部計算執行來實現。芯片內部程序通過對clk、load、k0、k1、press、clr輸入信號的處理通過lt、alm2、lf、alm、y0[0~6]、y1[0~6]進行輸出來達到系統所需要的功能。


DE2開發板上使用的元件要給出使用管腳編號。

接口

名稱

類型

(輸入/輸出)

符號

引腳號

說明

CLK

輸入

CLOCK_50

PIN_N2

輸入50MHz的時鐘頻率

LOAD

輸入

SW[17]

PIN_V2

修改(0)/設置(1)密碼

K0

輸入

KEY[0]

PIN_G26

輸入密碼0(低電平有效)

K1

輸入

KEY[1]

PIN_N23

輸入密碼1(低電平有效)

Press

輸入

KEY[2]

PIN_P23

門鈴按鈕(低電平有效)

CLR

輸入

KEY[3]

PIN_W26

復位開關(低電平有效)

lt

輸出

LEDR[0]

PIN_AE23

開鎖成功指示燈

alm2

輸出

LEDR[12]

PIN_AD15

門鈴(小燈)

lf

輸出

LEDR[16]

PIN_AE12

開鎖失敗指示燈

alm

輸出

LEDR[17]

PIN_AD12

開鎖失敗報警器(小燈)

y0[0]

輸出

HEX7[0]

PIN_L3

輸入密碼七段碼顯示

y0[1]

輸出

HEX7[1]

PIN_L2

輸入密碼七段碼顯示

y0[2]

輸出

HEX7[2]

PIN_L9

輸入密碼七段碼顯示

y0[3]

輸出

HEX7[3]

PIN_L6

輸入密碼七段碼顯示

y0[4]

輸出

HEX7[4]

PIN_L7

輸入密碼七段碼顯示

y0[5]

輸出

HEX7[5]

PIN_P9

輸入密碼七段碼顯示

y0[6]

輸出

HEX7[6]

PIN_N9

輸入密碼七段碼顯示

y1[0]

輸出

HEX5[0]

PIN_T2

修改密碼七段碼顯示

y1[1]

輸出

HEX5[1]

PIN_P6

修改密碼七段碼顯示

y1[2]

輸出

HEX5[2]

PIN_P7

修改密碼七段碼顯示

y1[3]

輸出

HEX5[3]

PIN_T9

修改密碼七段碼顯示

y14]

輸出

HEX5[4]

PIN_R5

修改密碼七段碼顯示

y1[5]

輸出

HEX5[5]

PIN_R4

修改密碼七段碼顯示

y1[6]

輸出

HEX5[6]

PIN_R3

修改密碼七段碼顯示


4 系統的VHDL設計

系統的主要功能是通過VHDL語言來實現的。語言代碼如下。

  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4. use ieee.std_logic_arith.all;
  5. entity mima is
  6.    port (clk:in std_logic;                                                                                   --定義時鐘
  7.                             k0:in std_logic;                                                             --輸入一位0
  8.                             k1:in std_logic;                                                             --輸入一位1
  9.                             clr:in std_logic;                                                                        --復位
  10.                             load:in std_logic;                                                                        --改變狀態
  11.                             press:in std_logic;                                                                      --門鈴按鈕
  12.                             alm2:out std_logic;                                                                        --門鈴
  13.                             lt:out std_logic;                                                                --開鎖信號
  14.                             y0:out std_logic_vector(6 downto 0);                                                         --輸入位數顯示
  15.                             y1:out std_logic_vector(6 downto 0);                                              --輸出位數顯示
  16.                             lf:out std_logic;                                                    --亮燈
  17.                             alm:out std_logic);                                                                        --報警鈴
  18. end mima;
  19. architecture aaa of mima is
  20. signal shift,lock:std_logic_vector(7 downto 0):="00000000"; --定義shift,lock
  21.               signal lam1,lam:std_logic_vector(7 downto 0);         --定義lam1,lam
  22.               signal la,li:std_logic;                              --定義la,li
  23.               signal clk1:std_logic;                              --定義clk1
  24.               signal p:std_logic_vector (4 downto 0);                --定義p
  25.               signal aa:std_logic;                                --定義aa
  26. begin
  27. m16:process(clk)                                    --將clk 16M分頻
  28. variable q: std_logic_vector(22 downto 0);
  29. begin
  30.               if clk'event and clk='1' then q:=q+1;                --檢測clk上升沿 q=q+1
  31.               end if;                                      
  32. if q="11111111111111111111111" then clk1<='1';  -- clk1產生一個上升沿脈沖
  33.               else clk1<='0';               
  34.               end if;
  35. end process m16;               
  36. process(clk1,clr)                                      --判斷是否復位                                             
  37.               begin
  38.                             if clr='0' then                                         
  39.                                           la<='0';                                                   
  40.                                           li<='0';        
  41.                             elsif clk1'event and clk1='1' then                 --檢測clk1上升沿
  42.                                           if load='0' then                           --判斷狀態
  43.                                              la<='1';                              --設置密碼
  44.                                           else           
  45.                                              li<='1';                                                    --輸出密碼
  46.                             end if;
  47.                             end if;
  48. end process;
  49. process(clk1,clr)                            --復位及輸入設置密碼
  50. variable a:integer range 0 to 8;                           
  51. begin
  52.               if clr='0' then                                 --復位
  53.                                lam<="00000000";                                         --lam置零
  54.                             lam1<="00000000";                                        --lam1置零
  55.                             shift<="00000000";                                       --shift置零
  56.                             a:=0;                                      --a置零
  57.                             lt<='0';                                    --開鎖置零
  58.                             lf<='0';                                   --警報燈置零
  59.                             alm<='0';                                 --警報置零
  60.               elsif clk1'event and clk1='1' then                 --檢測上升沿
  61.                             if li='1' then                              --輸入密碼
  62.                                           if a/=8 then                        --判斷密碼是否輸入完畢
  63.                                                         if k1='0' then                       --輸入1
  64.                                                                       shift<='1'&shift(7 downto 1 );         --依次輸入一個1
  65.                                                                       lam<='1'&lam(7 downto 1);      --點亮對應的一個小燈
  66.                                                                       a:=a+1;                                                     
  67.                                                         elsif k0='0'then                            --輸入一位0
  68.                                                                       shift<='0'&shift(7 downto 1);          --依次輸入一個1
  69.                                                                       lam<='1'&lam(7 downto 1);      --點亮對應的一個小燈
  70.                                                                       a:=a+1;
  71.                                                         end if;
  72.                                           else
  73.                                                         a:=0;
  74.                                                         if shift=lock then              --判斷密碼是否正確
  75.                                                                       lt<='1';                  --正確 開鎖
  76.                                                         else                                            
  77.                                                                       lf<='1';                   --錯誤 警報亮
  78.                                                                       alm<='1';                    --錯誤 警報響
  79.                                                         end if;
  80.                                           end if;
  81.                             elsif la='1' then                     --輸入密碼
  82.                                   a:=0;               
  83.                                           if k1='0' then                     --輸入一位1
  84.                                                         lock<='1'&lock(7 downto 1);   --lock密碼增加一位1
  85.                                                         lam1<='1'&lam1(7 downto 1);  --點亮對應的燈
  86.                                                         a:=a+1;
  87.                                           elsif k0='0' then                  --輸入一位0
  88.                                                         lock<='0'&lock(7 downto 1);   --lock密碼增加一位0
  89.                                                         lam1<='1'&lam1(7 downto 1 );  --點亮對應的燈
  90.                                                         a:=a+1;
  91.                                           end if;
  92.               end if;
  93. end if;
  94. end process;
  95. code1:process(lam)                      --將小燈泡顯示轉換到LED顯示
  96.               begin
  97.                             case lam is
  98.                             when "00000000"=>y0<="1111111";    --顯示0
  99.                             when "10000000"=>y0<="1111001";    --顯示1
  100.                             when "11000000"=>y0<="0100100";                --顯示2
  101.                             when "11100000"=>y0<="0110000";     --顯示3
  102.                             when "11110000"=>y0<="0011001";     --顯示4
  103.                             when "11111000"=>y0<="0010010";                            --顯示5
  104.                             when "11111100"=>y0<="0000010";                            --顯示6
  105.                             when "11111110"=>y0<="1111000";                            --顯示7
  106.                             when "11111111"=>y0<="0000000";                            --顯示8
  107.                             when others=>y0<="1111111";           --關閉數碼管
  108.               end case;
  109.               end process;
  110.               code2:process(lam1)                     --顯示位數                                 
  111.               begin
  112.                             case lam1 is
  113.                             when "00000000"=>y1<="1111111";      --顯示0
  114.                             when "10000000"=>y1<="1111001";      --顯示1
  115.                             when "11000000"=>y1<="0100100";      --顯示2
  116.                             when "11100000"=>y1<="0110000";      --顯示3
  117.                             when "11110000"=>y1<="0011001";      --顯示4
  118.                             when "11111000"=>y1<="0010010";      --顯示5
  119.                             when "11111100"=>y1<="0000010";      --顯示6
  120.                             when "11111110"=>y1<="1111000";      --顯示7
  121.                             when "11111111"=>y1<="0000000";      --顯示8
  122.                             when others=>y1<="1111111";         --關閉數碼管
  123.               end case;
  124.               end process;
  125.               pp:process(press)                        --門鈴功能
  126. begin
  127.               if press='0' then                         --按下門鈴
  128.                             alm2<='1';                          --門鈴響
  129.               end if;
  130.               if clk1'event and clk1='1' then   p<=p+1;    --延時10秒
  131.               end if;
  132.               if p=30 then
  133.                             p<="00000";            
  134.                             alm2<='0';                         --關閉門鈴
  135.               end if;
  136. end process pp;
  137. end aaa;
復制代碼

本系統運行在聯想計算機平臺和Altera DE2平臺,用的是quartus60軟件調試環境,系統的參數選取均按照要求適當選取。

對密碼模塊:開始時,先給系統清零,即使clr為0(按下KEY[3]),若設置密碼則SW[17]開關撥下使load為低電平,此時通過按去抖開關KEY[0],KEY[1]進行密碼設置0和1,每輸入一位密碼則數目管顯示的數字加1直到輸入第8位

設置密碼:仿真圖如下如所示。設置密碼時將SW[17]撥下使load為低電平并且clr為高電平此時可以設置密碼,由圖可以看出設置的密碼為00000111每設置一位密碼數碼管HEX5的七個引腳都隨著y1[0~6]的變化而變化,進而顯示出當前的位數。

設置密碼仿真圖

當輸入密碼時,SW[17]開關撥上使load為高電平輸入密碼開始,此時通過按去抖開關KEY[0],KEY[1]進行密碼設置0和1,每輸入一位密碼則數目管顯示的數字加1直到輸入第8位。系統自動將輸入的密碼與預設的密碼進行比較如果相同則開鎖。開鎖成功仿真圖如下如所示,此時設置的密碼為00001111輸入的密碼為00001111,由圖可以看每設置一位密碼數碼管HEX5的七個引腳都隨著y1[0~6]的變化而變化,進而顯示出當前的位數。此時clr為高電平load為低電平當密碼輸入完畢后將load變為高電平進行密碼輸入輸入方法與設置密碼相同沒設置一位密碼數碼管HEX7的七個引腳都隨著y0[0~6]的變化而變化,進而顯示出當前的位數。當輸完八位密碼后系統將其與預先設置的密碼進行對比,由于設置與輸入的密碼相同所以lt為高電平開鎖,lf、alm為低電平沒有反應。

                     密碼正確開鎖成功仿真圖

開鎖不成功仿真圖如下如所示,此時設置的密碼為00000111輸入的密碼為00000011,由圖可以看每設置一位密碼數碼管HEX5的七個引腳都隨著y1[0~6]的變化而變化,進而顯示出當前的位數。此時clr為高電平load為低電平當密碼輸入完畢后將load變為高電平進行密碼輸入輸入方法與設置密碼相同沒設置一位密碼數碼管HEX7的七個引腳都隨著y0[0~6]的變化而變化,進而顯示出當前的位數。當輸完八位密碼后系統將其與預先設置的密碼進行對比,由于設置與輸入的密碼不同所以lt為低電平不開鎖,lf、alm為高電平,警報響起,警報燈亮起

密碼錯誤開鎖不成功仿真圖

門鈴功能仿真圖如下圖所示。對于門鈴部分 當檢測到press信號的下降沿時門鈴開始響,計數器開始計數,當計數器為30時門鈴自動關閉

                     門鈴功能仿真圖


完整的Word格式文檔51黑下載地址:

文檔.doc (881 KB, 下載次數: 35)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:704279 發表于 2020-3-9 03:17 | 只看該作者
請問您下到板子上驗證的代碼和您上傳的代碼是否有改動呢?我下載您的代碼后發現,無法下到fpga板子上。不知道您是否有空賜教
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产91久久久久蜜臀青青天草二 | 亚洲精品黄色 | 国产高清一区二区三区 | 久久四虎 | 精品国产31久久久久久 | 色综合桃花网 | 99re视频在线观看 | 国产免费一区二区三区 | 国产精品中文字幕在线 | 熟女毛片 | 99精品国产一区二区三区 | 99精品国自产在线 | 亚洲va国产日韩欧美精品色婷婷 | 亚洲不卡av在线 | 国产欧美一区二区三区在线看 | 四虎影视在线 | 99re在线观看 | 亚洲综合激情 | 一区二区三区免费在线观看 | 国产亚洲人成a在线v网站 | 日本一二三区在线观看 | 一区二区在线免费观看 | 日韩一区二区三区av | 亚洲精品高清视频 | 久久国产精品无码网站 | 日本黄色短片 | 国产成人精品久久二区二区91 | 成人国产精品一级毛片视频毛片 | 久久久免费电影 | 欧美激情一区二区三级高清视频 | 午夜影院黄 | 欧美中文在线 | 91在线精品视频 | 国产成人aⅴ | 亚洲三级免费看 | 中文字幕一区二区不卡 | 日韩成人免费av | 四虎成人精品永久免费av九九 | 成人午夜精品 | a在线v| 天堂资源视频 |