單片機(jī)密碼鎖掉電可記憶密碼_第1頁(yè)
單片機(jī)密碼鎖掉電可記憶密碼_第2頁(yè)
單片機(jī)密碼鎖掉電可記憶密碼_第3頁(yè)
單片機(jī)密碼鎖掉電可記憶密碼_第4頁(yè)
單片機(jī)密碼鎖掉電可記憶密碼_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、. /*功能鍵S1-S10數(shù)字鍵0-9S11-更改密碼S12-更改密碼完畢后確認(rèn)S13-重試密碼、重新設(shè)定S14-關(guān)閉密碼鎖初始密碼:000000 密碼位數(shù):6位程序功能:本程序結(jié)合了24C02存儲(chǔ)器的存儲(chǔ)功能,可以掉電保存密碼。第一次運(yùn)行時(shí),假設(shè)輸入000000原始密碼后無(wú)反響,可以試驗(yàn)著將主程序中前面的一小段被注釋線(xiàn)屏蔽的程序前的注釋線(xiàn)刪掉,然后重新編譯下載可以將密碼復(fù)原為000000。此后,再將這小段程序屏蔽掉,再編譯下載。方可正常使用。 1、開(kāi)鎖:下載程序后,直接按六次S1即代表數(shù)字1,8位LED亮,鎖被翻開(kāi),輸入密碼時(shí),六位數(shù)碼管依次顯示小橫杠。 2、更改密碼:只有當(dāng)開(kāi)鎖LED亮后,

2、該功能方可使用。首先按下更改密碼鍵S11,然后設(shè)置相應(yīng)密碼,此時(shí)六位數(shù)碼管會(huì)顯示設(shè)置密碼對(duì)應(yīng)的數(shù)字。最后設(shè)置完六位后,按下S12確認(rèn)密碼更改,此后新密碼即生效。 3、重試密碼:當(dāng)輸入密碼時(shí),密碼輸錯(cuò)后按下鍵S13,可重新輸入六位密碼。當(dāng)設(shè)置密碼時(shí),設(shè)置中途想更改密碼,也可按下此鍵重新設(shè)置。 4、關(guān)閉密碼鎖:按下S14即可將翻開(kāi)的密碼鎖關(guān)閉。推薦初級(jí)演示步驟:輸入原始密碼000000-按下更改密碼按鍵S11-按0到9設(shè)置密碼-按S12確認(rèn)密碼更改-按S14關(guān)閉密碼鎖-輸入新的密碼翻開(kāi)密碼鎖*/#include#include #define uint unsigned int#define uc

3、har unsigned charuchar old1,old2,old3,old4,old5,old6; /原始密碼000000uchar new1,new2,new3,new4,new5,new6; /每次MCU采集到的密碼輸入uchar a=16,b=16,c=16,d=16,e=16,f=16; /送入數(shù)碼管顯示的變量uchar wei,key,temp;bit allow,genggai,ok,wanbi,retry,close; /各個(gè)狀態(tài)位sbit dula=P26;sbit wela=P27;sbit beep=P23;sbit sda=P20; /IO口定義sbit scl=

4、P21;unsigned char code table=0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f,0*77,0*7c,0*39,0*5e,0*79,0*71,0*00,0*40;/*IIC芯片24C02存儲(chǔ)器驅(qū)動(dòng)程序*/void nop()_nop_();_nop_();/24C02讀寫(xiě)驅(qū)動(dòng)程序/void delay1(unsigned int m)unsigned int n; for(n=0;nm;n+);void init() /24c02初始化子程序scl=1;nop();sda=1;nop();void start() /啟

5、動(dòng)I2C總線(xiàn)sda=1;nop();scl=1;nop();sda=0;nop();scl=0;nop();void stop() /停頓I2C總線(xiàn)sda=0;nop();scl=1;nop();sda=1;nop();void writebyte(unsigned char j) /寫(xiě)一個(gè)字節(jié)unsigned char i,temp; temp=j; for (i=0;i8;i+) temp=temp1; scl=0; nop(); sda=CY;/temp左移時(shí),移出的值放入了CY中 nop(); scl=1;/待sda線(xiàn)上的數(shù)據(jù)穩(wěn)定后,將scl拉高 nop(); scl=0; nop()

6、; sda=1; nop();unsigned char readbyte() /讀一個(gè)字節(jié) unsigned char i,j,k=0; scl=0; nop(); sda=1; for (i=0;i8;i+) nop(); scl=1; nop(); if(sda=1) j=1; elsej=0; k=(k1)|j; scl=0; nop();return(k);void clock() /I2C總線(xiàn)時(shí)鐘 unsigned char i=0; scl=1; nop(); while(sda=1)&(i0;j-) for(k=125;k0;k-);void display(uchar a,u

7、char b,uchar c,uchar d,uchar e,uchar f) dula=0; P0=tablea; dula=1; dula=0; wela=0; P0=0*fe; wela=1; wela=0; delay(5); P0=tableb; dula=1; dula=0; P0=0*fd; wela=1; wela=0; delay(5); P0=tablec; dula=1; dula=0; P0=0*fb; wela=1; wela=0; delay(5); P0=tabled; dula=1; dula=0; P0=0*f7; wela=1; wela=0; delay(

8、5); P0=tablee; dula=1; dula=0; P0=0*ef; wela=1; wela=0; delay(5); P0=tablef; dula=1; dula=0; P0=0*df; wela=1; wela=0; delay(5);void keyscan() P3=0*fe; temp=P3; temp=temp&0*f0; if(temp!=0*f0) delay(10); if(temp!=0*f0) temp=P3; switch(temp) case 0*ee: key=0; wei+; break; case 0*de: key=1; wei+; break;

