📄 keyprocess.c
字号:
#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 + -