📄 waterctrlv1.c
字号:
// 0x29 ---- card number is error
// 0x2a ---- Stop mater option is error
// 0x2b ---- card on effect
//
//-----------------------------------------------------------------//
unsigned char systemtemp;
unsigned char Systemnum[3]; //system serail number
unsigned char Cardnum[3]; //card user serail number
unsigned char CardUsingTimes; //
//02 test
unsigned char Settingprice[3]; //0x x.x xx
unsigned char Settingpricehalf[3]={0,0,0};
unsigned int loopcnt;
const unsigned char one[4] = {0,0,0,1};
const unsigned char one1[5] = {0x0,0x0,0x0,0x0,0x50};
unsigned char CardBalance[4]; //XX XX X.X XX
unsigned char ShenYuShuiLiang[4]={0,0,0,0};
unsigned char ShuiLiang[3]={0,0,0};
unsigned char JinE[3]= {0,0,0};
unsigned char SheDinLiang[3]={0,0,0}; //0x x.x xx
unsigned char SheDinJinE[3]={0,0,0};
unsigned char LieJiShuiLiang[5];
unsigned char panma = 1; //counter pointer in meter pad area\
//0x00:1m3
//0x01:100L
//0x02:10L
//0x30:1L
unsigned char valvetime;
unsigned char setvalvetime;
//------------------------- LCD Number type Tab ----------------------------//
//LcdNum[X]= B( x x x x x x x x )
// d3 d2 d1 d0 d3 d2 d1 d0
// ---HighAddr-- ---LowAddr---
//[0] '0': X 1 1 1 0 1 1 1 HEX: 0x77
//[1] '1': X 0 0 1 0 0 1 0 HEX: 0x12
//[2] '2': X 1 1 0 1 0 1 1 HEX: 0x6b
//[3] '3': X 1 0 1 1 0 1 1 HEX: 0x5b
//[4] '4': X 0 0 1 1 1 1 0 HEX: 0x1e
//[5] '5': X 1 0 1 1 1 0 1 HEX: 0x5d
//[6] '6': X 1 1 1 1 1 0 1 HEX: 0x7d
//[7] '7': X 0 0 1 0 0 1 1 HEX: 0x13
//[8] '8': X 1 1 1 1 1 1 1 HEX: 0x7f
//[9] '9': X 1 0 1 1 1 1 1 HEX: 0x5f
//[10] 'A': X 0 1 1 1 1 1 1 HEX: 0x3f
//[11] 'b': X 1 1 1 1 1 0 0 HEX: 0x7c
//[12] 'c': X 1 1 0 1 0 0 0 HEX: 0x68
//[13] 'd': X 1 1 1 1 0 1 0 HEX: 0x7a
//[14] 'E': X 1 1 0 1 1 0 1 HEX: 0x6d
//[15] 'F': X 0 1 0 1 1 0 1 HEX: 0x2d
//[16] 'G': X
//[17] 'h': X 0 1 1 1 1 0 0 HEX: 0x3c
//[18] 'o': X 1 1 1 1 0 0 0 HEX: 0x78
//[19] '-': X 0 0 0 1 0 0 0 HEX: 0x08
//[20] '_': X 1 0 0 0 0 0 0 HEX: 0x60
//[21] ' ': x 0 0 0 0 0 0 0 HEX: 0x00 //on display
//[22] 'a' X 1 1 1 1 0 1 1 HEX: 0x7b
//[23] 'C' X 0 0 1 1 1 0 1 HEX: 0x65
//[24] 'r' X 0 1 0 0 1 0 1 HEX: 0x25
//[25] 'V' x 1 1 1 0 1 1 0 HEX: 0x76
//[26] 'n' x 0 1 1 1 0 0 0 HEX: 0x28
//[27] ''
//[28] ''
//------------------------- ------------------ ----------------------------//
const unsigned char LcdNum[27]=
{
0x77,0x12,0x6b,0x5b,0x1e,0x5d,
0x7d,0x13,0x7f,0x5f,0x3f,0x7c,
0x68,0x7a,0x6d,0x2d,0x00,0x3c,
0x78,0x08,0x60,0x00,0x7b,0x65,
0x25,0x76,0x28
};
//Number type:('0'-'1'-'2'-'3'-'4'-'5'-'6'-'7'-'8'-'9'-'A'-'b'-'c'-'d'-'E'-'F'-'G'-'h'-'o'-'-'-'_'-' ')
const struct LcdNumArea
{
unsigned char LowAdr;
unsigned char HighAdr;
}NumNum[40] = { {0,1} ,{2,3} ,{4,5} ,{6,7} ,{8,9} ,{10,11},{12,13},{14,15},{16,17},{18,19},
{20,21},{22,23},{24,25},{26,27},{28,29},{30,31},{32,33},{34,35},{36,37},{38,39},
{40,41},{42,43},{44,45},{46,47},{48,49},{50,51},{52,53},{54,55},{56,57},{58,59},
{60,61},{62,63},{64,65},{66,67},{68,69},{70,71},{72,73},{74,75},{76,77},{78,79}
};
//This struck is statement the each Display-Number on LCD that what`s address at HT1623 Memory Map
//Use NumNum[?].HighAdr/NumNum[?].LowAdr
//********************************* Main ***********************************//
void main(void)
{
unsigned char tt;
InitializeSystem();
systemflag = 0x00; //systemflger reset
systemflag1 = 0x00; //-----------------
while(1)
{
//-------------------------------------main loop is closed value
OPEN = 0;
CLOSE = 0;
//-------------------------------------Reflash time and data
ReflashLcdTimeDpy();
//-------------------------------------recevice whole frame from RS485?
if(systemflag&0x80)//
{
// FM1702HARTPO;
Delay10KTCYx(5);
systemflag &= 0x7f;
Cmd_process();
Uart1senddata(RevBuffer[0]+1, RevBuffer);
// FM1702HARTPD;
}
// ReflashLcdTimeDpy();
//-------------------------------------Read card key on?
if(systemflag1&0x01)
{
// FM1702HARTPO; //FM1702 POWERON
InitialFM1702(0);
systemflag1 = systemflag1 & 0xfe; //clear flag
carderrorbyte = IsFindCard();
if(carderrorbyte == 0x01)
{
carderrorbyte = IsConflictOk();
if(carderrorbyte == 0x01)
{
carderrorbyte = IsSelectCradOk();
if(carderrorbyte == 0x01)
{
LEDCTRL = 0; //OPEN BACK LED LIGHT
DYP_CardOn_Flg(); //have card on
carderrorbyte = DownLoadm1CradKey(0x01,0x60);
if(carderrorbyte == 0x01)
{
carderrorbyte = ReadCardOneBank(4);
if(carderrorbyte==0x01)
{
systemflag1 &= 0xbf; //clear errorflag
switch(RevBuffer[2])
{
//-------------------------------------startup mater card
case 0x00:
//check system serial number
systemtemp = RevBuffer[3]+RevBuffer[4]+RevBuffer[5]-RevBuffer[14];
if(RevBuffer[6]!=systemtemp)
{
carderrorbyte = 0x07;
systemflag1|=0x40;
break;
}
//check card hart password checksum
systemtemp = 0;
for(systemtemp1 = 0;systemtemp1<6;systemtemp1++)
systemtemp += RevBuffer[systemtemp1+7];
systemtemp-=RevBuffer[14];
if(RevBuffer[13]!=systemtemp)
{
carderrorbyte = 0x0a;
systemflag1|=0x40;
break;
}
//bank4 datas move to befor RevBuffer{18}
for(systemtemp1=0;systemtemp1<18;systemtemp1++)
{
RevBuffer[systemtemp1+18]=RevBuffer[systemtemp1];
}
//Read bank 5
carderrorbyte = ReadCardOneBank(5);
if(carderrorbyte!=0x01)
{
systemflag1|=0x40;
break;
}
//card setting price
systemtemp = RevBuffer[6]+RevBuffer[7]+RevBuffer[8]-RevBuffer[32];
if(systemtemp!=RevBuffer[9])
{
carderrorbyte = 0x0b;
systemflag1|=0x40;
break;
}
//software card passwrod
systemtemp = RevBuffer[2]+RevBuffer[3]+RevBuffer[4]-RevBuffer[32];
if(systemtemp!=RevBuffer[5])
{
carderrorbyte = 0x08;
systemflag1|=0x40;
break;
}
//---------------------------------------------------------------
//StartUp Card Check is complete
WRITE_E2PROM(RevBuffer+21,SystemNumADD,3);
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SystemNumADD+systemtemp1,1);
if(systemtemp!=RevBuffer[21+systemtemp1])
goto writee2promerraddr;
}
systemtemp = 0xa5; //set StartUsingFlg
WRITE_E2PROM(&systemtemp,BeingUserFlagADD,1);
READ_E2PROM(&systemtemp,BeingUserFlagADD,1);
if(systemtemp!=0xa5)
{goto writee2promerraddr;}
WRITE_E2PROM(RevBuffer+25,HartCardLoadPWAdd,6);
for(systemtemp1=0;systemtemp1<6;systemtemp1++)
{
READ_E2PROM(&systemtemp,HartCardLoadPWAdd+systemtemp1,1);
if(systemtemp!=RevBuffer[25+systemtemp1])
goto writee2promerraddr;
}
WRITE_E2PROM(RevBuffer+2,SoftcardPWADD,3);
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SoftcardPWADD+systemtemp1,1);
if(systemtemp!=RevBuffer[2+systemtemp1])
goto writee2promerraddr;
}
WRITE_E2PROM(RevBuffer+32,AD_DE_NumAdd,1);
READ_E2PROM(&systemtemp,AD_DE_NumAdd,1);
if(systemtemp!=RevBuffer[32])
{goto writee2promerraddr;}
WRITE_E2PROM(RevBuffer+33,MaterWorkStateByteADD,1);
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp!=RevBuffer[33])
{goto writee2promerraddr;}
WRITE_E2PROM(RevBuffer+21,SystemNumADD,3);
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SystemNumADD+systemtemp1,1);
if(systemtemp!=RevBuffer[21+systemtemp1])
goto writee2promerraddr;
}
//
if(0)
{
writee2promerraddr:
carderrorbyte = 0x26;
systemflag1|=0x40;
break;
}
//将卡写成无效卡
RevBuffer[0]=0x09;
RevBuffer[1]=0x04;
RevBuffer[2]=0x04;
DsInt;
Cmd_process();
OpInt;
//display complete
break;
//-------------------------------------------User card
case 0x01:
//----------------------check system number
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SystemNumADD+systemtemp1,1);
if(systemtemp!=RevBuffer[systemtemp1+3])
{
carderrorbyte = 0x28;
goto erroraddr1;
}
}
//----------------------check card number
systemtemp = 0;
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
systemtemp+=RevBuffer[6+systemtemp1];
}
READ_E2PROM(&systemtemp1,AD_DE_NumAdd,1);
systemtemp -= systemtemp1;
if(systemtemp!=RevBuffer[9])
{
carderrorbyte = 0x29;
goto erroraddr1;
}
//----------------------check SoftCardPassWord
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SoftcardPWADD+systemtemp1,1);
if(systemtemp!=RevBuffer[systemtemp1+14])
{
carderrorbyte = 0x27;
goto erroraddr1;
}
}
//-----------------------take pirce
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp&0x01)
{ //if pirce from e2prom
READ_E2PROM(Settingprice,CurrentPriceADD,3);//load price from e2prom
}
else
{ //if priec from card
systemtemp = RevBuffer[10]+RevBuffer[11]+RevBuffer[12];
READ_E2PROM(&systemtemp1,AD_DE_NumAdd,1);
systemtemp -= systemtemp1;
if(RevBuffer[13]!=systemtemp)
{
carderrorbyte = 0x0b;
goto erroraddr1;
}
//load price to mcu ram
Settingprice[0]= RevBuffer[10];
Settingprice[1]= RevBuffer[11];
Settingprice[2]= RevBuffer[12];
}
for(systemtemp1=0;systemtemp1<18;systemtemp1++)//RevBuffer right move 18 bit
{
RevBuffer[systemtemp]=RevBuffer[systemtemp+18];
}
//Read Next Bank
carderrorbyte = ReadCardOneBank(5);
if(carderrorbyte!=0x01)
{
goto erroraddr1;
}
//check YuLiang checksum
systemtemp = RevBuffer[2]+RevBuffer[3]+RevBuffer[4]+RevBuffer[5];
READ_E2PROM(&systemtemp1,AD_DE_NumAdd,1);
systemtemp -= systemtemp1;
if(systemtemp!=RevBuffer[6])
{
carderrorbyte = 0x0c;
goto erroraddr1;
}
systemtemp = RevBuffer[7]+RevBuffer[8]+RevBuffer[9]+RevBuffer[10];
READ_E2PROM(&systemtemp1,AD_DE_NumAdd,1);
systemtemp -= systemtemp1;
if((RevBuffer[11] != systemtemp)||(systemtemp!=RevBuffer[6]))
{
carderrorbyte = 0x0d;
goto erroraddr1;
}
//YuLiang means what?
READ_E2PROM(&systemtemp,MaterWorkStateByteADD,1);
if(systemtemp&0x40)
{//YuLiang means Yuan
CardBalance[0]=RevBuffer[2];
CardBalance[1]=RevBuffer[3];
CardBalance[2]=RevBuffer[4];
CardBalance[3]=RevBuffer[5];
}
else
{
ShenYuShuiLiang[0]=RevBuffer[2];
ShenYuShuiLiang[1]=RevBuffer[3];
ShenYuShuiLiang[2]=RevBuffer[4];
ShenYuShuiLiang[3]=RevBuffer[5];
}
CardUsingTimes = RevBuffer[16];
CardUsingTimes +=1;
systemflag |= 0x08; //user card check is complete
//error addr
if(0)//error addr
{
erroraddr1:
systemflag1|=0x40;
}
break;
//-------------------------------------------Updata metar setting card
case 0x02:
READ_E2PROM(&systemtemp,BeingUserFlagADD,1);
if(systemtemp!=0xa5)
{
carderrorbyte = 0x09;
systemflag1|=0x40;
break;
}
//----------------------check system number
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SystemNumADD+systemtemp1,1);
if(systemtemp!=RevBuffer[systemtemp1+3])
{
carderrorbyte = 0x28;
systemflag1|=0x40;
break;
}
}
//-----------------------check softcardpassword
for(systemtemp1=0;systemtemp1<3;systemtemp1++)
{
READ_E2PROM(&systemtemp,SoftcardPWADD+systemtemp1,1);
if(systemtemp!=RevBuffer[systemtemp1+6])
{
carderrorbyte = 0x27;
systemflag1|=0x40;
break;
}
}
if(systemflag1&0x40)
{
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -