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

📄 main.c

📁 430读写IIC总线以及中断控制程序
💻 C
📖 第 1 页 / 共 4 页
字号:
        { 
          if((setcarFlag==1)&&(P2IN&BIT1))
             { 
               Delay(600);
               if((setcarFlag==1)&&(P2IN&BIT1))
                 {
                   ClearLCD();
                   LCD[8]|=0X01;
                   LCD[0]|=0XFA;         //0拆表破坏
                   chaiBiaoFlag=1;
                   eepsecW[0]=1; 
                   ISendStr(0X44,eepsecW,1);  
                   Delay(500);
                   Di();
                   Delay(4000);
                   Di(); 
                 }                   
             }
        }
      if(!(P2IN&BIT2))
        {
          Delay(800);
          if(!(P2IN&BIT2))
            {
              SetBattery();
              Di();
              Delay(4000);
              Di();
              P2IES&=~BIT2;           // 电池低电中断上升沿触发 
              P2IE|=BIT2;             //P2.2中断允许
              diDianFlag=1;
              P2IFG&=~BIT2;
            }
        }
      if((P2IN&BIT2))
        { 
          Delay(800);
          if((P2IN&BIT2))
            {
              LCD[9]&=~0x04;
              P2IES|=BIT2;            // 电池高电中断下降沿触发 
              P2IE|=BIT2;             //P2.2中断允许
              diDianFlag=0;
              P2IFG&=~BIT2;
            }
        }
      if((spareWater>0)&&(spareWater<3)&&(usercardFlag==1))
        {
          SetPleaseBuy();
          Di();
          Delay(60000);
          LCD[8]&=~0x10;    
        }     
 
     
      LPM3;                                     //进入休眠LPM3状态 
                                 
  
      if(interruptFlag==1)
         {
           ClearLCD();
           sec = &cardID;
           PowerOn();                           //ic卡上电
           Delay(300);
           Reset();                             //ic卡复位
           Delay(300);
           DataRead(MainMemRead,0x08,1,sec);    //读卡型标识存储区
           switch(cardID)
               {
                  case 0x01:
                           {
                              if(setcarFlag==1)
                                 {
                                    if(chaiBiaoFlag==0)
                                          {
                                            ClearLCD();
                                            SetCardWrong();
                                            LCD[0]=0xd6;        //显示错误2 插卡错误设置卡
                                            Di();
                                            Delay(5000);
                                            Di();
                                            Delay(50000);
                                            ClearLCD();
                                          }
                                    else
                                          {
                                             if(!(P2IN&BIT1))
                                                { 
                                                   chaiBiaoFlag=0;
                                                   eepsecW[0]=0; 
                                                   ISendStr(0X30,eepsecW,1);
                                                   Di();
                                                   ClearLCD();
                                                 }
                                              else
                                                 {
                                                   ClearLCD();
                                                   LCD[8]|=0X01;
                                                   LCD[0]|=0XFA;             //0拆表破坏
                                                   chaiBiaoFlag=1;
                                                   eepsecW[0]=1; 
                                                   ISendStr(0X30,eepsecW,1);  
                                                   Delay(500);
                                                   Di();
                                                   Delay(4000);
                                                   Di();
                                                 }
                                           }
                                 }
                              if(setcarFlag==0)
                                 {
                                    if(setcarFlag==0)
                                    {
                                      SetCard();
                                    }
                                 }
                           } break;
                  case 0x11:
                           {
                              if(feilvcardFlag==0)
                                 {
                                    ClearLCD();
                                    SetCardWrong();
                                    LCD[0]=0xd6;        //显示错误2 插卡错误设置卡
                                    Di();
                                    Delay(5000);
                                    Di();
                                    Delay(50000);
                                    ClearLCD();
                                 }
                              else 
                                 {
                                    UserCard();
                                 }
                           } break; 
                  case 0x20:
                           {
                              if(setcarFlag==0)
                                 {
                                    ClearLCD();
                                    SetCardWrong();
                                    LCD[0]=0xd6;        //显示错误2 插卡错误设置卡
                                    Di();
                                    Delay(5000);
                                    Di();
                                    Delay(50000);
                                    ClearLCD();
                                 }
                              if(setcarFlag==1)
                                 {
                                    FeilvCard();
                                 }
                           } break; 
                  case 0x06:
                           {               
                              if(usercardFlag==0)
                                 {
                                    ClearLCD();
                                    SetCardWrong();
                                    LCD[0]=0xd6;        //显示错误2 插卡错误设置卡
                                    Di();
                                    Delay(5000);
                                    Di();
                                    Delay(50000);
                                    ClearLCD();
                                 }
                              else if(usercardFlag==1)
                                 {
                                    ChangeCard();
                                 } 
                           } break;
                  case 0x08:
                           {  
                              DataRead(MainMemRead,0x08,1,sec);    //读卡型标识存储区             
                              if(cardID==8)
                                 {
                                    DataRead(MainMemRead,0x09,1,icPassWord);
                                    icPassWordFlag=1;
                                    ISendStr(0X48,icPassWord,3);
                                    icFlag[0]=1;
                                    ISendStr(0X43,icFlag,1);        
                                 }
                             
                           } break;
                  default:
                           {
                              ClearLCD();
                              SetCardWrong();
                              LCD[0]=0x60;    //显示错误1插卡错误未知卡型
                              Di();
                              Delay(5000);
                              Di();
                              Delay(50000);
                              ClearLCD();
                              if(usercardFlag==1)
                                 {
                                    cKeyFlag=1;     //相当于按键功能  
                                    CCTL0 = CCIE;
                                  }
                           } break;
               }
           cardID=0;
           sec[0]=0;
           P6OUT&=~0X0F;                //口子置低实现低功耗
           interruptFlag=0;         
         }
    } 
}
//*****************************************端口P1中断向量**************************************************
#pragma vector=PORT1_VECTOR
__interrupt void PORT1 (void)

 {
    LPM3_EXIT;                                   //退出休眠LMP3状态 
    if(P1IFG&BIT2)                               //插卡中断
         {
          Delay(50); 
          if(!(P1IN&BIT2))
            { 
              if(diDianFlag==0)
                {                          
                 interruptFlag=1;
                }
            }
          P1IFG&=~BIT2;
         }
         
    if(P1IFG&BIT3)                              //关阀到位中断       
       { 
         Delay(60);
         if(P1IN&BIT3)
         {
         closeFlag=1;        
         P6OUT&=~0Xf0;                            //口子置低实现低功耗
         openFlag=0;
         SetFaGuan();
         Delay(80000);
         LCD[8]&=~0X08;
         
         }
         P1IFG&=~BIT3; 
       }
       
   if(P1IFG&BIT4)                              //开阀到位中断
       {
        Delay(60);
        if(P1IN&BIT4)
        {
        openFlag=1;
        P6OUT&=~0Xf0;                           //口子置低实现低功耗
        closeFlag=0;
        SetFaKai();
        Delay(80000);
        LCD[8]&=~0X04;
        }
        P1IFG&=~BIT4;
       }
         
  }
