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

📄 keyprocess.c

📁 AVR单片机用C语言编写的包括时钟
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "iom64v.h"
#include "eeprom.h"
#include "math.h"
#include "keyProcess.h"
#include "Timer.h"

unsigned char KeyProc(void)
{
 uchar KeyValu;
 KeyValu=0;
 if(keypressed())
 {
  KeyValu=keyscan();
  keyanalsy(KeyValu);
 }
 return KeyValu ; 
}
void delay(uchar x)
{
  uchar  j;
   while((x--) !=0)
   {
     for(j=0;j<125;j++)
	 { ;}   
   }
}
uchar keypressed(void) //判断是否有键按
{
  uchar a;
  DDRC=0x0f;
  PORTC=0x00;
  a=0xff;
  a=PINC;
  if((a & 0xF0)!=0xF0)
   return 1;
  else
   return 0;
  
}

uchar keyscan(void)
{
  uchar i,k,g;
  uchar j=0x7F, keycode=0xff;
  uchar Temp;
  Temp=0x01; 
  
  delay(10);
  
  if((keypressed())==1)
  { 
   
	
	for(i=0;i<4;i++)
	{
	 
	 g=Temp<<i;
	 PORTC=(~g)& 0x0f;
	 delay(50);
	 k=PINC;
	 if((k & 0xf0)!=0xf0)
	 {
	  k=(~k) & 0xf0;
	  keycode=g+k;
	  break;
	 } 
	}
    
   }
	 do{
	 
	  } while((keypressed())==1);	

	 

	 switch(keycode)
	 {
	    case 36:
		 keycode=0;break;
		case 34:
		 keycode=1;break;
		case 18:
		 keycode=2;break;
		case 130:
		 keycode=3;break;
		case 33:
		 keycode=4;break;
		case 17:
		 keycode=5;break;
		case 129:
		 keycode=6;break; 
		 case 40:
		 keycode=7;break;
		case 24:
		 keycode=8;break;
		case 136:
		 keycode=9;break;
		case 66:
		 keycode=10;break;
		case 65:
		 keycode=11;break;
		case 72:
		 keycode=12;break;
		case 68:
		 keycode=13;break;
		case 132:
		 keycode=14;break;
	   case 20:
		 keycode=15;break;
		default:
		    break;  
	  } 	 
  
  return keycode; 
}

void keyanalsy(uchar keyvalue)
{
   switch(keyvalue)
   {
    case 10:
	{
	 print(1); 
	 break;
	} 
	case 11:
	{ 
	 caisample();
	 break;
	} 
	case 12:
	{  
	  jiaozheng1();
	  break;
	}  
	case 13:
	{ 
	  celiang();
	  break;
	}  
	case 15:
	{ 
	 setparm();
	 break;
	}
	case 0:
	{
	 biaoding();
	 break;
	}
	case 14:
	{
	  liuliang();
	  break;
	 }    
	default:
	 break;      
	}  
  ShowNSta(); 
 }

