⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 430读写IIC总线以及中断控制程序
💻 C
📖 第 1 页 / 共 4 页
字号:
             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 + -