數字密碼鎖是二十一世紀制鎖業的一次革命。鎖的特點是不用鑰匙、無鎖孔、機械傳動、不易損壞、不磨損、不易被破譯、可多次更換密碼、換號不換鎖、一把鎖多個密碼,具有防撥、防砸、防撬、防堵等功能。安裝門鎖時不破壞原門的結構,避免用鑰匙開啟旋芯式鎖具的一切煩惱(如丟、落、拆、堵門被反鎖等)。 “數字密碼鎖”是利用數字密碼來開啟的鎖具,其重復概率僅為十萬分之一,有著很高的安全性;而旋芯式鎖具使用不夠安全。通過對社會各階層千余人的調查,百分之百的人對目前身上掛著的串串鑰匙無可奈何。但現在又沒有一種鎖具可擺脫鑰匙的束縛。都愿意一身輕松沒有任何顧慮的出入家門,都愿意用上一種既安全方便又不用鑰匙的鎖具。因此,“數字密碼鎖”產品的市場發展前景極為廣闊。在調查的千余人中有60%的人有丟失鑰匙的經歷,25%的人有把鑰匙反鎖在室內的,75%的人居室在三層以上的,36%的人把鑰匙忘在工廠的,有8%的人是利用鄰居的陽臺、窗戶跳躍進入自己家來打開被反鎖的房門,90%的人或聽或看新聞得知有因無法打開房門,而冒險躍窗發生事故非死既傷,給家庭造成麻煩。精神和肉體的損傷是無法挽回的,為了解決上述各種數據給人們帶來的各種煩惱,所以“數字密碼鎖”,使人們在無憂無慮的環境中生活
液晶顯示密碼鎖結構原理圖.png (17.2 KB, 下載次數: 77)
下載附件
2017-6-16 16:56 上傳
0.png (51.58 KB, 下載次數: 96)
下載附件
2017-6-16 19:36 上傳
單片機源程序如下:
- #include<reg52.h>
- #include<math.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define data_IO P2
- sbit rs=P3^0; //指令和數據寄存器 “1是數據,” “0是指令”
- sbit rw=P3^1;//讀寫控制,“1讀” “0寫”
- sbit e=P3^2; //片選信號
- sbit p=P2^7;
- sbit deng=P3^3;///響音樂的端口
- sbit md=P3^4;///修改密碼時的燈
- uchar pwflag;//密碼是否正確的標志位
- uchar count;//
- uchar gg=0 ;//只有輸入正確的密碼才能修改密碼
- uchar cs=3 ;//輸入密碼的錯誤次數
- uchar m[]={1,2,3,4,5,6}; ///初始密碼
- static uchar mbuf[6];///輸入的密碼
- char d[32]={' ','I','M','P','O','R','T',' ','C','I','P','H','E','R',':',' ',
- ' ',' ','_',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};//輸入密碼
- code char ks[32]={'C','O','N','G','R','A','T','U','L','A','T','E',' ','Y','O','U',
- ' ','O','P','E','N','I','N','G',' ',' ','L','O','C','K','!',' '};////開鎖
- code char cw[32]={' ','C','I','P','H','E','R',' ',' ','E','R','R','O','R',' ',' ',
- '~','~','~','~','~','~','~','~','~','~','~','~','~','~','~','~' };////錯誤
- code char xc[32]={' ',' ','A','M','E','N','D',' ','S','U','C','C','E','E','D',' ',
- ' ',' ',' ',' ',' ','!','!','!','!','!','!',' ',' ',' ',' ',' '};//修改成功
- code char xg[32]={' ','A','M','E','N','D',' ',' ','C','I','P','H','E','R',':',' ',
- ' ',' ',' ',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};///修改密碼*/
- void yanshi(uint n)///////////////延時函數///////////////////////////////////
- {
- uint i;
- for(i=0;i<n;i++){};
- }
- void delay(uint n)///////////////延時函數///////////////////////////////////
- {
- uint i,j;
- for(i=0;i<1000;i++)
- {for(j=0;j<n;j++){}}
-
- }
- void busy() ////////////////////判斷是否忙////////////////////////////////////////
- {data_IO=0xff;
- rs=0; //寫指令 ////////////////////
- rw=1; //表示讀狀態 // 三個的狀態表示 //
- e=1; //下降延// // 判忙狀態 //
- while(!p); ////////////////////
- // e=0;
- }
- void xiezl(uchar shuju) /////////////////////*寫指令*/////////////////////////////
- {
- busy();/*yanshi(6500);*/
- data_IO=shuju;
- rs=0; //寫指令 ////////////////////
- rw=0; //表示寫狀態 // 三個的狀態表示 //
- e=1; //下降延// // 寫指令 //
- e=0; ///////// ////////////////////
- }
- void w_dat(uint n)//////////////////寫數據//////////////////////////
- {
- busy(); /*yanshi(6500) ;*/
- data_IO=n;
- rs=1; //寫數據 ////////////////////
- rw=0; //表示寫狀態 // 三個的狀態表示 //
- e=1; //下降延// //寫數據 //
- e=0; ///////// ////////////////////
- // return;
- }
- void xianshi(uchar js[]) //////////////////顯示函數///////////////////////////////
- {
- uchar h,v;
- xiezl(0x01); //清屏顯示
- yanshi(2000) ;
- xiezl(0x80); // DDRAM地址的設置
- for(h=0;h<16;h++)
- {w_dat(js[h]); ///n表示有寫幾位數據
- yanshi(100) ;
- }
- xiezl(0xc0);//換行
- for(v=(16);v<32;v++)
- {w_dat(js[v]); ///n表示有寫幾位數據
- yanshi(100) ;
- }
- }
- void chushihua(void)///////////////////*液晶模塊初始化*/
- { uchar i;
- rs=0; //寫指令
- rw=0; //表示寫狀態
- e=0; //使能
- for(i=0;i<3;i++)
- {
- xiezl(0x38); //功能設置,8位,一行顯示,5*7點陣
- yanshi(1000);
- }
- xiezl(0x38); //兩行顯示
- xiezl(0x0f); //顯示開關控制位
- xiezl(0x18); //移位控制,光標和顯示一起左移
- xiezl(0x06); //設置輸入模式
- xiezl(0x01); //清屏顯示
- xiezl(0x80); // DDRAM地址的設置
- }
- bit pwcmp(void)
- {
- bit flag;
- uchar i;
- for (i=0;i<6;i++)
- {
- if (m[i]==mbuf[i]) flag = 1; //*密碼正確*/
- else { flag = 0; i=6; } //*密碼錯誤*/
- }
- return(flag);
- }
- void gb(void)/////////轉移光標
- { uchar c;
- xiezl(0xc0);//換行
- yanshi(3000) ;
- for(c=0;c<5;c++)
- {w_dat(' ');///n表示有寫幾位數據
- yanshi(2000) ;
- }
- }
- uchar getkey(void)///得到鍵值
- { uchar h,l,k;
- while(P1!=0x0f)
- {
- h=P1&0x0f;
- P1=0xf0;
- l=P1&0xf0;
- k=h|l;
- return(k);
- }
- }
- void diaoyong(uchar i)///////////調用各鍵的函數//////輸入密碼
- { uchar lq;
- switch(i)
- {
- case 0x7e: if (count<6) { mbuf[count]=1; count++; w_dat('*');} break; // 01111110 1
- case 0xbe: if (count<6) { mbuf[count]=2; count++; w_dat('*');} break; // 10111110 2
- case 0xde: if (count<6) { mbuf[count]=3; count++; w_dat('*');} break; // 11011110 3
- case 0xee: if (count<6) { mbuf[count]=4; count++; w_dat('*');} break; // 11101110 4
- case 0x7d: if (count<6) { mbuf[count]=5; count++; w_dat('*');} break; // 01111101 5
- case 0xbd: if (count<6) { mbuf[count]=6; count++; w_dat('*');} break; // 10111101 6
- case 0xdd: if (count<6) { mbuf[count]=7; count++; w_dat('*');} break; // 11011101 7
- case 0xed: if (count<6) { mbuf[count]=8; count++; w_dat('*');} break; // 11101101 8
- case 0x7b: if (count<6) { mbuf[count]=9; count++; w_dat('*');} break; // 01111011 9
- case 0xbb: if (count<6) { mbuf[count]=0; count++; w_dat('*');} break; // 10111011 0
- case 0xdb: if (count==6) { pwflag = pwcmp();} else pwflag = 0;// 只有輸入6個密碼后按確認鍵才作密碼比較
- if(pwflag) {deng=0; xianshi(ks);gg=1; } else { cs--;deng=1; xianshi(cw); delay(200); xianshi(d);gb();count = 0; }
- break; // 11011011 a
- case 0xeb: count = 0;deng=1; xianshi(d); gb();gg=0; /*取消鍵*/
- break; // 11101011 b
- case 0x77: if(gg==1){ count=0;xianshi(xg); gb();} //修該密碼
- break; // 01110111 c
-
- case 0xb7: if((count==6)&&(gg==1)) { count=0;
- for (lq=0;lq<6;lq++){ m[lq]=mbuf[lq]; yanshi(10000);} md=1; xianshi(xc); delay(200); xianshi(d);yanshi(2000);gb();yanshi(200);gg=0;}//保存密碼
- break; // 10110111 d
- /*case 0xd7: sr[jm]='e'; break; // 11010111 e
- case 0xe7: sr[jm]='f'; break; // 11100111 f */
- default: break;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
程序.zip
(33.66 KB, 下載次數: 25)
2017-6-16 16:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|