版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告 書</p><p> 題目 電子密碼鎖設(shè)計(jì) </p><p> 姓 名 XXX </p><p> 學(xué) 號(hào) XXX </p><p> 專業(yè)班級(jí) 電信 </p&g
2、t;<p> 指導(dǎo)教師 </p><p> 時(shí) 間 2013年 1月14日 </p><p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p><b> 電子密碼鎖設(shè)計(jì)</b></p><p><b> 摘 要<
3、/b></p><p> 本文介紹了一種采用單片F(xiàn)PGA芯片進(jìn)行電子密碼鎖的設(shè)計(jì)方法,主要闡述如何使用新興的EDA器件取代傳統(tǒng)的電子設(shè)計(jì)方法,利用FPGA的可編程性,簡潔而又多變的設(shè)計(jì)方法,縮短了研發(fā)周期。電子密碼鎖是一種通過密碼輸入來控制電路或是芯片工作,從而控制機(jī)械開關(guān)的閉合,完成開鎖、閉鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡易的電路產(chǎn)品,也有基于芯片的性價(jià)比較高的產(chǎn)品。密碼鎖是以芯片為核心,通過編程來
4、實(shí)現(xiàn)的,其性能和安全性已大大超過了機(jī)械鎖。[1]該電子密碼鎖以Quartus II軟件平臺(tái)完成電子密碼鎖的功能設(shè)計(jì)和仿真,并在FPGA芯片EP1C12Q240C8和EDA V+開發(fā)系統(tǒng)上進(jìn)行功能驗(yàn)證。結(jié)果表明,該密碼鎖具有高安全性、操作簡單等特點(diǎn)。</p><p> 關(guān)鍵詞: FPGA;EDA;VHDL;電子密碼鎖</p><p><b> 目 錄</b><
5、;/p><p><b> 課程設(shè)計(jì)任務(wù)書I</b></p><p><b> 摘 要II</b></p><p><b> 1.設(shè)計(jì)概述4</b></p><p><b> 1.1設(shè)計(jì)背景4</b></p><p>
6、 1.2 電子密碼鎖的發(fā)展前景4</p><p><b> 2.設(shè)計(jì)方案4</b></p><p> 2.1 輸入電路5</p><p> 2.2 控制模塊電路5</p><p> 2.3 顯示模塊電路6</p><p> 3.電子密碼鎖的實(shí)現(xiàn)6</p>
7、<p> 3.1 系統(tǒng)的總體原理圖6</p><p> 3.2 系統(tǒng)各模塊的實(shí)現(xiàn)6</p><p><b> 4.設(shè)計(jì)驗(yàn)證10</b></p><p> 4.1 軟件仿真10</p><p> 4.2 硬件驗(yàn)證11</p><p><b> 5.總結(jié)
8、12</b></p><p><b> 參考文獻(xiàn)13</b></p><p><b> 附錄源碼14</b></p><p><b> 1.設(shè)計(jì)概述</b></p><p><b> 1.1設(shè)計(jì)背景</b></p>&
9、lt;p> 隨著電子技術(shù)的發(fā)展,具有防盜報(bào)警功能的電子密碼鎖越來越受到人們的青睞,用其代替密碼量少、安全性差的機(jī)械密碼鎖已是必然趨勢。電子密碼鎖與普通機(jī)械鎖相比,具有無可比擬的優(yōu)越性,如保密性好、防盜性強(qiáng)、可以不用鑰匙記住密碼即可開鎖等。目前使用的密碼鎖大部分是基于單片機(jī)技術(shù),以單片機(jī)為主要器件,以軟件的方式生成編碼器和解碼器。而在實(shí)際應(yīng)用中,由于程序容易跑飛,使得系統(tǒng)的可靠性較差。基于FPGA器件的電子密碼鎖,所有算法完全由硬
10、件電路實(shí)現(xiàn),使得系統(tǒng)的可靠性大為提高。[2]</p><p> 1.2 電子密碼鎖的發(fā)展前景</p><p> 在當(dāng)今社會(huì)中,人們對(duì)于隱私的保護(hù)和對(duì)物品安全的重視程度與日俱增。因此,使用了現(xiàn)代電子技術(shù)的電子密碼鎖便有了廣泛的應(yīng)用前景。電子密碼鎖與普通機(jī)械密碼鎖相比,具有無可比擬的優(yōu)越性,如保密性好,防盜性強(qiáng),可以不用鑰匙記住密碼即開鎖等,密碼鎖的主要功能是用來對(duì)某些操作進(jìn)行加密保護(hù),目
11、的是避免無權(quán)人員使用,它的實(shí)際應(yīng)用十分廣泛,例如門卡系統(tǒng),自動(dòng)售貨機(jī),銀行自動(dòng)柜員機(jī)或者保險(xiǎn)柜中都含有這種密碼鎖,本次所設(shè)計(jì)的電子密碼鎖,能夠?qū)崿F(xiàn)該四位十進(jìn)制并行密碼保護(hù),當(dāng)輸入的密碼與鎖內(nèi)密碼一致時(shí),綠燈亮,開鎖;當(dāng)輸入的密碼與鎖內(nèi)的密碼不一致時(shí),紅燈亮,不能開鎖。密碼鎖的密碼可由用戶自行設(shè)置,并可在LED數(shù)碼管顯示屏上顯示所輸入的密碼。為人們的財(cái)產(chǎn)、信息安全提供了可靠地保障。[3]</p><p><b
12、> 2.設(shè)計(jì)方案</b></p><p> 圖2-1 方案系統(tǒng)框圖</p><p><b> 2.1 輸入電路</b></p><p> 作為電子密碼鎖的輸入模塊,課題選用的方案有按鍵來控制輸入和觸摸式鍵盤輸入等多種。本實(shí)驗(yàn)主要采用8*4矩陣鍵盤作為輸入電路。其主要分為以下三大模塊:</p><
13、p> (1) 時(shí)序產(chǎn)生模塊:對(duì)主時(shí)鐘進(jìn)行分頻,提供各模塊的時(shí)鐘信號(hào)。</p><p> (2) 按鍵去抖模塊:防止機(jī)械按鍵抖動(dòng)引起誤判。</p><p> (3) 鍵盤掃描模塊:判斷鍵盤輸入的按鍵鍵值。</p><p> 2.2 控制模塊電路</p><p> (1) 預(yù)置密碼寄存器:將密碼設(shè)置模式下輸入的密碼值保存。<
14、;/p><p> (2) 比較模塊:將密碼輸入模式下輸入的密碼與預(yù)置密碼比較,判斷正誤。如果錯(cuò)誤三次則進(jìn)入報(bào)警模式。</p><p> (3) 萬能密碼:避免忘記密碼引起的諸多麻煩。</p><p> 2.3 顯示模塊電路</p><p> 電子密碼鎖的顯示模塊電路可采用LED數(shù)碼管顯示和液晶屏顯示兩種,因液晶顯示屏成本高,適應(yīng)能力差,
15、所以采用LED數(shù)碼管顯示。</p><p> (1) 顯示密碼:在密碼設(shè)置模式下顯示密碼數(shù)值。</p><p> (2) 屏蔽密碼顯示:在密碼輸入狀態(tài)下屏蔽密碼顯示,以防密碼泄露。</p><p> 根據(jù)以上選定的輸入設(shè)備與顯示器件,并考慮現(xiàn)實(shí)各項(xiàng)密碼鎖功能的具體需求,與系統(tǒng)設(shè)計(jì)的要求,系統(tǒng)設(shè)計(jì)采用自頂向下的設(shè)計(jì)方案。</p><p>
16、 3.電子密碼鎖的實(shí)現(xiàn)</p><p> 3.1 系統(tǒng)的總體原理圖</p><p> 圖3-1 系統(tǒng)總體原理圖</p><p> 系統(tǒng)的總體框圖由FPGA作為中心控制模塊,時(shí)鐘輸入與鍵盤掃描輸入作為信號(hào)輸入,LED顯示模塊和報(bào)警模塊作為輸出。FPGA芯片采用Cyclone公司的EP1C12Q240C8作為主控模塊。</p><p>
17、; 3.2 系統(tǒng)各模塊的實(shí)現(xiàn)</p><p> 電子密碼鎖主要有輸入電路模塊、控制電路模塊、顯示電路模塊和報(bào)警電路模塊四個(gè)模塊。由于顯示模塊比較簡單,重點(diǎn)介紹輸入電路、控制電路和報(bào)警電路。</p><p> 3.2.1 時(shí)鐘輸入模塊</p><p> 系統(tǒng)采用1kHz時(shí)鐘作為主頻。因鍵盤掃描模塊的掃描頻率不宜過高,且LED顯示模塊為動(dòng)態(tài)掃描,因此采用1k
18、Hz時(shí)鐘作為系統(tǒng)主時(shí)鐘。</p><p> 3.2.2 鍵盤掃描模塊</p><p> 該系統(tǒng)的鍵盤輸入模塊為8*4矩陣鍵盤,該模塊又劃分為時(shí)鐘產(chǎn)生模塊、鍵盤消抖模塊、鍵盤掃描模塊三部分。</p><p> (1) 時(shí)鐘產(chǎn)生模塊。該時(shí)鐘即為系統(tǒng)主時(shí)鐘1kHz,通過該時(shí)鐘的上升沿產(chǎn)生鍵盤掃描所需的時(shí)鐘。</p><p> (2) 鍵盤
19、消抖模塊。鍵盤消抖模塊是鍵盤掃描中比較關(guān)鍵的部分。通常的按鍵所用開關(guān)為機(jī)械彈性開關(guān),當(dāng)機(jī)械觸點(diǎn)斷開、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開時(shí)也不會(huì)一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng),而這種會(huì)影響鍵盤掃描模塊。[4]如果不作消抖處理,在鍵盤抖動(dòng)期間獲取鍵值,則會(huì)造成鍵值的錯(cuò)誤或丟失,影響系統(tǒng)的穩(wěn)定性。</p><p> 鍵盤消抖分為硬件消抖和軟件消抖,由
20、于硬件消抖在開發(fā)板中難以實(shí)現(xiàn)的局限性,該系統(tǒng)采用的鍵盤消抖方式為軟件消抖:根據(jù)系統(tǒng)時(shí)鐘1kHz且通常的鍵盤抖動(dòng)時(shí)間為10毫秒左右,所以在程序中連續(xù)采樣十次均為同一鍵值時(shí),判定按下的按鍵已通過抖動(dòng)時(shí)間,即鍵值已經(jīng)穩(wěn)定,這時(shí)采樣的鍵值便為正確鍵值。若采樣計(jì)數(shù)器未到達(dá)規(guī)定數(shù)值,則不予獲取鍵值。</p><p> (3) 鍵盤掃描模塊。鍵盤輸入模塊采用的是8*4矩陣鍵盤。該矩陣鍵盤行數(shù)為8,列數(shù)為4,且行掃描信號(hào)通過譯
21、碼芯片74HC138接入信號(hào)Sel3~Sel0。通過給Sel3~Sel0賦值“000”~“111”,行信號(hào)將依次產(chǎn)生“11111110”~“01111111”,由于列引腳通過5k的電阻上拉且矩陣鍵盤列信號(hào)和行信號(hào)的“線與”,當(dāng)行信號(hào)為低電平且該行有按鍵按下時(shí),按鍵所在的列信號(hào)將被拉為低電平,該信號(hào)輸入FPGA控制模塊,由核心控制模塊獲取列信號(hào)的值,即可判斷矩陣鍵盤被按下的鍵值,從而將數(shù)據(jù)發(fā)送LED顯示模塊進(jìn)行顯示。</p>
22、<p> 由于使用電子密碼鎖所需的按鍵為數(shù)不多,因此只需按鍵“0”到按鍵“F”,和功能按鍵“Ctrl”、“Esc”和“Enter”即可。</p><p> 掃描輸出信號(hào)Sel3~Sel0的值及相應(yīng)列信號(hào)返回值對(duì)應(yīng)的鍵值如下表所示。</p><p> 表3-1 矩陣鍵盤鍵值表[5]</p><p> 矩陣鍵盤功能鍵相應(yīng)功能如下表所示:</p
23、><p> 表3-2 功能鍵功能表</p><p> 3.2.3 FPGA控制模塊</p><p> 系統(tǒng)的核心部分FPGA模塊接收系統(tǒng)信號(hào)輸入,處理接收數(shù)據(jù),并為系統(tǒng)外設(shè)輸出信號(hào)。其中的關(guān)鍵部分是處理接受數(shù)據(jù)。該系統(tǒng)圍繞有限狀態(tài)機(jī)(FSM)進(jìn)行設(shè)計(jì),采用的有限狀態(tài)機(jī)類型為Mealy型狀態(tài)機(jī),狀態(tài)的切換不僅與當(dāng)前狀態(tài)有關(guān),并與輸入信號(hào)有關(guān)。下面列出了各狀態(tài)的名
24、稱以及特性。</p><p> (1) 密碼輸入狀態(tài):當(dāng)前狀態(tài)為密碼輸入狀態(tài),由矩陣鍵盤中“0~F”為鍵值的按鍵進(jìn)行輸入,輸入過程中可按下“ESC”鍵進(jìn)行清除。輸入完成后按下“ENTER”鍵進(jìn)行輸入操作的完成,然后由FPGA判斷密碼輸入是否正確。</p><p> (2) 密碼設(shè)置狀態(tài):當(dāng)前狀態(tài)為密碼設(shè)置狀態(tài)。在密碼輸入狀態(tài)下按下“CTRL”進(jìn)入該狀態(tài),同樣由矩陣鍵盤中“0~F”為鍵值
25、的按鍵進(jìn)行輸入,“ESC”鍵進(jìn)行已輸入值的清除。輸入完成下按下“ENTER”鍵進(jìn)行密碼設(shè)置的完成,重新進(jìn)入密碼輸入狀態(tài)。</p><p> (3) 解鎖狀態(tài):當(dāng)前狀態(tài)為解鎖狀態(tài)。在密碼輸入完成后由FPGA將輸入的值與密碼預(yù)設(shè)值進(jìn)行比較,若輸入正確則進(jìn)入解鎖狀態(tài),若不正確則對(duì)錯(cuò)誤次數(shù)進(jìn)行計(jì)數(shù)。解鎖狀態(tài)將點(diǎn)亮解鎖指示燈。</p><p> (4) 報(bào)警狀態(tài):當(dāng)前狀態(tài)為報(bào)警狀態(tài)。當(dāng)連續(xù)三次出
26、現(xiàn)錯(cuò)誤輸入后,將進(jìn)入該狀態(tài)。報(bào)警狀態(tài)將驅(qū)動(dòng)蜂鳴器報(bào)警,并且鎖定鍵盤。進(jìn)入該狀態(tài)后將無法進(jìn)入其他狀態(tài)。</p><p> 3.2.4 LED顯示模塊</p><p> 顯示模塊采用4位共陰極數(shù)碼管進(jìn)行顯示。在多位LED顯示時(shí),為了簡化電路,降低成本,將所有的段選線并聯(lián)在一起,段選碼,每送一次后延時(shí),因?yàn)槿搜垡曈X暫留時(shí)間100ms顯示間隙不超過20ms,并保持延時(shí)一段時(shí)間,以造成視覺暫留
27、效果,給人看上去每個(gè)數(shù)碼管都在亮。[6]</p><p> (1) 密碼輸入狀態(tài):在密碼輸入狀態(tài)要求用特殊字符對(duì)密碼值進(jìn)行屏蔽,采用該位數(shù)碼管8段全亮的方法。</p><p> (2) 密碼設(shè)置狀態(tài):在密碼設(shè)置狀態(tài)對(duì)已輸入的密碼值進(jìn)行顯示,以免產(chǎn)生用戶忘記密碼造成諸多不便的情況。</p><p><b> 4.設(shè)計(jì)驗(yàn)證</b></p
28、><p><b> 4.1 軟件仿真</b></p><p> 4.1.1 LED顯示模塊</p><p> 圖4-1 LED顯示模塊仿真波形</p><p> 使用Quartus II軟件對(duì)LED顯示模塊進(jìn)行時(shí)序仿真。如圖4-1所示,在每個(gè)時(shí)鐘信號(hào)的上升沿,4位數(shù)碼管的位選信號(hào)增加1,且數(shù)碼管的段選信號(hào)為相應(yīng)的數(shù)
29、值的段碼,實(shí)現(xiàn)了數(shù)碼管的動(dòng)態(tài)掃描功能。</p><p> 4.1.2 軟件按鍵去抖模塊</p><p> 圖4-2 軟件按鍵去抖模塊仿真波形</p><p> 圖4-2為軟件按鍵去抖模塊的仿真波形。該波形中的列選信號(hào)從高電平變?yōu)榈碗娖降倪^程中產(chǎn)生了大約8ms的抖動(dòng)。從圖中可以看出低電平計(jì)數(shù)器“Counter”在抖動(dòng)期間幾乎沒有計(jì)數(shù),而在抖動(dòng)消失之后計(jì)數(shù)器的值
30、到達(dá)5,系統(tǒng)此時(shí)取走鍵值,即四位密碼中的最高位取走鍵值。從圖中易觀察得到仿真波形中該次按鍵的鍵值為“9”,從而賦值給“Code3”,由“Word3”顯示其值。因此可以得出結(jié)論,該軟件去抖方法具有較好的效果,可以有效地去除鍵盤抖動(dòng)。</p><p> 4.1.3 鍵盤掃描模塊</p><p> 圖4-3 鍵盤掃描模塊仿真波形</p><p> 圖4-3為鍵盤掃描
31、模塊仿真波形。按下對(duì)應(yīng)按鍵,“Word3”由初始值“0”變?yōu)椤?”,同時(shí)數(shù)碼管的段選信號(hào)在位選信號(hào)為“011”時(shí)其值為“7F”,即共陰數(shù)碼管中數(shù)值“8”的段碼。此仿真波形可證明按鍵按下后系統(tǒng)可正確獲取鍵值并正確地顯示在數(shù)碼管上。</p><p> 經(jīng)過以上三步軟件仿真,可初步證明該設(shè)計(jì)的合理性和完整性。由于輸入時(shí)間超時(shí)等功能較簡單,可在硬件電路上直接驗(yàn)證,因此不再贅述。但是軟件仿真的成功不代表硬件電路的實(shí)現(xiàn),因
32、此在EDA V+試驗(yàn)箱連接硬件電路并驗(yàn)證實(shí)際電路的可行性。</p><p><b> 4.2 硬件驗(yàn)證</b></p><p> 圖4-4 密碼輸入狀態(tài)實(shí)圖</p><p> 圖4-5 密碼輸入正確狀態(tài)實(shí)圖</p><p> 經(jīng)驗(yàn)證和調(diào)試,該設(shè)計(jì)完成了電子密碼鎖的開鎖、解鎖、改密碼等基本功能。如圖4-4所示,該圖
33、為密碼輸入狀態(tài),未進(jìn)入輸入狀態(tài)的三位密碼均以數(shù)碼管8段全亮方式屏蔽。如圖4-5所示,該圖為密碼輸入正確狀態(tài),開發(fā)板左側(cè)LED指示燈點(diǎn)亮,說明密碼輸入無誤。當(dāng)用戶密碼連續(xù)三次輸入錯(cuò)誤時(shí),蜂鳴器報(bào)警并且鎖定鍵盤。超時(shí)功能為在密碼輸入或設(shè)置密碼狀態(tài)下5秒無輸入動(dòng)作時(shí),超時(shí)提示燈亮。萬能密碼為“FFFF”,該功能亦實(shí)現(xiàn)。在密碼設(shè)置狀態(tài)下顯示密碼值,在密碼輸入狀態(tài)下用數(shù)碼管八段全亮屏蔽密碼,即如上圖所示。經(jīng)過驗(yàn)證,證明該設(shè)計(jì)較好地完成了設(shè)計(jì)的要求
34、。</p><p><b> 5.總結(jié)</b></p><p> 這次EDA技術(shù)課程設(shè)計(jì)我們做的是電子密碼鎖的設(shè)計(jì)。在課程設(shè)計(jì)的過程中雖然碰到了諸多難題,但是在組員的努力下還是一一解決了。課程設(shè)計(jì)的完成度總體還差強(qiáng)人意,完成了課程設(shè)計(jì)的所有基本要求,另外在擴(kuò)展方面也做了一小部分,是一次非常有益的鍛煉。</p><p> 課程設(shè)計(jì)的總結(jié)有以
35、下幾點(diǎn)。首先是查找資料的過程,平時(shí)我們都習(xí)慣于直接在網(wǎng)上查找資料。但是網(wǎng)上的資料良莠不齊,難以辨別資料的好壞,因此選擇在圖書館查找資料和在維普網(wǎng)查找專業(yè)人士發(fā)表的期刊。我主要負(fù)責(zé)程序的編寫,在編程的過程中也是碰到了不少問題,比如矩陣鍵盤的掃描問題,VHDL的所有進(jìn)程是并發(fā)進(jìn)程,因此在控制其時(shí)序方面不如C語言那樣簡明和易于控制。這點(diǎn)是值得我們學(xué)習(xí)的,控制系統(tǒng)的復(fù)雜性和全局性也有利于編程能力的提升。同時(shí)也感謝指導(dǎo)老師的不吝指導(dǎo),幫助我們分析
36、和解決問題,在此過程中收益頗豐,讓我懂得了分析問題的循序漸進(jìn)是很重要的。當(dāng)碰到問題時(shí)不應(yīng)該盲目嘗試各種方法解決問題,而是應(yīng)該理性分析然后選擇最優(yōu)方案??傊@次課程設(shè)計(jì)讓我的研究能力又有了提高,是非常有益的。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 薛明明.VHDL設(shè)計(jì)電子密碼鎖[J].吉林省教育學(xué)院學(xué)報(bào).2012,28(10):148
37、-150</p><p> [2] 曹昕燕.EDA技術(shù)實(shí)驗(yàn)與課程設(shè)計(jì)[M].第一版.北京:清華大學(xué)出版社,2006.117-119</p><p> [3] 李秀霞.電子系統(tǒng)EDA設(shè)計(jì)實(shí)訓(xùn)[M].第一版.北京.北京航空航天大學(xué)出版社,2011.237-260</p><p> [4] bankrate1.按鍵消抖[EB/OL].http://baike.bai
38、du.com/link?url=K5bBPgbznRydXAASg_cyYc</p><p> GWcoUtp7AQig1QexDEmTqzGJ5j4P2rAhSxpH8sYEDkS1xjUjzLG5NSCx28wA3upq,2014.1.7</p><p> [5] 鄒其洪.EDA技術(shù)實(shí)驗(yàn)教程[M].第一版.北京:中國電力出版社,2009.117-119</p><
39、;p> [6] 李珍.基于FPGA的可靠性電子密碼鎖設(shè)計(jì)[J].現(xiàn)代電子技術(shù).2013,36(7):151-153</p><p><b> 附錄源碼</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use
40、 ieee.std_logic_unsigned.all;</p><p> entity Lock is</p><p> port(Clock:in std_logic; --Main Clock Input:1KHz</p><p> Column:in std_logic_vector(3 downt
41、o 0); --Matrix Keyboard Input</p><p> LEDSegment:out std_logic_vector(7 downto 0); --LED Segment Selection</p><p> Sel:buffer std_logic_vector(2 downto 0):="000"; --LED Positi
42、on Selection and Key Position</p><p> Alarm,LED,NoticeLED:out std_logic:='0' ; --Wrong Code Input Warning and Unlock Signal</p><p> Word0,Word1,Word2,Word3:out integer range 0 to 30;
43、</p><p> Counter:out integer range 0 to 50000</p><p><b> );</b></p><p> end entity Lock;</p><p> architecture bhv of Lock is</p><p> Type
44、FSM_TypeDef is(</p><p> InputState3,InputState2,InputState1,InputState0,InputStateDone,</p><p> SetState0,SetState1,SetState2,SetState3,SetStateDone,</p><p> UnlockState,WarningS
45、tate); --FSM Definition</p><p> signal State:FSM_TypeDef:=InputState3;</p><p> signal Set0,Set1,Set2,Set3:integer range 0 to 30:=15; --PreSet Code:"FFFF"</p><p> si
46、gnal Code0,Code1,Code2,Code3:integer range 0 to 30:=0; --Code Input</p><p> signal Show0,Show1,Show2,Show3:integer range 0 to 30; --Numbers Used to Display</p><p> signal DivCounter:integer r
47、ange 0 to 500:=0; --Counter Used to Frequence Division</p><p> signal KeyCounter:integer range 0 to 50000:=0;--Counter Used to Clear Keyboard Trembling</p><p> signal KeyValue:integer range 0
48、 to 30; --KeyValue returned</p><p> signal ErrorCounter:integer range 0 to 3:=0; --Error Times Counter</p><p> signal EClock:std_logic;</p><p> signal Loose:std_logic_vector(7
49、downto 0); --Signal Used to Judge Key Loosen or not</p><p> signal NoticeCounter:integer range 0 to 5000:=0;--Input Overtime Counter</p><p> function Decode(signal x:in integer range 0 to 30)-
50、-LED Decode Function</p><p> return std_logic_vector is</p><p><b> begin</b></p><p><b> case x is</b></p><p> when 0=>return x"3f&qu
51、ot;;</p><p> when 1=>return x"06";</p><p> when 2=>return x"5b";</p><p> when 3=>return x"4f";</p><p> when 4=>return x&qu
52、ot;66";</p><p> when 5=>return x"6d";</p><p> when 6=>return x"7d";</p><p> when 7=>return x"07";</p><p> when 8=>ret
53、urn x"7f";</p><p> when 9=>return x"6f";</p><p> when 10=>return x"77";</p><p> when 11=>return x"7c";</p><p> when
54、 12=>return x"39";</p><p> when 13=>return x"5e";</p><p> when 14=>return x"79";</p><p> when 15=>return x"71";</p>&
55、lt;p> when 20=>return x"40";</p><p> when 30=>return x"ff";</p><p> when 25=>return x"00";</p><p> when others=>return x"40&quo
56、t;;</p><p><b> end case;</b></p><p> end function;</p><p><b> BEGIN</b></p><p> ----Assignments----</p><p> Alarm<=
57、'1' when State=WarningState else</p><p><b> '0';</b></p><p> LED<='1' when State=UnlockState else</p><p><b> '0';</b>&l
58、t;/p><p> Show0<=20 when (((State=SetState0 or State=InputState0)and EClock='1') or State=UnlockState) else</p><p> Set0 when (State=SetState3 or State=SetState2 or State=SetState1 or
59、 State=SetStateDone) else</p><p> 30 when (State=WarningState or State=InputState3 or State=InputState2 or State=InputState1 or State=InputStateDone) else</p><p> 25 when ((State=SetState0 or
60、 State=InputState0)and EClock='0') else</p><p> 20; -----UnlockState and WarningState</p><p> Show1<=20 when (((State=SetState1 or State=InputState1)and EClock='1') or St
61、ate=UnlockState) else</p><p> Set1 when (State=SetState3 or State=SetState2 or State=SetState0 or State=SetStateDone) else</p><p> 30 when (State=WarningState or State=InputState3 or State=In
62、putState2 or State=InputState0 or State=InputStateDone) else</p><p> 25 when ((State=SetState1 or State=InputState1)and EClock='0') else</p><p><b> 20;</b></p><
63、p> Show2<=20 when (((State=SetState2 or State=InputState2)and EClock='1') or State=UnlockState) else</p><p> Set2 when (State=SetState3 or State=SetState0 or State=SetState1 or State=SetStat
64、eDone) else</p><p> 30 when (State=WarningState or State=InputState3 or State=InputState0 or State=InputState1 or State=InputStateDone) else</p><p> 25 when ((State=SetState2 or State=InputSt
65、ate2)and EClock='0') else</p><p><b> 20;</b></p><p> Show3<=20 when (((State=SetState3 or State=InputState3)and EClock='1') or State=UnlockState) else</p>
66、<p> Set3 when (State=SetState0 or State=SetState2 or State=SetState1 or State=SetStateDone) else</p><p> 30 when (State=WarningState or State=InputState0 or State=InputState2 or State=InputState1
67、or State=InputStateDone) else</p><p> 25 when ((State=SetState3 or State=InputState3)and EClock='0') else</p><p><b> 20;</b></p><p> Word0<=Show0;</p>
68、;<p> Word1<=Show1;</p><p> Word2<=Show2;</p><p> Word3<=Show3;</p><p> Counter<=KeyCounter;</p><p> Division:process(Clock) --Clock Divsion Pr
69、ocess</p><p><b> begin</b></p><p> if Clock'event and Clock='1' then</p><p> if DivCounter=250 then</p><p> EClock<=not EClock;</p>
70、<p> DivCounter<=0;</p><p><b> else</b></p><p> DivCounter<=DivCounter+1;</p><p><b> end if;</b></p><p><b> end if;</
71、b></p><p> end process Division;</p><p> MAIN:process(Clock) --Main Process</p><p><b> begin</b></p><p> if Clock'event and Clock='1' the
72、n</p><p> -------Signal Sel Assignment Cycle-------</p><p> if Sel="111" then</p><p> Sel<="000";</p><p><b> else</b></p>
73、<p> Sel<=Sel+1;</p><p><b> end if;</b></p><p> KeyValue<=20;--KeyValue Initial Value Assignment</p><p> case Sel is</p><p> when &qu
74、ot;000"=>LEDSegment<=Decode(Show1);</p><p> case Column is</p><p> when "1110"=>KeyValue<=0; Loose<="00000000"; --KeyValue Returned</p><p
75、> when "1101"=>KeyValue<=6; Loose<="00000000";</p><p> when "1011"=>KeyValue<=20; Loose<="00000000";</p><p> when "01
76、11"=>KeyValue<=16; Loose<="00000000";</p><p> when "1111"=>Loose(0)<='1'; </p><p> when others=>null;</p><p><b> en
77、d case;</b></p><p> when "001"=>LEDSegment<=Decode(Show2);</p><p> case Column is</p><p> when "1110"=>KeyValue<=1; Loose<="0000
78、0000";</p><p> when "1101"=>KeyValue<=7; Loose<="00000000";</p><p> when "1011"=>KeyValue<=20; Loose<="00000000";</p&g
79、t;<p> when "0111"=>KeyValue<=20; Loose<="00000000";</p><p> when "1111"=>Loose(1)<='1';</p><p> when others=>null;</p>
80、;<p><b> end case;</b></p><p> when "010"=>LEDSegment<=Decode(Show3);</p><p> case Column is</p><p> when "1110"=>KeyValue<=2;
81、 Loose<="00000000";</p><p> when "1101"=>KeyValue<=20; Loose<="00000000";</p><p> when "1011"=>KeyValue<=12; Loose<=&qu
82、ot;00000000";</p><p> when "0111"=>KeyValue<=20; Loose<="00000000";</p><p> when "1111"=>Loose(2)<='1';</p><p> when
83、 others=>null;</p><p><b> end case;</b></p><p> when "011"=>LEDSegment<=x"00";</p><p> case Column is</p><p> when "1
84、110"=>KeyValue<=3; Loose<="00000000";</p><p> when "1101"=>KeyValue<=20; Loose<="00000000";</p><p> when "1011"=>KeyVa
85、lue<=13; Loose<="00000000";</p><p> when "0111"=>KeyValue<=20; Loose<="00000000";</p><p> when "1111"=>Loose(3)<='1'
86、;;</p><p> when others=>null;</p><p><b> end case;</b></p><p> when "100"=>LEDSegment<=x"00";</p><p> case Column is</p
87、><p> when "1110"=>KeyValue<=20; Loose<="00000000";</p><p> when "1101"=>KeyValue<=8; Loose<="00000000";</p><p> wh
88、en "1011"=>KeyValue<=14; Loose<="00000000";</p><p> when "0111"=>KeyValue<=20; Loose<="00000000";</p><p> when "1111"
89、;=>Loose(4)<='1';</p><p> when others=>null;</p><p><b> end case;</b></p><p> when "101"=>LEDSegment<=x"00";</p>&l
90、t;p> case Column is</p><p> when "1110"=>KeyValue<=19; Loose<="00000000";</p><p> when "1101"=>KeyValue<=9; Loose<="00000000&qu
91、ot;;</p><p> when "1011"=>KeyValue<=15; Loose<="00000000";</p><p> when "0111"=>KeyValue<=20; Loose<="00000000";</p>&l
92、t;p> when "1111"=>Loose(5)<='1';</p><p> when others=>null;</p><p><b> end case;</b></p><p> when "110"=>LEDSegment<=x&
93、quot;00";</p><p> case Column is</p><p> when "1110"=>KeyValue<=4; Loose<="00000000";</p><p> when "1101"=>KeyValue<=10;
94、 Loose<="00000000";</p><p> when "1011"=>KeyValue<=20; Loose<="00000000";</p><p> when "0111"=>KeyValue<=20; Loose<="0
95、0000000";</p><p> when "1111"=>Loose(6)<='1';</p><p> when others=>null;</p><p><b> end case;</b></p><p> when "111
96、"=>LEDSegment<=Decode(Show0);</p><p> case Column is</p><p> when "1110"=>KeyValue<=5; Loose<="00000000";</p><p> when "1101&quo
97、t;=>KeyValue<=11; Loose<="00000000";</p><p> when "1011"=>KeyValue<=17; Loose<="00000000";</p><p> when "0111"=>KeyValue<
98、;=20; Loose<="00000000";</p><p> when "1111"=>Loose(7)<='1';</p><p> when others=>null;</p><p><b> end case;</b></p>
99、<p> when others=>null;</p><p><b> end case;</b></p><p> if Loose="11111111" then --Means All Keys Loosen</p><p> KeyCounter<=0;</p>&l
100、t;p> ----Input Overtime Notice Detector----</p><p> if(not (State=WarningState or State=UnlockState)) then</p><p> NoticeCounter<=NoticeCounter+1;</p><p><b> end if;
101、</b></p><p> if (NoticeCounter=5000 and (not(State=WarningState or State=UnlockState))) then --Keyboard Input Overtime</p><p> NoticeLED<='1';</p><p> NoticeCoun
102、ter<=0;</p><p><b> end if;</b></p><p> elsif (State=WarningState or State=UnlockState) then</p><p> NoticeLED<='0';</p><p> NoticeCounter&
103、lt;=0;</p><p><b> else</b></p><p> NoticeLED<='0';</p><p> NoticeCounter<=0;</p><p><b> end if;</b></p><p> if (
104、not (KeyValue=20)) then</p><p> KeyCounter<=KeyCounter+1; ---A Delay For Key Pressed</p><p> if KeyCounter=5 then ---Key Being Pressed Lasts 5ms</p><p> cas
105、e State is</p><p> when InputState3=>if (KeyValue=16) then</p><p> State<=SetState3;</p><p> elsif (not(KeyValue=17 or KeyValue=19)) then</p><p> Code3<=Ke
106、yValue;</p><p> State<=InputState2;</p><p><b> end if;</b></p><p> when InputState2=></p><p> if KeyValue=19 then</p><p> State<=
107、InputState3;</p><p> elsif (KeyValue=16) then </p><p> State<=SetState3;</p><p> elsif (not (KeyValue=17)) then</p><p> Code2<=KeyValue;</p><p>
108、 State<=InputState1;</p><p><b> end if;</b></p><p> when InputState1=></p><p> if KeyValue=19 then</p><p> State<=InputState3;</p><p
109、> elsif (KeyValue=16) then </p><p> State<=SetState3;</p><p> elsif (not (KeyValue=17)) then</p><p> Code1<=KeyValue;</p><p> State<=InputState0;</p
110、><p><b> end if;</b></p><p> when InputState0=></p><p> if KeyValue=19 then</p><p> State<=InputState3;</p><p> elsif (KeyValue=16) the
111、n </p><p> State<=SetState3;</p><p> elsif (not (KeyValue=17)) then</p><p> Code0<=KeyValue;</p><p> State<=InputStateDone;</p><p><b>
112、end if;</b></p><p> when InputStateDone=></p><p> if KeyValue=19 then</p><p> State<=InputState3;</p><p> elsif (KeyValue=16) then </p><p>
113、 State<=SetState3;</p><p> elsif KeyValue=17 then</p><p> if ((Code0=Set0 and Code1=Set1 and Code2=Set2 and Code3=Set3) or</p><p> (Code0=15 and Code1=15 and Code2=15 and Cod
114、e3=15))then --Universal Code</p><p> State<=UnlockState;</p><p> ErrorCounter<=0;</p><p><b> else</b></p><p> ErrorCounter<=ErrorCounter+1;&l
115、t;/p><p> if(ErrorCounter=2) then</p><p> State<=WarningState;</p><p><b> else</b></p><p> State<=InputState3;</p><p><b> end if;
116、</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> when SetState3=></p><p> if (not(KeyValue=16 or KeyValue=17 or KeyValue=
117、19))then</p><p> Set3<=KeyValue;</p><p> State<=SetState2;</p><p><b> end if;</b></p><p> when SetState2=></p><p> if KeyValue=19
118、 then</p><p> State<=SetState3;</p><p> elsif (not (KeyValue=16 or KeyValue=17))then</p><p> Set2<=KeyValue;</p><p> State<=SetState1;</p><p>
119、<b> end if;</b></p><p> when SetState1=></p><p> if KeyValue=19 then</p><p> State<=SetState3;</p><p> elsif (not (KeyValue=16 or KeyValue=17))th
120、en</p><p> Set1<=KeyValue;</p><p> State<=SetState0;</p><p><b> end if;</b></p><p> when SetState0=></p><p> if KeyValue=19 then&
121、lt;/p><p> State<=SetState3;</p><p> elsif (not (KeyValue=16 or KeyValue=17))then</p><p> Set0<=KeyValue;</p><p> State<=SetStateDone;</p><p><
122、;b> end if;</b></p><p> when SetStateDone=></p><p> if KeyValue=19 then</p><p> State<=SetState3;</p><p> elsif KeyValue=17 then</p><p>
123、; State<=InputState3;</p><p><b> end if;</b></p><p> when UnlockState=></p><p> if KeyValue=19 then</p><p> State<=InputState3;</p><
124、;p><b> end if;</b></p><p> when WarningState=>NULL; --Lock Keyboard</p><p> when others => null;</p><p> end case;</p><p><b>
125、; end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process MAIN;</p><p> end architecture bhv;</p><p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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)論