|
- #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
32.09 KB, 下载次数: 417, 下载积分: 黑币 -5
大家如果感觉好就给点分
评分
-
查看全部评分
|