void setparm(void)
{
  uchar ParmBuf[6]={14,14,14,0,0,13};
  uchar  keyv,i,j=0,keyc,rig=0;
  uchar SetPar[6];
  
   TIMSK=0x00;
  while(1) 
 {
   ParmBuf[0]=14;
   ParmBuf[1]=14;
   ParmBuf[2]=14;
   ParmBuf[3]=0;
   ParmBuf[4]=0;
   ParmBuf[5]=13;
   wdm164(ParmBuf);
   i=3;
 
   while(1)
   {
     if(keypressed())
    {
	  keyv=keyscan();
      if( keyv>=0 && keyv<=9)
      {
	   ParmBuf[i+1]=ParmBuf[i];
	   ParmBuf[i]=keyv;
	   wdm164(ParmBuf);
      }
	 if(keyv==14)
	 { 
	  //SetTime();
	  break;
	 }
	} 
   }

   
  
    keyc=ParmBuf[4]*10+ParmBuf[3];
	ParmBuf[4]=10;
	if(keyc<51 && keyc>0 )
	{
      FloatToUchar(keyc, ParmBuf) ;
  	  i=6-(NumBit[keyc].IntNumB+NumBit[keyc].PartNumB);
	  j=0;
	  while(j<i)
	  {
	   SetPar[j]=14;
	   j=j+1;
	  }
	  j=0;
	  while(j<(6-i))
	  {
	   SetPar[5-j]=ParmBuf[i+j];
	   j=j+1;
	  }
	  wdm164(SetPar);
      while(1)
     {
	   if(keypressed())
      {
	    keyv=keyscan();
        if( keyv>=0 && keyv<=9)
       {
	    for(j=0;j<(5-i);j++)
	    {
		  SetPar[5-j]=(SetPar[5-j-1]& 0x7f)+(SetPar[5-j]& 0x80);
		 } 
	    SetPar[i]=(SetPar[i]& 0x80)+keyv;
	
	    wdm164(SetPar);
       }
	    if(keyv==14)
	   { 
	    if(keyc!=28 ||keyc!=32)
	    UcharToFloat(SetPar,keyc);
		
		syst_parm[keyc]=SysP[keyc].Int_N+SysP[keyc].Min_N*NumBit[keyc].PartNumB;
		EEPROMWriteBytes(6*(keyc-1), SetPar, 6);
	    break;
	   } 
	  }
	 }  
	}
	else
	{
	 break;
	}  
  } 
i=SetTime(); 
 TIMSK=0x20;
}  


void UcharToFloat(uchar *Kvalue,uchar FlagBit)
{
   uchar i,g;
   
 
   
    g=6-NumBit[FlagBit].IntNumB;
	SysP[FlagBit].Min_N=0;
	SysP[FlagBit].Int_N=0;
    for(i=0;i<NumBit[FlagBit].PartNumB;i++)
	{
	 SysP[FlagBit].Min_N=SysP[FlagBit].Min_N*10+Kvalue[g-i-1];
	}

  for(i=0;i<NumBit[FlagBit].IntNumB;i++)
  {
	SysP[FlagBit].Int_N=SysP[FlagBit].Int_N*10+(Kvalue[5-i]& 0x7f);
  }
 

 
}

void FloatToUchar(uchar Tran,uchar *RetVa)
{
  unsigned long int IntNum1;
  unsigned int PartNum1,TempR1;
  uchar TempR[6],i=0,j,k;
  TempR1=syst_parm[Tran];
  j=NumBit[Tran].IntNumB;
  k=NumBit[Tran].PartNumB;
  
  IntNum1=SysP[Tran].Int_N;
  PartNum1=SysP[Tran].Min_N;
  
  for(i=0;i<k;i++)
  { 
    //if((PartNum1>=0) && (PartNum1<=9))
     //TempR[i]=PartNum1;
	//else 
   // {
	 TempR[i]=(unsigned char)(PartNum1-((unsigned int) PartNum1/10)*10);
     PartNum1=(unsigned  int) PartNum1/10; 
	//} 
  }
  
  for(i=0;i<k;i++)
  {
   RetVa[5-i]=TempR[i];
  }
  
  for(i=0;i<j;i++)
  {
    // if((IntNum1>=0) && (IntNum1<=9))
    // TempR[i]=IntNum1;
	// else 
     //{
	  TempR[i]= (unsigned char)(IntNum1-((unsigned long int) IntNum1/10)*10);
      IntNum1=((unsigned long int) IntNum1/10);
	// } 
  }
  
  for(i=0;i<j;i++)
  {
   if(i==0 && k!=0)
    RetVa[5-k-i]=TempR[i]|0x80;
   else
    RetVa[5-k-i]=TempR[i];
  } 
 if((k+j)<6)
 {
  for(i=0;i<(6-j-k);i++)
  {
   if(i==0)
    RetVa[i]=0x10;// s
   else
   	RetVa[i]=0x11;//"0";
  }
 }
}


