📄 main.c
字号:
P2IES&=~BIT2; // 电池低电中断上升沿触发
P2IE|=BIT2; //P2.2中断允许
diDianFlag=1;
}
if((P2IN&BIT2))
{
Delay(200);
if((P2IN&BIT2))
{
LCD[9]&=~0x04;
P2IES|=BIT2; // 电池低电中断下降沿触发
P2IE|=BIT2; //P2.2中断允许
diDianFlag=0;
}
}
P2IFG&=~BIT2;
}
}
//********************************************看门狗中断向量***************************************
#pragma vector=WDT_VECTOR
__interrupt void WDT_INT(void) //看门狗定时1秒中断用于时钟
{
clkSec++;
if((!(P2IN&BIT0))&&(!(P1IN&BIT7))&&(usercardFlag==1))
{
Delay(150);
if((!(P2IN&BIT0))&&(!(P1IN&BIT7)))
{
daoShuiFlag=1;
}
}
if((P2IN&BIT0)||(P1IN&BIT7))
{
Delay(150);
if((P2IN&BIT0)||(P1IN&BIT7))
{
daoShuiFlag=0;
}
}
if((diDianFlag==1)||(daoShuiFlag==1)||(chaiBiaoFlag==1)||(spareWater<=0))
{
if((closeFlag!=1)&&(setcarFlag==1))
{
CloseValve();
}
}
if((feilvcardFlag==0)&&(closeFlag!=1)&&(setcarFlag==1))
{
CloseValve();
}
if((spareWater>0)&&(usercardFlag==1)&&(openFlag!=1)&&(diDianFlag==0)&&(daoShuiFlag==0)&&(chaiBiaoFlag==0))
{
OpenValve();
}
if(clkSec>59)
{
LPM3_EXIT;
}
}
//**************************************Timer_A中断向量*******************************************
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void) //Timer_A定时器用于液晶显示
{
LPM3_EXIT;
timerFlag++;
if(cKeyFlag==0)
{
switch(timerFlag)
{
case 1:
{
ClearLCD();
SetLeft();
SetYuan();
SetNumber(moneyTemp,1); //插卡前剩余金额
moneyTemp=0;
} break;
case 3:
{
ClearLCD();
SetCunRu();
SetYuan();
SetNumber(cardMoney,2); //存入金额
cardMoney=0;
} break;
case 5:
{
ClearLCD();
SetLeft();
SetYuan();
SetNumber(money,2); //累积金额
} break;
case 7:
{
ClearLCD();
SetLeft();
SetM3();
SetNumber(spareWater,1); //累积水量
} break;
default: break;
}
if(timerFlag>7)
{
timerFlag=0;
CCTL0&=~CCIE;
ClearLCD();
}
}
else
{
switch(timerFlag)
{
case 1:
{
ClearLCD();
SetLeft();
SetYuan();
SetNumber(money,2); //累积余金额
} break;
case 3:
{
ClearLCD();
SetLeft();
SetYuan();
SetNumber(spareWater,1); //累积水量
} break;
case 5:
{
ClearLCD();
SetM3();
SetLeiJi();
SetNumber(leiJi,1); //水表累积用水量用于水表寿命的参数
} break;
default: break;
}
if(timerFlag>5)
{
timerFlag=0;
CCTL0&=~CCIE;
cKeyFlag=0;
ClearLCD();
}
}
}
//********************************************************************************************************
void SetCard(void)
{
uchar setcarFlagsec[1];
setcarFlagsec[0]=1;
setcarFlag=1;
feilvcardFlag=0;
ISendStr(0X40,setcarFlagsec,1);
leiJi=0;
monthWater=0;
spareWater=0;
cardMoney=0;
moneyTemp=0;
money=0;
feilv=0;
feilv1=0;
feilv2=0;
planWater=0;
Di();
if((closeFlag!=1)&&(setcarFlag==1))
{
CloseValve();
}
}
//********************************************************************************************************
void ChangeCard(void)
{
uchar changeFlag=5;
uchar *change;
uchar flashSec[3];
uchar changeSec[3];
uchar changeWater[6];
ulongint changeWaterBuf;
ulongint flashTemp;
uint monthTemp,monthWaterBuf;
change=&changeFlag;
changeWaterBuf = spareWater;
monthWaterBuf=monthWater;
if(icPassWordFlag==1) //逻辑加密卡密码
{
IRcvStr(0X48,icPassWord,3);
}
DataRead(MainMemRead,0x59,1,change);
switch(changeFlag)
{
case 0x00: //把表中的水量换出
{
DataRead(MainMemRead,0x59,1,change);
if((!(P1IN&BIT2))&&(changeFlag==0))
{
SecVerify(icPassWord[0],icPassWord[1],icPassWord[2]);
DataWrite(MainMemUpdate,0x53,(changeWaterBuf>>24)&0xff); //剩余水量
DataWrite(MainMemUpdate,0x54,(changeWaterBuf>>16)&0xff);
DataWrite(MainMemUpdate,0x55,(changeWaterBuf>>8)&0xff);
DataWrite(MainMemUpdate,0x56,changeWaterBuf&0xff);
DataWrite(MainMemUpdate,0x57,(monthWaterBuf>>8)&0xff); //当月水量
DataWrite(MainMemUpdate,0x58,monthWaterBuf&0xff);
DataWrite(MainMemUpdate,0x59,0x01);
IRcvStr(0X45,flashSec,3);
SecVerify(icPassWord[0],icPassWord[1],icPassWord[2]);
DataWrite(MainMemUpdate,0x50,flashSec[0]); //用户密码
DataWrite(MainMemUpdate,0x51,flashSec[1]);
DataWrite(MainMemUpdate,0x52,flashSec[2]);
setcarFlag=0;
usercardFlag=0;
feilvcardFlag=0;
chaiBiaoFlag=0;
icPassWordFlag=0;
icPassWord[0]=0xff;icPassWord[1]=0xff;icPassWord[2]=0xff; //恢复IC卡初始密码
ClanEprom(); //清铁电
feilv=0;
feilv1=0;
feilv2=0;
leiJi=0;
moneyTemp=0;
cardMoney=0;
Di();
SetLeft();
SetNumber(money,2);
SetYuan();
Delay(120000);
ClearLCD();
monthWater=0;
spareWater=0;
}
}break;
case 0x01: //把换表卡中的水量存入表中
{
IRcvStr(0X45,flashSec,3);
DataRead(MainMemRead,0x50,3,changeSec);
if(CompArray(changeSec,flashSec,3))
{
DataRead(MainMemRead,0x53,6,changeWater);
flashTemp = changeWater[0];
flashTemp = (flashTemp<<8) + changeWater[1]; //水量余额
flashTemp = (flashTemp<<8) + changeWater[2];
flashTemp = (flashTemp<<8) + changeWater[3];
monthTemp=changeWater[4]; //月用水量
monthTemp=(monthTemp<<8)+changeWater[5];
if(!(P1IN&BIT2))
{
SecVerify(icPassWord[0],icPassWord[1],icPassWord[2]); //核对密码
DataWrite(MainMemUpdate,0x50,0xff);
DataWrite(MainMemUpdate,0x51,0xff);
DataWrite(MainMemUpdate,0x52,0xff);
DataWrite(MainMemUpdate,0x53,0xff);
DataWrite(MainMemUpdate,0x54,0xff);
DataWrite(MainMemUpdate,0x55,0xff);
DataWrite(MainMemUpdate,0x56,0xff);
DataWrite(MainMemUpdate,0x57,0xff);
SecVerify(icPassWord[0],icPassWord[1],icPassWord[2]);
DataWrite(MainMemUpdate,0x58,0xff);
DataWrite(MainMemUpdate,0x59,0x00);
moneyTemp=money;
cardMoney=flashTemp;
money = money + flashTemp;
monthWater=monthWater+monthTemp;
flashTemp=money;
changeWater[3]=flashTemp&0xFF;
changeWater[2]=(flashTemp>>8)&0xFF; //剩余金额写入EEPROM中
changeWater[1]=(flashTemp>>16)&0xFF;
changeWater[0]=(flashTemp>>24)&0xFF;
ISendStr(0X10,changeWater,4);
monthTemp=monthWater; //计划水量写入EEPROM中
changeWater[1]=monthTemp&0xFF;
changeWater[0]=(monthTemp>>8)&0xFF;
ISendStr(0X14,changeWater,2);
Di();
ClearLCD();
CCTL0=CCIE;
}
}
else
{
ClearLCD();
Di();
SetCardWrong();
LCD[0]=0X6c; //4非此表的换表卡
Delay(5000);
Di();
Delay(50000);
ClearLCD();
}
}break;
default: break;
}
}
//*********************************************************************************************************
void UserCard(void)
{
uchar userSec[3]={0,0,0}; //卡中读出的用户密码
uchar waterbuf[4]={0,0,0,0}; //卡中读出的水量值
uchar flashSec[3]={0,0,0}; //flash中读出的用户密码
uint waterBuf=0;
uchar temp3[2]={0,0};
uchar userFlagSec[1]={0};
uint cardLcd=0;
ulongint temp1=0;
uint temp2=0;
moneyTemp=0;
if(icPassWordFlag==1) //逻辑加密卡密码
{
IRcvStr(0X48,icPassWord,3);
}
switch(usercardFlag)
{
case 0x01:
{
DataRead(MainMemRead,0x09,3,userSec);
IRcvStr(0x45,flashSec,3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -