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

📄 16f877_modbus.c

📁 ModBus通讯
💻 C
📖 第 1 页 / 共 5 页
字号:
         case 6:{
           switch(Menu){
             case 0:{
               XValue++;
               if(XValue==0x0c)XValue=0;
               return;
             }
             case 1:{
               XValue++;
               if(XValue==0x1b)XValue=0x0c;
               return;
             }
             default:return;
           }
         }
         case 3:{
           switch(Menu){
             case 0:{
               if(XValue==0)XValue=0x0c;
               XValue--;
               return;
             }
             case 1:{
               if(XValue==0x0c)XValue=0x1b;
               XValue--;
               return;
             }
             default:return;
           }
         }
         case 5:{
           if((XValue==0x0b)||(XValue==0x0c)){
             Tree=1;
             return;
           }
           Tree=3;
           return;
         }
         default:return;
       } 
     }
     case 3:{
       switch(MainSlave&0x01){
         case 0x00:{
           switch(State){
             case 0:{
               point=x_number;
               
               break;
             }
             case 1:{
               point=x_number1;
               break;
             }
             case 2:{
               point=x_number2;
               break;
             }
             case 3:{
               point=x_number3;
               break;
             }
             default:{
               State=0;
               point=x_number;
               Tree=2;
               return;
             }
           }
           break;
         }
         case 0x01:{
           point=x_number;
           break;
         }
         default:;
       }
       switch(KeyValue&0x07){
         case 6:{
           if(XValue==0x17){
             State++;
             if(State==0x04)State=0;
             if((MainSlave&0x01)==0x00){            
               return;
             }
             else{
               (*(point+XValue))++;
               if((*(point+XValue))>NumberH[XValue])(*(point+XValue))=NumberL[XValue];
               State=*(point+XValue);
               return;
             }
           }
           if(XValue==0x16){
             MainSlave++;
             point=x_number;
             if((MainSlave&0x01)==0){
               x_number[0x16]=0;
               SendFlag=0;
               Buffer0PointIn=Buffer0;
               Buffer0PointOut=Buffer0;
               return;
             }
             else{
               x_number[0x16]=1;
               rece_counter=0;
               BufferPointIn=Buffer;
               BufferPointOut=Buffer;
               return;
             }
           }  
           (*(point+XValue))++;
           if((*(point+XValue))>NumberH[XValue])(*(point+XValue))=NumberL[XValue];
           return;
         }
         case 3:{
           if(XValue==0x17){
             if(State==0)State=4;              
             State--;
             if((MainSlave&0x01)==0x00){            
               return;
             }
             else{
               if((*(point+XValue))==NumberL[XValue]){
                 (*(point+XValue))=NumberH[XValue];
                 State=*(point+XValue);
                 return;
               }
               (*(point+XValue))--;
               State=*(point+XValue);
               return;
             }
           }
           if(XValue==0x16){
             MainSlave--;
             point=x_number;
             if((MainSlave&0x01)==0){
               x_number[0x16]=0;
               SendFlag=0;
               Buffer0PointIn=Buffer0;
               Buffer0PointOut=Buffer0;
               return;
             }
             else{
               x_number[0x16]=1;
               rece_counter=0;
               BufferPointIn=Buffer;
               BufferPointOut=Buffer;
               return;
             }
           }
           if((*(point+XValue))==NumberL[XValue]){
             (*(point+XValue))=NumberH[XValue];
             return;
           }
           (*(point+XValue))--;
           return;
         }
         case 5:{
           Tree=2;
           if(XValue==0x1a){
             if((MainSlave&0x01)==0x00){
               if(State==0x00){
                 if(x_number[0x1a]==1){
                   x_number[0x1a]=0x00;
                   rom_toram(22);
                   ram_toee(22);
                   CLRWDT;
                   return;
                 }
               }
             }
             else{
               if(x_number[0x1a]==1){
                   x_number[0x1a]=0x00;
                   rom_toram(22);
                   ram_toee(22);
                   CLRWDT;
                   return;
               }
             }
           }
           if(XValue==0x16){
             writeee2b(x_number[0x16],0x16*2);
             CLRWDT;
             writeee2b(x_number[0x16],(0x16*2+52));   
             CLRWDT;
             writeee2b(x_number[0x16],(0x16*2+104));
             CLRWDT;
             return;
           }
           if(XValue==0x17){
             if((MainSlave&0x01)==0x01){
               writeee2b(x_number[0x17],0x17*2);
               CLRWDT;
               writeee2b(x_number[0x17],(0x17*2+52));   
               CLRWDT;
               writeee2b(x_number[0x17],(0x17*2+104));
               CLRWDT;
             }
             return;
           }
           if((MainSlave&0x01)==1){
             writeee2b(x_number[XValue],XValue*2);
             CLRWDT;
             writeee2b(x_number[XValue],(XValue*2+52));   
             CLRWDT;
             writeee2b(x_number[XValue],(XValue*2+104));
             CLRWDT;
             return;
           }
           if((MainSlave&0x01)==0){
             if(State==0){
               writeee2b(x_number[XValue],XValue*2);
               CLRWDT;
               writeee2b(x_number[XValue],(XValue*2+52));   
               CLRWDT;
               writeee2b(x_number[XValue],(XValue*2+104));
               CLRWDT;
               return;
             }  
           }
           SendFlag++;
           buffer.a=*(point+XValue);
           *Buffer0PointIn++=State;
           if(Buffer0PointIn==&Buffer0[159])Buffer0PointIn=Buffer0;
           if(Buffer0PointIn==Buffer0PointOut){
             Buffer0PointIn=Buffer0;
             Buffer0PointOut=Buffer0;
             SendFlag=0;
             return;
           }
           *Buffer0PointIn++=6;
           if(Buffer0PointIn==&Buffer0[159])Buffer0PointIn=Buffer0;
           if(Buffer0PointIn==Buffer0PointOut){
             Buffer0PointIn=Buffer0;
             Buffer0PointOut=Buffer0;
             SendFlag=0;
             return;
           }
           *Buffer0PointIn++=0;
           if(Buffer0PointIn==&Buffer0[159])Buffer0PointIn=Buffer0;
           if(Buffer0PointIn==Buffer0PointOut){
             Buffer0PointIn=Buffer0;
             Buffer0PointOut=Buffer0;
             SendFlag=0;
             return;
           }
           *Buffer0PointIn++=XValue;
           if(Buffer0PointIn==&Buffer0[159])Buffer0PointIn=Buffer0;
           if(Buffer0PointIn==Buffer0PointOut){
             Buffer0PointIn=Buffer0;
             Buffer0PointOut=Buffer0;
             SendFlag=0;
             return;
           }
           *Buffer0PointIn++=buffer.b[1];
           if(Buffer0PointIn==&Buffer0[159])Buffer0PointIn=Buffer0;
           if(Buffer0PointIn==Buffer0PointOut){
             Buffer0PointIn=Buffer0;
             Buffer0PointOut=Buffer0;
             SendFlag=0;
             return;
           }
           *Buffer0PointIn++=buffer.b[0];
           if(Buffer0PointIn==&Buffer0[159])Buffer0PointIn=Buffer0;
           if(Buffer0PointIn==Buffer0PointOut){
             Buffer0PointIn=Buffer0;
             Buffer0PointOut=Buffer0;
             SendFlag=0;
             return;
           }
           return;
         }
         default:return;
       }
     }
     default:asm("RESET");
  }
}
/*******************************************************************************
* Function Name  : LcdSelectBrush
* Description    : LcdSelectBrush
* Input          : 
* Output         : None
* Return         : None
*******************************************************************************/
void LcdSelectBrush(uchar line,uchar num)
{
    uchar i;
    WriteCommand(line);
    for(i=0;i<16;i++){
      WriteData(SelectTable[num][i]);
    }
}
/*******************************************************************************
* Function Name  : LcdUserBrush
* Description    : LcdUserBrush
* Input          : 
* Output         : None
* Return         : None
*******************************************************************************/
void LcdValueBrush(uchar line,uchar x)
{
    uchar i;
    WriteCommand(line);
    for(i=0;i<16;i++){
      WriteData(ValueTable[x][i]);
    }
}
/*******************************************************************************
* Function Name  : Init
* Description    : Init
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Init(void)
{
   Tree=0; 
   LcdFlag=1;
   MainSendNoack=0;
   point=x_number;
   x_number[0x1b]=0;
   x_number[0x1c]=0;
   x_number1[0x1b]=0;
   x_number1[0x1c]=0;
   x_number2[0x1b]=0;
   x_number2[0x1c]=0;
   x_number3[0x1b]=0;
   x_number3[0x1c]=0;
   x_number[0x1a]=0;
   BufferPointIn=Buffer;
   BufferPointOut=Buffer;
   Buffer0PointIn=Buffer0;
   Buffer0PointOut=Buffer0;
   TMR0ON=0;
   MainSlave=x_number[0x16];
   State=x_number[0x17];
}
/*******************************************************************************
* Function Name  : LcdBrush
* Description    : LcdBrush
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LcdBrush(void)
{ 
  uchar i;
  if(LcdErro==1){
    if(LcdFlag==0)return;
    LcdFlag=0;
    LcdScanTime++;
    if(LcdScanTime<100)return;
    LcdScanTime=0;
    LcdErro=0;
    return;
  }
  if(LcdFlag==0)return;
  LcdFlag=0;
  LcdScanTime++;
  if(LcdScanTime<100)return;
  LcdScanTime=0;
  switch(Tree){
    case 0:{
      LcdSelectBrush(line1,4);
      LcdSelectBrush(line2,5);
      LcdSelectBrush(line3,6);
      LcdSelectBrush(line4,7);
      return;
    }
    case 1:{
      LcdSelectBrush(line1,4);
      LcdSelectBrush(line2,8);
      LcdSelectBrush(line3,Menu);
      LcdSelectBrush(line4,10);
      return;
    }
    case 2:{
      LcdSelectBrush(line1,Menu);
      switch(MainSlave&0x01){
        case 0x01:{
           WriteCommand(0x81);
           WriteData(0xb4);
           WriteData(0xd3);
           break;
        }
        case 0x00:{
           switch(State){
             case 0:{
               WriteCommand(0x81);
               WriteData(0xd6);
               WriteData(0xf7);
               break;
             }
             case 1:{
               WriteCommand(0x81);
               WriteData(0xb4);
               WriteData(0xd3);
               WriteData(0xa2);
               WriteData(0xd9);
               break;
             }
             case 2:{
               WriteCommand(0x81);
               WriteData(0xb4);
               WriteData(0xd3);
               WriteData(0xa2);
               WriteData(0xda);
               break;
             }
             case 3:{
               WriteCommand(0x81);
               WriteData(0xb4);
               WriteData(0xd3);
               WriteData(0xa2);
               WriteData(0xdb);
               break;
             }
             default:{
               ;
             }
           }
           break;
        }
        default:{
          ;
        }
      }
      if(XValue==0x17){
        switch(MainSlave&0x01){
          case 0:{
            LcdValueBrush(line2,0x17);
          }
          break;
          case 1:{
            LcdSelectBrush(line2,21);
          }
          break;
          default:;
        }
      }
      else LcdValueBrush(line2,XValue);
      LcdSelectBrush(line3,9);
      WriteCommand(line3);
      if(XValue==0x17){
        for(i=0;i<8;i++){
          WriteData(0x20);
        }
        WriteData(0xa3);
        WriteData(State+0xb0);
        for(i=0;i<6;i++){
          WriteData(0x20);

⌨️ 快捷键说明

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