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

📄 师姐全部程序wsy.c

📁 cgnal c8051f020 4*6键盘 4*8 液晶显示 大容量存储
💻 C
📖 第 1 页 / 共 5 页
字号:
     keyon_flag1=0 ;
  }//end of if(keyon_flag1)
   if(esc_flag)
    {
      timechange_flag=0 ;
      esc_flag=0 ;
	  display("    时  分  秒  ",0x88);
	  display("                ",0x98);
      keytimes1=0 ;
      keynumber=0 ;
	 // stardisp();
    } //end of if(esc_flag)

}

//显示初始化
void stardisp()
{
    init_lcd ();
	display("20  年  月  日  ",0x80);
	display("星期            ",0x90);
	display("    时  分  秒  ",0x88);
	dateread();
	timeread();
}

/////////////写卡响2声////////////////////
bell2()
{
  BELL_IO=0;              
  Timer0_ms(200);
  BELL_IO=1;
  Timer0_ms(200);
  BELL_IO=0;
  Timer0_ms(200);              
  BELL_IO=1;
  Timer0_ms(200);
}

///////删除一张卡,响3声////////////////
bell3()
{
  BELL_IO=0;              //删除一张卡响3声
  Timer0_ms(200);
  BELL_IO=1;
  Timer0_ms(200);
  BELL_IO=0;
  Timer0_ms(200);              
  BELL_IO=1;
  Timer0_ms(200);
  BELL_IO=0;
  Timer0_ms(200);              
  BELL_IO=1;
  Timer0_ms(200);
}
bell4()
{
   BELL_IO=0;              //删除所有的事件/卡号/时段响4声
   Timer0_ms(200);
   BELL_IO=1;
   Timer0_ms(200);
   BELL_IO=0;
   Timer0_ms(200);              
   BELL_IO=1;
   Timer0_ms(200);
   BELL_IO=0;
   Timer0_ms(200);              
   BELL_IO=1;
   Timer0_ms(200);
   BELL_IO=0;
   Timer0_ms(200);              
   BELL_IO=1;
   Timer0_ms(200);
}
////////////////刷卡写一张卡号////////////////////
kawr_card()
{
 uchar i,j,k;
 uint ii;
 cs_fm;
 BANK0;
 if(!lvl)
 {P4|=0x07;}  
 point1=0x0020;
 for(ii=0;ii<2000;ii++)
  {
   if(*point1==0x00)
    {
	  ii=2000;
      for(j=0;j<5;j++) 
      {*(point1+j)=gc_cad[j];
	   k+=1;
	  }
	  for(i=0;i<2;i++) 
	  {
	   *(point1+5+i)=key_shiqu[i];
	   k+=1;
	  }       
     }
   else 
	  point1+=7;
  }
  ncs_fm;
  bell2();   
}

//////////////////////键盘写卡//////////////////////////////
keywr_card()
{
 uchar i,j,k=0;
 uint ii;
 cs_fm;
 BANK0;
 if(!lvl)
 {P4|=0x07;}  
 point1=0x0020;
 for(ii=0;ii<2000;ii++)
 {if(*point1==0x00)
   {
      ii=2000;
      for(j=0;j<5;j++) 
      {*(point1+j)=key_card[j];
	   k+=1;
       } 
	  for(i=0;i<2;i++) 
	  {
	   *(point1+5+i)=key_shiqu[i];
	   k+=1;
	  }          
   }
   else 
     point1+=7; 
   } 
  ncs_fm;  
  bell2();    //写卡响2声
}

//////////////比较键盘输入的卡号,若卡号已存在则删除该卡,否则写卡//////
cmpwrclrkey()
{
 uchar i,k;
 uint ii;
 cs_fm;
 BANK0;
 if(!lvl)
 {P4|=0x07;}  
 point1=0x0020;
 for(ii=0;ii<2000;ii++)
   {
    k=0;
    for(i=0;i<5;i++)
	{
	  if(key_card[i]==*point1) 
	   {
	    point1++ ;
	    k+=1;
	   }
	  else
	    i=5;
      }//end of for(i=0;i<5;i++)
    if(k==5)
	  ii=2000;
	else
	  point1+=(7-k);
   } //end of for(ii=0;ii<2000;ii++)
  if(k==5)
   { 
     point1+=2;
	 for(i=0;i<7;i++)
	  {*(--point1)=0x00;    //若该卡号已经存在,则删除该卡
      }
     bell3();
	 P4|=0x07;
    }
  else
   {
	keywr_card();
	ncs_fm;
   }
}
 
