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

📄 师姐全部程序wsy.c

📁 cgnal c8051f020 4*6键盘 4*8 液晶显示 大容量存储
💻 C
📖 第 1 页 / 共 5 页
字号:
             num_disp(keynumber,0x9d);
             key_holiday[1]=keynumber*10 ;
             keytimes1++;
             keynumber1[1]=keynumber;
             break ;
             case 4 :
			 num_disp(keynumber1[1],0x9d); 
		     num1_disp(keynumber); 
             key_holiday[1]=key_holiday[1]+keynumber;
             keytimes1++;
             break ;
			 case 5 :
             keytimes1++;
             default:
			 break;
			} //end  switch(keytimes1)
          }//end (keytimes1<=5)
         }//if((clrlcd_flag==0)&(esc_flag==0)&(chaxun_flag==0)&(enter_flag==0))
      if(clrlcd_flag)
       {
       if(keytimes1>=5)
        {
         num_disp(keynumber1[1],0x9d);
		 num_disp2(" ");
		 keytimes1=4 ;
         key_holiday[1]&=0xf0;
        }  
       else
        {
         if(keytimes1<=1)
          {
           keytimes1=1 ;
          }
         else
          {
           switch(--keytimes1)
            {
             case 3:
                  num_disp1(" ",0x9d);
				  key_holiday[1]=0;
                  break;
             case 2:
                  num_disp(keynumber1[0],0x9c);
				  num_disp2(" ");
				  key_holiday[0]&=0xf0;
                  break;
             case 1:
                  num_disp1(" ",0x9c);
				  key_holiday[0]=0;
                  break;                             
             default:
                  break;
            }//end of switch(keytime2)
          } //end of else
        }//end of else
        keyon_flag1=0 ;
        keyon_flag=0 ;
        clrlcd_flag=0 ;
       }//end of if(clrlcd_flag)
      if(enter_flag==1)
       {
        keynumber=0 ;			
        enter_flag=0 ;
        quanxian_flag=0 ;
		keywrcard_flag=0;
        keytimes1=0 ;
		wr_holiday();
		display("    时  分  秒  ",0x88);
	    display("                ",0x98);
       }
       keyon_flag=0 ;
       keyon_flag1=0 ; 
    }//end of if(keyon_flag1)
      if(esc_flag)
       {
        quanxian_flag=0 ;
		keywrcard_flag=0;
        esc_flag=0 ;
		display("    时  分  秒  ",0x88);
	    display("                ",0x98);
        keytimes1=0 ;
        keynumber=0 ;
       }
}

