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

📄 复件 mm.c

📁 KEIL开发的密码锁 源程序,已经通过PROTEUS软件的仿真测试
💻 C
字号:
/*********************************************************************/
//            
//                       自动报警控制
//                    ancleyan 2007.04.17      
/*********************************************************************/
//使用AT89C51单片机,12MHZ晶振,P1口输入,P2口作列扫描,p3数据输出,用共阳LED数码管

#include"reg51.h"
#define char unsigned char
//
sbit qqqq=P0^7;
sbit aa=P1^0;   sbit bb=P1^1;   sbit cc=P1^2;
sbit dd=P1^3;   sbit ee=P1^4;   sbit ff=P1^5;
sbit gg=P1^6;   sbit hh=P1^7; 
char code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/* 共阳LED段码表     "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9" "不亮"     */  
//char code dis_7[10]={0xC0,0xF9,0xA4,0x99,0xB0,0x82,0xF8,0x80,0x99,0xff};
/* 共阳LED段码表     "0"  "1"  "2"  "8"  "3"  "5"  "6"  "7"  "4"  "9" "不亮"     */ 
//char code  scan_con[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   // 列扫描控制字
//char code  scan_con[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};   // 列扫描控制字
char code  scan_con[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};   // 列扫描控制字
char data  keytmp[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//显示单元数据初值,共8个
//char data  skeytmp[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//显示单元数据初值,共8个
char data  key[8]={0x01,0x02,0x03,0x06,0x06,0x05,0x04,0x03};
//char m;
char t;     //供键盘输入的数存储进数组时使用

//*******1毫秒延时程序********
delay1ms(int t)
{
   int i,j;
   for(i=0;i<t;i++)
   for(j=0;j<120;j++)
   {;}
}
//*******初始化程序*********
char clear(void)
{
  char tt;
  P2=scan_con[8];	
  t=0;
  //delay1ms(200);
  for(tt=0;tt<8;tt++)
    {
	keytmp[tt]=0xff;
	}
  return(t);

}
//*****密码验证程序*********//
void password(void)
{
   while(1)
   {	if((keytmp[0]==key[0])&&(keytmp[1]==key[1])&&(keytmp[2]==key[2])&&(keytmp[3]==key[3])&&(keytmp[4]==key[4]))     
 //   if()
	  // {
		// if(keytmp[5]==key[5]&&keytmp[6]==key[6]&&keytmp[7]==key[7])				     //&&keytmp[8]==key[8]
			{
			  qqqq=0;  clear();
		//	}
	   }
	}
}    



//**********功能函数15***********************************

void fun15(void)
{
  delay1ms(200);
  gg=0;
}




//**********功能函数14***********************************
void fun14(void)
{
    password();
}
//**********功能函数13***********************************
void fun13(void)
{
  delay1ms(200);
  ee=0;
}
//**********功能函数12***********************************
void fun12(void)
{
  delay1ms(200);
  dd=0;
}
//**********功能函数11***********************************
void fun11(void)
{
  delay1ms(200);
  cc=0;
}
//**********功能函数10***********************************
void fun10(void)
{
  //password();
}
//**********功能函数9***********************************
char fun9(void)
{ void scan_7(void);//对被调用函数的说明
  while(P3!=0xfe){scan_7();}   
  //delay1ms(200);       //防止由于按键未放开 输入一串数字  可以加入一个while(P3!=0xfe)语句 直到放开键才动作
  keytmp[t]=9;         //用delay1ms(100)语句可以按住键之后重复输入
  aa=0;              
  return t++; 
}
//**********功能函数8***********************************
char fun8(void)
{
  while(P3!=0xfe){scan_7();}   
  keytmp[t]=8;
  bb=0;                 //函数功能测试灯
  return t++;
}
//**********功能函数7***********************************
char fun7(void)
{
  while(P3!=0xfe){scan_7();}   
  keytmp[t]=7;
  cc=0;
  return t++;
}
//**********功能函数6***********************************
char fun6(void)
{ while(P3!=0xfd){scan_7();} 
  keytmp[t]=6;
  dd=0;
  return t++;
	 
}
//**********功能函数5***********************************
char fun5(void)
{  while(P3!=0xfd){scan_7();} 
   keytmp[t]=5;
  ee=0;
  return t++;
}
//**********功能函数4***********************************
char fun4(void)
{ while(P3!=0xfd){scan_7();} 
   keytmp[t]=4;
  ff=0;
  return t++;
}
//**********功能函数3***********************************
char fun3(void)
{ while(P3!=0xfb){scan_7();} 
  keytmp[t]=3;
  gg=0;
 return t++;
}
//**********功能函数2***********************************
char fun2(void)
{ while(P3!=0xfb){scan_7();} 
 keytmp[t]=2;
 return t++;
}
//**********功能函数1***********************************
char fun1(void)
{ while(P3!=0xfb){scan_7();} 
  keytmp[t]=0x01;
  hh=0;
  return t++;
}
//**********功能函数0***********************************
char fun0(void)
{ while(P3!=0xf7){scan_7();} 
  keytmp[t]=0;
  aa=0;
  return t++;
}
//**************************
//对型如7 8 9 a 的键盘的驱动
//      4 5 6 b
//      1 2 3 c
//      d 0 e f 
/**********按键驱动函数***********/
void scankey(void)
{ 
   P3=0xfe;                             //将第一行置零
   if(P3!=0xfe)  
     {  if(P3==0x7e)        fun10();      //一行四列
	    else if(P3==0xbe)   fun9();       //一行三列
	    else if(P3==0xde)   fun8();       //一行二列
		else if(P3==0xee)   fun7();       //一行一列
	  }  
   else                              
       {
	     P3=0xfd;                 //将第二行置零
           if(P3!=0xfd)
 		      { if(P3==0x7d)        fun11();   //二行四列
			    else if(P3==0xbd)   fun6();    //二行三列
	            else if(P3==0xdd)   fun5();    //二行二列
		        else if(P3==0xed)   fun4();    //二行一列
			  }
		   else                           
               {
	              P3=0xfb;               //将第三行置零
                  if(P3!=0xfb)
 		            { if(P3==0x7b)        fun12();//三行四列
			          else if(P3==0xbb)   fun3();//三行三列
	                  else if(P3==0xdb)   fun2();//三行二列
		              else if(P3==0xeb)   fun1();//三行一列 
			        }
				  else
				  {
				    P3=0xf7;             
				    { if(P3!=0xf7) 
 		                { 
						if(P3==0x77)        fun13();//四行四列
			            else if(P3==0xb7)   fun14();//四行三列
	                    else if(P3==0xd7)   fun0();//四行二列
		                else if(P3==0xe7)   fun15();//四行一列 
			            }
	 			    }
			      }
               }
        }
}
//*****数码管显示函数   将数据及显示控制码输出*********//
void scan_7(void)
{
  char j;
  for(j=0;j<t;j++)
    {
	 P2=scan_con[j];       //scan_con[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};   // 列扫描控制字
	 P0=dis_7[keytmp[j]];  //dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
	 delay1ms(1);  
    }
}

//*******主程序*******//
void main()
{ 
  while(1)
  {
    scankey();
    scan_7();              //delay1ms(1); 
	if(t==9)          //注意 t取值为9
	 {
	 clear();
	 }
  }
}
















  



⌨️ 快捷键说明

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