|
編譯沒通過,求大神幫忙看下
M}2QT6M}K1E6N}K%P7WI(_8.png (233.61 KB, 下載次數(shù): 49)
下載附件
2020-1-16 13:49 上傳
- #include<reg51.h>
- #include<intrins.h>
- unsigned char code a[]={0xfe,0xfd,0xfb,0xf7};
- sbit ALAM=P2^5;
- sbit open_led=P2^3;
- unsigned char countt0,second;
- unsigned char code name[]= {"===Coded Locked==="};
- unsigned char code start_line[]= {"password:"};
- unsigned char code Error[]={"error"};
- unsigned char code codepass[]={"pass"};
- unsigned char code LockOpen[]={"open"};
- char InputData[6];
- unsigned char CurrentPassword[6]={6,5,4,3,2,1};
- unsigned char N=0;
- unsigned char ErrorCont;
- sbit LcdRS=P2^0;
- sbit LcdRW=P2^1;
- sbit LcdEn=P2^2;
- sfr LcdIO=0x80;
- #define LCD_COMMAND 0;
- #define LCD_DATA 1;
- #define LCD_CLEAR_SCREEN 0x01;
- #define LCD_HOME 0x02;
- void Delay_short(unsigned int n)
- {
- unsigned int i;
- for(i=0;i<n;i++);
- }
- void Delay_long(unsigned char N)
- {
- unsigned char i;
- unsigned int j;
- for(i=0;i<N;i++)
- for(j=0;j<315;j++);
- }
- void Delay5Ms(void)
- {
- unsigned int TempCyc=5552;
- while(TempCyc--);
- }
- void Delay400Ms(void)
- {
- unsigned char TempCycA=5;
- unsigned int TempCycB;
- while(TempCycA--)
- {
- TempCycB=7269;
- while(TempCycB--);
- }
- }
- void LCD_Write(bit style,unsigned char input)
- {
- LcdRS=style;
- LcdRW=0;
- LcdIO=input;
- Delay_short(10);
- LcdEn=1;
- Delay_short(10);
- LcdEn=0;
- }
- void LCD_Initial()
- {
- Delay_long(6);
- LCD_Write(LCD_COMMAND,0x38);
- LCD_Write(LCD_COMMAND,0x38);
- LCD_Write(LCD_COMMAND,0x38);
- Delay_short(2);
- LCD_Write(LCD_COMMAND,0x0c);
- Delay_short(2);
- LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
- Delay_short(100);
- LCD_Write(LCD_COMMAND,0x06);
- }
- //液晶字符輸入定位
- void GotoXY(unsigned char x,unsigned char y)
- {
- unsigned char address;
- if(y==1)
- address=0x80+x;
- else
- address=0xc0+x;
- LCD_Write(LCD_COMMAND,address);
- }
- //字符串輸出液晶顯示
- void Print(unsigned char *str)
- {
- while(*str!='\0')
- {
- LCD_Write(LCD_DATA,*str);
- str++;
- }
- }
- //按鍵值編碼為數(shù)值的程序
- unsigned char coding(unsigned char m)
- {
- unsigned char k;
- switch(m)
- {
- case (0x18):k='*';break;
- case (0x28):k=0;break;
- case (0x48):k='#';break;
- case (0x88):k='D';break;
- case (0x14):k=3;break;
- case (0x24):k=6;break;
- case (0x44):k=9;break;
- case (0x84):k='C';break;
- case (0x12):k=2;break;
- case (0x22):k=5;break;
- case (0x42):k=8;break;
- case (0x82):k='B';break;
- case (0x11):k=1;break;
- case (0x21):k=4;break;
- case (0x41):k=7;break;
- case (0x81):k='A';break;
- }
- return(k);
- }
- //按鍵檢測(cè)并返回健值
- unsigned char keynum(void)
- {
- unsigned char row,col,i;
- P3=0xf0;
- if((P3&0xf0)!=0xf0)
- {
- Delay5Ms();
- Delay5Ms();
- if((P3&0xf0)!=0xf0)
- {
- row=P3^0xf0;
- i=0;
- P3=a[i];
- while(i<4)
- {
- if((P3&0xf0)!=0xf0)
- {
- col=~(P3&0xff);
- break;
- }
- else
- {
- i++;
- P3=a[i];
- }
- }
- }
- else
- return 0xff;
- while((P3&0xf0)!=0xf0);
- return (row|col);
- }
- else return 0xff;
- }
- //一聲提示音表示有效輸入
- void OneAlam(void)
- {
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- }
- //二聲提示音表示操作成功
- void TwoAlam(void)
- {
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- Delay5Ms();
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- }
- //三聲提示音表示錯(cuò)誤
- void ThreeAlam(void)
- {
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- Delay5Ms();
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- Delay5Ms();
- ALAM=0;
- Delay5Ms();
- ALAM=1;
- }
- //輸入密碼超過三遍報(bào)警
- void Alam_KeyUnable(void)
- {
- P3=0x00;
- {
- ALAM=~ALAM;
- Delay5Ms();
- }
- }
- //取消所有操作ESC
- void Cancel(void)
- {
- unsigned char i;
- GotoXY(0,2);
- Print(start_line);
- TwoAlam();
- for(i=0;i<6;i++)
- InputData[i]=0;
- ALAM=1;
- ErrorCont=0;
- open_led=1;
- N=0;
- }
- //確認(rèn)鍵ok
- void Ensure(void)
- {
- unsigned char i,j;
- for(i=0;i<6;)
- {
- if(CurrentPassword[i]==InputData[i])
- i++;
- else
- {
- ErrorCont++;
- if(ErrorCont==3)
- {
- GotoXY(0,2);
- Print("KeypadLocked!");
- TR0=1;
- do
- Alam_KeyUnable();
- while(TR0);
- return;
- }
- break;
- }
- }
- if(i==6)
- {
- GotoXY(0,2);
- Print(codepass);
- Delay400Ms();
- Delay400Ms();
- GotoXY(0,2);
- Print(LockOpen);
- TwoAlam();
- open_led=0;
- for(j=0;j<6;j++)
- InputData[i]=0;
- while(1);
- }
- else
- {
- GotoXY(0,2);
- Print(Error);
- ThreeAlam();
- Delay400Ms();
- GotoXY(0,2);
- Print(start_line);
- for(j=0;j<6;j++)
- InputData[i]=0;
- }
- N=0;
- }
- //主函數(shù)
- void main()
- {
- unsigned char KEY_SCAN,NUM;
- unsigned char j;
- P3=0xff;
- TMOD=0x11;
- TL0=0xB0;
- TH0=0x3C;
- EA=1;
- ET0=1;
- TR0=0;
- Delay400Ms();
- LCD_Initial();
- GotoXY(0,1);
- Print(name);
- GotoXY(0,2);
- Print(start_line);
- GotoXY(9,2);
- LCD_Write(LCD_COMMAND,0x0f);
- Delay5Ms();
- N=0;
- while(1)
- {
- if(!TR0)
- KEY_SCAN=keynum();
- else
- KEY_SCAN=0xff;
- if(KEY_SCAN!=0xff)
- {
- NUM=coding(KEY_SCAN);
- switch(NUM)
- {
- case 'A': ; break;
- case 'B': ; break;
- case 'C': ; break;
- case 'D': ; break;
- case '*':Cancel(); break;
- case '#':Ensure(); break;
- default:
- {
- if(N<6)
- {
- OneAlam();
- for(j=0;j<=N;j++)
- {
- GotoXY(9+j,2);
- LCD_Write(LCD_DATA,'*');
- }
- InputData[N]=NUM;
- N++;
- }
- else
- N=6;
- break;
- }
- }
- }
- }
- }
- //定時(shí)器0中斷
- void time0_int(void) interrupt 1
- {
- TL0=0xB0;
- TH0=0x3C;
- countt0++;
- if(countt0==20)
- {
- countt0=0;
- second++;
- if(second==10)
- {
- P3=0xf0;
- TL0=0xB0;
- TH0=0x3C;
- second=0;
- ErrorCont=0;
- GotoXY(0,2);
- Print(start_line);
- TR0=0;
- }
- }
- }
復(fù)制代碼
|
|