////////////////////用键盘输入卡号/////////////////
program()
{ 
 uchar keynumber1[5];
 if(keytimes1==0)
  {
	 display("请输入卡号:     ",0x88) ; 
	                                   //请输入
   }
 if(keyon_flag1)
     { 
      if((clrlcd_flag==0)&(esc_flag==0)&(chaxun_flag==0)&(enter_flag==0))
       { 
          if(keytimes1<=11)
          {
            switch(keytimes1)
            {
             case 0 :
             keytimes1++;    //第一次为空操作,因为是编程按键产生的keyonflag
             break ;
             case 1 :
			 num_disp(keynumber,0x9a);
             key_card[0]=keynumber<<4;
             keytimes1++;
             keynumber1[0]=keynumber;
             break ;
             case 2 :
             num_disp(keynumber1[0],0x9a); 
		     num1_disp(keynumber);
             key_card[0]=key_card[0]+keynumber;
             keytimes1++;
             break ;
             case 3 :
             num_disp(keynumber,0x9b);
             key_card[1]=keynumber<<4 ;
             keytimes1++;
			 keynumber1[1]=keynumber;
             break ;
             case 4 :
			 num_disp(keynumber1[1],0x9b);
             num1_disp(keynumber);
             key_card[1]=key_card[1]+keynumber;
             keytimes1++;
             break ;
             case 5 :
			 num_disp(keynumber,0x9c);
             key_card[2]=keynumber<<4 ;
             keytimes1++;
			 keynumber1[2]=keynumber;
             break ;
			 case 6:
			 num_disp(keynumber1[2],0x9c);
			 num1_disp(keynumber);
			 key_card[2]=key_card[2]+keynumber;
			 keytimes1++;
			 break;
			 case 7 :
			 num_disp(keynumber,0x9d);
             key_card[3]=keynumber<<4 ;
             keytimes1++;
			 keynumber1[3]=keynumber;
             break ;
			 case 8:
			 num_disp(keynumber1[3],0x9d);
			 num1_disp(keynumber);
			 key_card[3]=key_card[3]+keynumber;
			 keytimes1++;
			 break;
			 case 9 :
			 num_disp(keynumber,0x9e);
             key_card[4]=keynumber<<4 ;
             keytimes1++;
			 keynumber1[4]=keynumber;
             break ;
			 case 10:
             num_disp(keynumber1[4],0x9e);
			 num1_disp(keynumber);
			 key_card[4]=key_card[4]+keynumber;
			 keytimes1++;
			 break;
			 case 11 :
             keytimes1++;
             default:
			 break;
			} //end  switch(keytimes1)
          }//end (keytimes1<=11)
         }//if((clrlcd_flag==0)&(esc_flag==0)&(chaxun_flag==0)&(enter_flag==0))
      if(clrlcd_flag)
       {
       if(keytimes1>=11)
        {
		 num_disp(keynumber1[5],0x9e);
		 num_disp2(" ");
         keytimes1=10 ;
         key_card[4]&=0xf0;
        }  
       else
        {
         if(keytimes1<=1)
          {
           keytimes1=1 ;
          }
         else
          {
           switch(--keytimes1)
            {
             case 9:
			      num_disp1(" ",0x9e);
                  key_card[4]=0;
                  break;
             case 8:
                  num_disp(keynumber1[4],0x9d);
				  num_disp2(" ");
				  key_card[3]&=0xf0;
                  break;
             case 7:
                  num_disp1(" ",0x9d);
				  key_card[3]=0;
                  break;
             case 6:
                  num_disp(keynumber1[3],0x9c);
				  num_disp2(" ");
				  key_card[2]&=0xf0;
                  break;  
             case 5:
                  num_disp1(" ",0x9c);
				  key_card[2]=0;
                  break;
             case 4:
                  num_disp(keynumber1[2],0x9b);
				  num_disp2(" ");
				  key_card[1]&=0xf0;
                  break;
             case 3:
                  num_disp1(" ",0x9b);
				  key_card[1]=0;
                  break; 
             case 2:
                  num_disp(keynumber1[1],0x9a);
				  num_disp2(" ");
				  key_card[0]&=0xf0;
                  break;
             case 1:
                  num_disp1(" ",0x9a);
				  key_card[0]=0;
                  break;                              
             default:
                  break;
            }//end of switch(keytime2)
          } //end of else
        }//end of else
        keyon_flag1=0 ;
        keyon_flag=0 ;
        clrlcd_flag=0 ;
       }//end of if(clrlcd_flag)
      if(enter_flag==1)
       {
        //keynumber=0 ;		
        enter_flag=0 ;
        program_flag=0 ;
		keywrcard_flag=0;
        keytimes1=0 ;
		cmpwrclrkey();
		display("    时  分  秒  ",0x88);
	    display("                ",0x98);
       }
       keyon_flag=0 ;
       keyon_flag1=0 ; 
    }//end of if(keyon_flag1)
      if(esc_flag)
       {
        program_flag=0 ;
		keywrcard_flag=0;
        esc_flag=0 ;
		display("    时  分  秒  ",0x88);
	    display("                ",0x98);
        keytimes1=0 ;
        keynumber=0 ;
		
       }
}
//////////////查询门禁事件纪录////////////
chaxun_shijian()
{
 uchar i,w,s;
 uchar addr;
 clrram();
 addr=0x80;
 for(i=0;i<5;i++)
   {
    cs_fm;
    BANK0;
    if(!lvl)
    {P4|=0x07;}
	w=*point1>>4;
    s=*(point1++)&0x0f;
	num_disp(w,addr++);
	num1_disp(s);
   }
   addr=0x93;
   for(i=0;i<5;i++)
   {
    cs_fm;
    BANK0;
    if(!lvl)
    {P4|=0x07;}
	w=*point1/10;
    s=*(point1++)%10;
	num_disp(w,addr++);
	num1_disp(s);
   }
   addr=0x88;
   for(i=0;i<5;i++)
   {
    cs_fm;
    BANK0;
    if(!lvl)
    {P4|=0x07;}
	w=*point1>>4;
    s=*(point1++)&0x0f;
	num_disp(w,addr++);
	num1_disp(s);
   }
   addr=0x9b;
   for(i=0;i<5;i++)
   {
    cs_fm;
    BANK0;
    if(!lvl)
    {P4|=0x07;}
	w=*point1/10;
    s=*(point1++)%10;
	num_disp(w,addr++);
	num1_disp(s);
   }
  ncs_fm;
  one_flag=0;
  next_flag=0;
  last_flag=0;
}
///查询已存在的卡号/////
chaxun_card()
{
 uchar i,w,s;
 uchar row=0,col=0;
 clrram();
 for(i=0;i<28;i++)
   {
    cs_fm;
    BANK0;
    if(!lvl)
    {P4|=0x07;}  
	w=*point1>>4;
	s=*point1&0x0f;
	point1++;
	if(col==7)            //判断换行
    {            //若不判断,则自动从第一行到第三行
      col=0;
      row++;
     }
	num_disp(w,AC_TABLE[8*row+col]);
	num1_disp(s);
	col++;
   }
  ncs_fm;
  one_flag=0;
  next_flag=0;
  last_flag=0;
}
//查询每个权限下的时段信息/////
chaxun_shiduan()
{
 uchar i,w,s;
 uchar row=1,col=0;
 display("权限:         ",0x80);
 w=quanxian_num>>4;
 s=quanxian_num&0x0f;
 num_disp(w,0x84);
 num1_disp(s);
 for(i=0;i<10;i++)
   {
    cs_fm;
    BANK0;
    if(!lvl)
    {P4|=0x07;}  
	w=*point1/10;
	s=*point1%10;
	point1++;
	if(col==8)            //判断换行
    {            //若不判断,则自动从第一行到第三行
      col=0;
      row++;
     }
	num_disp(w,AC_TABLE[8*row+col]);
	num1_disp(s);
	col++;
   }
  ncs_fm;
  one_flag=0;
  next_flag=0;
  last_flag=0;
 
}
chaxun_holiday()
{
 uchar i,j,w,s;
 uchar row=0,col=0;
 for(j=0;j<8;j++)
 {
  for(i=0;i<2;i++)
   {
    cs_fm;
    BANK0;
    if(!lvl)
    {P4|=0x07;}  
	w=*point1/10;
	s=*point1%10;
	point1++;
	if(col==8)            //判断换行
    {            //若不判断,则自动从第一行到第三行
      col=0;
      row++;
     }
	num_disp(w,AC_TABLE[8*row+col]);
	num1_disp(s);
	col++;
   }
   chn_disp1(";",AC_TABLE[8*row+col]);
   col++;
   chn_disp1("  ",AC_TABLE[8*row+col]);
   col++;
  }
  ncs_fm;
  one_flag=0;
  next_flag=0;
  last_flag=0;
 
}

