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

📄 main.c

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