|
- #include<stc12.h> //頭文件我用的(stc12c5a60s2)
- #define uint unsigned int //
- #define uchar unsigned char //
- uint k,num,a,b,c,s; //num數據顯示的位置 abc用于跳出while()循環 s數據輸錯的次數
- uchar code table1[12]={"0123456789*"}; //
- uchar code table2[]={"請輸入密碼:"}; //
- uchar code table3[]={"密碼證確!"}; //因為我的12864顯示“正”亂碼于是就用“證”
- uchar code table4[]={"密碼錯誤!"}; //
- uchar code table5[]={"還有"}; //
- uchar code table6[]={"請輸入當前密碼:"}; //
- uchar code table7[]={"修改后的密碼:"};
- uchar code table8[]={"次機會"};
- uchar code table9[]={"系統已經鎖死"}; //
- uint Cipher1[5]; //儲存你所輸入的數據
- uint Cipher2[5]={0,1,2,3,4,};//儲存密碼(初始密碼123)
-
- sbit LCD_RS=P1^0; // 數據/命令選擇端
- sbit LCD_RW=P1^1; // 讀寫選擇端
- sbit LCD_EN=P1^2; // 使能信號
- sbit LCD_PSB=P1^6; // 并/串選擇
- sbit beep=P3^1;
-
- void shaomiao(); //矩陣鍵盤掃描
- void delay(uint); // 延時函數
- void lcd_init(); // 12864初始化
- void write_cmd(uchar); //
- void write_dat(uchar); //
- void lcd_pos(uchar,char); //
- void show(); // 在12864上顯示
- //
- void main() //
- {
- s=5; //輸錯密碼次數
- lcd_init(); //
- while(1) //
- { //
- show(); //
- shaomiao(); //
- } //
- } //
- //
- void show() //
- { uint i,m; //
- m=0; //
- lcd_pos(0,0); //
- i=0; //
- while(table2[i]!='\0') //
- {write_dat(table2[i]);i++;} //
- shaomiao(); //
- if(num>0) // 輸入密碼
- { //
- lcd_pos(1,num-1); //
- write_dat(table1[k]); //
- Cipher1[num]=k;
- } //刪除上一個數據
- if(b==1)
- {
- lcd_pos(1,num-1);
- write_dat('\0');
- num--;
- k=Cipher1[num];
- b=0;
- while(num<1) {shaomiao();b=0;}
- }
- // while(num>2) {num=3;shaomiao();if(c==1) m=4;if(m==4){c=0;break;}}
- while(c==1) //判斷密碼是否正確
- {
- for(i=0;i<8;i++)
- {lcd_pos(0,i);write_dat(table1[11]);lcd_pos(1,i);write_dat(table1[11]);}
- while((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3]))
- {
- c=0;s=5;
- shaomiao();
- lcd_pos(0,0);
- i=0;
- while(table3[i]!='\0')
- {write_dat(table3[i]);i++;}
- if(c==1) {m=3;Cipher1[1]=Cipher1[2]=Cipher1[3]='\0';break;}
- }
- if(m!=3)
- {
- s--;
- while(!((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3])))
- {
- c=0;beep=0;delay(500);
- shaomiao();
- lcd_pos(0,0);
- i=0;
- while(table5[i]!='\0')
- {write_dat(table5[i]);i++;}
- lcd_pos(0,2);
- write_dat(table1[s]);
- write_dat('\0');
- lcd_pos(0,3);
- i=0;
- while(table8[i]!='\0')
- {write_dat(table8[i]);i++;}
- while(s<1)
- { lcd_pos(0,0);i=0;
- while(table9[i]!='\0')
- {write_dat(table9[i]);i++;}
- }
- if(c==1) {m=4;break;}
- }
- }
- if(m==3|m==4) {a=0;b=0;c=0;num=0;}
- }
-
- while(a==1) //修改密碼
- { num=0;
- for(i=0;i<8;i++)
- {lcd_pos(1,i);write_dat(table1[11]);}
- lcd_pos(0,0);
- i=0;
- while(table6[i]!='\0')
- {write_dat(table6[i]);i++;}
- shaomiao();
- while(num>0) //輸入當前密碼正確后才可以修改
- { shaomiao();
- lcd_pos(1,num-1);
- write_dat(table1[k]);
- Cipher1[num]=k;
- if(b==1)
- {
- lcd_pos(1,num-1);
- write_dat(table1[11]);
- num--;
- k=Cipher1[num];
- b=0;
- }
- while(c==1)
- {
- num=0;
- shaomiao();
- for(i=0;i<8;i++)
- {lcd_pos(0,i);write_dat(table1[11]);lcd_pos(1,i);write_dat(table1[11]);}
- while((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3]))
- {
- c=0;s=5;
- lcd_pos(0,0);
- i=0;
- while(table7[i]!='\0')
- {write_dat(table7[i]);i++;}
- shaomiao();
- while(num>0)
- {
- shaomiao();
- lcd_pos(1,num-1);
- write_dat(table1[10]);
- Cipher2[num]=k;
- if(b==1)
- {
- lcd_pos(1,num-1);
- write_dat(table1[11]);
- num--;
- b=0;
- }
- while(num<1) {shaomiao();b=0;}
- m=1;
- if(c==1) break;
- }
- if(m==1)
- { a=0;b=0;c=0;num=0;
- for(i=0;i<8;i++)
- {lcd_pos(0,i);write_dat(table1[11]);lcd_pos(1,i);write_dat(table1[11]);}
- }
- }
- if(m!=1)
- { s--;
- while(!((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3])))
- {
- c=0;
- beep=0;delay(500);
- shaomiao();
- lcd_pos(0,0);
- i=0;
- while(table5[i]!='\0')
- {write_dat(table5[i]);i++;}
- lcd_pos(0,2);
- write_dat(table1[s]);
- write_dat('\0');
- lcd_pos(0,3);
- i=0;
- while(table8[i]!='\0')
- {write_dat(table8[i]);i++;}
- while(s<1) //輸錯5次鎖死系統
- {
- lcd_pos(0,0);i=0;
- while(table9[i]!='\0')
- {write_dat(table9[i]);i++;}
- }
- m=2;
- if(c==1) break;
- }
- }
- if(m==1|m==2) c=0;
- }
- }
- }
- }
- //寫指令數據到LCD
- void write_cmd(char cmd)
- {
- LCD_RS=0;
- LCD_RW=0;
- LCD_EN=0;
- P0=cmd;
- delay(5);
- LCD_EN=1;
- delay(5);
- LCD_EN=0;
- }
- //寫顯示數據到LCD
- void write_dat(char dat)
- {
- LCD_RS=1;
- LCD_RW=0;
- LCD_EN=0;
- P0=dat;
- delay(5);
- LCD_EN=1;
- delay(5);
- LCD_EN=0;
- }
- //設定顯示位置
- void lcd_pos(char x,char y)
- {
- uchar pos;
- if(x==0)
- {x=0x80;}
- else if(x==1)
- {x=0x90;}
- else if(x==2)
- {x=0x88;}
- else if(x==3)
- {x=0x98;}
- pos=x+y;
- write_cmd(pos); //顯示的地址
- }
- //12864初始化
- void lcd_init()//12864初始化
- {
- LCD_PSB=1; //并口模式
- write_cmd(0x30); //基本指令操作
- delay(5);
- write_cmd(0x0c); //顯示開,光標關
- delay(5);
- write_cmd(0x01); //消除所有顯示
- delay(5);
- }
- void shaomiao()
- {
- uchar t;
- P3=0xdf;
- t=P3;
- t=t&0x1c;
- if(t!=0x1c)
- {
- delay(10);
- t=P3;
- t=t&0x1c;
- if(t!=0x1c)
- {
- t=P3;
- switch(t)
- {
- case 0xdb:k=1;num++;break;
- case 0xd7:k=2;num++;break;
- case 0xcf:k=3;num++;break;
- default: break;
- }
- while(t!=0x1c)
- {
- t=P3;
- t=t&0x1c;
- }
- }
- }
- P3=0xbf;
- t=P3;
- t=t&0x1c;
- if(t!=0x1c)
- {
- delay(10);
- t=P3;
- t=t&0x1c;
- if(t!=0x1c)
- {
- t=P3;
- switch(t)
- {
- case 0xbb:a=1;break;
- case 0xb7:b=1;break;
- case 0xaf:c=1;break;
- default: break;
- }
- while(t!=0x1c)
- {
- t=P3;
- t=t&0x1c;
- }
- }
- }
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- } [/hide]因為我的單片機的矩陣鍵盤只有六個鍵 于是上面的三個作為數據 下面三個一個是修改密碼 ,清除鍵 ,確定鍵 功能和手機的解鎖功能一樣
- #include<stc12.h> //頭文件我用的(stc12c5a60s2)
- #define uint unsigned int //
- #define uchar unsigned char //
- uint k,num,a,b,c,s; //num數據顯示的位置 abc用于跳出while()循環 s數據輸錯的次數
- uchar code table1[12]={"0123456789*"}; //
- uchar code table2[]={"請輸入密碼:"}; //
- uchar code table3[]={"密碼證確!"}; //因為我的12864顯示“正”亂碼于是就用“證”
- uchar code table4[]={"密碼錯誤!"}; //
- uchar code table5[]={"還有"}; //
- uchar code table6[]={"請輸入當前密碼:"}; //
- uchar code table7[]={"修改后的密碼:"};
- uchar code table8[]={"次機會"};
- uchar code table9[]={"系統已經鎖死"}; //
- uint Cipher1[5]; //儲存你所輸入的數據
- uint Cipher2[5]={0,1,2,3,4,};//儲存密碼(初始密碼123)
-
- sbit LCD_RS=P1^0; // 數據/命令選擇端
- sbit LCD_RW=P1^1; // 讀寫選擇端
- sbit LCD_EN=P1^2; // 使能信號
- sbit LCD_PSB=P1^6; // 并/串選擇
- sbit beep=P3^1;
-
- void shaomiao(); //矩陣鍵盤掃描
- void delay(uint); // 延時函數
- void lcd_init(); // 12864初始化
- void write_cmd(uchar); //
- void write_dat(uchar); //
- void lcd_pos(uchar,char); //
- void show(); // 在12864上顯示
- //
- void main() //
- {
- s=5; //輸錯密碼次數
- lcd_init(); //
- while(1) //
- { //
- show(); //
- shaomiao(); //
- } //
- }
- //部分代碼
復制代碼 |
-
-
電子密碼鎖.zip
2014-8-31 16:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
32.09 KB, 下載次數: 417, 下載積分: 黑幣 -5
大家如果感覺好就給點分
評分
-
查看全部評分
|