北郵密碼鎖小學(xué)期報(bào)告_第1頁
北郵密碼鎖小學(xué)期報(bào)告_第2頁
北郵密碼鎖小學(xué)期報(bào)告_第3頁
北郵密碼鎖小學(xué)期報(bào)告_第4頁
北郵密碼鎖小學(xué)期報(bào)告_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、北京郵電大學(xué)電路綜合實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:學(xué)生姓名:班級(jí): 小班學(xué)號(hào):同組姓名:E-MAIL:目錄一 設(shè)計(jì)目的、用途、功能二 硬件設(shè)計(jì)三、軟件設(shè)計(jì)四、實(shí)驗(yàn)器材五、實(shí)驗(yàn)過程六、 分工情況七、實(shí)驗(yàn)總結(jié)和心得體會(huì)八、參考文獻(xiàn)九、代碼摘要:本項(xiàng)目是做一個(gè)基于ATMega 16單片機(jī)的電子密碼鎖,通過4×4鍵盤和LCD液晶顯示,實(shí)現(xiàn)了密碼鎖的密碼驗(yàn)證、重新設(shè)置、輸入錯(cuò)誤后報(bào)警直到復(fù)位后啟動(dòng)倒計(jì)時(shí)功能,在倒計(jì)時(shí)內(nèi)鍵盤自動(dòng)鎖死,倒計(jì)時(shí)結(jié)束后恢復(fù)所有功能等一些基本功能,通過LCD的巧妙使用實(shí)現(xiàn)友好的人機(jī)界面功能,更具人性化,除此之外還創(chuàng)新性的實(shí)現(xiàn)了LCD的開鎖功能和鍵盤的重新定義。通過LCD的開鎖功能和

2、對(duì)鍵盤的重新定義以及倒計(jì)時(shí)功能可以有效地防止密碼被盜,同時(shí)也降低了成本,便于攜帶安裝。關(guān)鍵字:ATMega16 單片機(jī) 、密碼鎖、 鍵盤、 LCD 、開鎖、倒計(jì)時(shí) 一設(shè)計(jì)目的、用途、功能1設(shè)計(jì)目的隨著科技的發(fā)展,安全問題越來越受到人們重視,不僅居家安全受到重視,出門在外行李物品的安全問題也受到了很多關(guān)注,在此基礎(chǔ)上各種安全產(chǎn)品相繼問世,如指紋防盜,紅外防盜等,雖然這類產(chǎn)品的安全性較高,但其成本也同樣較高,并且攜帶安裝不方便,這種種缺點(diǎn)限制了其發(fā)展。本設(shè)計(jì)的目的就是為了在保證高安全性的前提下,實(shí)現(xiàn)降低成本,方便攜帶安裝的功能,真正服務(wù)于人民。當(dāng)然對(duì)于密碼鎖,我們接觸最多的就是取款機(jī)了,我們?cè)O(shè)計(jì)的

3、這個(gè)密碼鎖,與眾不同的地方就是我們可以讓我們的液晶顯示屏無限循環(huán)的顯示操作指南,只有當(dāng)你按下鍵盤上的任意一個(gè)鍵的時(shí)候才可以終止這種循環(huán)。還有一點(diǎn),就是我們的密碼鎖加了倒計(jì)時(shí)這個(gè)功能,當(dāng)輸入錯(cuò)誤次數(shù)超過三次的時(shí)候,就不能再輸入了,更加安全。2. 設(shè)計(jì)用途由于本設(shè)計(jì)成本較低且安全性能穩(wěn)定,可適用于家庭防盜、行李箱、車載行李箱等一些安全性能要求不高且需要便攜的產(chǎn)品上,其安全性能遠(yuǎn)遠(yuǎn)優(yōu)于同等成本的安全性。其中輸入密碼錯(cuò)誤無限報(bào)警和自動(dòng)鎖死的功能能提高用戶的警覺性,降低失竊率。更重要的是本設(shè)計(jì)的鍵盤重新定義的思想可移植到自動(dòng)提款機(jī)、公共場合的提款裝置等,可以防止用戶輸入密碼時(shí)被別人偷看、竊取等,增加用戶