void print(uchar kind)
{
  uchar PrintBuffer[27];
  uchar TemBuff[6],i;
  
  if(kind==1)
  {
    FloatToUchar(41,TemBuff);
    for(i=0;i<2;i++)
   {
    PrintBuffer[i]=TemBuff[i+4];
   }
  
   FloatToUchar(42,TemBuff);
   for(i=0;i<3;i++)
   {
    PrintBuffer[i+2]=TemBuff[i+3];
   } 
   PrintBuffer[3]=PrintBuffer[3] & 0x7f;
  
   FloatToUchar(43,TemBuff);
   for(i=0;i<3;i++)
   {
    PrintBuffer[i+5]=TemBuff[i+3];
   } 
   PrintBuffer[6]=PrintBuffer[6] & 0x7f;
  
   FloatToUchar(44,TemBuff);
   for(i=0;i<3;i++)
   {
    PrintBuffer[i+8]=TemBuff[i+3];
   } 
  
   PrintBuffer[11]=2;
   PrintBuffer[12]=0;
  
   FloatToUchar(20,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+13]=TemBuff[i+4];
   }  
  
   FloatToUchar(21,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+15]=TemBuff[i+4];
   }  
  
   FloatToUchar(22,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+17]=TemBuff[i+4];
   }
    
   FloatToUchar(23,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+19]=TemBuff[i+4];
   }  
  
   FloatToUchar(24,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+21]=TemBuff[i+4];
   }  
  
 
  }
  
  if(kind==2)
  {
  
    FloatToUchar(41,TemBuff);
    for(i=0;i<2;i++)
   {
    PrintBuffer[i]=TemBuff[i+4];
   }
   
   FloatToUchar(28,TemBuff);
    for(i=0;i<6;i++)
   {
    PrintBuffer[i+2]=TemBuff[i];
   }
   
   FloatToUchar(32,TemBuff);
    for(i=0;i<6;i++)
   {
    PrintBuffer[i+8]=TemBuff[i];
   }
   
   FloatToUchar(20,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+14]=TemBuff[i+4];
   }  
  
   FloatToUchar(21,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+16]=TemBuff[i+4];
   }  
  
   FloatToUchar(22,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+18]=TemBuff[i+4];
   }
    
   FloatToUchar(23,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+20]=TemBuff[i+4];
   }  
  
   FloatToUchar(24,TemBuff);
   for(i=0;i<2;i++)
   {
    PrintBuffer[i+22]=TemBuff[i+4];
   }  
  
  }
   printer(PrintBuffer,kind);
     
}

