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

📄 text1.c

📁 电路由AT89C52
💻 C
字号:
#include <AT89X52.H>
unsigned char ppa;		// ppa,ppb,ppc是1,2,3数码管显示的内容
unsigned char ppb;
unsigned char ppc;
unsigned char code ps[]={1,1,2};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char funcount;	  //function key累加数 
unsigned char errorflag;  //正确标志
unsigned char righitflag; //错误标志
int aa;	   //一般时扫描
int bb;	   //报警时的定时
int cc;	   //开锁时扫描
unsigned char digitcount; //data key累加数
void main(void)
{
 unsigned char i,j;
 funcount=0;
 digitcount=0;
 errorflag=0;
 righitflag=0;
 ppa=0;
 ppb=0;
 ppc=0;
 aa=0;
 bb=0;
 cc=0;
 TMOD=0x01;
 TH0=(65536-1000)/256;
 TL0=(65536-1000)%256;
 TR0=1;
 ET0=1;
 EA=1;
 P2_0=0;
 P3_0=0;
 while(1)
 { if(funcount==0)		   
   { ppa=digitcount;	   //data key累加数给ppa
    }
   if(funcount==1)
    { ppb=digitcount;	  //data key累加数给ppb
    // digitcount=0;
    }
   if(funcount==2)
   { ppc=digitcount;	  //data key累加数给ppc
     //digitcount=0;
   }
   if(P3_7==0) //data key
   {
   for(i=18;i>0;i--)
   for(j=248;j>0;j--);
   if(P3_7==0)
    {for(i=88;i>0;i--)
     for(j=248;j>0;j--);
	 if(P3_7==1)
    if(digitcount==9)
    {
     digitcount=0;	 
    }
   else digitcount++;  //	data key累加 
  
    }
  }
    
  if(P3_6==0) //function key 
  { 
   for(i=18;i>0;i--) 
   for(j=248;j>0;j--); 
   if(P3_6==0) 
    {for(i=88;i>0;i--) 
     for(j=248;j>0;j--); 
	 if(P3_6==1) 
     funcount++;
   
   if(funcount==1)	       //第一次按下
	 digitcount=0;	       //data key累加数清0
   if(funcount==2)	       //第二次按下
	 digitcount=0;	       //data key累加数清0

   if(funcount==3)	       //第三次按下
    {
	 digitcount=0;
	 if(ps[0]==ppa&&ps[1]==ppb&&ps[2]==ppc)	//对3个数值进行比较
	   {righitflag=1;		   //数值正确
	    errorflag=0;		   //错误标志清0
		}
	 else
	  { righitflag=0 ;		  //数值错误
	    errorflag++;		  //错误标志+1
	   }
	 }
    }
  }
 }
 
}
void t0(void) interrupt 1 using 0 
{TH0=(65536-1000)/256; 		//定时器付初值
 TL0=(65536-1000)%256; 
 if(funcount==0)		   
   { ppa=digitcount;	   //data key累加数给ppa
    }
 if(funcount==1)
    { ppb=digitcount;	  //data key累加数给ppb
    // digitcount=0;
    }
 if(funcount==2)
   { ppc=digitcount;	  //data key累加数给ppc
     //digitcount=0;
   }
 if(funcount==3)
   {funcount=0;
    
    }

b: if(bb==0)			 //判断在不在报警
 { P3_0=0;				 //不再报警  报警器为低电平
 if(righitflag==1)		 //数值正确
  {						 //显示 OPEN
    if(cc==0)
   {
    P2=0xfe;
	P0=dispcode[0];													  
    }
   if(cc==1)
   {
     P2=0xfd;
     P0=0x73;
   }
   if(cc==2)
    {
     P2=0xfb;
     P0=0x79;
    }
   if(cc==3)
    {
     P2=0xf7;
     P0=0x37;
    }
   cc++;
   if(cc==4)
   cc=0;
  }
 if(errorflag==3)	 //连续错误输入3次  
  {errorflag=0;		 //错误标志清0
   P2=0xff;			 //数码管不显示
   P3_0=1;			 //报警器报警
   bb=3000;			 //延时3秒
   goto b;
  }
  if( righitflag!=1&&errorflag!=3) //除去特殊情况
  {if(aa==0)
   {
    P2=0xfe;			 //第一个数码管亮其他息灭
	P0=dispcode[ppa];	 //	显示ppa											  
    }
   if(aa==1)
   {
     P2=0xfd;			//第二个数码管亮其他息灭
     P0=dispcode[ppb];	 //	显示ppb
   }
   if(aa==2)
    {
     P2=0xfb;		   	//第三个数码管亮其他息灭
     P0=dispcode[ppc];	//	显示ppc	
    }
   aa++;
   if(aa==3)
   aa=0;
  }
 }
 else 
  {bb--;
   ppa=0;
   ppb=0;
   ppc=0;
 }
}

⌨️ 快捷键说明

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