4、提款時(shí)的安全性。LCD具有良好的人機(jī)友好界面,在未開鎖之前顯示“welcome”,并且只有知道如何開鎖才能使用密碼鎖,進(jìn)一步提高了安全性能。3 設(shè)計(jì)功能(1)系統(tǒng)功能:1、 密碼鍵盤的輸入:包括0-9數(shù)字輸入、A-F為功能鍵。鍵盤默認(rèn)如下:1 2 3 4 5 6 7 8 9 0 A B C D E F其中A代表reset(復(fù)位),B代表*,C代表關(guān)鎖,D 代表clear(刪除),E代表change(修改),F(xiàn)代表#。2、 液晶顯示:主要用于液晶顯示屏將具體輸入數(shù)字用*號(hào)代替,便于用戶看到自己是否輸入六位。最開始顯示“Welcome”字樣,然后顯示操作指南“A=reset,B=*,C=close

5、,D=del,E=change,F=#,”密碼輸入正確顯示“right”,密碼輸入錯(cuò)誤顯示“wrong”。(2)處理技術(shù):1、 密碼正誤信息輸出:“確認(rèn)”輸入后,掃描鍵盤,與EEPROM中的內(nèi)置密碼相比較,若相同,進(jìn)入“密碼重置”功能;否則,在三次提示輸入錯(cuò)誤后蜂鳴器鳴響報(bào)警。2、 密碼重置:密碼正確后,提示是否修改密碼,修改按“g”。兩次輸入一致后修改內(nèi)置密碼并液晶屏文字提示。否則進(jìn)入“開鎖功能”。(3)擴(kuò)展功能:倒計(jì)時(shí)功能:密碼三次輸入錯(cuò)誤后需間隔1分鐘(或更久)后才能再次輸入,需兩位數(shù)碼管進(jìn)入倒計(jì)時(shí)。液晶顯示變幻:可實(shí)現(xiàn)閃爍,無限滾動(dòng)等效果(利用C語言編程實(shí)現(xiàn))?;驹恚憾布O(shè)計(jì)1系

6、統(tǒng)硬件設(shè)計(jì)思路系統(tǒng)以Atmega16單片機(jī)為控制核心,4*4鍵盤作為輸入模塊,1602液晶顯示屏作為顯示模塊實(shí)現(xiàn)密碼鎖的各項(xiàng)功能。(1) 系統(tǒng)硬件方框圖如下:LED顯示燈鍵盤輸入模塊電磁鎖控制繼電器喇叭+5V供電模塊1602液晶Atmega16單片機(jī)用做控制中心(2)系統(tǒng)工作的流程圖如下輸入密碼 判斷密碼正誤錯(cuò)誤 重新輸入判斷三次內(nèi)是否輸入正確蜂鳴器鳴響,LED燈滅(代表關(guān)閉),進(jìn)入倒計(jì)時(shí)1分鐘是修改密碼及確認(rèn)LED燈亮(代表開啟) 判斷密碼正誤 判斷密碼正誤正確錯(cuò)誤錯(cuò)誤判斷是否修改密碼 重新輸入 重新輸入判斷是否修改密碼判斷三次內(nèi)是否輸入正確正確否是是否否LED燈亮(代表開啟)修改密碼及確認(rèn)

7、LED燈亮(代表開啟)修改密碼及確認(rèn)錯(cuò)誤2電路連接原理(1)鍵盤電路:4*4鍵盤采用行列式鍵盤,使用單片機(jī)的8個(gè)I/O端口就可以控制16個(gè)按鍵。鍵盤的8個(gè)引腳分別接在PORTB的8個(gè)端口。對(duì)鍵盤進(jìn)行掃描時(shí),可以采用查詢掃描的方法:先對(duì)一行進(jìn)行掃描,再對(duì)列進(jìn)行掃描,直至將每行每列都掃描一次,通過單片機(jī)端口電平的變化,判斷哪個(gè)按鍵被按下。(2)LCD液晶顯示電路:1602液晶主要用于與用戶交互,提示密碼輸入狀態(tài)和顯示結(jié)果。其中LCD的714號(hào)引腳分別連結(jié)單片機(jī)的PORTA各端口,用于數(shù)據(jù)的并行傳輸。46號(hào)引腳與PC0,PC1,PC7相連,分別控制RS(數(shù)據(jù)/指令寄存器選擇)、RW(讀寫選擇引腳)、

8、E(讀寫使能引腳)。相關(guān)功能,我們參照1602的數(shù)據(jù)手冊(cè)。(3)蜂鳴器電路:蜂鳴器電路用于報(bào)警。當(dāng)密碼輸入錯(cuò)誤時(shí),單片機(jī)的PD1端口便會(huì)輸出高電平,蜂鳴器即發(fā)出報(bào)警聲。(4)開鎖電路:在此,用指示燈模擬繼電器。當(dāng)密碼輸入正確時(shí),單片機(jī)的PD0端口便會(huì)輸出高電平,此時(shí)發(fā)光二極管發(fā)光。如果二極管亮,說明鎖已開;如果不亮,則鎖未打開。3電路原理圖三、軟件設(shè)計(jì)1程序設(shè)計(jì)思想(1)鍵盤掃描:鍵盤掃描程序的流程圖如下圖所示。對(duì)鍵盤進(jìn)行查詢掃描,確定有鍵按下后,讀取鍵值,進(jìn)行延時(shí)去抖,再次讀取鍵值,若兩次鍵值相等則返回鍵值。一般情況下,我們運(yùn)用軟件進(jìn)行延時(shí)去抖,通常用delay_ms(10),在此期間CPU

9、不能進(jìn)行其它工作。(2)LCD顯示程序:根據(jù)1602的數(shù)據(jù)手冊(cè),我們可以針對(duì)其各引腳的定義和內(nèi)部結(jié)構(gòu),定義顯示字符函數(shù)、顯示字符串函數(shù)、清屏函數(shù)和初始化函數(shù),在后續(xù)程序中調(diào)用即可。(3)整體流程:此程序通過設(shè)置多個(gè)全局變量把各部分的程序統(tǒng)一成為整體。其中input_sign用于標(biāo)記是否有鍵按下,當(dāng)其為1時(shí)代表有鍵按下;state用于標(biāo)記功能,state=0代表輸入密碼,state=1代表密碼輸入成功,state=2代表改密碼,state=3代表修改鍵盤,state=4代表功能選擇;數(shù)組password用于存儲(chǔ)密碼;數(shù)組key用于存儲(chǔ)鍵值。運(yùn)用if語句即可實(shí)現(xiàn)各種功能。四、實(shí)驗(yàn)器材實(shí)驗(yàn)器材4*4

10、鍵盤1個(gè)1602液晶顯示1個(gè)蜂鳴器1個(gè)發(fā)光二極管1個(gè)五、實(shí)驗(yàn)過程1實(shí)驗(yàn)歷程(1)9月22日 確定設(shè)計(jì)方案(2)9月23日-25日上午 第一實(shí)驗(yàn)周期9月23日,上午進(jìn)行視頻學(xué)習(xí),下午完成電路的一些基本的連接。9月24日上午,檢查硬件和管腳。觀看關(guān)于鍵盤和液晶顯示的所有視頻。有一個(gè)初步的想法。完成所有電路的連線和布局。9月24日下午,確定原設(shè)計(jì)方案下管腳不夠。更改設(shè)計(jì)方案:取消數(shù)碼管,準(zhǔn)備將倒計(jì)時(shí)功能模塊置于液晶屏上顯示。此時(shí)出現(xiàn)芯片無法寫入的情況。9月25日上午,和同組同學(xué)經(jīng)過多方排除故障原因,最終更換芯片解決問題。編寫掃描鍵盤和在液晶顯示屏上兩個(gè)大函數(shù)。(3)9月25日中午-9月27日上午 第

