版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 概述</b></p><p> 在當今社會中,人們對于隱私的保護和對物品安全的重視程度與日俱增。因此,使用了現(xiàn)代電子技術(shù)的電子密碼鎖便有了廣泛的應(yīng)用前景。本次所設(shè)計的電子密碼鎖,能夠?qū)崿F(xiàn)該六位十進制并行密碼保護,當輸入的密碼與鎖內(nèi)密碼一致時,綠燈亮,開鎖;當輸入的密碼與鎖內(nèi)的密碼不一致時,紅燈亮,不能開鎖。密碼鎖的密碼可由用戶自行設(shè)置,并可在液晶顯示屏上顯示所
2、輸入的密碼。為人們的財產(chǎn)、信息安全提供了可靠地保障。</p><p> 本次設(shè)計基于VHDL語言,對并行六位電子密碼鎖進行設(shè)計,并對設(shè)計過程進行了詳細描述。采用VHDL語言進行電子密碼鎖的設(shè)計可使設(shè)計工作簡潔直觀,快速實現(xiàn)既定功能。電子密碼鎖在對財產(chǎn)安全保護等方面都有著重要作用,應(yīng)用前景非常廣泛。開鎖代碼為六位十進制數(shù),當輸入代碼的位數(shù)和位值與鎖內(nèi)給定的密碼一致,且按規(guī)定程序開鎖時,方可開鎖,并點亮開鎖指示燈。
3、否則,系統(tǒng)進入“錯誤”狀態(tài),并發(fā)出報警信號。開鎖程序由設(shè)計者確定,并要求鎖內(nèi)給定的密碼是可調(diào)的,且預(yù)置方便,保密性好。并行數(shù)字鎖的報警方式是點亮指示燈,并使喇叭鳴叫來報警,直到按下復(fù)位開關(guān),報警才停止。此時,數(shù)字鎖又自動進入等待下一次開鎖的狀態(tài)。</p><p><b> 一、 設(shè)計主要內(nèi)容</b></p><p> 密碼鎖串行輸入幾位十進制數(shù)字口令</p&
4、gt;<p> 輸入口令全部正確即開鎖并有綠燈顯示</p><p> 口令輸入最大次數(shù)3次,要求在完全輸入六位之后進行判斷口令正確與否;輸入3次之后還不能開鎖,進入死鎖狀態(tài)并報警</p><p><b> 有相應(yīng)的顯示功能</b></p><p><b> 開鎖后能再次上鎖</b></p>
5、<p><b> 二、系統(tǒng)設(shè)計方案 </b></p><p> 作為通用電子密碼鎖,主要由三個部分組成:數(shù)字密碼輸入電路、密碼鎖控制電路和密碼鎖顯示電路。</p><p> ?。?)密碼鎖輸入電路包括時序產(chǎn)生電路、鍵盤掃描電路、鍵盤譯碼電路等幾個小的功能電路。</p><p> (2) 密碼鎖控制電路包括按鍵數(shù)據(jù)的緩沖存儲電
6、路,密碼的清除、存儲、激活電鎖電路(寄存器清除信號發(fā)生電路),密碼核對(數(shù)值比較電路),解鎖電路(開/關(guān)門鎖電路)等幾個小的功能電路。</p><p> ?。?)密碼顯示電路主要是在液晶顯示屏顯示輸入的數(shù)值。</p><p> 2.1密碼鎖輸入電路的設(shè)計</p><p> 是電子密碼鎖的輸入電路框圖,由鍵盤掃描電路、彈跳消除電路、鍵盤譯碼電路、按鍵數(shù)據(jù)緩存器,加
7、上外接的一個4×4矩陣式鍵盤組成。</p><p> 圖1-1 密碼鎖的輸入電路框圖 </p><p> 1.矩陣式鍵盤的工作原理</p><p> 矩陣式鍵盤是一種常見的輸入裝置,在日常的生活中,矩陣式鍵盤在計算機、電話、手機、微波爐等各式電子產(chǎn)品上已經(jīng)被廣泛應(yīng)用。圖1-2是一個3×4矩陣式鍵盤的面板配置圖,其中數(shù)字0~9作為密碼
8、數(shù)字輸入按鍵。 </p><p> 圖1-2 4 ×4矩陣式鍵盤的面板配置 </p><p> 2.2密碼鎖輸入電路各主要功能模塊的設(shè)計</p><p><b> 1) 時序產(chǎn)生電路</b></p><p> 本時序產(chǎn)生電路中使用了三種不同頻率的工作脈沖波形:系統(tǒng)時鐘脈沖(它是系統(tǒng)內(nèi)部所有時鐘脈
9、沖的源頭,且其頻率最高)、彈跳消除取樣信號、鍵盤掃描信號。</p><p><b> 2) 鍵盤掃描電路</b></p><p> 掃描電路的作用是用來提供鍵盤掃描信號的,掃描信號變化的順序依次為1110-1101-1011-0111-1110......依序地周而復(fù)始。</p><p><b> 3) 彈跳消除電路</b
10、></p><p> 由于本設(shè)計中采用的矩陣式鍵盤是機械開關(guān)結(jié)構(gòu),因此在開關(guān)切換的瞬間會在接觸點出現(xiàn)信號來回彈跳的現(xiàn)象,對于電子密碼鎖這種靈敏度較高的電路這種彈跳將很可能會造成誤動作輸入,從而影響到密碼鎖操作的正確性。</p><p> 從圖1-3中可以觀察出彈跳現(xiàn)象產(chǎn)生的原因,雖然只是按下按鍵一次然后放掉,然而實際產(chǎn)生的按鍵信號卻不止跳動一次,經(jīng)過取樣信號的檢查后,將會造成誤判
11、斷,以為鍵盤按了兩次。如果調(diào)整抽樣頻率(如圖4.5所示),可以發(fā)現(xiàn)彈跳現(xiàn)象獲得了改善。 </p><p> 圖1-3彈跳現(xiàn)象產(chǎn)生錯誤的抽樣結(jié)果</p><p> 圖1-4 調(diào)整抽樣頻率后得到的抽樣結(jié)果</p><p><b> 4) 鍵盤譯碼電路</b></p><p> 上述鍵盤中的按鍵可分為數(shù)字按鍵和文字按
12、鍵,每一個按鍵可能負責不同的功能,例如清除數(shù)碼、退位、激活電鎖、開鎖等。</p><p><b> 5) 按鍵存儲電路</b></p><p> 因為每次掃描會產(chǎn)生新的按鍵數(shù)據(jù),可能會覆蓋前面的數(shù)據(jù),所以需要一個按鍵存儲電路,將整個鍵盤掃描完畢后的結(jié)果記錄下來。按鍵存儲電路可以使用移位寄存器構(gòu)成。</p><p> 圖1-5 輸入電路仿真
13、波形圖</p><p> 2.3 密碼鎖控制電路的設(shè)計</p><p> 密碼鎖的控制電路是整個電路的控制中心,主要完成對數(shù)字按鍵輸入和功能按鍵輸入的響應(yīng)控制。</p><p> 1.數(shù)字按鍵輸入的響應(yīng)控制</p><p> (1) 如果按下數(shù)字鍵,第一個數(shù)字會從顯示器的最右端開始顯示,此后每新按一個數(shù)字時,顯示器上的數(shù)字必須左移一
14、格,以便將新的數(shù)字顯示出來。</p><p> (2) 假如要更改輸入的數(shù)字,可以按倒退按鍵來清除前一個輸入的數(shù)字,或者按清除鍵清除所有輸入的數(shù)字,再重新輸入六位數(shù)。</p><p> (3) 由于這里設(shè)計的是一個六位的電子密碼鎖,所以當輸入的數(shù)字鍵超過四個時,電路不予理會,而且不再顯示第六個以后的數(shù)字。</p><p> 2.4功能按鍵輸入的響應(yīng)控制<
15、/p><p> (1) 清除鍵:清除所有的輸入數(shù)字,即做歸零動作。</p><p> (2) 激活電鎖鍵:按下此鍵時可將密碼鎖的門上鎖。(上鎖前必須預(yù)先設(shè)定一個六位的數(shù)字密碼。)</p><p> (3) 解除電鎖鍵:按下此鍵會檢查輸入的密碼是否正確,若密碼正確無誤則開門。</p><p> 圖1-5 電子密碼鎖的三種模式及關(guān)系</
16、p><p> 2.5 密碼鎖顯示電路的設(shè)計</p><p> 密碼鎖顯示電路的設(shè)計比較復(fù)雜,這里直接采用12864液晶屏進行顯示。 </p><p> 2.6 密碼鎖的整體組裝設(shè)計</p><p> 將前面各個設(shè)計好的功能模塊進行整合,可得到一個完整的電子密碼鎖系統(tǒng)的整體組裝設(shè)計原理圖,如圖1-6所示。</p><p
17、> 圖1-6 密碼鎖的整體組裝設(shè)計原理圖</p><p><b> 系統(tǒng)擴展思路</b></p><p> (1) 本系統(tǒng)基本達到作為數(shù)字密碼鎖的絕大部分功能,但還有許多不足或需完善的地方。比如說采用4×4的通用機械鍵盤受到鍵盤數(shù)量的限制,在很大的程度上限制了其功能的擴展。 </p><p> 設(shè)計外圍電路:系
18、統(tǒng)用方波信號源,直流工作電源。</p><p> 可要求設(shè)計制作整個系統(tǒng),包括PCB的制作。</p><p><b> 實驗收獲</b></p><p> 課程設(shè)計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。隨著科學技術(shù)發(fā)展的日新月異,F(xiàn)PGA已經(jīng)成為當今計
19、算機應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說無處不在。因此作為二十一世紀的大學來說掌握eda的開發(fā)技術(shù)是十分必要的。</p><p> 回顧此次課程設(shè)計,我感慨頗多,的確,從理論到實踐,在很長的一段時間里,可以說是苦多于甜,但確實學到了很多東西,不僅可以鞏固以前學到的知識,還學到許多沒學過的知識。通過此次課程設(shè)計,使我了解了理論與實際結(jié)合的重要性,只有理論知識是遠遠不夠的。在設(shè)計的過程中,發(fā)現(xiàn)自己以前學習的知識理解
20、不夠深刻,掌握不夠牢固等等。通過這次課設(shè)之后,一定要把以前學習的知識溫故知新。</p><p> 這次的課設(shè)終于完成,通過老師的細心講解,我解決了很多問題。在這里,感謝老師的細心指導(dǎo)。同時對于幫助我的同學,也表示衷心感謝。</p><p><b> 附錄</b></p><p><b> 液晶顯示程序</b><
21、/p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use IEEE.STD_LOGIC_ARITH.ALL;</p><p> entity
22、clock_lcd_disp is</p><p> generic(divide_to_100k:integer:=500);</p><p> port(clk:in std_logic;</p><p> DATAIN:in std_logic_vector(31 downto 0);</p><p> din: in INT
23、EGER RANGE 15 DOWNTO 0;</p><p> rw,rs,e,lcd_rst:out std_logic;</p><p> lcd_data:out std_logic_vector(7 downto 0));</p><p> end clock_lcd_disp;</p><p> architecture
24、tcl of clock_lcd_disp is</p><p> signal mima:std_logic_vector(31 downto 0):="00010010001101000101011001111000";</p><p> signal clk_100k:std_logic;</p><p> signal clkout
25、:std_logic;</p><p> signal temp:std_logic_vector(7 downto 0);</p><p> type state is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,s23,s24,s25,s26,s27,s28,s2
26、9,s30,s31);</p><p> signal current_s:state;</p><p> type data_buffer is array(0 to 15)of std_logic_vector(7 downto 0);</p><p> type data_buffer1 is array(0 to 7)of std_lo
27、gic_vector(7 downto 0);</p><p> signal time:std_logic_vector(23 downto 0);</p><p> signal disp_time:data_buffer1:=(</p><p> x"31",x"32",x"3a",x&
28、quot;33",</p><p> x"34",x"3a",x"35",x"36");</p><p> constant data_buf0:data_buffer:=(x"20",x"20",x"bb",x"aa"
29、;, --華科武昌分校 80 </p><p> x"bf",x"c6",x"ce",x"e4",</p><p> x"b2",x"fd", x"b7",x"d6",</p><p> x"
30、d0",x"a3",x"20",x"20"); </p><p> constant data_buf1:data_buffer:=(x"20",x"20",x"b5",x"e7", --電子密碼鎖 90</p><p> x&qu
31、ot;d7",x"d3",x"c3",x"dc",</p><p> x"c2",x"eb",x"cb",x"f8",</p><p> x"20",x"20",x"20",x&
32、quot;20"); </p><p> constant data_buf2:data_buffer:=(x"20",x"20",x"c7",x"eb",</p><p> x"ca",x"e4",x"c8",x&q
33、uot;eb", --請輸入密碼: 88</p><p> x"c3",x"dc",x"c2",x"eb",</p><p> x"3a",x"20",x"20",x"20"); </p><p&
34、gt; constant data_buf3:data_buffer:=(x"20",x"20",x"d6",x"d8",</p><p> x"d0",x"c2",x"ca",x"e4", --重新輸入</p><p> x
35、"c8",x"eb",x"20",x"20",</p><p> x"20",x"20",x"20",x"20");</p><p> constant data_buf4:data_buffer:=(x"20&quo
36、t;,x"20",x"bd",x"e2", x"cb",x"f8",x"b3",x"c9", --解鎖成功</p><p> x"b9",x"a6",x"20",x"20",</p>
37、;<p> x"20",x"20",x"20",x"20");</p><p> constant data_buf5:data_buffer:=( x"20",x"20", --進入死鎖狀態(tài)</p><p> x"bd"
38、;,x"f8",x"c8",x"eb",</p><p> x"cb",x"c0",x"cb",x"f8",</p><p> x"d7",x"b4",x"cc",x"ac&qu
39、ot;,</p><p> x"20",x"20"); </p><p> constant data_buf6:data_buffer:=(x"20",x"20",x"bd",x"e2", --</p><p> x"cb&quo
40、t;,x"f8",x"b3",x"c9",</p><p> x"b9",x"a6", x"21",x"20",</p><p> x"20",x"20",x"20",x"20&
41、quot;); </p><p><b> begin</b></p><p> --U1:divclk1 port map(clk,clk_100k);</p><p> process(clk)</p><p> variable
42、 cnt:integer range 0 to divide_to_100k;</p><p><b> begin</b></p><p> if(clk'event and clk='1')then cnt:=cnt+1;</p><p> if(cnt=divide_to_100k)then cnt:=0;&
43、lt;/p><p><b> end if;</b></p><p> if(cnt<divide_to_100k/2) then clk_100k<='0';</p><p> else clk_100k<='1';</p><p><b> end if
44、;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> div_1Hz:</b></p><p> process(clk)</p><p> variable cnttemp:
45、integer range 0 to 49999999;</p><p><b> begin </b></p><p> if clk='1' and clk'event then</p><p> if cnttemp=49999999 then cnttemp:=0;</p><p>
46、<b> else </b></p><p> if cnttemp<25000000 then clkout<='1';</p><p> else clkout<='0';</p><p><b> end if;</b></p><p>
47、; cnttemp:=cnttemp+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process div_1Hz;</p><p> disp_time(7)<=DATAIN(3 downto 0
48、)+x"30";</p><p> disp_time(6)<=DATAIN(7 downto 4)+x"30";</p><p> disp_time(5)<=DATAIN(11 downto 8)+x"30";</p><p> disp_time(4)<=DATAIN(15 d
49、ownto 12)+x"30";</p><p> disp_time(3)<=DATAIN(19 downto 16)+x"30"; </p><p> disp_time(2)<=DATAIN(23 downto 20)+x"30"; </p><p> disp_time(1)&
50、lt;=DATAIN(27 downto 24)+x"30";</p><p> disp_time(0)<=DATAIN(31 downto 28)+x"30";</p><p> read_time:</p><p> process(time) </p><p><b>
51、begin </b></p><p> end process;</p><p> process(clk_100k)</p><p> variable cnt1:integer range 0 to 10000;</p><p> variable cnt_1:integer range 0 to 1000;<
52、/p><p> variable code_cnt:integer range 0 to 13;</p><p> variable data_cnt:integer range 0 to 480;</p><p><b> begin</b></p><p> if(clk_100k'event and c
53、lk_100k='1')then</p><p> case current_s is </p><p> when s0=>rw<='1';rs<='1';e<='1';cnt1:=cnt1+1;</p><p> if cnt1<500 then lcd_rst&
54、lt;='0';</p><p> elsif cnt1<1000 then lcd_rst<='1';</p><p> elsif cnt1=1000 then</p><p> lcd_rst<='1';cnt1:=0;current_s<=s1;</p><p&
55、gt;<b> end if;</b></p><p> when s1=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2
56、*3 then lcd_data<=x"0c";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s2;</p><p><b> end if;</b&
57、gt;</p><p> when s2=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"
58、90";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s3;</p><p><b> end if;</b></p><p><
59、b> when s3=></b></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=data_buf1(data_cnt);
60、 </p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b></p><p> cnt_
61、1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=16 then current_s<=s4;</p><p> data_cnt:=0;</p><p><b> end if;</b></p><
62、;p><b> end if;</b></p><p> when s4=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1&l
63、t;2*3 then lcd_data<=x"88";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s5;</p><p><b> end if;<
64、/b></p><p><b> when s5=></b></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=
65、data_buf2(data_cnt); </p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b><
66、/p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=16 then current_s<=s6;</p><p> data_cnt:=0;</p><p><b> end if;&l
67、t;/b></p><p><b> end if;</b></p><p> when s6=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p>&
68、lt;p> elsif cnt_1<2*3 then lcd_data<=x"80";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s7;</p><p>
69、;<b> end if;</b></p><p><b> when s7=></b></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0';</p><p> elsif cnt_1<
70、;2*3 then lcd_data<=data_buf0(data_cnt); </p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p&g
71、t;<b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=16 then current_s<=s8;</p><p> data_cnt:=0;</p&
72、gt;<p><b> end if;</b></p><p><b> end if;</b></p><p><b> --動態(tài)顯示</b></p><p> when s8=>cnt_1:=cnt_1+1;</p><p> if cnt_1
73、<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"9a";</p><p> elsif cnt_1<10*3 then e<='0';</p>
74、;<p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s9;</p><p><b> end if;</b></p><p><b> when s9=></b></p><p> if cnt_1<1*3 then e<='
75、1';rs<='1';rw<='0'; </p><p> elsif cnt_1<2*3 then lcd_data<=disp_time(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p&g
76、t;<p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if
77、data_cnt=8 then current_s<=s10;</p><p> data_cnt:=0;</p><p><b> end if;</b></p><p><b> end if; </b></p><p> -----------------------------
78、--------------------------------- </p><p> when s10=>cnt_1:=cnt_1+1;</p><p> if din<=10 then </p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<=
79、'0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"88";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<
80、;=s11;</p><p><b> end if;</b></p><p> else current_s<=s12;</p><p><b> end if;</b></p><p> when s11=></p><p> if cnt_1<
81、;1*3 then e<='1';rs<='1';rw<='0'; </p><p> elsif cnt_1<2*3 then lcd_data<=data_buf4(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt
82、:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</
83、p><p> if data_cnt=8 then current_s<=s0;</p><p> data_cnt:=0;</p><p><b> end if;</b></p><p><b> end if; </b></p><p> when s12=
84、>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"88";</p><p> el
85、sif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s13;</p><p><b> end if;</b></p><p> when s13=></p><p>
86、 if cnt_1<1*3 then e<='1';rs<='1';rw<='0'; </p><p> elsif cnt_1<2*3 then lcd_data<=data_buf3(data_cnt);</p><p> elsif cnt_1=2*3 t
87、hen data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cn
88、t_1:=0;</p><p> if data_cnt=8 then current_s<=s14;</p><p> data_cnt:=0;</p><p><b> end if;</b></p><p><b> end if; </b></p><p&
89、gt; when s14=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"98";</p>
90、<p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s15;</p><p><b> end if;</b></p><p> when s15=></p&g
91、t;<p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0'; </p><p> elsif cnt_1<2*3 then lcd_data<=disp_time(data_cnt);</p><p> els
92、if cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt
93、_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=s16;</p><p> data_cnt:=0;</p><p><b> end if;</b></p><p><b> end if; </b><
94、/p><p> ------------------------------------------------------------------------------------------------</p><p> when s16=>cnt_1:=cnt_1+1;</p><p> if din<=10 then </p>
95、<p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"88";</p><p> elsif cnt_1<10*3 then e<=
96、39;0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s17;</p><p><b> end if;</b></p><p> else current_s<=s18;</p><p><b> end if;<
97、/b></p><p> when s17=></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0'; </p><p> elsif cnt_1<2*3 then lcd_data&
98、lt;=data_buf4(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b></p><p
99、> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=s0;</p><p> data_cnt:=0;</p><p><b> end if;</b></p
100、><p><b> end if; </b></p><p> when s18=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> el
101、sif cnt_1<2*3 then lcd_data<=x"88";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s19;</p><p><b>
102、 end if;</b></p><p> when s19=></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0'; </p><p> elsif cnt_1<2*3 th
103、en lcd_data<=data_buf3(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;</b></
104、p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=s20;</p><p> data_cnt:=0;</p><p><b> end if;<
105、;/b></p><p><b> end if; </b></p><p> when s20=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p>
106、<p> elsif cnt_1<2*3 then lcd_data<=x"98";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s21;</p><p
107、><b> end if;</b></p><p> when s21=></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0'; </p><p> elsif c
108、nt_1<2*3 then lcd_data<=disp_time(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><b> end if;&
109、lt;/b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=s22;</p><p> data_cnt:=0;</p><p><b&g
110、t; end if;</b></p><p> end if; </p><p> ------------------------------------------------------------------------------</p><p> when s22=>cnt_1:=cnt_1+1;</p>&
111、lt;p> if din<=10 then </p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"88";</p><
112、;p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s23;</p><p><b> end if;</b></p><p> else current_s<=s24;&l
113、t;/p><p><b> end if;</b></p><p> when s23=></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0'; </p><
114、;p> elsif cnt_1<2*3 then lcd_data<=data_buf4(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p><p><
115、b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=s0;</p><p> data_cnt:=0;</p>&l
116、t;p><b> end if;</b></p><p><b> end if; </b></p><p> when s24=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<='0';rw&
117、lt;='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"88";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_
118、s<=s25;</p><p><b> end if;</b></p><p> when s25=></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0'; <
119、;/p><p> elsif cnt_1<2*3 then lcd_data<=data_buf3(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0';</p>&
120、lt;p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=s26;</p><p> data_cnt:=0;&
121、lt;/p><p><b> end if;</b></p><p><b> end if; </b></p><p> when s26=>cnt_1:=cnt_1+1;</p><p> if cnt_1<1*3 then e<='1';rs<=&
122、#39;0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"98";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt
123、_1:=0;current_s<=s27;</p><p><b> end if;</b></p><p> when s27=></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw<='0';
124、 </p><p> elsif cnt_1<2*3 then lcd_data<=disp_time(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<100 then e<='0'
125、;</p><p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=s28;</p><p>
126、 data_cnt:=0;</p><p><b> end if;</b></p><p> end if; </p><p> -------------------------------------------------------------------------------------- </p>
127、<p> when s28=>cnt_1:=cnt_1+1;</p><p> if din<=10 then </p><p> if cnt_1<1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2
128、*3 then lcd_data<=x"88";</p><p> elsif cnt_1<10*3 then e<='0';</p><p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s29;</p><p><b> end if;</b
129、></p><p> else current_s<=s30;</p><p><b> end if;</b></p><p> when s29=></p><p> if cnt_1<1*3 then e<='1';rs<='1';rw&l
130、t;='0'; </p><p> elsif cnt_1<2*3 then lcd_data<=data_buf4(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> elsif cnt_1<
131、100 then e<='0';</p><p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then current_s<=
132、s0;</p><p> data_cnt:=0;</p><p><b> end if;</b></p><p><b> end if; </b></p><p> when s30=>cnt_1:=cnt_1+1;</p><p> if cnt_1&
133、lt;1*3 then e<='1';rs<='0';rw<='0';</p><p> elsif cnt_1<2*3 then lcd_data<=x"88";</p><p> elsif cnt_1<10*3 then e<='0';</p>
134、<p> elsif cnt_1=10*3 then cnt_1:=0;current_s<=s31;</p><p><b> end if;</b></p><p> when s31=></p><p> if cnt_1<1*3 then e<='1';rs<='
135、;1';rw<='0'; </p><p> elsif cnt_1<2*3 then lcd_data<=data_buf4(data_cnt);</p><p> elsif cnt_1=2*3 then data_cnt:=data_cnt+1;</p><p> els
136、if cnt_1<100 then e<='0';</p><p><b> end if;</b></p><p> cnt_1:=cnt_1+1;</p><p> if cnt_1=100 then cnt_1:=0;</p><p> if data_cnt=8 then cu
137、rrent_s<=s30;</p><p> data_cnt:=0;</p><p><b> end if;</b></p><p> end if; </p><p> when others=>current_s<=s0;</p&
138、gt;<p><b> end case;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end tcl;</b></p><p><b> 鍵盤控制子程序 &l
139、t;/b></p><p> LIBRARY ieee;</p><p> USE ieee.std_logic_1164.all;</p><p> USE ieee.std_logic_unsigned.all;</p><p> use ieee.std_logic_arith.all;</p><p&
140、gt; ENTITY bian_ma0 IS ------編碼</p><p> PORT(en,clk:IN std_logic;</p><p> kr3,kr2,kr1,kr0:IN std_logic;</p><p> kc3,kc2,kc1:IN std_logic;</p><p> SDIN,lock,
141、sec,CR,set,crack:out std_logic;</p><p> dout:OUT std_logic);</p><p> END bian_ma0;</p><p> ARCHITECTURE one OF bian_ma0 IS</p><p> signal data:std_logic_vector(5 do
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計—電子密碼鎖
- eda電子密碼鎖課程設(shè)計
- 電子密碼鎖——eda課程設(shè)計
- eda電子密碼鎖課程設(shè)計
- eda課程設(shè)計—電子密碼鎖
- eda課程設(shè)計--電子密碼鎖
- eda課程設(shè)計報告--電子密碼鎖
- eda課程設(shè)計報告--電子密碼鎖
- eda課程設(shè)計報告-- 電子密碼鎖設(shè)計
- eda課程設(shè)計報告---電子密碼鎖設(shè)計
- eda密碼鎖課程設(shè)計
- 電子密碼鎖eda技術(shù)課程設(shè)計
- eda綜合課程設(shè)計---電子密碼鎖的設(shè)計
- 電子密碼鎖課程設(shè)計
- 電子密碼鎖課程設(shè)計
- 電子密碼鎖課程設(shè)計
- eda課程設(shè)計數(shù)字密碼鎖
- 課程設(shè)計--電子密碼鎖
- 電子密碼鎖課程設(shè)計
- 電子密碼鎖課程設(shè)計
評論
0/150
提交評論