void caisample(void)
{ 
  uchar keyv,keyc,PorteSta,Statue;
  uchar ShowBuff[6];
  DDRB=0xff; 
  PORTB=PORTB | 0x0f ; 
  keyc=0; 
  PorteSta=PORTE;
  Statue=123;
  for(keyv=0;keyv<6;keyv++)
  ShowBuff[keyv]=14;
  
  wdm164(ShowBuff);
  keyv=0;
  while(1)
  {
    if(keypressed())
    {
	  keyv=keyscan();
	  Statue=123;
	}  
	
     switch(keyv)
	 {
	 case 1://M
	  {
	   if(Statue==123)
	   {
	    
	    PORTE=(PORTE|0x94)& 0xf7;
	    TbSample=11;
		Statue=1;
	   }
	   else	
	   {
	
	    if(TbSample==10)
	    {  
	     FloatToUchar(42,ShowBuff);
	     ShowBuff[0]=14;
	     ShowBuff[1]=14;
	     ShowBuff[2]=14;
	     ShowBuff[0]=ShowBuff[5];
	     ShowBuff[5]=ShowBuff[3];
	     ShowBuff[3]=ShowBuff[0];
	     ShowBuff[0]=14;
	     wdm164(ShowBuff);
	     PORTB= (PORTB | 0x0f) & 0xf7;
		 Statue=123;
		 
	    }
	   }
	   break;  
	  }
     case 2://T
	 {
	  if(Statue==123)
	  {
	   PORTE=PORTE|0x98;
	   PORTE=PORTE & 0xfb;
	   //Statue=PORTE;
	   TbSample=12;
	   Statue=2;
	  } 
	  else
	  {
	   if(TbSample==10)
	   {
	    FloatToUchar(43,ShowBuff);
	    ShowBuff[0]=14;
	    ShowBuff[1]=14;
	    ShowBuff[2]=14;
	    ShowBuff[0]=ShowBuff[5];
	    ShowBuff[5]=ShowBuff[3];
	    ShowBuff[3]=ShowBuff[0];
	    ShowBuff[0]=14;
	    wdm164(ShowBuff);
	    PORTB=(PORTB | 0x0f) & 0xfd ;
	    Statue=123;
	   }
	  }    
	   break;
	 } 
	 case 4://Tb
	 {
	  if(Statue==123)
	  {
	   PORTE=PORTE & 0xef;
       PORTE=PORTE | 0x80;
       PORTE=(PORTE & 0xfb)|0x08;
       TbSample=14;
	   Statue=4;
	  } 
      else
	  {
	   if(TbSample==10)
       {
	    FloatToUchar(45,ShowBuff);
	    ShowBuff[0]=14;
	    ShowBuff[1]=14;
	    ShowBuff[2]=14;
	    ShowBuff[0]=ShowBuff[5];
	    ShowBuff[5]=ShowBuff[3];
	    ShowBuff[3]=ShowBuff[0];
	    ShowBuff[0]=14;
	    wdm164(ShowBuff);
	    PORTB= (PORTB | 0x0f)& 0xfb;
	    Statue=123;
	   }	
	  }  
	  break;
	 } 
	 case 5://V
	 {  
	  if(Statue==123)
	  {
	    Counter1=0;
	    TbSample=13;
		Statue=5;
	  }
	  else
	  {
	   if(TbSample==10) 
	   {
	    FloatToUchar(48,ShowBuff);
	    ShowBuff[0]=14;
	    ShowBuff[1]=14;
	    ShowBuff[2]=14;
	    ShowBuff[0]=ShowBuff[5];
	    ShowBuff[5]=ShowBuff[3];
	    ShowBuff[3]=ShowBuff[0];
	    ShowBuff[0]=14;
	    wdm164(ShowBuff);
	    PORTB=(PORTB | 0x0f)& 0xfe;
		Statue=123;
	   }	
	  } 
	  break;
	 } 
	 default:
	  break;
	 }
	 if(keyv==14)
	 {
	  PORTB=PORTB | 0x0f ;
	  break;
	 } 
   
  } 
  
 PORTE=PorteSta;   
}
void  biaoding(void)
{
  uchar SetP[6]={14,14,14,0,0,11};//0x12 "F"
  uchar i,keyv; 
  uchar Te[6]={14,14,14,0,0,11};
  float  ReT1,ReT2,M1;
  while(1)
  { 
   wdm164(SetP);
   Te[0]=14;
   Te[1]=14;
   Te[2]=14;
   Te[5]=11;
   Te[3]=0;
   Te[4]=0;
   i=3;
   Counter1=0;
   Counter2=0;
   while(1)
   {
    if(keypressed())
    {
	  keyv=keyscan();
	 if( keyv>=0 && keyv<=9 )
	 {
	   Te[i+1]=Te[i];
	   Te[i]=keyv;
	   wdm164(Te);
     } 
	if(keyv==14)
	 break;  
   } 
  }
  if(keyv==14 && (Te[4]*10+Te[3])==0)
   break;
  else  
  keyv=Te[4]*10+Te[3];
 
  switch(keyv)
  {
   case 35:
   {
     biaoding35();
    break;
   }	
   case 36:
   {
    biaoding36();
    break;
   }	  
   case 37:
   {
    biaoding37();
    break;
   }	
   case 38:
   {
	biaoding38();  
    break;
   }	
   case 1:
   {
    biaoding1();
    break;
   }	
   case 3:
   {
    biaoding3(); 
    break;
   }
   default:
    break;
  }  
 }    
}
void jiaozheng(void)
{
  uchar jz[6]={0x08,0x08,0x08,0x08,0x08,0x08};
  uchar ml,h;
  wdm164(jz);
 
 
  
  while(1)
  {
   if(TbSample==0)
   {
    PORTE=(PORTE & 0xf7)|0x04;
	TbSample=2;
   }
   if(MFlage==1)
   { 
    FloatToUchar(16,jz);
	jz[0]=14;
	 ml=jz[1];
	 jz[1]=jz[5];
	 jz[5]=ml;
	 ml=jz[2];
	 jz[2]=jz[4];
	 jz[4]=ml;
	PORTB=(PORTB | 0x0f)& 0xf7; 
    wdm164(jz);
	PORTE=(PORTE & 0xfb)|0x08;
	MFlage=0;
   }
   if(TFlage==1)
   {
    FloatToUchar(17,jz);
	jz[0]=14;
	
	 ml=jz[1];
	 jz[1]=jz[5];
	 jz[5]=ml;
	 ml=jz[2];
	 jz[2]=jz[4];
	 jz[4]=ml;
	PORTB=(PORTB | 0x0f)& 0xfe; 
    wdm164(jz);
	TFlage=0; 
	//break;
   } 
   if(TbSample==5)
   {
    TbSample=10;
    break;
   }	
 
  } 
  
}
float Comunpter(void)
{
  float Tem1,Tem2,M;
 

 
  
  //syst_parm[39]=SysP[39].Int_N+(SysP[39].Min_N*0.001);
 // syst_parm[40]=SysP[40].Int_N+(SysP[40].Min_N*0.001);
  
  if((PORTE & 0x20)==0)
  {
   syst_parm[3]=SysP[3].Int_N+(SysP[3].Min_N*0.01);
   syst_parm[4]=SysP[4].Int_N+(SysP[4].Min_N*0.1);
   Tem1=syst_parm[3]*(syst_parm[39]-syst_parm[16])+syst_parm[4];
  }
  else
  {
   syst_parm[1]=SysP[1].Int_N+(SysP[1].Min_N*0.01);
   syst_parm[2]=SysP[2].Int_N+(SysP[2].Min_N*0.1);
  Tem1=syst_parm[1]*(syst_parm[39]-syst_parm[16])+syst_parm[2];
  }
  
   syst_parm[5]=SysP[5].Int_N+(SysP[5].Min_N*0.1);
   syst_parm[6]=SysP[6].Int_N;
   syst_parm[7]=SysP[7].Int_N;
   syst_parm[17]=SysP[17].Int_N+(SysP[17].Min_N*0.001);
   syst_parm[8]=SysP[8].Int_N;
   syst_parm[9]=SysP[9].Int_N+(SysP[9].Min_N*0.01);
   syst_parm[12]=SysP[12].Int_N+(SysP[12].Min_N*0.01);
   
  Tem2=syst_parm[5]*( syst_parm[40]-(syst_parm[17]/1000))+(syst_parm[6]-syst_parm[7]);
  syst_parm[43]=Tem2;
  M=Tem1+syst_parm[9]*(syst_parm[8]-Tem2)*Tem1/10;
  if(syst_parm[12]==0)
  M=0;
  else
  M=M/syst_parm[12];
  syst_parm[42]=M;
  if(M<0)
  SysP[42].PNC=1;
  else
  SysP[42].PNC=0;
  
  SysP[42].Int_N=fabs(syst_parm[42]);
  SysP[42].Min_N=(fabs(syst_parm[42])-SysP[42].Int_N)*10;
   return M;
}

void liuliang(void)
{
  uchar Hb[6]={14,14,14,0,0,10};//0x13 L
  uchar keyv;
   
  print(2);
  
  wdm164(Hb);

 while(1)
 {
  if(keypressed())
  {
   keyv=keyscan();
   
   if(keyv==14)
   {
    SysP[32].Int_N=SysP[32].Int_N+SysP[28].Int_N;
    SysP[41].Int_N=Hb[3];
	SysP[41].Min_N=0;

⌨️ 快捷键说明

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