11、二實(shí)驗(yàn)周期9月25日中午,完成線路重新設(shè)計(jì)及布局。進(jìn)入單步功能實(shí)現(xiàn)及測試。9月25日下午,按照設(shè)計(jì)思想編寫代碼,主要是寫鍵盤控制狀態(tài)的那個(gè)功能函數(shù),主要解決鍵盤控制不了顯示屏的問題9月26日上午,解決了鍵盤的控制問題。然后檢測并實(shí)現(xiàn)了前邊寫的LED雙行顯示功能。9月26日下午,編好了顯示屏和鍵盤的所有函數(shù),并調(diào)試成功。(3)9月26日晚至9月27日上午26日晚調(diào)試基本功能成功。并經(jīng)過十幾次的測試,解決了好多細(xì)小的問題。和同伴編寫了倒計(jì)時(shí)的代碼。27日上午,在其基礎(chǔ)上添加顯示指南代碼,進(jìn)行整體功能調(diào)試。并請(qǐng)老師驗(yàn)收了實(shí)驗(yàn)。2系統(tǒng)測試過程和結(jié)果(截圖)(1)歡迎界面 (2)操作指南無限循環(huán) (3)

12、當(dāng)任意按一個(gè)鍵,進(jìn)入鍵盤解鎖界面 (4)進(jìn)入輸入密碼界面 (5)輸入六位密碼 (6)判斷正誤(左邊正確,右邊錯(cuò)誤) (7)如果正確,進(jìn)入判斷是否修改密碼界面 (8)修改密碼,輸入兩次確認(rèn) (9)如果輸入錯(cuò)誤達(dá)到三次,進(jìn)入倒計(jì)時(shí) (10)倒計(jì)時(shí)結(jié)束,恢復(fù)到初始狀態(tài) 六、 分工情況(1)分工:李向前:在第一次實(shí)驗(yàn)周期中解決電路連接中管腳不夠,芯片無法寫入的問題,確定解決方案。負(fù)責(zé)LED顯示屏代碼的編寫和原理研究,編程實(shí)現(xiàn)雙行滾動(dòng)顯示的功能段代碼,并在最后實(shí)驗(yàn)調(diào)試中發(fā)揮了較大作用。閆圓圓:負(fù)責(zé)兩次實(shí)驗(yàn)周期中的布線工作。認(rèn)真研究鍵盤原理,實(shí)現(xiàn)鍵盤模塊功能,編寫了鍵盤的掃描函數(shù)和鍵盤相應(yīng)狀態(tài)控制函數(shù),當(dāng)

13、然也完成了其它一些小函數(shù)的編寫。在最后實(shí)驗(yàn)調(diào)試中提出了很多寶貴意見。(2)合作:倒計(jì)時(shí)部分代碼由雙方討論決定。兩人一起完善出了最終的代碼。在遇到?jīng)]有預(yù)期的功能時(shí),兩個(gè)人總是攜手一起解決。七、實(shí)驗(yàn)總結(jié)和心得體會(huì)(1)實(shí)驗(yàn)總結(jié)概括這次實(shí)驗(yàn)本項(xiàng)目是做一個(gè)基于ATMega 16單片機(jī)的電子密碼鎖,通過4×4鍵盤和LCD液晶顯示,實(shí)現(xiàn)了密碼鎖的相應(yīng)功能。我們的出發(fā)點(diǎn)是設(shè)計(jì)出既安全又成本低的密碼鎖。 我們的密碼鎖有如下功能:密碼驗(yàn)證、修改密碼、輸入錯(cuò)誤后鳴笛等基本功能,當(dāng)然也有復(fù)位后啟動(dòng)倒計(jì)時(shí)功能、顯示操作指南等兩個(gè)創(chuàng)新功能。我們收獲了很多基礎(chǔ)知識(shí),比如說:對(duì)鍵盤進(jìn)行掃描時(shí),可以采用查詢掃描的方