9、 case 0*be: key=2; wei+; break; case 0*7e: key=3; wei+; break; while(temp!=0*f0) temp=P3; temp=temp&0*f0; beep=0; beep=1; P3=0*fd; temp=P3; temp=temp&0*f0; if(temp!=0*f0) delay(10); if(temp!=0*f0) temp=P3; switch(temp) case 0*ed: key=4; wei+; break; case 0*dd: key=5; wei+; break; case 0*bd: key=6; w

10、ei+; break; case 0*7d: key=7; wei+; break; while(temp!=0*f0) temp=P3; temp=temp&0*f0; beep=0; beep=1; P3=0*fb; temp=P3; temp=temp&0*f0; if(temp!=0*f0) delay(10); if(temp!=0*f0) temp=P3; switch(temp) case 0*eb: key=8; wei+; break; case 0*db: key=9; wei+; break; case 0*bb: genggai=1; wei=0; break; cas

11、e 0*7b: if(allow) ok=1; break; while(temp!=0*f0) temp=P3; temp=temp&0*f0; beep=0; beep=1; P3=0*f7; temp=P3; temp=temp&0*f0; if(temp!=0*f0) delay(10); if(temp!=0*f0) temp=P3; switch(temp) case 0*e7: retry=1; break; case 0*d7: close=1; break; while(temp!=0*f0) temp=P3; temp=temp&0*f0; beep=0; beep=1;

12、void shumima()/對(duì)按鍵采集來(lái)的數(shù)據(jù)進(jìn)展分配if(!wanbi)switch(wei)case 1:new1=key; if(!allow)a=17; else a=key;break;case 2:new2=key;if(a=17) b=17;else b=key;break;case 3:new3=key; if(a=17) c=17;else c=key;break;case 4:new4=key;if(a=17) d=17;else d=key;break;case 5:new5=key; if(a=17) e=17;else e=key;break;case 6:new6

13、=key; if(a=17) f=17;else f=key;wanbi=1;break;void yanzheng() /驗(yàn)證密碼是否正確if(wanbi) /只有當(dāng)六位密碼均輸入完畢前方進(jìn)展驗(yàn)證if(new1=old1)&(new2=old2)&(new3=old3)&(new4=old4)&(new5=old5)&(new6=old6)allow=1;/當(dāng)輸入的密碼正確,會(huì)得到allowe置一void main()init(); /初始化24C02/*下面的一小段程序的功能為格式化密碼存儲(chǔ)區(qū)。*當(dāng)24c02中這些存儲(chǔ)區(qū)由于其他程序的運(yùn)行而導(dǎo)致*所存數(shù)據(jù)發(fā)生了變化,或者密碼遺忘時(shí),*可以刪

14、掉其前面的注釋線(xiàn),然后重新編譯下載。*而將密碼復(fù)原為000000后,請(qǐng)將下面的程序用*注釋屏蔽掉,重新編譯、下載,方可正常使用*/write24c02(110,0*00);/write24c02(111,0*00);/24c02的第110到115地址單元作為密碼存儲(chǔ)區(qū)/write24c02(112,0*00);/write24c02(113,0*00);/write24c02(114,0*00);/write24c02(115,0*00);/*/old1=read24c02(110); old2=read24c02(111);old3=read24c02(112);old4=read24c02

15、(113);old5=read24c02(114);old6=read24c02(115);while(1)keyscan();shumima();yanzheng();if(allow) /驗(yàn)證完后,假設(shè)allow為1,則開(kāi)鎖P1=0*00;if(!genggai)wanbi=0;if(genggai) /當(dāng)S16更改密碼鍵被按下,genggai會(huì)被置一if(allow) /假設(shè)已經(jīng)把鎖翻開(kāi),才有更改密碼的權(quán)限while(!wanbi)/當(dāng)新的六位密碼沒(méi)有設(shè)定完,則一直在這里循環(huán) keyscan();shumima();if(retry|close) /而當(dāng)探測(cè)到重試鍵S18或者關(guān)閉密碼鎖鍵

16、S19被按下時(shí),則跳出wanbi=1;break;display(a,b,c,d,e,f);if(ok) /更改密碼時(shí),當(dāng)所有六位新密碼均被按下時(shí),可以按下此鍵,完畢密碼更改 /其他時(shí)間按下此鍵無(wú)效ok=0; wei=0;genggai=0;old1=new1;old2=new2;old3=new3; /此時(shí),舊的密碼將被代替old4=new4;old5=new5;old6=new6;/新密碼寫(xiě)入存儲(chǔ)區(qū)。write24c02(110,old1);write24c02(111,old2);write24c02(112,old3);write24c02(113,old4);write24c02(114,old5);write24c02(115,old6);a=16;b=16;c=16;d=16;e=16;f=16;if(retry)/當(dāng)重試按鍵S18被按下,retry會(huì)被置位retry=0; wei=0;wanbi=0;a=1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論