////////////////////////删除所有卡号/////////////////////////
del_allcard()
{uchar i;
 uint j;
 //display("                ",0x98);
 display("删所有的卡号    ",0x98);
 cs_fm;
 BANK0; 
 point1=0x0020;
 for(j=0;j<2000;j++)
{
 for(i=0;i<7;i++)
 {
  if(!lvl)
  {P4|=0x07;}
   *(point1++)=0x00;
  }
 }
   ncs_fm;
   delcard_flag=0;
   bell4();
   display("                ",0x98);
   ncs_fm;
}

//////////////写事件纪录////////////////////////
xiejilu(uint beginadr)
{uchar i,j,k=0;
 uint ii;
 cs_fm;
 BANK0;
 if(!lvl)
 {P4|=0x07;}  
  point1=beginadr;
 for(ii=0;ii<5109;ii++)
 {
  if(*point1==0x00)
  {
   ii=5109;
   for(i=0;i<5;i++)
     {*point1=keycodebuf[i];
	  point1++;
	  k+=1;
	 }
   for(j=0;j<5;j++)
   {
    *point1=read_time[j];
	point1++;
	k+=1;
   }
  }
 else point1+=10;
 }
 ncs_fm;
}     


///////////////////开门//////////////////////
opendoor()
{
 uchar i;
 name_disp();
 chn_disp1("OK",0x9f);
 display("门号:           ",0x90);
 num_disp(door_num,0x93);
 for(i=0;i<5;i++)
  {sendkeycode[i+1]=keycodebuf[i];}
 sendkeycode[0]=0x11;	//有效卡刷卡
 sendkeycode[7]=0x01;	//上传卡号
 LED_IO=0;
 P5=0x00;
 P4&=0xef;  
 switch(door_num) 
 { 
   case 0:
        P5=0x01;	          //继电器1不吸合,开1号门
		break;
   case 1:
        P5=0x02;
		break;
   case 2:
        P5=0x04;
		break;
   case 3:
        P5=0x08;
		break;
   case 4:
        P5=0x10;
		break;
   case 5:
		P5=0x20;
		break;
   case 6:
		P5=0x40;
		break;
   case 7:
		P5=0x80;
		break;
		default :
        break ;
 }    
 count_time2=JDQ_TIME; 
 ET1=1;              //定时器1中断允许位
 TR1=1;              //定时器1运行控制位
}

/////////////无效卡刷卡/////////////////////
wuxiao()
{
 uchar i;
 ncs_fm;
 chn_disp1("无",0x9c);
 chn_disp1("效",0x9d);
 for(i=0;i<5;i++)
  {sendkeycode[i+1]=keycodebuf[i];}
 sendkeycode[0]=0x12;	//无效卡刷卡
 sendkeycode[7]=0x01;	//上传卡号
 BELL_IO=0;              //刷卡无效响2声
 nop();
 Timer0_ms(500);
 BELL_IO=1;
 nop();
/* Timer0_ms(500);
 BELL_IO=0;
 nop();
 Timer0_ms(500);              
 BELL_IO=1;
 nop();
 Timer0_ms(500);*/
}

////////////判断节假日,若为假日,有效卡也打不开门////////////////////////
judgedate()
{
 uchar i,k=0;
 cs_fm;
 BANK0;
 if(!lvl)
 {P4|=0x07;}
 point1=0x36b0;
 for(i=0;i<60;i++)
 {
  if((read_time[1]==*(point1++))&&(read_time[2]==*(point1++)))
   {i=60;
    k=1;
   }
  else
    k=0;
 }
 ncs_fm;
  if(k==1)
   {wuxiao();
    xiejilu(0x3870);
   }
  else
   {
    opendoor();
	xiejilu(0x3870);
/*	cs_fm;
	BANK0;
	point1=0x0x3870;
    for(j=0;j<10;j++)
     {
	  a[j]=*point1;
	  point1++;
     }*/
   }
   ncs_fm;
}

////// 判断时间段/////////////////////
judgetime()
{
 uchar i,k=0;
 cs_fm;
 BANK0;
 for(i=0;i<2;i++)
 {
  if(read_time[6]==*(point1++))
   {i=2;
    k=1;
   }
  else
   k=0;
  }
 if(k==1)
  {
   ncs_fm;
   wuxiao();
   xiejilu(0x3870);	
  }
 else
 {
 
  if(((read_time[3]>*point1)&&(read_time[3]<=*(point1+2)))||
	  ((read_time[3]==*point1)&&(read_time[4]>=*(point1+1)))||
	  ((read_time[3]==*(point1+2))&&(read_time[4]<=*(point1+3)))||
	  ((read_time[3]>*(point1+4))&&(read_time[3]<=*(point1+6)))||
      ((read_time[3]==*(point1+4))&&(read_time[4]>=*(point1+5)))||
	  ((read_time[3]==*(point1+6))&&(read_time[4]<=*(point1+7))))
  judgedate(); 
  else
  {
   ncs_fm;
   wuxiao();
   xiejilu(0x3870);	
  }
 }
 ncs_fm;
}
/////////判断时区权限是否正确////////////
judgeshiqu()
{ 
 uchar i;
 cs_fm;
 BANK0;
 if(!lvl)
 {P4|=0x07;}
  switch(shiqu_num)
 {
   case 0 :
          point1=0x3730;
		  judgetime();
          break ;
   case 1 :
          point1=0x373a;
          for(i=0;i<10;i++)
		  {
		   b[i]=*point1++;  
		  }
		  point1=0x373a;
		  judgetime();
          break ;
   case 2 :
          point1=0x3744;
		  judgetime();
          break ;
   case 3:
          point1=0x375e;
		  judgetime(); 
          break;
   case 4:
          point1=0x3768;
		  judgetime();
          break;
   case 5:
          point1=0x3772;
		  judgetime();
          break;
   case 6:
          point1=0x378c;
		  judgetime();
          break;
   case 7:
          point1=0x3796;
		  judgetime();
          break;
   case 8:
          point1=0x37a0;
		  judgetime();
          break;
   case 9:
          point1=0x37aa;
		  judgetime();
		  break;
   case 10:
          point1=0x37b4;
		  judgetime();
		  break;
   case 11:
          point1=0x37ce;
		  judgetime();
          break;
   case 12:
          point1=0x37d8;
		  judgetime();
          break;
   default:
          break;
 }  
 ncs_fm;
}

///////////判断卡号,若为合法卡号///////////////////////
judgekey()
{
 uchar i,j,k;
 uint ii;
 for(j=0;j<5;j++)
 {keycodebuf[j]=gc_cad[j];
 }
 cs_fm;    //选中铁电
 BANK0;    //0—64k
 if(!lvl)
     {P4|=0x07;}
 point1=0x0020;
 for(ii=0;ii<2000;ii++)
 {
  k=0;
  for(i=0;i<5;i++)
   {
	  if(keycodebuf[i]==*(point1+i)) 
	   {
	    k+=1;
	   }
	  else
	    i=5;
      }//end of for(i=0;i<5;i++)
   if(k==5)
	  ii=2000;
	else
	  point1+=7;
   } //end of for(ii=0;ii<5000;ii++)

 if(k==5)
  { 
   if(!program_flag)
     {shiqu_num=*(point1+5);
      door_num=*(point1+6);
      judgeshiqu();
	 }
   else
   {
    cs_fm;    //选中铁电
    BANK0;    //0—64k
    for(i=0;i<7;i++)
	 { *(point1+i)=0x00; }   //若该卡号已经存在,那么刷下该卡则删除该卡
    bell3();      ////删除一张卡响3声
	P4|=0x07;
   }    
  }
 else
  {
    ncs_fm;
   if(!program_flag)
   {wuxiao();
    xiejilu(0x3870);
   }
   else
     {
	 kawr_card();
	 }
 } 
 program_flag=0;
 ncs_fm;
}

////删除所有的事件纪录
delshijian()
{
 uint i;
 uchar j;
 clrram();
 display("删所有的事件纪录",0x98);
 cs_fm;
 BANK0;
 if(!lvl)
 {P4|=0x07;}  
 point1=0x3870;
 for(i=0;i<5109;i++)
 {
  for(j=0;j<10;j++) 
     { 
	  *point1=0x00;
	  point1++;
	  }
  }   
   ncs_fm;

⌨️ 快捷键说明

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