14、法,即先對(duì)一行進(jìn)行掃描,再對(duì)列進(jìn)行掃描,直至將每行每列都掃描一次,通過單片機(jī)端口電平的變化,判斷哪個(gè)按鍵被按下。當(dāng)然,我們也掌握了液晶顯示屏的各個(gè)管腳的左右,也掌握了ATmega16的各個(gè)管腳的作用。自然,我們不僅收獲了上面所說的知識(shí),也鍛煉了自己的動(dòng)手能力和解決問題的能力。最重要的是也培養(yǎng)了我們團(tuán)結(jié)協(xié)作的能力。實(shí)驗(yàn)中遇到的問題以及解決方案有一句話說的好“Man errs so long as he strives”,意思也就是說,人只要奮斗就會(huì)犯錯(cuò)誤。這次實(shí)驗(yàn)真的出現(xiàn)了好多錯(cuò)誤,但是最終我們都克服了它們。1. 本身是打算用數(shù)碼管顯示倒計(jì)時(shí)的,發(fā)現(xiàn)它如預(yù)期的一樣,PC2-PC5管腳不能用,嘗試

15、改變它的熔絲位試一試,結(jié)果以失敗告終。2. 可能是由于上面修改熔絲位,或者連電路的時(shí)候出了一些小問題,我們的液晶顯示屏就是不能用。之后拆了原來辛辛苦苦連的電路,只是往單片機(jī)里寫一些控制二極管發(fā)光的代碼,也寫不進(jìn)去了。最后判斷是單片機(jī)鎖死了,我們換了一個(gè)ATmega16芯片后,終于解決了問題。3. 當(dāng)然,我的主要工作是鍵盤模塊。我認(rèn)真的看了視頻,但是,當(dāng)寫入代碼的時(shí)候發(fā)現(xiàn),不能控制鍵盤,而且按#鍵的時(shí)候會(huì)發(fā)生復(fù)位問題,當(dāng)時(shí)覺得很奇怪。后來經(jīng)過不斷地探索,發(fā)現(xiàn)是判斷按鍵的那段代碼的思路錯(cuò)了,最終可以了,但是奇怪的是,最右邊的那一排,一按就復(fù)位了。后來發(fā)現(xiàn)是導(dǎo)線錯(cuò)連了一位,有一根導(dǎo)線,連到了rese

16、t引腳。最終解決了這個(gè)問題。4. 緊接著就是顯示屏的代碼問題,會(huì)遇到一些字符顯示太快,或者是沒有達(dá)到預(yù)期的結(jié)果,但是都通過不斷地修改斷碼來解決問題。距離說一下,就是我要實(shí)現(xiàn)的功能是按了*鍵之后,顯示”press #”,但是每次都顯示“press *”,后來發(fā)現(xiàn)是函數(shù)里有一個(gè)case少了一個(gè)break。5. 最后呢是顯示倒計(jì)時(shí), 剛開始顯示亂碼。最后寫了這樣一個(gè)函數(shù)LCD_show(m,n); 利用for循環(huán),把數(shù)組里的0,1,2等換成0,1,2才解決了問題。(2) 心得體會(huì) 一分耕耘一分收獲,這次實(shí)驗(yàn),把這句話展現(xiàn)的淋漓盡致。我想在實(shí)驗(yàn)成功的那一剎那,就是對(duì)我們這歷時(shí)兩周的忙碌最好的報(bào)答。這次

17、實(shí)驗(yàn)還算順利,在規(guī)定日期前就完成了任務(wù)。時(shí)間呢,可能大部分花費(fèi)在解決一些不可預(yù)知的問題上了,無論是連電路,還是寫代碼,雖然也會(huì)出現(xiàn)問題,整體來說還算順利。很喜歡這樣的小學(xué)期,它不僅可以增長我們的知識(shí),還可以鍛煉我們的動(dòng)手能力,還可以增進(jìn)同學(xué)之間團(tuán)結(jié)互助的感情。這樣的小學(xué)期,充滿了樂趣,探索和收獲。有時(shí)候一整天都待在實(shí)驗(yàn)室,雖然說累,但是感覺整個(gè)人都充滿了能力。懷揣著一份新奇,不斷嘗試,感覺那樣的日子很充實(shí),很快樂。再來說說這次實(shí)驗(yàn),真的是很用心的看視頻,然后動(dòng)手做流水燈,剛開始拿著ATmega16和面包板,真的感覺很新奇,在這之前都沒有接觸過呢。看著視頻,當(dāng)看到流水燈工作的時(shí)候,覺得那是我見過

