📄 waterctrlv1.c
字号:
}
switch(RevBuffer[9])
{
case 0x00://修改硬件卡密码
READ_E2PROM(RevBuffer+18,HartCardLoadPWAdd,6);//将原密码先存下来
WRITE_E2PROM(RevBuffer+10,HartCardLoadPWAdd,6);//写当前修改密码
for(systemtemp1=0;systemtemp1<6;systemtemp1++)
{
READ_E2PROM(&systemtemp,HartCardLoadPWAdd+systemtemp1,1);
if(systemtemp!=RevBuffer[10+systemtemp1])
{
WRITE_E2PROM(RevBuffer+18,HartCardLoadPWAdd,6);//写入原密码
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
}
break;
case 0x01://修改系统号
READ_E2PROM(RevBuffer+18,SystemNumADD,3);//将原系统号先存下来
WRITE_E2PROM(RevBuffer+10,SystemNumADD,3);//写当前更改系统号
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SystemNumADD+systemtemp1,1);
if(systemtemp!=RevBuffer[10+systemtemp1])
{
WRITE_E2PROM(RevBuffer+18,SystemNumADD,3);//写入原系统号
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
}
break;
case 0x02://修改卡软件密码
READ_E2PROM(RevBuffer+18,SoftcardPWADD,3);
WRITE_E2PROM(RevBuffer+10,SoftcardPWADD,3);
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SoftcardPWADD+systemtemp1,1);
if(systemtemp!=RevBuffer[10+systemtemp1])
{
WRITE_E2PROM(RevBuffer+18,SoftcardPWADD,3);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
}
break;
case 0x03:
READ_E2PROM(RevBuffer+18,AD_DE_NumAdd,1);
WRITE_E2PROM(RevBuffer+10,AD_DE_NumAdd,1);
READ_E2PROM(&systemtemp,AD_DE_NumAdd,1);
if(systemtemp!=RevBuffer[10])
{
WRITE_E2PROM(RevBuffer+18,AD_DE_NumAdd,1);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
break;
case 0x04://校准时间
systemtime[0]=RevBuffer[10];
systemtime[1]=RevBuffer[11];
systemtime[2]=RevBuffer[12];
systemtime[3]=RevBuffer[13];
systemtime[4]=RevBuffer[14];
systemtime[5]=RevBuffer[15];
systemtime[6]=RevBuffer[16];
WriteTime(systemtime);
break;
case 0x05://修改干黄管位置
READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp!=RevBuffer[10])
{
WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
break;
case 0x06://修改开关阀门的时间
READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp!=RevBuffer[10])
{
WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
break;
case 0x07://修改断行通讯启用
READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp!=RevBuffer[10])
{
WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
break;
case 0x08://修改有无预设量模式
READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp!=RevBuffer[10])
{
WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
break;
case 0x09://修改卡量的属性
READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp!=RevBuffer[10])
{
WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
break;
case 0x0a://修改表取单价的模式
READ_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
WRITE_E2PROM(RevBuffer+10,MaterWorkStateByteADD,1);
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp!=RevBuffer[10])
{
WRITE_E2PROM(RevBuffer+18,MaterWorkStateByteADD,1);
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
break;
default:
break;
}
//setting error
if(systemflag1&0x40)
{
break;
}
//setting is complete
else
{
//将卡写成无效卡
RevBuffer[0]=0x09;
RevBuffer[1]=0x04;
RevBuffer[2]=0x04;
DsInt;
Cmd_process();
OpInt;
}
break;
//---------------------------------------------------------stop user card
case 0x03:
for(systemtemp=0;systemtemp<3;systemtemp++)
{
READ_E2PROM(&systemtemp1,SystemNumADD+systemtemp,1);
if(systemtemp1!= RevBuffer[3+systemtemp])
{
carderrorbyte = 0x27;
systemflag1|=0x40;
break;
}
}
if(systemflag1&0x40)
break;
for(systemtemp=0;systemtemp<3;systemtemp++)
{
READ_E2PROM(&systemtemp1,SoftcardPWADD+systemtemp,1);
if(systemtemp1!= RevBuffer[6+systemtemp])
{
carderrorbyte = 0x29;
systemflag1|=0x40;
break;
}
}
if(systemflag1&0x40)
break;
if(RevBuffer[9]=='s')
{
systemtemp = 's';
WRITE_E2PROM(&systemtemp,BeingUserFlagADD,1);
READ_E2PROM(&systemtemp,BeingUserFlagADD,1);
if(systemtemp=='s')
{
//将卡写成无效卡
RevBuffer[0]=0x09;
RevBuffer[1]=0x04;
RevBuffer[2]=0x04;
DsInt;
Cmd_process();
OpInt;
}
else
{
systemtemp=0xa5;
WRITE_E2PROM(&systemtemp,BeingUserFlagADD,1);
carderrorbyte = 0x2a;
systemflag1|=0x40;
}
}
break;
//---------------------------------------------------------无效卡
case 0x04:
carderrorbyte = 0x2b;
systemflag1|=0x40;
break;
default:
break;
}
}
else //Read card is error
{
systemflag1|=0x40;
}
}
else //download password error
{
systemflag1|=0x40;
}
}
else //selecet card is error
{
systemflag1|=0x40;
}
}
else //FangChong is error
{
systemflag1|=0x40;
}
}
else //found card is error
{
systemflag1|=0x40;
}
//-------------------------------------read card error or right
if(systemflag1 & 0x40)
{
systemflag & 0xbf;
DisplayErrCode(carderrorbyte);
Delay10KTCYx(250);
Delay10KTCYx(250);
UnDYP_CardOn_Flg();
ClearNumDpy(1,1);
LEDCTRL = 1;//CLOSE BACK LED LIGHT
}
else
{
DpyRdCardOk();
}
}
//-------------------------------------read card ok into uesr setting function
if(systemflag & 0x08)
{
//some delays
systemflag &= 0xf7;
READ_E2PROM(&MtWkSeBRam,MaterWorkStateByteADD,1);//
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);//判断干簧管位置
switch(systemtemp&0x30)
{
case 0x00:panma = 0; break;
case 0x10:panma = 1; break;
case 0x20:panma = 2; break;
case 0x30:panma = 3; break;
}
INTCON3bits.INT3IF = 0;
OpSelInt;
LcdWheelDisplay();
DsSelInt;
}
//-------------------------------------setting user value ok and wait user kid ok key
if(systemflag & 0x01)
{
systemflag &= 0xf7;
DsInt;
carderrorbyte = CheckCardIsMove();
OpInt;
if(carderrorbyte==0x01)
{
systemflag = 0x04;
}
else //card been moved or card error
{
goto CardIsRemove; //:)
}
}
//-------------------------------------begin use water
if(systemflag==0x04)
{
systemflag &= 0xfb;
// DPY_Card_YLorJE_Num(CardBalance,0); //display card YUE
// DPY_SDZorDJ_Num(SheDinLiang,1); //display SheDinLiang
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
systemtemp &= 0x0c;
systemtemp = systemtemp>>2;
switch(systemtemp)
{
case 0x00:setvalvetime=76; break;//10s
case 0x01:setvalvetime=114; break;//15s
case 0x02:setvalvetime=152; break;//20s
case 0x03:setvalvetime=190; break;//25s
default:
setvalvetime=190;
break;
}
OpenValve(); //Open valve
//-Timer1 start count , when (valuetime == setvaluetime)
//-I/O OPEN and CLOSE reset 0
//deduct 1 unit water of card vaule
counterflag = 0;
loopcnt = 0;
systemtemp = 0;
INTCON3bits.INT1IF=0;
INTCON3bits.INT2IF=0;
SIN2INTEN=1;
SIN1INTEN=1;
counterflag=0;
READ_E2PROM(&panma,MaterWorkStateByteADD,1);
panma &= 0x30;
panma = panma>>4;
AddUsingValueOp(panma);
systemflag1 |= 0x10; //for return write card
counterflag=0; //initalioez counterflag
//---------------------------------this loop is aboat count value of uesing water
while(1)
{
loopcnt += 1;
if(loopcnt==10000)
{
carderrorbyte=CheckCardIsMove();
if(carderrorbyte!=0x01) //card been remove
{
timerscnt = 0;
goto CardIsRemove;
}
}
if(loopcnt==30000)
{
timerscnt += 1;
loopcnt=0;
ReflashLcdTimeDpy();
}
if(timerscnt==10)
{
timerscnt+=1;
ClearNumDpy(1,1); //display SheDinLiang
DPY_SDZorDJ_Num(SheDinLiang,0x01);
// ClearNumDpy(0,0);
// DPY_Card_YLorJE_Num(ShenYuShuiLiang,1);
}
if(timerscnt>22)
{
timerscnt=0;
ClearNumDpy(1,1); //display DJ
DPY_SDZorDJ_Num(Settingprice,0x00);
// ClearNumDpy(0,0);
// DPY_Card_YLorJE_Num(CardBalance,0);
}
//-------------------------card remove
if(0)
{
CardIsRemove:
InitialFM1702(0);
CardOffOp();
break;
}
//-------------------------have counter ?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -