版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> ******</b></p><p> 單片機課程設計報告書</p><p> 2010年 12 月 30 日</p><p> 課題名稱電子密碼鎖</p><p> 姓 名***</p><p> 學 號*********</p>&
2、lt;p> 院、系、部物理與電子科學系</p><p> 專 業(yè)電子信息科學與技術</p><p> 指導教師***</p><p><b> 目 錄</b></p><p> 一、緒言 …………………………………………………………………………… 3</p><p> (一
3、) 設計任務……………………………………………………………… 3</p><p> (二) 設計方案及分析……………………………………………………… 3</p><p> 二、系統(tǒng)設計 ……………………………………………………………………… 4</p><p> (一) 硬件電路設計………………………………………………………… 4</p><
4、;p> ?。ǘ?程序流程圖…………………………………………………………… 6</p><p> (三) c語言程序設計………………………………………………………… 6</p><p> 三、電子密碼鎖仿真 ……………………………………………………………… 12</p><p> ?。ㄒ唬?系統(tǒng)仿真 ………………………………………………………………12&l
5、t;/p><p> ?。ǘ?工作原理分析………………………………………………………… 13</p><p> 結(jié) 束 語 ……………………………………………………………………………13</p><p> 參考文獻 ……………………………………………………………………………14</p><p><b> 一、緒 言</b&g
6、t;</p><p><b> (一)設計任務</b></p><p> 1、用4*3組成0~9數(shù)字鍵及確認鍵、刪除鍵。</p><p> 2、用8位數(shù)碼管組成顯示電路提示信息,當輸入密碼時,只顯示“-”,當密碼位輸入完畢按下確認鍵時,對輸入的密碼與設定的密碼進行比較,若密碼正確,則開鎖,此處用LED發(fā)光二極管亮一秒鐘做為提示。</
7、p><p> 3、當密碼不正確時,禁止按鍵輸入3秒,同時發(fā)出“嘀、嘀”報警聲。</p><p> (二)、設計方案及分析</p><p><b> 1、設計方案</b></p><p> 根據(jù)以上密碼鎖的設計任務,我們擬定的方案可以簡略的如以下框圖所示:</p><p> 密碼鎖的控制方案論
8、證</p><p> 根據(jù)設計任務書中的設計要求,可以設想幾種控制方案,可以是簡單控制,也可以是較復雜的控制。本設計采用以下密碼鎖控制方案。</p><p> 1. 密碼的設定,在此程序中密碼是固定在程序存儲器ROM中,假設預設的密碼為“12345”共5位密碼。</p><p> 2. 密碼的輸入問題:</p><p> 由于采用兩個
9、按鍵來完成密碼的輸入,那么其中一個按鍵為功能鍵,另一個按鍵為數(shù)字鍵。在輸入過程中,首先輸入密碼的長度,接著根據(jù)密碼的長度輸入密碼的位數(shù),直到所有長度的密碼都已經(jīng)輸入完畢;或者輸入確認功能鍵之后,才能完成密碼的輸入過程。進入密碼的判斷比較處理狀態(tài)并給出相應的處理過程。</p><p> P3.6是功能鍵,P3.7是數(shù)字鍵。循環(huán):先按P3.6進入工作狀態(tài),之后按P3.7選擇密碼的長度,為5,再按功能鍵表示確認。之后
10、開始輸入密碼,輸一位后就確認一下,確認為功能鍵,結(jié)束后可以聽到聲音。之后就從新開始循環(huán)。</p><p> 1.2、單片機的控制方案論證</p><p> 根據(jù)設計任務書中的設計要求,可選用Atmel公司的89系列單片機AT89C2051,但考慮到將來控制功能的擴充,用AT89C51來完成本次設計。控制方案如下:</p><p> 密碼鎖進行初始化操作,控制數(shù)
11、碼管顯示其初始狀態(tài)。</p><p> 初始化完畢后,單片機進入等待掃描鍵盤狀態(tài)。</p><p> 當有密碼輸入時,保存輸入的數(shù)據(jù),并控制數(shù)碼管顯示其輸入狀態(tài)。</p><p><b> 二、系統(tǒng)設計</b></p><p><b> ?。ㄒ唬┯布娐吩O計</b></p>&l
12、t;p> 1、密碼鎖控制電路圖</p><p> 采用AT89C51單片機控制密碼鎖并實現(xiàn)實時顯示輸入狀態(tài)。單片機控制密碼鎖的電路原理如圖2-1所示。</p><p><b> 圖2-1</b></p><p><b> 2、主要元器件選擇</b></p><p> 主要元器件選用型
13、號和數(shù)量如表2-1所示:</p><p> 表2-1 主要元器件清單</p><p><b> ?。ǘ?程序流程圖</b></p><p><b> C語言程序設計</b></p><p><b> 主程序設計</b></p><p> #i
14、nclude <AT89X52.H></p><p> unsigned char code ps[]={1,2,3,4,5};</p><p> unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,</p><p> 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}
15、;</p><p> unsigned char pslen=9;</p><p> unsigned char templen;</p><p> unsigned char digit;</p><p> unsigned char funcount;</p><p> unsigned char dig
16、itcount;</p><p> unsigned char psbuf[9];</p><p> bit cmpflag;</p><p> bit hibitflag;</p><p> bit errorflag;</p><p> bit rightflag;</p><p>
17、; unsigned int second3;</p><p> unsigned int aa;</p><p> unsigned int bb;</p><p> bit alarmflag;</p><p> bit exchangeflag;</p><p> unsigned int cc;&l
18、t;/p><p> unsigned int dd;</p><p> bit okflag;</p><p> unsigned char oka;</p><p> unsigned char okb;</p><p> void main(void)</p><p><b>
19、; {</b></p><p> unsigned char i,j;</p><p> P2=dispcode[digitcount];</p><p> TMOD=0x01;</p><p> TH0=(65536-500)/256;</p><p> TL0=(65536-500)%256
20、;</p><p><b> TR0=1;</b></p><p><b> ET0=1;</b></p><p><b> EA=1;</b></p><p><b> while(1)</b></p><p><b
21、> {</b></p><p> if(cmpflag==0)</p><p><b> { </b></p><p> if(P3_6==0) //function key</p><p><b> {</b></p><p> for(i=1
22、0;i>0;i--)</p><p> for(j=248;j>0;j--);</p><p> if(P3_6==0)</p><p><b> {</b></p><p> if(hibitflag==0)</p><p><b> {</b><
23、;/p><p> funcount++;</p><p> if(funcount==pslen+2)</p><p><b> {</b></p><p> funcount=0;</p><p> cmpflag=1;</p><p><b> }&l
24、t;/b></p><p> P1=dispcode[funcount];</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> second3=0;&l
25、t;/p><p><b> }</b></p><p> while(P3_6==0);</p><p><b> }</b></p><p><b> }</b></p><p> if(P3_7==0) //digit key</p>
26、;<p><b> {</b></p><p> for(i=10;i>0;i--)</p><p> for(j=248;j>0;j--);</p><p> if(P3_7==0)</p><p><b> {</b></p><p>
27、 if(hibitflag==0)</p><p><b> {</b></p><p> digitcount++; </p><p> if(digitcount==10)</p><p><b> {</b></p><p
28、> digitcount=0;</p><p><b> }</b></p><p> P2=dispcode[digitcount];</p><p> if(funcount==1)</p><p><b> {</b></p><p> pslen=d
29、igitcount;</p><p> templen=pslen;</p><p><b> }</b></p><p> else if(funcount>1)</p><p><b> {</b></p><p> psbuf[funcount-2]=d
30、igitcount;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> second3=0;&l
31、t;/p><p><b> }</b></p><p> while(P3_7==0);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
32、<p><b> else</b></p><p><b> {</b></p><p> cmpflag=0;</p><p> for(i=0;i<pslen;i++)</p><p><b> {</b></p><p>
33、 if(ps[i]!=psbuf[i])</p><p><b> {</b></p><p> hibitflag=1;</p><p><b> i=pslen;</b></p><p> errorflag=1;</p><p> rightflag=0;&
34、lt;/p><p> cmpflag=0;</p><p> second3=0;</p><p><b> goto a;</b></p><p><b> }</b></p><p><b> }</b></p><p>
35、;<b> cc=0;</b></p><p> errorflag=0;</p><p> rightflag=1;</p><p> hibitflag=0;</p><p> cmpflag=0;</p><p><b> }</b></p>
36、<p><b> }</b></p><p><b> }</b></p><p> void t0(void) interrupt 1 using 0</p><p><b> {</b></p><p> TH0=(65536-500)/256;<
37、/p><p> TL0=(65536-500)%256;</p><p> if((errorflag==1) && (rightflag==0))</p><p><b> {</b></p><p><b> bb++;</b></p><p> i
38、f(bb==800)</p><p><b> {</b></p><p><b> bb=0;</b></p><p> alarmflag=~alarmflag;</p><p><b> }</b></p><p> if(alarmfl
39、ag==1)</p><p><b> {</b></p><p> P0_0=~P0_0;</p><p><b> }</b></p><p><b> aa++;</b></p><p> if(aa==800)</p>&
40、lt;p><b> {</b></p><p><b> aa=0;</b></p><p> P0_1=~P0_1;</p><p><b> }</b></p><p> second3++;</p><p> if(second3
41、==6400)</p><p><b> {</b></p><p> second3=0;</p><p> hibitflag=0;</p><p> errorflag=0;</p><p> rightflag=0;</p><p> cmpflag=0
42、;</p><p><b> P0_1=1;</b></p><p> alarmflag=0;</p><p><b> bb=0;</b></p><p><b> aa=0;</b></p><p><b> }</b&g
43、t;</p><p><b> }</b></p><p> if((errorflag==0) && (rightflag==1))</p><p><b> {</b></p><p><b> P0_1=0;</b></p><
44、p><b> cc++;</b></p><p> if(cc<1000)</p><p><b> {</b></p><p><b> okflag=1;</b></p><p><b> }</b></p><
45、;p> else if(cc<2000)</p><p><b> {</b></p><p><b> okflag=0;</b></p><p><b> }</b></p><p><b> else</b></p>
46、<p><b> {</b></p><p> errorflag=0;</p><p> rightflag=0;</p><p> hibitflag=0;</p><p> cmpflag=0;</p><p><b> P0_1=1;</b>
47、</p><p><b> cc=0;</b></p><p><b> oka=0;</b></p><p><b> okb=0;</b></p><p><b> okflag=0;</b></p><p><b
48、> P0_0=1;</b></p><p><b> }</b></p><p> if(okflag==1)</p><p><b> {</b></p><p><b> oka++;</b></p><p> if(o
49、ka==2)</p><p><b> {</b></p><p><b> oka=0;</b></p><p> P0_0=~P0_0;</p><p><b> }</b></p><p><b> }</b><
50、;/p><p><b> else</b></p><p><b> {</b></p><p><b> okb++;</b></p><p> if(okb==3)</p><p><b> {</b></p>
51、<p><b> okb=0;</b></p><p> P0_0=~P0_0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
52、t;<b> }</b></p><p> 三、密碼鎖控制器仿真</p><p><b> ?。ㄒ唬┫到y(tǒng)仿真</b></p><p> 在完成了密碼鎖硬件設計和軟件設計以后,便進入系統(tǒng)的調(diào)試階段。系統(tǒng)的調(diào)試步驟和方法基本上是相同的,但具體細節(jié)和所采用的開發(fā)系統(tǒng)以及用戶系統(tǒng)選用的單片機型號有關,如可選用Keil軟件進行
53、軟件調(diào)試,用Proteus軟件完成硬件調(diào)試。</p><p> 圖3-1 程序調(diào)試完成圖</p><p><b> ?。ǘ┕ぷ髟矸治?lt;/b></p><p> 電子密碼鎖由4*3組成0~9數(shù)字鍵及確認鍵、刪除鍵等組成。用8位數(shù)碼管組成顯示電路提示信息,當輸入密碼時,只顯示“-”,當密碼位輸入完畢按下確認鍵時,對輸入的密碼與設定的密碼進行
54、比較,若密碼正確,則開鎖。當密碼不正確時,禁止按鍵輸入3秒,同時發(fā)出“嘀、嘀”報警聲。</p><p><b> 結(jié) 束 語</b></p><p><b> 完成情況: </b></p><p> ?。?)、一開始由于太急于求成,整個電路有的模塊比較小,所以我們就沒有去沒有去調(diào)試。但是等整個都基本設計完時才發(fā)現(xiàn)這
55、些看似簡單的小模塊卻有很多需要改進的地方。因此,我們明白了一個道理:不管做什么事情,都應該有耐心,認真打好基礎,磨刀不誤砍柴工。</p><p> ?。?)、做什么事情并不是一直做就是好的,應該時不時的跳出來觀看一下全局,把握好方向。當出現(xiàn)問題時不應該心浮氣躁,可以適當?shù)姆潘尚那?,調(diào)整好心態(tài)再繼續(xù)。</p><p> ?。?)在設計的過程中要敢想敢試,這樣才能找出比較好的解決方案。<
56、/p><p> ?。?)在設計的過程中,我們主動地想去了解一些芯片的功能,以便我們的設計順利進行。這樣一種積極的求知欲對于學習來講事半功倍。在以后的學習生活中應該保持。</p><p> ?。?)當我們設計出密碼鎖時感覺很有成就感,感覺到很欣慰。在知識的海洋里,在學習的道路上,雖然艱辛,但是努力了就會有所收獲,收獲時的喜悅是美妙的。</p><p><b>
57、 參考文獻</b></p><p> [1].C語言程序設計(第二版),譚浩強主編,清華大學出版社</p><p> [2].全國大學生電子設計競賽訓練教程,黃智偉主編,電子工業(yè)出版社</p><p> [3].凌陽16位單片機應用基礎,羅亞非等編著,北京航空航天大學出版社</p><p> [4].MCU-DSP型單片機
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論