18、最美的燈了。接著呢,就是用2個(gè)數(shù)碼管做一個(gè)秒表計(jì)時(shí)器,實(shí)現(xiàn)按下按鍵后能中斷的功能。感覺中斷真的是較難的一個(gè)知識(shí)了,視頻都看了好多編,最后才搞清楚。 中間放假三天,然后我們開始著手設(shè)計(jì)方案,找自己感興趣的課題,當(dāng)然也有想過,做一個(gè)更復(fù)雜的,更好玩的。有想過去做一個(gè)游戲機(jī),類似快樂大本營的那個(gè)拼音游戲,把它做到一個(gè)板子上,玩著更方便。但是后來覺得無法突破判斷是否正確的那個(gè)環(huán)節(jié),所以就結(jié)束了那個(gè)想法。后來又考慮做一個(gè)智能垃圾箱,可以用手的感應(yīng)去控制垃圾箱的開關(guān),覺得模擬起來對(duì)于材料要求較高,所以最終做一個(gè)密碼鎖,即使用,又在我們的能力范圍內(nèi)。當(dāng)然對(duì)于密碼鎖,我們接觸最多的就是取款機(jī)了,我們?cè)O(shè)計(jì)的這個(gè)

19、密碼鎖,與眾不同的地方就是我們可以讓我們的液晶顯示屏無限循環(huán)的顯示操作指南,只有當(dāng)你按下鍵盤上的任意一個(gè)鍵的時(shí)候才可以終止這種循環(huán)。還有一點(diǎn),就是我們的密碼鎖加了倒計(jì)時(shí)這個(gè)功能,當(dāng)輸入錯(cuò)誤次數(shù)超過三次的時(shí)候,就不能再輸入了,更加安全??傊?,這次實(shí)驗(yàn)真的收獲了很多,雖然遇到的問題很多,但是解決問題的過程真的是受益匪淺。八、參考文獻(xiàn)參考資料:1、基于 AVR 的單片嵌入式系統(tǒng)原理與實(shí)踐應(yīng)用 華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮 2、avr單片機(jī)原理及測控工程應(yīng)用代碼#include<avr/io.h>#include<string.h>#define uchar unsig

20、ned char#define uint unsigned intunsigned charkey_stime_ok;unsigned char key_temp=0;unsigned char error=0, number=0;unsigned charkey_stime_counter;unsigned char animation_state=0;unsigned char code_number6, temp16,temp26;int password6=6,6,6,6,6,6;uchar time_show='0','1','2',&

21、#39;3','4','5','6','7','8','9',':'uchar instr="A=reset,B=*,C=close,D=del,E=change,F=#,"void xianshi(uchar a);#define No_key 255#define K1_11#define K1_22#define K1_33#define K1_4 4#define K2_15#define K2_26#define K2_37#define K2_

22、4 8#define K3_19#define K3_20#define K3_3'r'#define K3_4 '*'#define K4_1's'#define K4_2'c'#define K4_3'g'#define K4_4 '#'#define Key_mask0b00001111void delay(uint ms)/延時(shí)函數(shù) uint i,j;for(i=0;i<ms;i+) for(j=0;j<1141;j+); void write_com(uchar com)/寫指

23、令PORTC &= 0x01;PORTC &= 0x02;PORTA = com;PORTC |= 0x80;delay(1); PORTC &= 0x80;void write_dat(uchar dat)/寫數(shù)據(jù)PORTC |= 0x01;PORTC &= 0x02;PORTA = dat;PORTC |= 0x80;delay(1); PORTC &= 0x80; void LCD_show(int x, int y)/顯示倒計(jì)時(shí)write_com(0x80+3);delay(5);write_dat(time_showx);write_com(0

24、x80+4);delay(5);write_dat(time_showy);/delay(35);delay(1);void show(uchar j)/顯示屏uchar i; write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x80+0);delay(5);switch(j) case 0:write_com(0x01); delay(5);write_com(0x80+9);delay(5);uchar table = "Welcome!"/顯示welcomefor (i=0;i<8;i+)w

25、rite_dat(tablei);delay(1);delay(10);for (i=0;i<9;i+)/移動(dòng)9次write_com(0x18); delay(10);xianshi(instr);break;case 1:uchar table1 = "*"for (i=0;i<1;i+)write_dat(table1i);delay(1);break;case 2:write_com(0x01); delay(5);uchar table2 = "press #"for (i=0;i<7;i+)write_dat(table2i)

26、;delay(1);break;case 3:write_com(0x01); delay(5);uchar table3 = "press *"for (i=0;i<7;i+)write_dat(table3i);delay(1);break;case 4:uchar table4 = "then press #"write_com(0x80+40);/讓字符在第二行顯示delay(5);for (i=0;i<12;i+)write_dat(table4i);delay(1);break;case 5:write_com(0x01); de

27、lay(5);uchar table5 = "input the code"for (i=0;i<14;i+)write_dat(table5i);delay(1);break;case 6:write_com(0x01); /先清屏delay(5);uchar table6 = "right"for (i=0;i<5;i+)write_dat(table6i);delay(1);break;case 7:uchar table7 = "open"write_com(0x80+40);/讓字符在第二行顯示for (i=0;

28、i<4;i+)write_dat(table7i);delay(1);break;case 8:uchar table8 = "press g"write_com(0x80+40);/讓字符在第二行顯示delay(5);for (i=0;i<7;i+)write_dat(table8i);delay(1);break;case 9:write_com(0x01); delay(5);uchar table9 = "wrong"for (i=0;i<5;i+)write_dat(table9i);delay(1);break;case 1

29、0:write_com(0x01); delay(5);uchar table10 = "change code"for (i=0;i<11;i+)write_dat(table10i);delay(1);break;case 11:write_com(0x01); delay(5);uchar table11 = "input again"for (i=0;i<11;i+)write_dat(table11i);delay(1);break;case 12: write_com(0x01); delay(5);uchar table12 =

30、 "ok"for (i=0;i<2;i+)write_dat(table12i);delay(1);break; case 13:write_com(0x01); delay(5);uchar table13 = "modify password"for (i=0;i<15;i+)write_dat(table13i);delay(1);break;case 14:write_com(0x01); delay(5);uchar table14 = "fail"for (i=0;i<4;i+)write_dat(tab

31、le14i);delay(1);break;default : break;unsigned char read_keyboard() static unsigned char key_state = 0, key_value, key_line;unsigned char key_return = No_key,i; switch (key_state)case 0:key_line = 0b00010000;for (i=1; i<=4; i+) / 掃描鍵盤 PORTB = key_line; PORTB = key_line; key_value = Key_mask &