////crc16校验///////////////
 void crc16 (uchar in_data,uint *crc) 
{	uchar i;
    	for(i=0;i<8;i++)
    	{	//CRC polynomial
        	if((*crc^in_data)&0x0001)
        	{	*crc=(*crc>>1)^0xa001;
        	}
        	else
        	{	*crc>>=1;
        	}
        	in_data>>=1;
    	}
}

crc_16(uchar in_data,uint *crc)
{	uchar i;
    	for(i=0;i<8;i++)
    	{	//CRC polynomial
        	if((*crc^in_data)&0x0001)
        	{	*crc=(*crc>>1)^0xa001;
        	}
        	else
        	{	*crc>>=1;
        	}
        	in_data>>=1;
    	}
}
///发送地址///////////////
void send_addr(uchar sentm)
{check_crc=0;
SBUF0=sentm;
crc16(sentm,&check_crc);
while(TI0==0)
{;}
TI0=0;
}
////发送数据/////////////
send_data(uchar sentm)
{
	SBUF0=sentm;
	crc16(sentm,&check_crc);
	while(TI0==0)
	{;}
	TI0=0;

}
///发送校验码//////////
send_crc()
{	SBUF0=check_crc;
	while(TI0==0)
	{;}
	TI0=0;
	SBUF0=check_crc>>8;
	while(TI0==0)
	{;}
	TI0=0;
}

open485()
{
REN0=0;
RD0_IO=0;//发送允许
TB80=0;
Timer0_us(30);
}
close485()
{
RD0_IO=1;//接收允许
REN0=1;
Timer0_us(30);
}

///////////////////////////////////////////
void sendno()
{
			open485();
                        kflag=0;
                        nop();
			send_addr(addr);
                        nop();
			send_data(0xff);
                        //nop;
			send_crc();
                        nop();
                        close485();
}
void sendyes()
{
			open485();
                        kflag=0;
                        nop();
			send_addr(addr);
                        nop();
			send_data(0x00);
                        //nop;
			send_crc();
                        nop();
                        close485();
}


/////////////////////////////////////////////////
fun31()
{
 uchar j=0;
	if(sendkeycode[0]!=0&&sendkeycode[7]<4)
		{sendkeycode[7]+=1;
                nop();
		open485();
                nop();
		send_addr(addr);
                nop();
		for(j=0;j<8;j++)
		  send_data(sendkeycode[j]);
		send_data(0x0);
		send_data(0x0);
		send_data(0x0);
                send_crc();
                nop();
                nop();
             

⌨️ 快捷键说明

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