版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 概述</b></p><p> 在當(dāng)今社會(huì)中,人們對(duì)于隱私的保護(hù)和對(duì)物品安全的重視程度與日俱增。因此,使用了現(xiàn)代電子技術(shù)的電子密碼鎖便有了廣泛的應(yīng)用前景。本次所設(shè)計(jì)的電子密碼鎖,能夠?qū)崿F(xiàn)該六位十進(jìn)制并行密碼保護(hù),當(dāng)輸入的密碼與鎖內(nèi)密碼一致時(shí),綠燈亮,開鎖;當(dāng)輸入的密碼與鎖內(nèi)的密碼不一致時(shí),紅燈亮,不能開鎖。密碼鎖的密碼可由用戶自行設(shè)置,并可在液晶顯示屏上顯示所
2、輸入的密碼。為人們的財(cái)產(chǎn)、信息安全提供了可靠地保障。</p><p> 本次設(shè)計(jì)基于VHDL語(yǔ)言,對(duì)并行六位電子密碼鎖進(jìn)行設(shè)計(jì),并對(duì)設(shè)計(jì)過(guò)程進(jìn)行了詳細(xì)描述。采用VHDL語(yǔ)言進(jìn)行電子密碼鎖的設(shè)計(jì)可使設(shè)計(jì)工作簡(jiǎn)潔直觀,快速實(shí)現(xiàn)既定功能。電子密碼鎖在對(duì)財(cái)產(chǎn)安全保護(hù)等方面都有著重要作用,應(yīng)用前景非常廣泛。開鎖代碼為六位十進(jìn)制數(shù),當(dāng)輸入代碼的位數(shù)和位值與鎖內(nèi)給定的密碼一致,且按規(guī)定程序開鎖時(shí),方可開鎖,并點(diǎn)亮開鎖指示燈。
3、否則,系統(tǒng)進(jìn)入“錯(cuò)誤”狀態(tài),并發(fā)出報(bào)警信號(hào)。開鎖程序由設(shè)計(jì)者確定,并要求鎖內(nèi)給定的密碼是可調(diào)的,且預(yù)置方便,保密性好。并行數(shù)字鎖的報(bào)警方式是點(diǎn)亮指示燈,并使喇叭鳴叫來(lái)報(bào)警,直到按下復(fù)位開關(guān),報(bào)警才停止。此時(shí),數(shù)字鎖又自動(dòng)進(jìn)入等待下一次開鎖的狀態(tài)。</p><p><b> 一、 設(shè)計(jì)主要內(nèi)容</b></p><p> 密碼鎖串行輸入幾位十進(jìn)制數(shù)字口令</p&
4、gt;<p> 輸入口令全部正確即開鎖并有綠燈顯示</p><p> 口令輸入最大次數(shù)3次,要求在完全輸入六位之后進(jìn)行判斷口令正確與否;輸入3次之后還不能開鎖,進(jìn)入死鎖狀態(tài)并報(bào)警</p><p><b> 有相應(yīng)的顯示功能</b></p><p><b> 開鎖后能再次上鎖</b></p>
5、<p><b> 二、系統(tǒng)設(shè)計(jì)方案 </b></p><p> 作為通用電子密碼鎖,主要由三個(gè)部分組成:數(shù)字密碼輸入電路、密碼鎖控制電路和密碼鎖顯示電路。</p><p> ?。?)密碼鎖輸入電路包括時(shí)序產(chǎn)生電路、鍵盤掃描電路、鍵盤譯碼電路等幾個(gè)小的功能電路。</p><p> (2) 密碼鎖控制電路包括按鍵數(shù)據(jù)的緩沖存儲(chǔ)電
6、路,密碼的清除、存儲(chǔ)、激活電鎖電路(寄存器清除信號(hào)發(fā)生電路),密碼核對(duì)(數(shù)值比較電路),解鎖電路(開/關(guān)門鎖電路)等幾個(gè)小的功能電路。</p><p> ?。?)密碼顯示電路主要是在液晶顯示屏顯示輸入的數(shù)值。</p><p> 2.1密碼鎖輸入電路的設(shè)計(jì)</p><p> 是電子密碼鎖的輸入電路框圖,由鍵盤掃描電路、彈跳消除電路、鍵盤譯碼電路、按鍵數(shù)據(jù)緩存器,加
7、上外接的一個(gè)4×4矩陣式鍵盤組成。</p><p> 圖1-1 密碼鎖的輸入電路框圖 </p><p> 1.矩陣式鍵盤的工作原理</p><p> 矩陣式鍵盤是一種常見的輸入裝置,在日常的生活中,矩陣式鍵盤在計(jì)算機(jī)、電話、手機(jī)、微波爐等各式電子產(chǎn)品上已經(jīng)被廣泛應(yīng)用。圖1-2是一個(gè)3×4矩陣式鍵盤的面板配置圖,其中數(shù)字0~9作為密碼
8、數(shù)字輸入按鍵。 </p><p> 圖1-2 4 ×4矩陣式鍵盤的面板配置 </p><p> 2.2密碼鎖輸入電路各主要功能模塊的設(shè)計(jì)</p><p><b> 1) 時(shí)序產(chǎn)生電路</b></p><p> 本時(shí)序產(chǎn)生電路中使用了三種不同頻率的工作脈沖波形:系統(tǒng)時(shí)鐘脈沖(它是系統(tǒng)內(nèi)部所有時(shí)鐘脈
9、沖的源頭,且其頻率最高)、彈跳消除取樣信號(hào)、鍵盤掃描信號(hào)。</p><p><b> 2) 鍵盤掃描電路</b></p><p> 掃描電路的作用是用來(lái)提供鍵盤掃描信號(hào)的,掃描信號(hào)變化的順序依次為1110-1101-1011-0111-1110......依序地周而復(fù)始。</p><p><b> 3) 彈跳消除電路</b
10、></p><p> 由于本設(shè)計(jì)中采用的矩陣式鍵盤是機(jī)械開關(guān)結(jié)構(gòu),因此在開關(guān)切換的瞬間會(huì)在接觸點(diǎn)出現(xiàn)信號(hào)來(lái)回彈跳的現(xiàn)象,對(duì)于電子密碼鎖這種靈敏度較高的電路這種彈跳將很可能會(huì)造成誤動(dòng)作輸入,從而影響到密碼鎖操作的正確性。</p><p> 從圖1-3中可以觀察出彈跳現(xiàn)象產(chǎn)生的原因,雖然只是按下按鍵一次然后放掉,然而實(shí)際產(chǎn)生的按鍵信號(hào)卻不止跳動(dòng)一次,經(jīng)過(guò)取樣信號(hào)的檢查后,將會(huì)造成誤判
11、斷,以為鍵盤按了兩次。如果調(diào)整抽樣頻率(如圖4.5所示),可以發(fā)現(xiàn)彈跳現(xiàn)象獲得了改善。 </p><p> 圖1-3彈跳現(xiàn)象產(chǎn)生錯(cuò)誤的抽樣結(jié)果</p><p> 圖1-4 調(diào)整抽樣頻率后得到的抽樣結(jié)果</p><p><b> 4) 鍵盤譯碼電路</b></p><p> 上述鍵盤中的按鍵可分為數(shù)字按鍵和文字按
12、鍵,每一個(gè)按鍵可能負(fù)責(zé)不同的功能,例如清除數(shù)碼、退位、激活電鎖、開鎖等。</p><p><b> 5) 按鍵存儲(chǔ)電路</b></p><p> 因?yàn)槊看螔呙钑?huì)產(chǎn)生新的按鍵數(shù)據(jù),可能會(huì)覆蓋前面的數(shù)據(jù),所以需要一個(gè)按鍵存儲(chǔ)電路,將整個(gè)鍵盤掃描完畢后的結(jié)果記錄下來(lái)。按鍵存儲(chǔ)電路可以使用移位寄存器構(gòu)成。</p><p> 圖1-5 輸入電路仿真
13、波形圖</p><p> 2.3 密碼鎖控制電路的設(shè)計(jì)</p><p> 密碼鎖的控制電路是整個(gè)電路的控制中心,主要完成對(duì)數(shù)字按鍵輸入和功能按鍵輸入的響應(yīng)控制。</p><p> 1.?dāng)?shù)字按鍵輸入的響應(yīng)控制</p><p> (1) 如果按下數(shù)字鍵,第一個(gè)數(shù)字會(huì)從顯示器的最右端開始顯示,此后每新按一個(gè)數(shù)字時(shí),顯示器上的數(shù)字必須左移一
14、格,以便將新的數(shù)字顯示出來(lái)。</p><p> (2) 假如要更改輸入的數(shù)字,可以按倒退按鍵來(lái)清除前一個(gè)輸入的數(shù)字,或者按清除鍵清除所有輸入的數(shù)字,再重新輸入六位數(shù)。</p><p> (3) 由于這里設(shè)計(jì)的是一個(gè)六位的電子密碼鎖,所以當(dāng)輸入的數(shù)字鍵超過(guò)四個(gè)時(shí),電路不予理會(huì),而且不再顯示第六個(gè)以后的數(shù)字。</p><p> 2.4功能按鍵輸入的響應(yīng)控制<
15、/p><p> (1) 清除鍵:清除所有的輸入數(shù)字,即做歸零動(dòng)作。</p><p> (2) 激活電鎖鍵:按下此鍵時(shí)可將密碼鎖的門上鎖。(上鎖前必須預(yù)先設(shè)定一個(gè)六位的數(shù)字密碼。)</p><p> (3) 解除電鎖鍵:按下此鍵會(huì)檢查輸入的密碼是否正確,若密碼正確無(wú)誤則開門。</p><p> 圖1-5 電子密碼鎖的三種模式及關(guān)系</
16、p><p> 2.5 密碼鎖顯示電路的設(shè)計(jì)</p><p> 密碼鎖顯示電路的設(shè)計(jì)比較復(fù)雜,這里直接采用12864液晶屏進(jìn)行顯示。 </p><p> 2.6 密碼鎖的整體組裝設(shè)計(jì)</p><p> 將前面各個(gè)設(shè)計(jì)好的功能模塊進(jìn)行整合,可得到一個(gè)完整的電子密碼鎖系統(tǒng)的整體組裝設(shè)計(jì)原理圖,如圖1-6所示。</p><p
17、> 圖1-6 密碼鎖的整體組裝設(shè)計(jì)原理圖</p><p><b> 系統(tǒng)擴(kuò)展思路</b></p><p> (1) 本系統(tǒng)基本達(dá)到作為數(shù)字密碼鎖的絕大部分功能,但還有許多不足或需完善的地方。比如說(shuō)采用4×4的通用機(jī)械鍵盤受到鍵盤數(shù)量的限制,在很大的程度上限制了其功能的擴(kuò)展。 </p><p> 設(shè)計(jì)外圍電路:系
18、統(tǒng)用方波信號(hào)源,直流工作電源。</p><p> 可要求設(shè)計(jì)制作整個(gè)系統(tǒng),包括PCB的制作。</p><p><b> 實(shí)驗(yàn)收獲</b></p><p> 課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程。隨著科學(xué)技術(shù)發(fā)展的日新月異,F(xiàn)PGA已經(jīng)成為當(dāng)今計(jì)
19、算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說(shuō)無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握eda的開發(fā)技術(shù)是十分必要的。</p><p> 回顧此次課程設(shè)計(jì),我感慨頗多,的確,從理論到實(shí)踐,在很長(zhǎng)的一段時(shí)間里,可以說(shuō)是苦多于甜,但確實(shí)學(xué)到了很多東西,不僅可以鞏固以前學(xué)到的知識(shí),還學(xué)到許多沒(méi)學(xué)過(guò)的知識(shí)。通過(guò)此次課程設(shè)計(jì),使我了解了理論與實(shí)際結(jié)合的重要性,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的。在設(shè)計(jì)的過(guò)程中,發(fā)現(xiàn)自己以前學(xué)習(xí)的知識(shí)理解
20、不夠深刻,掌握不夠牢固等等。通過(guò)這次課設(shè)之后,一定要把以前學(xué)習(xí)的知識(shí)溫故知新。</p><p> 這次的課設(shè)終于完成,通過(guò)老師的細(xì)心講解,我解決了很多問(wèn)題。在這里,感謝老師的細(xì)心指導(dǎo)。同時(shí)對(duì)于幫助我的同學(xué),也表示衷心感謝。</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、;, --湘潭大學(xué) 80 </p><p> x"bf",x"c6",x"ce",x"e4",</p><p> x"b2",x"fd", x"b7",x"d6",</p><p> x"d0
30、",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"
31、;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&qu
32、ot;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&quo
33、t;eb", --請(qǐng)輸入密碼: 88</p><p> x"c3",x"dc",x"c2",x"eb",</p><p> x"3a",x"20",x"20",x"20"); </p><p>
34、; 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&q
35、uot;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"
36、,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", --進(jìn)入死鎖狀態(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"
39、;,</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"
40、,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&qu
41、ot;); </p><p><b> begin</b></p><p> --U1:divclk1 port map(clk,clk_100k);</p><p> process(clk)</p><p> variable c
42、nt: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、;/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、lt;/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:in
45、teger 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>&l
46、t;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 dow
49、nto 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、;=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> be
51、gin </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;</p
52、><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 clk
53、_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、;='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、;<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*3
56、 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、;</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"90
58、";</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><b&
59、gt; 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_1:
61、=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><p
62、><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<
63、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;</b
64、></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<=da
65、ta_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></p
66、><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;<
67、/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、;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、lt;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<2
70、*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>
71、<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、;<p><b> end if;</b></p><p><b> end if;</b></p><p><b> --動(dòng)態(tài)顯示</b></p><p> when s8=>cnt_1:=cnt_1+1;</p><p> if cnt_1&l
73、t;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<='1&
75、#39;;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>
76、<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 da
77、ta_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、39;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<1
81、*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;</p&
83、gt;<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=&g
84、t;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> elsi
85、f 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> i
86、f 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 the
87、n 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 cnt_
88、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、; 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、lt;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>
91、<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> elsif
92、 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_1
93、=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></p
94、><p> ------------------------------------------------------------------------------------------------</p><p> when s16=>cnt_1:=cnt_1+1;</p><p> if din<=10 then </p>&l
95、t;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、;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;</b
97、></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、;=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&g
99、t; 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&g
100、t;<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> elsi
101、f 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> e
102、nd 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 then
103、 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></p&
104、gt;<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、lt;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&g
107、t;<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 cnt
108、_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、;/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>
110、 end if;</b></p><p> end if; </p><p> ------------------------------------------------------------------------------</p><p> when s22=>cnt_1:=cnt_1+1;</p><
111、;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><p
112、> 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;<
113、/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><p
114、> 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><b&
115、gt; 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><
116、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、;='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&
118、lt;=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、;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、;/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、9;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_1
123、:=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、lt;/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> d
126、ata_cnt:=0;</p><p><b> end if;</b></p><p> end if; </p><p> -------------------------------------------------------------------------------------- </p>&l
127、t;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*3
128、 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&g
129、t;</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<
130、='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<10
131、0 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<=s0
132、;</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、;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<='1
135、';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> elsif
136、 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 curr
137、ent_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、;<p><b> end case;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end tcl;</b></p><p><b> 鍵盤控制子程序 <
139、/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、; 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,se
141、c,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 down
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)—電子密碼鎖
- eda電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖——eda課程設(shè)計(jì)
- eda電子密碼鎖課程設(shè)計(jì)
- eda課程設(shè)計(jì)—電子密碼鎖
- eda課程設(shè)計(jì)--電子密碼鎖
- eda課程設(shè)計(jì)報(bào)告--電子密碼鎖
- eda課程設(shè)計(jì)報(bào)告--電子密碼鎖
- eda課程設(shè)計(jì)報(bào)告-- 電子密碼鎖設(shè)計(jì)
- eda課程設(shè)計(jì)報(bào)告---電子密碼鎖設(shè)計(jì)
- eda密碼鎖課程設(shè)計(jì)
- 電子密碼鎖eda技術(shù)課程設(shè)計(jì)
- eda綜合課程設(shè)計(jì)---電子密碼鎖的設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- eda課程設(shè)計(jì)數(shù)字密碼鎖
- 課程設(shè)計(jì)--電子密碼鎖
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論