32、 PINB; if (key_value = Key_mask)key_line <<= 1; / 沒有按鍵,繼續(xù)掃描elsekey_state+; / 有按鍵,停止掃描break; break;case 1:if (key_value = (Key_mask & PINB) / 消抖處理,鍵盤編碼,返回編碼值 switch (key_line | key_value) case 0b00011110:key_return = K1_1;break;case 0b00101110:key_return = K1_2;break;case 0b01001110:key_ret

33、urn = K1_3;break;case 0b10001110:key_return = K1_4;break;case 0b00011101:key_return = K2_1;break;case 0b00101101:key_return = K2_2;break;case 0b01001101:key_return = K2_3;break;case 0b10001101:key_return = K2_4;break;case 0b00011011:key_return = K3_1;break;case 0b00101011:key_return = K3_2;break;cas

34、e 0b01001011:key_return = K3_3;break;case 0b10001011:key_return = K3_4;break;case 0b00010111:key_return = K4_1;break;case 0b00100111:key_return = K4_2;break;case 0b01000111:key_return = K4_3;break;case 0b10000111:key_return = K4_4;break;key_state+; / 轉(zhuǎn)入等待按鍵釋放狀態(tài)elsekey_state-; / 兩次行電平不同返回狀態(tài)0,(消抖處理)br

35、eak; case 2: / 等待按鍵釋放狀態(tài)PORTB = 0b00001111; / 列線全部輸出低電平PORTB = 0b00001111; / 重復(fù)送一次if ( (Key_mask & PINB) = Key_mask) key_state=0; / 行線全部為高電平返回狀態(tài)0break; return key_return;void keyboard_states()unsigned char i, j=0;if(key_temp='s')/ -關(guān)鎖number = 0;error=0;PORTD = 0x00; animation_state=0;if(a

36、nimation_state=0)/ -顯示/只有當(dāng)用戶先按"*",再按"#"鍵時(shí),密碼鎖才能進(jìn)入工作狀態(tài)。if(key_temp='*') show(2);animation_state+;if(key_temp!='*')show(3);show(4);delay(5);else if(animation_state=1)/ -先按* 后按# 然后才能解鎖if(key_temp='#')show(5);animation_state+;else if(animation_state=2)/ -輸入六位密

37、碼(除了#和c以外的鍵) if(key_temp='#')animation_state+;else if(key_temp='c') number=0; show(5);else if(number=0)/輸入密碼 先清屏,然后輸入密碼(小于6位)write_com(0x01); delay(5);write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x80+number);delay(5);uchar table1 = "*"for (i=0;i<1;i+)writ

38、e_dat(table1i);delay(1);code_numbernumber=key_temp;number+; else if(animation_state=3)if(number=6)for(i=0;i<6;i+)if(code_numberi=passwordi) /判斷密碼正誤j+; if(j=6)show(6);show(7);PORTD = 0x02;/輸入正確的話 蜂鳴器鳴響三聲delay(5);PORTD = 0x00;delay(10);PORTD = 0x02; delay(5);PORTD = 0x00;delay(10);PORTD = 0x02;dela

39、y(5);PORTD = 0x00;delay(10);for(int m=0;m<10;m+)for(int k=0;k<1000;k+)PORTD = 0x01; show(13);show(8);delay(10);error=0;animation_state+=2;else show(9);error+;else show(9);error+; if(error<3&&error>0) show(5);number = 0;animation_state=2;else if(error=3)PORTD = 0x02;/蜂鳴器鳴響 當(dāng)按下r鍵時(shí)才

40、可以取消鳴響animation_state=4; number = 0;else if(animation_state=4)/ 三次錯(cuò)誤后復(fù)位,r表示復(fù)位if(key_temp='r')PORTD = 0x00; write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x80+0);delay(5);write_dat(time_show0);write_dat(time_show0);write_dat(time_show10);/輸出:for(int m=5;m>=0;m-)for(int n=9;n&

41、gt;=0;n-) LCD_show(m,n);/倒計(jì)時(shí) write_com(0x01); /先清屏delay(5);show(5);number=0;animation_state=2;else if(animation_state=5)/ 修改密碼 gif(key_temp='g')number=0;show(10);animation_state+;else if(animation_state=6)if(key_temp='#')/#為確定鍵number=0;animation_state+;show(11);else if(key_temp='

42、c')/c表示刪除show(10);number=0;elseif(number=0)write_com(0x01);delay(5);write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x80+number);delay(5);uchar table1 = "*"for (i=0;i<1;i+)write_dat(table1i);delay(1);temp1number=key_temp;number+;else if(animation_state=7)/if(key_temp=

43、9;#')animation_state+;else if(key_temp='c')show(11);number=0; else if(number=0)write_com(0x01); delay(5);write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x80+number);delay(5);uchar table1 = "*"for (i=0;i<1;i+)write_dat(table1i);delay(1);temp2number=key_temp;number+; else if(animation_state=8)/i=0,j=0;for(i=0;i<6;i+)if

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論