|
I2C芯片
带记忆的电子密码锁仿真工程文件及程序下载:
电子密码锁 - I2C芯片.zip
(78.97 KB, 下载次数: 46)
源程序:
- #include<reg51.h>
- #include"24c02.h"
- #include"1602.h"
- #include"keyscan.h"
- sbit GRE=P2^2;
- sbit RED=P2^3;
- uchar num,shu;
- uchar code table[]="please input key";
- uchar code you[]="you left ";
- uchar code chance[]=" chance";
- uchar code wait[]="please wait 5s";
- uchar code change[]="you can change";
- uchar code the[]="the key";
- uchar code please[]="please input";
- uchar code new[]=" the new key";
- uchar code ok[]="ok try again";
- uchar key1[6]={1,2,3,4};
- uchar key[6];
- uchar key_xin[6];
- char key0=0;
- char a,b,chan,c_xin=0;
- void delayms1(uint xms)
- {
- uint i,j;
- for(i=0;i<xms;i++)
- for(j=0;j<110;j++);
- }
- void main()
- {
- init_24c02();
- if(read(0xa0,0)!=0xff)
- key1[0]=read(0xa0,0);
- if(read(0xa0,1)!=0xff)
- key1[1]=read(0xa0,1);
- if(read(0xa0,2)!=0xff)
- key1[2]=read(0xa0,2);
- if(read(0xa0,3)!=0xff)
- key1[3]=read(0xa0,3);
- init_1602();
- write_com(0x80);
- for(num=0;num<16;num++)
- {
- write_date(table[num]);
- delayms1(5);
- }
- delayms1(1000);
- write_com(0x01);
- write_com(0x80);
- while(1)
- {
- shu=keyscan();
- switch(shu)
- {
- case 7:
- write_date('7');
- if(c_xin%2==0)
- key[key0++]=7;
- else
- key_xin[key0++]=7;
- break;
- case 8:
- write_date('8');
- if(c_xin%2==0)
- key[key0++]=8;
- else
- key_xin[key0++]=8;
- break;
- case 9:
- write_date('9');
- if(c_xin%2==0)
- key[key0++]=9;
- else
- key_xin[key0++]=9;
- break;
- case 4:
- write_date('4');
- if(c_xin%2==0)
- key[key0++]=4;
- else
- key_xin[key0++]=4;
- break;
- case 5:
- write_date('5');
- if(c_xin%2==0)
- key[key0++]=5;
- else
- key_xin[key0++]=5;
- break;
- case 6:
- write_date('6');
- if(c_xin%2==0)
- key[key0++]=6;
- else
- key_xin[key0++]=6;
- break;
- case 1:
- write_date('1');
- if(c_xin%2==0)
- key[key0++]=1;
- else
- key_xin[key0++]=1;
- break;
- case 2:
- write_date('2');
- if(c_xin%2==0)
- key[key0++]=2;
- else
- key_xin[key0++]=2;
- break;
- case 3:
- write_date('3');
- if(c_xin%2==0)
- key[key0++]=3;
- else
- key_xin[key0++]=3;
- break;
- case 0:
- write_date('0');
- if(c_xin%2==0)
- key[key0++]=0;
- else
- key_xin[key0++]=0;
- break;
- case 'w':
- key0=0;
- break;
- case '=':
- c_xin++;
- if(c_xin%2==1)
- {
- write_com(0x01);
- for(b=0;b<12;b++)
- {
- write_date(please[b]);
- delayms1(25);
- }
- write_com(0x80+0x40);
- for(b=0;b<12;b++)
- {
- write_date(new[b]);
- delayms1(25);
- }
- delayms1(1500);
- write_com(0x01);
- }
- else
- {
- write(0xa0,0,key_xin[0]);
- write(0xa0,1,key_xin[1]);
- write(0xa0,2,key_xin[2]);
- write(0xa0,3,key_xin[3]);
- write_com(0x01);
- for(b=0;b<12;b++)
- {
- write_date(ok[b]);
- delayms(25);
- }
- delayms1(1500);
- write_com(0x01);
- key0=0;
- }
- break;
- }
- if(key0==4&&c_xin%2==0)
- {
- delayms1(500);
- if(c_xin==0)
- {
- for(a=key0-1;a>=0;a--)
- {
- if(key[a]!=key1[a])
- break;
- }
- }
- else
- {
- for(a=key0-1;a>=0;a--)
- {
- if(key[a]!=key_xin[a])
- break;
- }
- }
- key0=0;
- if(a>=0)
- {
- write_com(0x01);
- write_date('e');
- write_date('r');
- write_date('r');
- write_date('o');
- write_date('r');
- GRE=1;
- RED=0;
- delayms1(600);
- write_com(0x01);
- chan++;
- if(chan<3)
- {
- for(b=0;b<9;b++)
- {
- write_date(you[b]);
- delayms1(1);
- }
- write_date(0x30+3-chan);
- for(b=0;b<7;b++)
- {
- write_date(chance[b]);
- delayms1(10);
- }
- delayms1(1000);
- write_com(0x01);
- }
- else
- {
- chan=0;
- for(b=0;b<14;b++)
- {
- write_date(wait[b]);
- delayms1(100);
- }
- delayms1(5000);
- write_com(0x01);
- }
- }
- else
- {
- write_com(0x01);
- write_date('r');
- write_date('i');
- write_date('g');
- write_date('h');
- write_date('t');
- GRE=0;
- RED=1;
- delayms1(1000);
- write_com(0x01);
- for(b=0;b<14;b++)
- {
- write_date(change[b]);
- delayms1(25);
- }
- write_com(0x80+0x40);
- for(b=0;b<7;b++)
- {
- write_date(the[b]);
- delayms1(25);
- }
- }
- }
- }
- }
复制代码
|
|