//*****************************************端口P2中断向量*******************************************
#pragma vector=PORT2_VECTOR
__interrupt void PORT2 (void)

  {
    LPM3_EXIT;
    if(P2IFG&BIT0)            //流量中断
       {
         if((!(P2IN&BIT0))&&(P1IN&BIT7)&&(usercardFlag==1))
           { 
             Delay(100);
             if((!(P2IN&BIT0))&&(P1IN&BIT7))
                {
                  if((spareWater>=1)&&(feilv>5))
                    {
                      LiuLiang();
                    }
                } 
             if((spareWater>0)&&(spareWater<3)&&(usercardFlag==1))
                 {
                    SetPleaseBuy();
                    Di();
                    Delay(80000);
                    LCD[8]&=~0x10;    
                 }         
           }
         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;
               }
           }
          
         P2IFG &= ~BIT0 ;
       }
    if(P2IFG&BIT1)                   //拆表中断
       {
         Delay(500);
         if(P2IN&BIT1)
           {
             Delay(500);
             if((setcarFlag==1)&&(P2IN&BIT1))
               {
                 ClearLCD();
                 LCD[8]|=0X01;
                 LCD[0]|=0XFA;     //0拆表破坏
                 Di();
                 chaiBiaoFlag=1;
                 eepsecW[0]=1; 
                 ISendStr(0X44,eepsecW,1);                     
               }        
           }
         P2IFG&=~BIT1;
       }
     if(P2IFG&BIT2)                    //低电中断
       {
         Delay(200);
         if(!(P2IN&BIT2))
           {
             SetBattery();
             Di();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -