📄 ref.c
字号:
#include "MATH.H"
#include "REG51.H"
#include "parameter.h"
void main ()
{
unsigned char display(int i) ;
unsigned char pick_8seg(int j);
unsigned char scan_key(void) ;
void delay(int k);
void display_words(int i);
unsigned char my_code[4]={0x88,0x88,0x88,0x88} ; //初始密码
unsigned char *qq,*p,receive_code[4]={0x0}, bb,dd ;
int count,j,k,i ;
count=0;
qq=my_code;
p=receive_code;
k=0;i=0;
P0=0x3f;
P2=0x00;
j=0;
while (1)
{ bb=scan_key();
switch (bb)
{
case 0x88 : // 键盘数字“7”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x88;
j++;
}
break;
case 0x84 : // 键盘数字“8”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x84;
j++;
}
break;
case 0x82 : // 键盘数字“9”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x82;
j++;
}
break;
case 0x48 : // 键盘数字“4”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x48;
j++;
}
break;
case 0x44 : // 键盘数字“5”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x44;
j++;
}
break;
// 键盘数字“6”
case 0x42 :
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x42;
j++;
}
break;
case 0x28 : // 键盘数字“1”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x28;
j++;
}
break;
case 0x24 : // 键盘数字“2”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x24;
j++;
}
break;
case 0x22 : // 键盘数字“3”
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x22;
j++;
}
break;
// 键盘数字“0”
case 0x14 :
if ( j<4 )
{
P2=pick_8seg(j);
P0=display(13);
receive_code[j]=0x14;
j++;
}
break;
case 0x18: //键盘字符“ON/C” ,表示输入密码确认键
for ( i=0;i<4;i++ )
{
if( *( p+i )==*( qq+i ) ) //输入密码和原密码的比较
count++;
}
if (count==4)
{
for (i=0;i<2000;i++)
{
P3_6=0;
display_words(0); //若输入正确,则显示“YES”表示密码输入正确
P3_6=0;
}
P2=0xff;//P0=0x3f;
P3_6=1;
j=0;
count=0;
for (i=0;i<4;i++)
{
*(p+i)=0x0;
}
}
else
{
if ( k<3 )
{for( i=0;i<300;i++ )
{
display_words(1); //若输入错误则显示“ERROR”表示密码输入错误
}
for ( i=0;i<500;i++)
{
display_words(k+2); //用“NO 2”和“NO 3”提示第二次和第三次密码输入
}
//i=0;
j=0;
P2=0xff;
//P0=0x3f;
k++;
count=0;
}
}
if(k==3)
{
while(1)
{
P3_7=0;
delay(10);
P3_7=1;
delay(10);
//display_words(4); //若第三次密码还输入错误,则用“DEAD”显示禁止进入系统
P3_7=0;
delay(10);
P3_7=1;
delay(10);
}
}
break;
case 0x21: //键盘字符“-”表示前一位密码输入错误,重新输入前一位密码
if (j<5)
{ j=j-1;
if(j!=-1)
{
P2=pick_8seg(j-1);
P0=display(13);
}
if (j==-1)
{
P2=0xff;
j=j+1;
}
}
break;
case 0x11 : // 键盘字符“+”表示新密码设定
P2=0x00;
P0=0x3f;
while (1)
{
dd=scan_key();
if ( (dd!=0x18)&&(dd!=0x21)&&(dd!=0x12)&&(dd!=0x11)&&(dd!=0)&&(j<4) )
{
my_code[j]=dd;
P2=pick_8seg(j);
P0=display(13);
j++;
}
if(dd==0x21)
{
if (j<5)
{
j=j-1;
P2=pick_8seg(j-1);
P0=display(13);
}
}
if(dd==0x12)
{
for (i=1;i<5-j;i++)
{
j=j-1;
my_code[j+i]=0x0;
j=j+1;
}
j=0;
break;
}
}
//break;
case 0x12: //键盘字符“=”表示新密码已经确认
j=0;
P2=0xff;
break;
default :break;
}
}
}
void delay(int k) //延时子程序
{
int i;
for(i=0;i<k;i++)
;
}
#include "REG51.H"
unsigned char display(int ii)
{
//unsigned char display_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x79,0x31,0x3e,0x6e,0x6d};
switch (ii)
{
case 0 :return (0x3f); break; //"0"
case 1 :return(0x06); break; //"1"
case 2 :return(0x5b); break; //"2"
case 3 :return(0x4f); break; //"3"
case 4 :return(0x66); break; //"4"
case 5 :return(0x6d); break; //"5"
case 6 :return(0x7d); break; //"6"
case 7 :return(0x07); break; //"7"
case 8 :return(0x7f); break; //"8"
case 9 :return(0x6f); break; //"9"
case 10 :return(0x77); break; //"A"
case 11 :return(0x79); break; //"E"
case 12 :return(0x31); break; //"r"
case 13 :return(0x3e); break; //"u"
case 14 :return(0x6e); break; //"Y"
case 15 :return(0x6d); break; //"s"
case 16 :return(0x37); break; //"n"
case 17 :return (0x5e); break; //"d"
case 18 :return (0x7b); break; //"e"
default : break;
}
}
unsigned char pick_8seg(int jj)
{
switch (jj)
{
case 0 :return(0xfe); break;
case 1 :return(0xfc); break;
case 2 :return(0xf8); break;
case 3 :return(0xf0); break;
case 4 :return(0xe0); break;
case 5 :return(0xc0); break;
case 6 :return(0x80); break;
case 7 :return(0x00); break;
default : break;
}
}
void display_words(int i)
{
unsigned char display(int ii) ;
void delay(int k) ;
switch(i)
{
case 0: //显示"yes" 字符,表示输入密码正确
P2= 0xfe;
P0=display(14);
delay(30);
P2=0xfd;
P0= display(11);
delay(30);
P2=0xfb;
P0= display(15);
delay(30);
break;
case 1: //显示“error” 字符,表示输入密码错误
P2=0xfe;
P0=display(11);
delay(30);
P2=0xfd;
P0=display(12);
delay(30);
P2=0xfb;
P0=display(12);
delay(30);
P2=0xf7;
P0=display(0);
delay(30);
break;
case 2: //显示“NO 2”表示第二次输入密码
P2=0xfe;
P0=display(16);
delay(30);
P2=0xfd;
P0=display(0);
delay(30);
P2=0xf7;
P0=display(2);
delay(30);
break;
case 3 : //显示“NO 3 ”表示第三次输入密码
P2=0xfe;
P0=display(16);
delay(30);
P2=0xd;
P0=display(0);
delay(30);
P2=0xf7;
P0=display(3);
delay(30);
break;
case 4 : //显示“DEAD”表示密码输入错误,禁止进入系统
P2=0xfe;
P0=display(17);
delay(30);
P2=0xfd;
P0=display(11);
delay(30);
P2=0xfb;
P0=display(10);
delay(30);
P2=0xf7;
P0=display(17);
delay(30);
break;
default :break;
}
}
#include "REG51.H"
unsigned char scan_key(void) //键扫描程序
{
void delay(int k) ;
unsigned char a,b,c;
//while (1)
P1=0xf0;
if ( ( P1&0xf0 )!=0xf0 )
{
//delay(5);
if ( ( P1&0xf0 )!=0xf0 )
{
a=0xfe;
while( ( a&0x10 ) !=0 )
{
P1=a;
if ( ( P1&0xf0 )!=0xf0 )
{ c=P1;
while((P1&0xf0 )!=0xf0 ) ;
b=(c&0xf0 )|0x0f;
return ( (~a)+(~b) );
}
else a=( a<<1 )|0x01;
}
}
}
else return (0);
}
#include "REG51.H"
#ifndef __parameter_h__
#define __parameter_h__
sbit P3_0= P3^0 ;
sbit P3_1= P3^1 ;
sbit P3_6= P3^6 ;
sbit P3_7= P3^7 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -