⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dengxiang.c

📁 实用的键盘及按键显示加密码校验程序
💻 C
字号:
#include<stdio.h>    //通用4*4小键盘程序,可以用数码管显示键值
#include<at89x52.h>  //可用于51单片机,晶振频率11.0592MHZ

#define uchar unsigned char
#define uint  unsigned int

int Hang;
int Lie;
int cs;

int Yuan_ma[5]={1,2,3,4,5};
int New_ma[5];
int Mazhi[4][4]={{1,2,4,3},{5,6,8,7},{9,0,11,10},{12,13,15,14}};
/**************************************************************/
//      0    1    3   2

//      1    2    3   4     .........
//      5    6    7   8     ......... .
//      9    0    .   >     ......... .  P2接通用四乘四小键盘   
//     EXE  MENU  ESC <     .........

//     |-----|        
//     |     |              ........
//     |-----|              ........ . 
//     |     |              ........ .  P3 接数码管显示
//     |-----| .            ........

//    .-.                          .
//   . ? .                  ..........  P2_0接LED显示按下状态
//    .=.                          .

//程序作者:王庆波,黑龙江大学电子工程学院06级,爱好者工作室,borlittle,Q:634172943      
/*************************************************************/
int mz;
uchar code dis_7[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x7F,0x88,0xc6,0xa1,0x86,0x83};
/*对应键值为          0     1     2    3    4   5     6    7    8    9    .    A     C    D     E   B  */
int Key_scan();
int Jiao_yan();
void Delay();

void main()
{ 
  int ans;
  int key;
  cs=0;
  //P1=0x00;
  P0_0=0;
  P0_1=0;
  while(1)
  {
  key=Key_scan();
  if(key==1)
  {
  mz=Mazhi[Lie][Hang]; //获取码值
  cs++;
  switch(cs)
  	{	
		case 1:
  		New_ma[0]=mz;
  		break;
  		case 2:
  		New_ma[1]=mz;
 	 	break;
 	 	case 3:
  		New_ma[2]=mz;
  		break;
  		case 4:
  		New_ma[3]=mz;
 		break;
  		case 5:
  		New_ma[4]=mz;
  		break;
		default:
		break;
  	}
	
	P3=dis_7[mz];        //查表输出段码
  
  }
  
  Delay();
  //P1=0x00;
  if(Yuan_ma[0]!=New_ma[0])
  cs=0;
  else if(mz==1)
  {New_ma[0]=mz;
  cs=1;}
  if(cs==5)
  ans=Jiao_yan();
  if(ans==1)
  {P0_1=1;
  Delay(); 
  P0_1=0;
  ans=0;
  }
  
  }

}

void Delay()               //延时子程序
{
long i;
for(i=5000;i>0;i--);
}
int Key_scan()
{	  
	P2=0xF0;               //行扫描
	if((P2&0xF0)!=0xF0)
	{ Delay();
	  
	switch(P2)
	{
	case 0x70:
		Hang=0;
		break;
	case 0xB0:
		Hang=1;
		break;
	case 0xD0:
		Hang=2;
		break;
	case 0xE0:
		Hang=3;
		break;
	default:
		break;
	}
	Delay();
	P2=0x0F;                //列扫描
	if((P2&0x0F)!=0x0F)
	{
		switch(P2)
		{
	case 0x07:
		Lie=0;
		break;
	case 0x0B:
		Lie=1;
		break;
	case 0x0D:
		Lie=2;
		break;
	case 0x0E:
		Lie=3;
		break;
	default:
		break;
		}
	return 1;
	}
	
}
	else
	{
	return 0;
	}
   	
}
int Jiao_yan()
{
 int k;
 int g=0;
 for(k=0;k<5;k++)
 {
   if(Yuan_ma[k]==New_ma[k])
   	 g++;
	
 }
    cs=0;
 	for(k=0;k<5;k++)
 { New_ma[k]=0;
   }
  if(g==5)
 return 1;
 else
 return 0;

}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -