#include <reg51.H>
#include <intrins.h>
#include "lcd.h"
#include "key.h"
#include "delay.h"
#include "eeprom.h"
void int0(void);
unsigned char password[6]/*={0x01,0x02,0x03,0x04,0x05,0x06}*/;
unsigned char password1[6];
unsigned char code aa[]="Password ";
unsigned char code gg[]="New";
unsigned char code bb[]="ERROR ";
unsigned char code cc[]="OK ";
unsigned char code dd[]=" ";
unsigned char code ee[]="Next ";
unsigned char code ff[]="success ";
unsigned char keydata;
main()
{
unsigned char i,j,k,l,m,n,o,a1;
for(i=0;i<6;i++)
{
Write_IIC(i,password[ i]);
}
init();//LCD初始化
int0();
P3_6=0;
P3_7=0;
P1=0x0f;
LCD_Write_String(0,0,aa);
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
while(1)
{
start: LCD_Write_String(0,0,aa);
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
while(1)
{
if((0<keydata)&&(4>keydata)||(4<keydata)&&(8>keydata)||(8<keydata)&&(12>keydata)||keydata==14)
//在0-9之間的數字通過
{
password=keydata;//鍵盤值進行保存
keydata=0; //把鍵盤值置其它值,不被其它利用,以一樣
i++;
write_data('*'); //在LCD上顯示*這字符代表輸入了一個密碼
if(i==6) //這里限制了六位密碼
{
i=0;
goto panduan;
}
}
if(keydata==33) //確定進入密碼比較
{
keydata=0;
panduan: i=0;
for(j=0;j<6;j++)
{
l+=password[j];
k+=Random_Read(j);
}
if(l!=k) //密碼不同進行處理
{
l=0;
k=0;
LCD_Write_String(0,0,bb);
DelayMs(1000);
a1+=1;
if(a1==2){while(1)P3_7=1;P3_6=0;}//兩次錯誤發出報警
goto start; //第二次輸入密碼
}
if(l==k) //密碼對了,進入運行狀態,這里綠燈代表該狀態
{
l=0;
k=0;
a1=0;
P3_6=1;
P3_7=0;
LCD_Write_String(0,0,cc);
LCD_Write_String(1,1,dd);
if(o==1)
{
o=0;
LCD_Write_String(0,0,gg);
LCD_Write_String(4,0,aa);
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
goto text2;
}
goto yingxing; //跳到下面函數中,yingxing里
}
}
}
yingxing:while(1)
{
if(keydata==4) //鎖定功能
{
P3_6=0;
goto start;
}
if(keydata==15) //修改密碼
{
o++;
if(o==1) goto start;
text2: keydata=0;
while(1)
{
if((0<keydata)&&(4>keydata)||(4<keydata)&&(8>keydata)||(8<keydata)&&(12>keydata)||keydata==14)
//上面表達式0-9之間的數字通過
{
password[m]=keydata; //讀取鍵盤值
keydata=0;
m++;
write_data('*');
if(m==6) //到密碼輸入到六位的時候進行判斷是否再輸入,或者判斷前后兩次密碼是否一致
{
m=0;
n++;
if(n==2)goto panduan1; //輸入第二次的時候進行前后兩次密碼進判斷
for(i=0;i<6;i++) //儲存前一次密碼
{
password1=password[ i];
}
LCD_Write_String(1,1,dd);
LCD_Write_String(0,0,ee);
DelayMs(1000);
LCD_Write_String(0,0,aa);
write_com(0xc0+1);
}
}
if(keydata==13) //重新輸入改密
{
text: m=0;
n=0;
LCD_Write_String(1,1,dd);
write_com(0xc0+1);
}
if(keydata==33) //退出不改密碼
{
out: m=0;
n=0;
o=0;
LCD_Write_String(0,0,cc);
LCD_Write_String(1,1,dd);
goto yingxing;
}
if(keydata==33)
{
keydata=0;
panduan1: for(j=0;j<6;j++)//第一次與第二次密碼比較
{
l+=password[j];
k+=password1[j];
}
if(l!=k) //第一次與第二次密碼輸入錯誤
{
l=0;
k=0;
LCD_Write_String(0,0,bb);
DelayMs(1000);
LCD_Write_String(0,0,aa);
goto text;
}
else
{
for(i=0;i<6;i++)
{
Write_IIC(i,password[ i]);
}
LCD_Write_String(0,0,ff);
DelayMs(1000);
goto out;
}
}
}
}
}
}
}
void int0(void)
{
EA=1;
EX0=1;
IT0=1;
}
void ISR_INT0(void) interrupt 0
{
keydata=key_scan();
}
這是錯誤顯示...嵌套太多怎么改啊
Rebuild target 'Target 1'
compiling main.c...
C51 FATAL-ERROR -
ACTION: PARSING SOURCE-FILE
ERROR: PREPROCESSOR: MACROS TOO NESTED
C51 TERMINATED.
Target not created
|