版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 電子系統(tǒng)設(shè)計(jì)報(bào)告</b></p><p> 系 部: 物理與機(jī)電工程學(xué)院 </p><p> 實(shí)驗(yàn)項(xiàng)目: 多功能密碼鎖 </p><p> 專業(yè)班級: </p><p> 學(xué) 號: </p>
2、<p> 學(xué)生姓名: </p><p> 同組成員: </p><p> 指導(dǎo)教師: </p><p> 完成時(shí)間: 2011-06-19 </p><p> 報(bào)告成績:
3、 </p><p><b> 電子密碼鎖</b></p><p><b> 一、設(shè)計(jì)任務(wù)與要求</b></p><p> 1、采用STC89C52單片機(jī)為主控芯片,結(jié)合外圍電路,通過軟件程序?qū)崿F(xiàn)多功能電子密碼鎖功能;</p><p> 2、在沒輸入密碼時(shí)顯示萬年歷,并可調(diào);</p&g
4、t;<p> 3、通過按鍵來確定輸入密碼,實(shí)現(xiàn)密碼鎖功能,正確輸入密碼后有開鎖提示;</p><p><b> 二、方案設(shè)計(jì)與論證</b></p><p> 方案一:采用數(shù)字電路控制</p><p> 用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼鎖的核心控制,將密碼保存在JK觸發(fā)器中,與輸入密碼通過比較器比較,
5、判斷結(jié)果是否相符合[4]。采用數(shù)字電路設(shè)計(jì)的方案好處就是設(shè)計(jì)簡單,但控制的準(zhǔn)確性和靈活性差,故不采用。</p><p> 方案二:采用以單片機(jī)為核心的控制方案</p><p> 選用單片機(jī)作為系統(tǒng)的核心部件,實(shí)現(xiàn)控制與處理的功能。單片機(jī)具有資源豐富、速度快、編程容易等優(yōu)點(diǎn)。利用單片機(jī)內(nèi)部的隨機(jī)存儲器(RAM)和只讀存儲器(ROM)及其引腳資源,外接液晶顯示(LCD),鍵盤輸入等實(shí)現(xiàn)數(shù)據(jù)
6、的處理傳輸和顯示功能,基本上能實(shí)現(xiàn)設(shè)計(jì)指標(biāo)。</p><p> 因此綜合考慮,本系統(tǒng)采用方案二。</p><p><b> 三、硬件電路設(shè)計(jì)</b></p><p> 本設(shè)計(jì)主要由單片機(jī)、矩陣鍵盤、獨(dú)立按鍵、液晶顯示器等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼,獨(dú)立按鍵用于實(shí)現(xiàn)可調(diào)萬年歷。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)
7、對用戶輸入的密碼與自己保存的密碼進(jìn)行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報(bào)警電路控制開鎖還是報(bào)警,實(shí)際使用時(shí)只要將單片機(jī)的負(fù)載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可。系統(tǒng)整體框圖如圖3-1所示。</p><p> 圖3-1 系統(tǒng)結(jié)構(gòu)框圖</p><p><b> 各模塊功能如下:</b></p><p>
8、 1.鍵盤輸入模塊:分為密碼輸入按鍵與幾個(gè)功能按鍵,用于完成密碼鎖輸入功能。</p><p> 2.顯示模塊:用于完成對系統(tǒng)狀態(tài)顯示及操作提示功能。</p><p> 3.復(fù)位電路:完成系統(tǒng)的復(fù)位。</p><p> 4.獨(dú)立鍵盤:用于完成可調(diào)萬年歷功能。</p><p> 6.開鎖電路:應(yīng)用繼電器及發(fā)光二極管模擬開鎖,完成開鎖及開
9、鎖提示。</p><p> ?。ㄒ唬⒏鱾€(gè)模塊設(shè)計(jì):</p><p><b> 1、復(fù)位電路模塊:</b></p><p> 該電路上電單片機(jī)自動(dòng)復(fù)位,按下按鍵手動(dòng)復(fù)位。</p><p><b> 2、晶振電路模塊:</b></p><p><b> 3、開
10、關(guān)電路模塊:</b></p><p> 4、矩陣鍵盤電路模塊:</p><p> 用P1口組成4*4的矩陣鍵盤,各鍵的定義一次為:0、1、2、3、4、5、6、7、8、9、*、#、enetr(程序中設(shè)計(jì)只有該鍵按下才能進(jìn)行密碼輸入等操作)、del(當(dāng)密碼按錯(cuò)時(shí)可以按下該鍵刪除)、unclock(解鎖鍵,即三次密碼都錯(cuò)了只能按下它進(jìn)行解鎖)。</p><p&
11、gt;<b> 5、獨(dú)立按鍵模塊:</b></p><p> Tiao是位功能選擇,通過選擇位來決定萬年歷的調(diào)整,+1、-1是調(diào)節(jié)功能鍵。</p><p> 5、液晶1602顯示電路模塊:</p><p> 6、繼電器電路模塊:</p><p><b> 6、原理圖</b></p&g
12、t;<p><b> 7、PCB圖</b></p><p><b> 四、軟件設(shè)計(jì)</b></p><p><b> 總程序流程圖如下:</b></p><p> 鍵功能程序流程圖如下圖所示: </p><p><b> Y</b>
13、;</p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b><
14、/p><p><b> Y</b></p><p><b> N</b></p><p> 開鎖程序流程圖如下圖所示:</p><p><b> Y</b></p><p><b> 開鎖流程圖</b></p>
15、<p><b> 程序清單見附錄</b></p><p> 六、仿真過程與仿真結(jié)果</p><p> 上電初始狀態(tài)仿真圖:</p><p> 按下獨(dú)立按鍵Tiao后,選擇位功能仿真圖如下:</p><p><b> 調(diào)整完時(shí)間之后:</b></p><p&g
16、t; 請輸入密碼,程序?qū)崟r(shí)掃描矩陣鍵盤的輸入:</p><p> 密碼輸入正確的仿真效果圖,繼電器處于工作狀態(tài):</p><p> 密碼輸入正確后3秒鐘跳回時(shí)間顯示:</p><p> 密碼輸入出錯(cuò)時(shí)仿真效果圖:</p><p><b> 六、安裝與調(diào)試</b></p><p> 經(jīng)過
17、腐蝕制板、焊接元件,再上電調(diào)試各模塊電路都能按照仿真里的正常工作。</p><p><b> 初始上電的時(shí)候</b></p><p><b> 七、結(jié)論與心得</b></p><p><b> 八、參考文獻(xiàn)</b></p><p> [1] 葉啟明.單片機(jī)制作的新型安全
18、密碼鎖[J].家庭電子.2000,第六期:24-27</p><p> [2] 郭海英.基于單片機(jī)的電子安全密碼鎖的設(shè)計(jì)[J].現(xiàn)代電子技術(shù).2005,第三期:57-58</p><p> [3] 李明喜.新型電子密碼鎖的設(shè)計(jì)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新.2004,第八期:77-79</p><p> [4] 祖龍起.劉仁杰.孫乃凌.一種新穎的電子密碼鎖[J].
19、電子世界.2001,第六期:88-90</p><p> [5] 李明喜.新型電子密碼鎖的設(shè)計(jì)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新.2004,第五期:22-28</p><p> [6] 長沙太陽人電子有限公司通用型1602液晶PDF資料.</p><p> [7] 周立功單片機(jī)開發(fā)網(wǎng).</p><p><b> 附1:</b&
20、gt;</p><p><b> 程序清單如下:</b></p><p> #include<reg52.h></p><p> #define lcd P2 </p><p> #define uchar unsigned char </p><p> #define ui
21、nt unsigned int</p><p> #define no_key 20 //無按鍵時(shí)的返回值</p><p> sbit rs=P3^0;</p><p> sbit rw=P3^1;//lcd數(shù)據(jù)命令選擇端</p><p> sbit e=P3^2;//lcd使能信號端</p><p>
22、 sbit key1=P3^3; </p><p> sbit key2=P3^4; </p><p> sbit key3=P3^5; </p><p> sbit key=P3^7;//開鎖信號控制端</p><p> sbit enter=P1^3;//該鍵按下后才能進(jìn)行輸入密碼等操作</p&g
23、t;<p> uchar conflag,keyflag=3;</p><p> uchar jz=20;//鍵值變量</p><p> uchar temp1;//用此變量來存儲鍵盤掃描的返回值,以便判斷是否有鍵按下</p><p> uchar code table0[6]={3,0,3,0,3,0};//初始密碼</p>&
24、lt;p> uchar code table9[6]={3,1,3,1,3,1};//初始密碼</p><p> uchar code table1[]="2011-05-07 w-6";</p><p> uchar code table2[]=" Time-03:03:00";</p><p> uchar
25、code table3[]="Enter please:";</p><p> uchar code table4[]="OK!";</p><p> uchar code table6[]="ERRO!";</p><p> uchar code table7[]="Enter again
26、:";</p><p> uchar code table8[]="LOCKED!";</p><p> uchar code table10[]="UNLOCKED!";</p><p> uchar code table11[]="Can't open!";</p>
27、<p> unsigned char m;</p><p> uchar num,t0,keynum,hour,min,sec,year,month,day,week; </p><p> uchar table5[6];//定義輸入密碼值存儲數(shù)組</p><p> /**************************************&
28、lt;/p><p> **函數(shù)名稱:delay</p><p> **函數(shù)功能:軟件延時(shí),時(shí)間為z毫秒</p><p> **入口參數(shù):z延時(shí)控制值,值越大,延時(shí)越長</p><p><b> **出口參數(shù):無</b></p><p> ***************************
29、************/</p><p> void delay(uint z)</p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=1
30、10;y>0;y--);</p><p><b> }</b></p><p> /**************************************</p><p> **函數(shù)名稱:write_com</p><p> **函數(shù)功能:1602寫命令函數(shù),可以用此函數(shù)寫不同的指令</p>
31、;<p> **入口參數(shù):com</p><p><b> **出口參數(shù):無</b></p><p> ***************************************/</p><p> void write_com(uchar com)</p><p><b> {&l
32、t;/b></p><p><b> rs=0;</b></p><p><b> rw=0;</b></p><p><b> e=0;</b></p><p><b> P2=com;</b></p><p>&l
33、t;b> delay(5);</b></p><p><b> e=1;</b></p><p><b> delay(5);</b></p><p><b> e=0;</b></p><p><b> }</b></
34、p><p> /**************************************</p><p> **函數(shù)名稱:write_date</p><p> **函數(shù)功能:1602寫數(shù)據(jù)函數(shù),可以用此函數(shù)寫不同的數(shù)據(jù),程序?qū)?yīng)的硬件1602的數(shù)據(jù)口為P2口</p><p> **入口參數(shù):date</p><p
35、><b> **出口參數(shù):無</b></p><p> ***************************************/</p><p> void write_date(uchar date)</p><p><b> {</b></p><p><b>
36、 rs=1;</b></p><p><b> rw=0;</b></p><p><b> e=0;</b></p><p><b> P2=date;</b></p><p><b> delay(5);</b></p>
37、<p><b> e=1;</b></p><p><b> delay(5);</b></p><p><b> e=0;</b></p><p><b> }</b></p><p> /*顯示位*/ </p>
38、;<p> void write_week(uchar dte)</p><p><b> {</b></p><p> uchar shi,ge;</p><p> shi=dte/10;</p><p> ge=dte%10;</p><p> write_com(0
39、x80+13);</p><p> write_date(0x30+ge);</p><p><b> }</b></p><p> void write_clock(uchar add,uchar dat)</p><p><b> {</b></p><p>
40、uchar first,second;</p><p> second=dat/10;</p><p> first=dat%10;</p><p> write_com(0x80+0x40+add);</p><p> write_date(0x30+second);</p><p> write_com(
41、0x80+0x40+add+1);</p><p> write_date(0x30+first);</p><p><b> }</b></p><p> void write_nyr(uchar add,uchar dte)</p><p><b> {</b></p>&
42、lt;p> uchar shi,ge;</p><p> shi=dte/10;</p><p> ge=dte%10;</p><p> write_com(0x80+add);</p><p><b> delay(5);</b></p><p> write_date(0x
43、30+shi);</p><p> write_com(0x80+add+1);</p><p><b> delay(5);</b></p><p> write_date(0x30+ge); </p><p><b> }</b></p><p> /*****
44、*********************************</p><p> **函數(shù)名稱:init</p><p> **函數(shù)功能:初始化函數(shù)</p><p><b> **入口參數(shù):無</b></p><p><b> **出口參數(shù):無</b></p><p&
45、gt; ***************************************/</p><p> void init()</p><p> {uchar hour=3,min=3,year=11,month=5,day=7,week=6;</p><p> uchar num;</p><p><b> e=0
46、;</b></p><p> write_com(0x38);//設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口</p><p> write_com(0x0c);//開顯示,不顯示光標(biāo)</p><p> write_com(0x06);//當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加1,且光標(biāo)加1</p><p> write_com(0x
47、01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p> write_com(0x80);//設(shè)置數(shù)據(jù)地址指針</p><p> for(num=0;num<15;num++)</p><p><b> {</b></p><p> write_date(table1[num]);//LCD顯示&qu
48、ot;初始設(shè)置時(shí)間";</p><p><b> delay(5);</b></p><p><b> }</b></p><p> write_com(0x80+0x40);</p><p> for(num=0;num<14;num++)</p><p
49、><b> {</b></p><p> write_date(table2[num]);//LCD顯示"初始設(shè)置時(shí)間";</p><p><b> delay(5);</b></p><p><b> }</b></p><p> /*定時(shí)
50、器初始化*/</p><p> TMOD=0x01;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b
51、></p><p><b> TR0=1; </b></p><p><b> while(1)</b></p><p><b> {</b></p><p> if(key1==0) //時(shí)鐘設(shè)置//key1按下</p><
52、p><b> {</b></p><p><b> delay(5);</b></p><p> if(key1==0) //key1真的按下了</p><p><b> {</b></p><p><b> keynum++;</b
53、></p><p> while(!key1) //去鍵抖</p><p> TR0=0; //時(shí)鐘暫停</p><p> if(keynum==1) //key1按下第一次</p><p><b> {</b></p><p> write_co
54、m(0x80+0x40+13);</p><p> write_com(0x0f);</p><p><b> }</b></p><p> if(keynum==2) //key1按下第二次</p><p><b> {</b></p><p> write
55、_com(0x80+0x40+10);</p><p><b> }</b></p><p> if(keynum==3) //key1按下第三次</p><p><b> {</b></p><p> write_com(0x80+0x40+7);</p><p&
56、gt;<b> }</b></p><p> if(keynum==4) //key1按下第三次</p><p><b> {</b></p><p> write_com(0x80+13);</p><p><b> } </b></p>&l
57、t;p> if(keynum==5) //key1按下第三次</p><p><b> {</b></p><p> write_com(0x80+9);</p><p><b> }</b></p><p> if(keynum==6) //key1按下第三次</
58、p><p><b> {</b></p><p> write_com(0x80+6);</p><p><b> }</b></p><p> if(keynum==7) //key1按下第三次</p><p><b> {</b><
59、/p><p> write_com(0x80+3);</p><p><b> }</b></p><p> if(keynum==8) //key1按下第四次</p><p><b> { </b></p><p> keynum=0; //按鍵次數(shù)
60、清零</p><p> write_com(0x0c);</p><p> TR0=1; //繼續(xù)運(yùn)行時(shí)鐘 </p><p> } </p><p><b> }</b></p><p><b> }</b>
61、</p><p><b> /*按鍵加*/</b></p><p> if(keynum!=0) </p><p><b> { </b></p><p> if(key2==0) </p><p><b> { </b></p>
62、<p> delay(80); </p><p> if(key2==0) </p><p><b> { </b></p><p> while(!key2); </p><p> if(keynum==1) </p><p><b> { </b>
63、</p><p><b> sec++; </b></p><p> if(sec==60) </p><p><b> sec=0; </b></p><p> write_clock(12,sec); </p><p> write_com(0x80+0x40+
64、13);</p><p><b> } </b></p><p> if(keynum==2) </p><p><b> { </b></p><p><b> min++; </b></p><p> if(min==60) </p&
65、gt;<p><b> min=0; </b></p><p> write_clock(9,min); </p><p> write_com(0x80+0x40+10);</p><p><b> } </b></p><p> if(keynum==3) </p&
66、gt;<p><b> { </b></p><p><b> hour++; </b></p><p> if(hour==24) </p><p><b> hour=0; </b></p><p> write_clock(6,hour); <
67、;/p><p> write_com(0x80+0x40+7); </p><p><b> } </b></p><p> if(keynum==4) </p><p><b> { </b></p><p><b> week++; </b>&
68、lt;/p><p> if(week==8) </p><p><b> week=1; </b></p><p> write_week(week); </p><p> write_com(0x80+13);</p><p><b> } </b><
69、/p><p> if(keynum==5) </p><p><b> { </b></p><p><b> day++; </b></p><p> if(month==1||month==3||month==5||month==7||month==8||month==10||month==
70、12) </p><p><b> { </b></p><p> if(day==32) </p><p><b> day=1; </b></p><p><b> } </b></p><p> else if(month==2)
71、 //注意這里沒有考慮閏年 </p><p><b> { </b></p><p> if(day==29) </p><p><b> day=1; </b></p><p><b> } </b&g
72、t;</p><p><b> else </b></p><p><b> { </b></p><p> if(day==31) </p><p><b> day=1; </b></p><p><b> } </b
73、></p><p> write_nyr(8,day); </p><p> write_com(0x80+9); </p><p><b> } </b></p><p> if(keynum==6) </p><p><b> { </b></p&g
74、t;<p><b> month++; </b></p><p> if(month==13) </p><p><b> month=1; </b></p><p> write_nyr(5,month); </p><p> write_com(0x80+6);</
75、p><p><b> } </b></p><p> if(keynum==7) </p><p><b> { </b></p><p><b> year++; </b></p><p> if(year==99) </p>&l
76、t;p><b> year=0; </b></p><p> write_nyr(2,year); </p><p> write_com(0x80+3);</p><p><b> } </b></p><p><b> } </b></p>&
77、lt;p><b> } </b></p><p><b> /*按鍵減*/</b></p><p> if(key3==0) </p><p><b> { </b></p><p> delay(80); </p><p> if(k
78、ey3==0) </p><p><b> { </b></p><p> while(!key3); </p><p> if(keynum==1) </p><p><b> { </b></p><p><b> sec--; </b>&
79、lt;/p><p> if(sec==-1) </p><p><b> sec=59; </b></p><p> write_clock(12,sec); </p><p> write_com(0x80+0x40+13);</p><p><b> } </b>&
80、lt;/p><p> if(keynum==2) </p><p><b> { </b></p><p><b> min--; </b></p><p> if(min==-1) </p><p><b> min=59; </b></p
81、><p> write_clock(9,min); </p><p> write_com(0x80+0x40+10);</p><p><b> } </b></p><p> if(keynum==3) </p><p><b> { </b></p>
82、<p><b> hour--; </b></p><p> if(hour==-1) </p><p><b> hour=23; </b></p><p> write_clock(6,hour); </p><p> write_com(0x80+0x40+7);<
83、/p><p><b> } </b></p><p> if(keynum==4) </p><p><b> { </b></p><p><b> week--; </b></p><p> if(week==0) </p>&l
84、t;p><b> week=7; </b></p><p> write_week(week); </p><p> write_com(0x80+13);</p><p><b> } </b></p><p> if(keynum==5) </p><p>
85、;<b> { </b></p><p><b> day--; </b></p><p> if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) </p><p><b> { </b></
86、p><p> if(day==0) </p><p> month=31; </p><p><b> } </b></p><p> else if(month==2) //注意這里沒有考慮閏年 </p><p>
87、;<b> { </b></p><p> if(day==0) </p><p><b> day=28; </b></p><p><b> } </b></p><p><b> else </b></p><p>
88、;<b> { </b></p><p> if(day==0) </p><p><b> day=30; </b></p><p><b> } </b></p><p> write_nyr(8,day); </p><p> writ
89、e_com(0x80+9); </p><p><b> } </b></p><p> if(keynum==6) </p><p><b> { </b></p><p><b> month--; </b></p><p> if(mon
90、th==0) </p><p> month=12; </p><p> write_nyr(5,month); </p><p> write_com(0x80+6); </p><p><b> } </b></p><p> if(keynum==7) </p>&l
91、t;p><b> { </b></p><p><b> year--; </b></p><p> if(year==-1) </p><p><b> year=99; </b></p><p> write_nyr(2,year); </p>
92、<p> write_com(0x80+3);</p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p>&l
93、t;p> P1=1<<4|1<<0|1<<1|1<<2|1<<3|1<<5|1<<6|0<<7; </p><p> if(enter==0)break; </p><p><b> }</b></p><p> /*
94、檢測Enter(P1.3)鍵是否按下,只有該鍵按下才能進(jìn)行輸入密碼等操作*/</p><p> P1=0<<4|1<<0|1<<1|1<<2|1<<3|1<<5|1<<6|1<<7;</p><p> while(enter);</p><p> if(enter=
95、=0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(enter==0)</p><p><b> {</b></p><p><b> TR0=0;</b
96、></p><p> write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p> write_com(0x80+0x02);//設(shè)置數(shù)據(jù)地址指針</p><p> for(num=0;num<13;num++)</p><p><b> {</b></p>&
97、lt;p> write_date(table3[num]);//LCD顯示“Enter please:”</p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> }</b></p><p> whil
98、e(!enter);//判斷按鍵是否釋放</p><p><b> delay(5);</b></p><p> while(!enter);</p><p><b> }</b></p><p><b> P1=0xff;</b></p><p&g
99、t;<b> }</b></p><p> /**************************************</p><p> **函數(shù)名稱:keyscan</p><p> **函數(shù)功能:3*4鍵盤掃描</p><p><b> **入口參數(shù):無</b></p>
100、<p><b> **出口參數(shù):jz</b></p><p> ***************************************/</p><p> uchar keyscan()</p><p> { uchar temp;</p><p> P1=0xfe;//
101、第一行掃描</p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5
102、);</b></p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> t
103、emp=P1;</b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0xee:jz=0;</p><p><b> break;</b></p><p> case 0xde:jz=1;&
104、lt;/p><p><b> break;</b></p><p> case 0xbe:jz=2;</p><p><b> break;</b></p><p> case 0x7e:jz=3;</p><p><b> break;</b>&
105、lt;/p><p><b> }</b></p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;<
106、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> P1=0xfd;//第二行掃描</p><p><b> temp=P1;</b></p
107、><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> temp=P1;</b>
108、</p><p> temp=temp&0xf0;</p><p> while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> switch(temp)</p>
109、<p><b> {</b></p><p> case 0xed:jz=4;</p><p><b> break;</b></p><p> case 0xdd:jz=5;</p><p><b> break;</b></p><
110、;p> case 0xbd:jz=6;</p><p><b> break;</b></p><p> case 0x7d:jz=7;</p><p><b> break;</b></p><p><b> }</b></p><p>
111、; while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p><b> }</b></p><p>&
112、lt;b> }</b></p><p><b> }</b></p><p> P1=0xfb;//第三行掃描</p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p> whi
113、le(temp!=0xf0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p>
114、; while(temp!=0xf0)</p><p><b> {</b></p><p><b> temp=P1;</b></p><p> switch(temp)</p><p><b> {</b></p><p> case 0
115、xeb:jz=8;</p><p><b> break;</b></p><p> case 0xdb:jz=9;</p><p><b> break;</b></p><p> case 0xbb:jz='*';</p><p><b>
116、; break;</b></p><p> case 0x7b:jz='#';</p><p><b> break;</b></p><p><b> }</b></p><p> while(temp!=0xf0)</p><p>&
117、lt;b> {</b></p><p><b> temp=P1;</b></p><p> temp=temp&0xf0;</p><p><b> }</b></p><p><b> }</b></p><p>
118、<b> }</b></p><p> return jz;</p><p><b> }</b></p><p> /**************************************</p><p> **函數(shù)名稱:codein</p><p> *
119、*函數(shù)功能:完成密碼輸入,并判斷密碼是否正確</p><p><b> **入口參數(shù):無</b></p><p><b> **出口參數(shù):無</b></p><p> ***************************************/</p><p> void codein(
120、)</p><p><b> {</b></p><p> uchar t=0;</p><p> write_com(0x80+0x40+0x02);//重新設(shè)置LCD數(shù)據(jù)地址指針</p><p> for(t=0;t<6;t++)</p><p><b> {<
121、;/b></p><p> temp1=keyscan();</p><p> while(temp1==no_key)//若相等則此時(shí)沒有鍵按下</p><p><b> { </b></p><p> P1=0xdf;//判斷是否要?jiǎng)h除輸入的密碼</p><p> if(e
122、nter==0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(enter==0)</p><p><b> {</b></p><p> write_com(0x80+0
123、x41+t); //確定刪除對象</p><p> write_date(' '); //顯示空格即為刪除</p><p><b> t--;</b></p><p><b> }</b></p><p> while(!enter);//判斷按鍵是否釋放<
124、/p><p><b> delay(5);</b></p><p> while(!enter);</p><p><b> }</b></p><p> // P1=0xff</p><p> temp1=keyscan();//繼續(xù)掃描按鍵直至有鍵按下</p&
125、gt;<p><b> }</b></p><p> table5[t]=temp1;//實(shí)時(shí)保存輸入密碼值</p><p> write_com(0x80+0x41+t); //重新設(shè)置數(shù)據(jù)地址指針</p><p> write_date('*');//LCD顯示“******”</p>
126、<p><b> delay(5);</b></p><p><b> jz=20;</b></p><p><b> }</b></p><p><b> t=0; </b></p><p> for(t=0;t<6;t++
127、)</p><p><b> {</b></p><p> if(table5[t]!=table0[t])//對數(shù)組中的內(nèi)容進(jìn)行逐一比較,一旦有數(shù)據(jù)不對馬上退出循環(huán)</p><p><b> {</b></p><p><b> break;</b></p>
128、;<p><b> }</b></p><p><b> }</b></p><p> if(t==6)//要是條件退出的話說明六個(gè)數(shù)全對密碼</p><p><b> {</b></p><p> conflag=1; // 進(jìn)行標(biāo)志密碼正確<
129、;/p><p><b> }</b></p><p><b> }</b></p><p> /**************************************</p><p> **函數(shù)名稱:codeout</p><p> **函數(shù)功能:根據(jù)密碼輸入正確
130、與否作出相應(yīng)的反應(yīng)</p><p><b> **入口參數(shù):無</b></p><p><b> **出口參數(shù):無</b></p><p> ***************************************/</p><p> void codeout()</p>
131、<p><b> {</b></p><p><b> uchar t;</b></p><p> if(conflag)</p><p><b> {</b></p><p><b> t=0;</b></p><
132、;p> write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p> write_com(0x80+0x07);//設(shè)置數(shù)據(jù)地址指針</p><p> for(t=0;t<3;t++)</p><p><b> {</b></p><p> write_date(table
133、4[t]);//LCD顯示“OK!”</p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> key=0;</b></p><p><b> while(1);</b></p>
134、;<p><b> }</b></p><p> if(!conflag)</p><p><b> {</b></p><p> keyflag--;</p><p><b> t=0;</b></p><p> write_
135、com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p> write_com(0x80+0x05);//設(shè)置數(shù)據(jù)地址指針</p><p> for(t=0;t<5;t++)</p><p><b> {</b></p><p> write_date(table6[t]);//LCD顯示“
136、ERRO!”</p><p><b> delay(5);</b></p><p><b> }</b></p><p> write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p> write_com(0x80+0x02);//設(shè)置數(shù)據(jù)地址指針</p>
137、;<p> for(t=0;t<12;t++)</p><p><b> {</b></p><p> write_date(table7[t]);//LCD顯示“Enter again:”</p><p><b> delay(5);</b></p><p><b
138、> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /**************************************</p><p> **函數(shù)名稱:codeen</p><p&g
139、t; **函數(shù)功能:當(dāng)密碼輸入錯(cuò)誤次數(shù)達(dá)到3次時(shí),要按下解鎖鍵,輸入萬能密碼,此函數(shù)能判斷萬能密碼正確與否并做出相應(yīng)反應(yīng)</p><p><b> **入口參數(shù):無</b></p><p><b> **出口參數(shù):無</b></p><p> ************************************
140、***/</p><p> void codeen()</p><p><b> {</b></p><p> uchar t=0;</p><p> write_com(0x80+0x40+0x02);//重新設(shè)置LCD數(shù)據(jù)地址指針</p><p> for(t=0;t<6;t
141、++)</p><p><b> {</b></p><p> temp1=keyscan();</p><p> while(temp1==no_key)//若相等則此時(shí)沒有鍵按下</p><p><b> {</b></p><p> //P1=0xdf;<
142、;/p><p> P1=0<<5|1<<0|1<<1|1<<2|1<<3|1<<4|1<<6|1<<7;</p><p> if(enter==0)</p><p><b> {</b></p><p><b>
143、 delay(5);</b></p><p> if(enter==0)</p><p><b> {</b></p><p> write_com(0x80+0x41+t); //確定刪除對象</p><p> write_date(' '); //顯示空格即為刪除&l
144、t;/p><p><b> t--;</b></p><p><b> }</b></p><p> while(!enter);//判斷按鍵是否釋放</p><p><b> delay(5);</b></p><p> while(!enter
145、);</p><p><b> }</b></p><p><b> P1=0xff;</b></p><p> temp1=keyscan();//繼續(xù)掃描按鍵直至有鍵按下</p><p><b> }</b></p><p> table5
146、[t]=temp1;//實(shí)時(shí)保存輸入密碼值</p><p> write_com(0x80+0x41+t); //重新設(shè)置數(shù)據(jù)地址指針</p><p> write_date('*');//LCD顯示“******”</p><p><b> delay(5);</b></p><p><
147、b> jz=20;</b></p><p><b> }</b></p><p><b> t=0; </b></p><p> for(t=0;t<6;t++)</p><p><b> {</b></p><p>
148、 if(table5[t]!=table9[t])//對數(shù)組中的內(nèi)容進(jìn)行逐一比較,一旦有數(shù)據(jù)不對馬上退出循環(huán)</p><p><b> {</b></p><p><b> break;</b></p><p><b> }</b></p><p><b>
149、 }</b></p><p> if(t==6)//要是條件退出的話說明六個(gè)數(shù)全對密碼</p><p><b> {</b></p><p><b> t=0;</b></p><p> write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p>
150、<p> write_com(0x80+0x03);//設(shè)置數(shù)據(jù)地址指針</p><p> for(t=0;t<9;t++)</p><p><b> {</b></p><p> write_date(table10[t]);//LCD顯示“UNLOCKED!”</p><p><b>
151、; delay(5);</b></p><p><b> }</b></p><p> while(1) </p><p><b> key=0;</b></p><p><b> }</b></p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多功能密碼鎖設(shè)計(jì)開題報(bào)告
- 電子密碼鎖畢業(yè)設(shè)計(jì)
- 多功能電子密碼鎖設(shè)計(jì)【文獻(xiàn)綜述】
- 畢業(yè)設(shè)計(jì)---電子密碼鎖設(shè)計(jì)
- 電子密碼鎖設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 電子密碼鎖畢業(yè)設(shè)計(jì)
- 電子密碼鎖畢業(yè)設(shè)計(jì)
- 電子密碼鎖的畢業(yè)設(shè)計(jì)
- 電子密碼鎖畢業(yè)設(shè)計(jì)論文
- 基于at89s51的多功能電子密碼鎖設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 畢業(yè)設(shè)計(jì)(論文)報(bào)告智能電子密碼鎖設(shè)計(jì)
- 電子密碼鎖畢業(yè)設(shè)計(jì)論文
- 電子密碼鎖畢業(yè)設(shè)計(jì) (2)
- 電子密碼鎖設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 多功能密碼鎖課程設(shè)計(jì)
- 多功能密碼鎖課程設(shè)計(jì)
- 密碼鎖畢業(yè)設(shè)計(jì)
- 電子密碼鎖的畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)---lcd電子密碼鎖的設(shè)計(jì)
- 電子密碼鎖畢業(yè)設(shè)計(jì)論文 (2)
評論
0/150
提交評論