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

📄 mm2.c

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

#include"reg51.h"
#define char unsigned char
//
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 data  keytmp[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示单元数据初值,共8个
//char data  keytmp[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//显示单元数据初值,共8个
char data key[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char m,t;
//*******初始化程序*******//
void clear()
{
  char t;
  for(t=0;t<8;t++)
    {keytmp[t]=0x00;}
}

/****************/
//1毫秒延时程序//
/***************/
delay1ms(int t)
{
   int i,j;
   for(i=0;i<t;i++)
   for(j=0;j<120;j++)
   ;
}
/**********键功能函数************/
scankey()
{ P3=0xf0;
  if(P3!=0xf0)
    { delay1ms(10);    //括号3
      if(P3!=0xf0)
	   {switch(P3)   //括号2
	     {              //括号1
		 case 0xb0:    //如果是第3列有键按下
              {
			    P3=0x0f; 
			    switch(P3)
			    {case 0x0e:return keytmp[t]=9;t++;break;
			     case 0x0d:return keytmp[t]=6;t++;break;
			     case 0x0b:return keytmp[t]=3;t++;break;
			     default: break;
			    }
			  }; break;
			
		 case 0xd0:  //如果是第2列有键按下
	 	   
			  {P3=0x0f; 
			  switch(P3)
			  {case 0x0e:return keytmp[t]=8;t++;break;
			   case 0x0d:return keytmp[t]=5;t++;break;
			   case 0x0b:return keytmp[t]=2;t++;break;
			   default: break;
				}}; break;
		   
		 case 0xe0:  //如果是第1行有键按下
            
			  {P3=0x0f; 
			  switch(P3)
			  {case 0x0e:return keytmp[t]=7;t++;break;
			   case 0x0d:return keytmp[t]=4;t++;break;
			   case 0x0b:return keytmp[t]=1;t++;break;
			   default: break;
                }}; break;
		 default: break;
		 }//括号1
		 }//括号2
     }    //括号3
	 return t;
}		
//*****数码管扫描函数*********//
void scan_7(void)
{
  char j;
  for(j=0;j<=8;j++)
    {
     P2=scan_con[keytmp[j]];// j
     P0=dis_7[keytmp[j]];//j
     delay1ms(1);

    }
}
 
//*******主程序*******//
void main()
{ 
  while(1)
  {
  //if(P1^0==1)    {clear();}
  scan_7();
  scankey();
  
  delay1ms(1);
  //password();
  }
}
















  



⌨️ 快捷键说明

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