電子密碼鎖的電路設(shè)計(jì)hsb_第1頁
電子密碼鎖的電路設(shè)計(jì)hsb_第2頁
電子密碼鎖的電路設(shè)計(jì)hsb_第3頁
電子密碼鎖的電路設(shè)計(jì)hsb_第4頁
電子密碼鎖的電路設(shè)計(jì)hsb_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

-.z侯少博QQ:604150086實(shí)現(xiàn)功能:輸入正確密碼綠燈亮,輸入錯(cuò)誤密碼報(bào)警并且紅燈亮,可以輸入三次密碼。C程序:*include<reg52.h>*defineucharunsignedchar*defineuintunsignedintsbitlcdrs=P1^0; //液晶數(shù)據(jù)、指令端sbitwr=P1^1; //讀、寫端sbitlcden=P1^2; //液晶使能端sbitgreen_light=P1^3; //綠燈1滅,0亮sbitspeaker=P1^4; //揚(yáng)聲器0響sbitred_light=P1^5; //紅燈1滅,0亮ucharcodetable[]={"enterpassword:"}; ucharcodetable1[]={"error!tryagain:"}; ucharcodetable2[]={"wele!!!"}; ucharcodetable4[]={"setpassword:"}; ucharcodetable5[]={"inputagain:"}; ucharcodetable6[]={"badluck!"}; ucharcodetable7[]={"getout!!"}; ucharcodetable8[]={"setsucceed"}; bitflag,flag1,flag2,flag3,flag4,flag5,rst;ucharkey,count;voiddelayms(uint*){ uinti,j; for(i=*;i>0;i--) //延時(shí)函數(shù) for(j=110;j>0;j--);}voidwrite_(uchar) //液晶寫指令函數(shù){ wr=0; lcdrs=0; P2=; delayms(5); lcden=1; delayms(5); lcden=0;}voidwrite_data(uchardate) //液晶寫數(shù)據(jù)函數(shù){ wr=0; lcdrs=1; P2=date; delayms(5); lcden=1; delayms(5); lcden=0;} //液晶初始化函數(shù)voidlcdinit(){ lcden=0; write_(0*38); write_(0*06); write_(0*0f); write_(0*01);}voidkeyscan() //鍵盤掃描函數(shù){ uchartemp; P3=0*fe; if(P3!=0*fe) { delayms(8); if(P3!=0*fe) { temp=0*f0&P3; switch(temp) { case0*e0:key=0;flag5=1;break; //數(shù)字鍵盤按下時(shí)顯示‘*‘字符,把對(duì)應(yīng)的數(shù)字放入數(shù)組中 case0*d0:key=1;flag5=1;break; //flag5為1時(shí)才能把數(shù)據(jù)放進(jìn)數(shù)組,只是為了防止刪減密碼 case0*b0:key=2;flag5=1;break; //時(shí)把key的值裝進(jìn)已輸入正確的密碼中 case0*70:key=3;flag5=1;break; } while(P3!=0*fe); write_data('*'); count++; } } P3=0*fd; if(P3!=0*fd) { delayms(8); if(P3!=0*fd) { temp=0*f0&P3; switch(temp) { case0*e0:key=4;flag5=1;break; case0*d0:key=5;flag5=1;break; case0*b0:key=6;flag5=1;break; case0*70:key=7;flag5=1;break; } while(P3!=0*fd); write_data('*'); count++; } } P3=0*fb; if(P3!=0*fb) { delayms(8); if(P3!=0*fb) { temp=0*f0&P3; switch(temp) { case0*e0:key=8;write_data('*');flag5=1;count++;break; case0*d0:key=9;write_data('*');flag5=1;count++;break; case0*b0:flag=1;break; case0*70:rst=1;break; } while(P3!=0*fb); } } P3=0*f7; if(P3!=0*f7) { delayms(8); if(P3!=0*f7) { temp=0*f0&P3; switch(temp) { case0*e0: switch(count) { case1:write_(0*c5);write_data('');write_(0*c5);break; //當(dāng)按下delete鍵時(shí),往前一個(gè)地址顯示空字符, case2:write_(0*c6);write_data('');write_(0*c6);break; //再把指針指回前一個(gè)地址 case3:write_(0*c7);write_data('');write_(0*c7);break; case4:write_(0*c8);write_data('');write_(0*c8);break; case5:write_(0*c9);write_data('');write_(0*c9);break; case6:write_(0*ca);write_data('');write_(0*ca);break; } if(0<count)count--; //只有在有輸入密碼的情況下才能刪減 break; } while(P3!=0*F7); } }}voidmain(){ uchara[6],b[6],i,num,table3[6]={1,2,3,4,5,6}; //初始化原始密碼為“123456 lcdinit(); //液晶初始化 while(1) { keyscan(); //鍵盤掃描 if(!flag3) { write_(0*0f); //標(biāo)志位flag3為0時(shí), write_(0*80); //顯示“enterpassword:〞字符串for(i=0;i<15;i++) write_data(table[i]); write_(0*c5); //令光標(biāo)在液晶第二行中間閃爍 flag3=1; //flag3為1時(shí)不顯示“enterpassword:〞字符串,因?yàn)椴煌呙璐苏Z句時(shí)會(huì)造成字符串的閃爍 } if(num<=2) //控制密碼的輸入次數(shù)為三次,超過了就不能再輸入 { if(flag5) { switch(count) { case1:a[count-1]=key;break; //把輸入的六位密碼 case2:a[count-1]=key;break; case3:a[count-1]=key;break; case4:a[count-1]=key;break; case5:a[count-1]=key;break; case6:a[count-1]=key;break; } flag5=0; //防止delete鍵按下時(shí)把正確的密碼改掉 } if(count==6) //輸入的數(shù)為夠六位執(zhí)行,密碼正確時(shí)進(jìn)入 { if((a[0]==table3[0])&&(a[1]==table3[1])&&(a[2]==table3[2])&&(a[3]==table3[3])&&(a[4]==table3[4])&&(a[5]==table3[5])) { if(!flag4) { write_(0*01); //顯示“welconme字符串〞 write_(0*80); for(i=0;i<13;i++) write_data(table2[i]); write_(0*0c); //光標(biāo)閃爍關(guān)閉 green_light=0; delayms(5000); green_light=1; flag=0; flag4=1; rst=0; //清零,執(zhí)行下面程序 } while(!rst) { keyscan(); if(flag) break; } while(flag) //flag為1時(shí)進(jìn)入修改密碼狀態(tài) { keyscan(); if(!flag1) { write_(0*01); write_(0*0f); write_(0*80);for(i=0;i<13;i++) //顯示“setpassword:〞字符串 write_data(table4[i]); write_(0*c5); count=0; flag1=1; } if(flag5) { switch(count) { case1:table3[count-1]=key;break; case2:table3[count-1]=key;break; case3:table3[count-1]=key;break; case4:table3[count-1]=key;break; case5:table3[count-1]=key;break; case6:table3[count-1]=key;break; } flag5=0; } if(count==6) { if(!flag2) { write_(0*01); //顯示“inputagain字符串〞 write_(0*80); for(i=0;i<12;i++) write_data(table5[i]); write_(0*c5); flag2=1; count=0; } while(1) { keyscan(); if(flag5) { switch(count) //再次輸入密碼 { case1:b[count-1]=key;break; case2:b[count-1]=key;break; case3:b[count-1]=key;break; case4:b[count-1]=key;break; case5:b[count-1]=key;break; case6:b[count-1]=key;break; } flag5=0; } if(count==6) //如果第一次輸入的密碼和第二次一樣,輸出“setsucceed〞字符串 { if((b[0]==table3[0])&&(b[1]==table3[1])&&(b[2]==table3[2])&&(b[3]==table3[3])&&(b[4]==table3[4])&&(b[5]==table3[5])) { write_(0*01); write_(0*80); for(i=0;i<13;i++) //顯示“setsucceed〞字符串 write_data(table8[i]); write_(0*0c); //光標(biāo)停頓閃爍 {green_light=0;red_light=0;delayms(5000);red_light=1;green_light=1;} flag=0; //所有標(biāo)志位從新清零 flag1=0; flag2=0; flag3=0; flag4=0; count=0; num=0; while(!rst)keyscan(); } else { //當(dāng)進(jìn)入修改狀態(tài)第二次輸入的密碼和第一次不一樣時(shí)再次輸入,知道一樣為止 count=0; write_(0*01); write_(0*80); for(i=0;i<12;i++)

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論