c51单片机想要做一个重置密码键k13,用到AT24C02来存储密码 应该怎么写这个代码呢?求解
#include<reg51.h>
#include<string.h>
sbit lcd_RS=P2^0;
sbit lcd_RW=P2^1;
sbit lcd_E=P2^2;
sbit jidianqi=P2^7;
sbit buzzer = P3^0;
char key[]={0,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30}; //键值
char key2[]="Correct";
char key3[]="Error";
char table[]="password";
char table1[]="input:";
char passwordInput[5];
delay(unsigned int x)
{
unsigned int i;
for(x=0;x<100;x++)
for(i=0;i<x;i++);
}
wuyuan()
{ int k;
for(k=0;k<20;k++)
{ buzzer=1;
delay(39999);
buzzer=0;
delay(39999);
}
}
write_com(unsigned char com )
{
while(lcd_busy());
lcd_RS=0;
lcd_RW=0;
delay(200);
P0=com;
delay(200);
lcd_E=1;
delay(200);
lcd_E=0;
}
write_dat(unsigned char dat )
{
while(lcd_busy());
lcd_RS=1;
lcd_RW=0;
P0=dat;
delay(200);
lcd_E=1;
delay(200);
lcd_E=0;
}
void write_password_char()
{write_dat(42);
}
lcd_busy()
{
unsigned char temp;
lcd_RS=0;
lcd_RW=1;
delay(20);
P0=0xff;
delay(20);
lcd_E=1;
delay(20);
temp=P0;
delay(20);
lcd_E=0;
return(temp&0x80);
}
init()
{
write_com(0x01);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
}
juxingjianpan()
{
unsigned char KeyNumber,x,y;
P1=0x0f;
x=P1;
P1=0xf0;
y=P1;
switch(x+y)
{
case 0xee: KeyNumber=1;break;
case 0xde: KeyNumber=2;break;
case 0xbe: KeyNumber=3;break;
case 0x7e: KeyNumber=4;break;
case 0xed: KeyNumber=5;break;
case 0xdd: KeyNumber=6;break;
case 0xbd: KeyNumber=7;break;
case 0x7d: KeyNumber=8;break;
case 0xeb: KeyNumber=9;break;
case 0xdb: KeyNumber=10;break;
case 0xbb: KeyNumber=11;break;
case 0x7b: KeyNumber=12;break;
case 0xe7: KeyNumber=12;break;
}
return KeyNumber;
}
void main() {static unsigned char position = 0,x = 0,y;
unsigned int i, KeyNum, passwordLen = 0;
init();
write_com(0x80);
for(i = 0; i < 8; i++) {
write_dat(table[i]);
}
write_com(0xc0);
for(i = 0; i < 6; i++) {
write_dat(table1[i]);
}
// 将静态变量定义移到while循环外部
while(1) {
write_com(0xc6 + position);
KeyNum = juxingjianpan();
if(KeyNum) {
if(KeyNum <= 10) {
if(x <= 3) {
write_password_char();
delay(5);
passwordInput[passwordLen++] = key[KeyNum];
position++;
}
x++;
} if(KeyNum == 11) { // 确认键
if (strcmp(passwordInput, "1234") == 0) {
write_com(0x01);
delay(20);
write_com(0x86);
jidianqi=0;
for(y = 0; y < 7; y++) {
write_dat(key2[y]);
delay(5);
}
} else {
write_com(0x01);
delay(20);
write_com(0x86);
wuyuan();
for(y = 0; y < 5; y++) {
write_dat(key3[y]);
delay(5);
}
}
memset(passwordInput, 0, sizeof(passwordInput));
passwordLen = 0;
x = 0;
position = 0;
} else if (KeyNum == 12) {
memset(passwordInput, 0, sizeof(passwordInput));
passwordLen = 0;
x = 0;
position = 0;
buzzer=1;
delay(20);
buzzer=0;
delay(20);
jidianqi=1;
write_com(0x01);
write_com(0x80);
for(i = 0; i < 8; i++) {
write_dat(table[i]);
}
write_com(0xc0);
for(i = 0; i < 6; i++) {
write_dat(table1[i]);
}
}
}
}
}