?? main.c
字號:
if(CompArray(userSec,flashSec,3))
{
if(!(P1IN&BIT2))
{
DataRead(MainMemRead,0x40,4,waterbuf);
cardLcd = waterbuf[0];
cardLcd = (cardLcd<<8) + waterbuf[1];
waterBuf = waterbuf[2];
waterBuf = (waterBuf<<8) + waterbuf[3];
SecVerify(icPassWord[0],icPassWord[1],icPassWord[2]);
DataWrite(MainMemUpdate,0x40,0);
DataWrite(MainMemUpdate,0x41,0);
moneyTemp=money;
planWater=waterBuf;
cardMoney=cardLcd;
money=cardLcd+money;
cardLcd=0;
temp1=money;
waterbuf[3]=temp1&0xFF;
waterbuf[2]=(temp1>>8)&0xFF; //剩余金額寫入EEPROM中
waterbuf[1]=(temp1>>16)&0xFF;
waterbuf[0]=(temp1>>24)&0xFF;
ISendStr(0X10,waterbuf,4);
temp2=planWater; //計劃水量寫入EEPROM中
waterbuf[1]=temp2&0xFF;
waterbuf[0]=(temp2>>8)&0xFF;
ISendStr(0X1a,waterbuf,2);
Di();
ClearLCD();
CCTL0=CCIE;
}
}
else
{
ClearLCD();
SetCardWrong();
LCD[0]=0Xf4; //3密碼不一致非此表的用戶卡
Di();
Delay(5000);
Di();
Delay(50000);
ClearLCD();
}
} break;
case 0x00:
{
if(!(P1IN&BIT2))
{
DataRead(MainMemRead,0x09,3,userSec);
ISendStr(0X45,userSec,3);
DataRead(MainMemRead,0x40,4,waterbuf);
cardLcd = waterbuf[0];
cardLcd = (cardLcd<<8) + waterbuf[1];
temp3[0]= waterbuf[0];temp3[1]=waterbuf[1];
ISendStr(0X12,temp3,2);
waterBuf = waterbuf[2];
waterBuf = (waterBuf<<8) + waterbuf[3];
temp3[0]= waterbuf[2];temp3[1]=waterbuf[3];
ISendStr(0X1a,temp3,2);
userFlagSec[0]=1;
ISendStr(0X41,userFlagSec,1);
SecVerify(icPassWord[0],icPassWord[1],icPassWord[2]);
DataWrite(MainMemUpdate,0x40,0);
DataWrite(MainMemUpdate,0x41,0);
moneyTemp=0;
planWater=waterBuf;
cardMoney=cardLcd;
money=cardLcd;
cardLcd=0;
Di();
ClearLCD();
CCTL0=CCIE;
usercardFlag = 1;
Clk_set_Y_M_D ( 2005,1, 1 );
Clk_set_H_M_S ( 0, 0, 0);
IE1 |= WDTIE; // Enable WDT interrupt
}
} break;
default: break;
}
}
//*********************************************************************************************************
void FeilvCard(void)
{
uchar feilvsec[6]={0,0,0,0,0,0};
uchar feilvFlagsec[1]={0};
DataRead(MainMemRead,0x20,6,feilvsec); //費率卡信息
ISendStr(0X20,feilvsec,6);
feilv=feilvsec[0]*256+feilvsec[1];
feilv1=feilvsec[2]*256+feilvsec[3];
feilv2=feilvsec[4]*256+feilvsec[5];
feilvFlagsec[0]=1;
ISendStr(0X42,feilvFlagsec,1);
feilvcardFlag=1;
Di();
ClearLCD();
SetNumber(feilv,2);
SetYuan(); //顯示費率單位 分
Delay(120000);
ClearLCD();
SetNumber(feilv1,2);
SetYuan();
Delay(120000);
ClearLCD();
SetNumber(feilv2,2);
SetYuan();
Delay(120000);
ClearLCD();
}
//********************************************************************************************************
void Delay(unsigned long i) //延時子程序
{
for(;i>0;i--);
}
//********************************************************************************************************
void CloseValve(void) //關閥子程序
{
if(!(P1IN&BIT3)) //關閥不到位
{
P6DIR|=0Xd0;
P6OUT|=BIT6;
P6OUT&=~BIT7;
Delay(6000);
P6OUT|=BIT4;
}
}
//*******************************************************************************************************
void OpenValve(void) //開閥子程序
{
if(!(P1IN&BIT4)) //開閥不到位
{
P6DIR|=0Xd0;
P6OUT&=~BIT6;
P6OUT|=BIT7;
Delay(6000);
P6OUT|=BIT4;
}
}
//********************************************************************************************************
static BOOL ClkUpdateTime(void) //時分秒
{
BOOL newday;
uint nianTemp=0;
uchar timeTEMP[4];
newday = FALSE; // Assume that we haven't completed one whole day yet
if (clkSec >= 60)
{ // See if we have completed one minute yet
clkSec = 0; // Yes, clear seconds
if (clkMin >= 59)
{ // See if we have completed one hour yet
clkMin = 0; // Yes, clear minutes
if (clkHr >= 23)
{ // See if we have completed one day yet
clkHr = 0; // Yes, clear hours ...
newday = TRUE; // change flag to indicate we have a new day
}
else
{
clkHr++; // No, increment hours
}
}
else
{
clkMin++; // No, increment minutes
nianTemp=clkYear;
timeTEMP[1]=nianTemp&0XFF; //每1分鐘給鐵電中寫一次數據
timeTEMP[0]=(nianTemp>>8)&0XFF;
timeTEMP[2]=clkMonth;
timeTEMP[3]=clkDay;
ISendStr(0X30,timeTEMP,4);
timeTEMP[0]=clkHr;
timeTEMP[1]=clkMin;
timeTEMP[2]=0;
ISendStr(0X34,timeTEMP,3);
}
}
return (newday);
}
//*********************************************************************************************************
static void ClkUpdateDate(void) //年月日
{
BOOL newmonth;
newmonth = FALSE;
if (clkDay >= clkMonthTbl[clkMonth]) // Last day of the month?
{
if (clkMonth == 2) // Is this February?
{
if (ClkIsLeapYear(clkYear) == TRUE) // Yes, Is this a leap year?
{
if (clkDay >= 29) // Yes, Last day in february?
{
clkDay = 1; // Yes, Set to 1st day in March
newmonth = TRUE;
}
else
{
clkDay++;
newmonth = FALSE;
}
}
else
{
clkDay = 1;
newmonth = TRUE;
}
}
else
{
clkDay = 1;
newmonth = TRUE;
}
}
else
{
clkDay++;
newmonth = FALSE;
}
if (newmonth == TRUE) //See if we have completed a month
{
if (clkMonth >= 12) // Yes, Is this december ?
{
clkMonth = 1; // Yes, set month to january..
monthWater=0;
clkYear++; // we have a new year!
}
else // No, increment the month
{
clkMonth++;
monthWater=0;
}
}
}
//*********************************************************************************************************
static BOOL ClkIsLeapYear(uint year) //是否閏年?
{
if (!(year % 4) && (year % 100) || !(year % 400))
{
return TRUE;
}
else
{
return FALSE;
}
}
//***********************************************************************************************************
void Clk_set_H_M_S ( uchar hr, uchar min, uchar sec) //設置時分秒
{
clkHr = hr;
clkMin = min;
clkSec = sec;
}
//**************************************************************************************************************
void Clk_set_Y_M_D ( uint year,uchar month, uchar day ) //設置年月日
{
clkYear = year;
clkMonth = month;
clkDay = day;
}
//***************************************************************************************************************
void LiuLiang(void)
{
ulongint flashTemp1=0;
uint planWaterTemp=0;
uint flashTemp2=0;
uchar changeWater[4]={0,0,0,0};
planWaterTemp=planWater*0.1;
if((!(P2IN&BIT0))&&(usercardFlag==1))
{
monthWater++;
leiJi++;
if(monthWater<=planWater)
{
money=money-(feilv/10);
}
if((monthWater>planWater)&&(monthWater<(planWater+planWaterTemp)))
{
money=money-(feilv1/10);
SetCJH();
Di();
Delay(60000);
LCD[8]&=~0x02;
}
if(monthWater>(planWater+planWaterTemp))
{
money=money-(feilv2/10);
SetCJH();
Di();
Delay(60000);
LCD[8]&=~0x02;
}
flashTemp1=money;
changeWater[3]=flashTemp1&0xFF;
changeWater[2]=(flashTemp1>>8)&0xFF; //剩余金額寫入EEPROM中
changeWater[1]=(flashTemp1>>16)&0xFF;
changeWater[0]=(flashTemp1>>24)&0xFF;
ISendStr(0X10,changeWater,4);
flashTemp1=leiJi;
changeWater[3]=flashTemp1&0xFF;
changeWater[2]=(flashTemp1>>8)&0xFF; //累積水量寫入EEPROM中
changeWater[1]=(flashTemp1>>16)&0xFF;
changeWater[0]=(flashTemp1>>24)&0xFF;
ISendStr(0X16,changeWater,4);
flashTemp2=monthWater;
changeWater[1]=flashTemp2&0xFF;
changeWater[0]=(flashTemp2>>8)&0xFF; //當月水量寫入EEPROM中
ISendStr(0X14,changeWater,2);
}
}
//***************************************************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -