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

📄 新建_文本文档_(2).txt

📁 24c64 for avr c source code, you can change it for other 24xx other document is for 率值配料下位机程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                SendBuff[4]=RecvBuff[1];//序号
                SendBuff[5]=00;
                SendBuff[6]=00;//上限
                SendBuff[7]=00;
                SendBuff[8]=00;//下限
                
                CRC_Assign(&SendBuff[2],7,&SendBuff[9],&SendBuff[10]);//CRC校验
                sendComm();
            }
            break;
            //-----------------------------------------------------------------------------
            //功  能:设置转换比例
            //上位机:AA 0F 组号  XX XX   XX XX   CRC1 CRC2
            //                   |整数| . |小数|  
            //下位机: 5个字节
            //      正确:BB 0F 00        00 00
            //   CRC错误: BB 0F FF        00 00  
            //-----------------------------------------------------------------------------
            case 0x0F:
            for(i=0;i<7;i++)
            {
                Temp=getuchar();
                RecvBuff[i+1]=Temp;//数据
            }
            if (CRC_Check(&RecvBuff[0],6,RecvBuff[6],RecvBuff[7]))//CRC校验
            {
                
                
                //BytesToFloat44
                //设置电流数据的参照值比例        ADValue[]
                ADValue[RecvBuff[1]-1]=BytesToFloat44(RecvBuff[2],RecvBuff[3],RecvBuff[4],RecvBuff[5]);
                
                SendBuff[0]=0x05;//发送长度
                SendBuff[1]=0xBB;
                SendBuff[2]=0x0F;
                SendBuff[3]=0x00;
                SendBuff[4]=0x00;
                SendBuff[5]=0x00;
                sendComm();
                NeedSaveFlag=0x0F;
            }
            else
            {
                SendBuff[0]=0x05;//发送长度
                SendBuff[1]=0xBB;
                SendBuff[2]=0x0F;
                SendBuff[3]=0xFF;
                SendBuff[4]=0x00;
                SendBuff[5]=0x00;
                sendComm();
            }
            break;
            
            //-----------------------------------------------------------------------------
            //功  能:读取转换比例
            //上位机:AA 10  XX  CRC1 CRC2
            //              |组|    
            //下位机: 10个字节
            //      正确:BB 10 00 XX        XX XX   XX XX CRC1 CRC2
            //                    |组| |整数|. |小数|  
            //   CRC错误: BB 10 FF 00  00 00   00 00 CRC1 CRC2
            //-----------------------------------------------------------------------------
            case 0x10:   
            for(i=0;i<3;i++)
            {
                Temp=getuchar();
                RecvBuff[i+1]=Temp;//数据
            }
            if (CRC_Check(&RecvBuff[0],2,RecvBuff[2],RecvBuff[3]))//CRC校验
            {
                SendBuff[0]=0x10;//发送长度
                SendBuff[1]=0xBB;
                
                
                SendBuff[2]=0x10;
                SendBuff[3]=0x00;
                
                //FloatToBytes44_Assign
                SendBuff[4]=RecvBuff[1];//序号
                FloatToBytes44_Assign(&ADValue[RecvBuff[1]-1],&SendBuff[5],&SendBuff[6],&SendBuff[7],&SendBuff[8]);
                
                CRC_Assign(&SendBuff[2],7,&SendBuff[9],&SendBuff[10]);//CRC校验
                sendComm();
                
            }
            else
            {
                SendBuff[0]=0x10;//发送长度
                SendBuff[1]=0xBB;
                
                SendBuff[2]=0x10;
                SendBuff[3]=0xFF;
                SendBuff[3]=0x00;//序号
                SendBuff[4]=0x00;
                SendBuff[5]=0x00;
                SendBuff[6]=0x00;
                SendBuff[7]=0x00;
                
                CRC_Assign(&SendBuff[2],7,&SendBuff[9],&SendBuff[10]);//CRC校验
                sendComm();
            }
            break;
            //-----------------------------------------------------------------------------
            //功  能:发送一个不定长度的操作序列
            //描  述: 调试使用,所以没有进行CRC校验!!!!
            //上位机:DD ............. FE
            //        开始             结束     
            //下位机: 5个字节
            //      正确:BB DD 00 00 00
            //-----------------------------------------------------------------------------
            case 0xDD:
            for(;;)
            {
                
                i=getuchar();
                if (i==0xFE) 
                break;
                else 
                sendkey(i,0);
            }
            SendBuff[0]=0x05;//发送长度05 DD 01 00 00
            SendBuff[1]=0xBB;
            SendBuff[2]=0xDD;
            SendBuff[3]=0x00;
            SendBuff[4]=0x00;
            SendBuff[5]=0x00;
            sendComm();
            break;
            
            //-----------------------------------------------------------------------------
            //功  能:设置发送模式 
            //上位机:AA B1 XX 00 00 
            //下位机: 5个字节
            //      正确:BB B1 00 00 00
            //   CRC错误:BB B1 FF 00 00 
            //-----------------------------------------------------------------------------
            case 0xB1:                        
            for(i=0;i<3;i++)
            {
                Temp=getuchar();
                RecvBuff[i+1]=Temp;//数据
            }
            //处理命令
            if (RecvBuff[0]==0xB1&&RecvBuff[2]==0x00&&RecvBuff[3]==0x00)//校验
            {
                
                SendBuff[0]=0x06;//发送长度
                SendBuff[1]=0xBB;
                SendBuff[2]=0xB1;
                SendBuff[3]=0x00;
                
                F_SendMode=RecvBuff[1];
                
                CRC_Assign(&SendBuff[2],3,&SendBuff[5],&SendBuff[6]);//CRC校验
                
                sendComm();
                NeedSaveFlag=0xB1;
            }
            else
            {
                SendBuff[0]=0x06;//发送长度
                SendBuff[1]=0xBB;
                SendBuff[2]=0xB1;
                SendBuff[3]=0xFF;
                SendBuff[4]=0x00;
                SendBuff[5]=0x00;
                SendBuff[6]=0x00;
                sendComm();
            }        
            break;
            //-----------------------------------------------------------------------------
            //功  能:设置扫描码延时
            //上位机:AA B2 XX 00 00 
            //下位机: 5个字节
            //      正确:BB B2 00 00 00
            //   CRC错误:BB B2 FF 00 00 
            //-----------------------------------------------------------------------------
            case 0xB2:                        
            for(i=0;i<3;i++)
            {
                Temp=getuchar();
                RecvBuff[i+1]=Temp;//数据
            }
            //处理命令
            if (RecvBuff[0]==0xB2&&RecvBuff[2]==0x00&&RecvBuff[3]==0x00)//校验
            {
                
                SendBuff[0]=0x06;//发送长度
                SendBuff[1]=0xBB;
                SendBuff[2]=0xB2;
                SendBuff[3]=0x00;
                
                key_Delay=RecvBuff[1];
                
                CRC_Assign(&SendBuff[2],3,&SendBuff[5],&SendBuff[6]);//CRC校验
                
                sendComm();
                NeedSaveFlag=0xB2;
            }
            else
            {
                SendBuff[0]=0x06;//发送长度
                SendBuff[1]=0xBB;
                SendBuff[2]=0xB2;
                SendBuff[3]=0xFF;
                SendBuff[4]=0x00;
                SendBuff[5]=0x00;
                SendBuff[6]=0x00;
                sendComm();
            }        
            break;
        }
    }
    SEI();
    
}



//串口数据发送中断服务程序
#pragma interrupt_handler uart0_tx_isr:14
void uart0_tx_isr(void)
{
    //character has been transmitted
}

//串口空闲中断服务程序
#pragma interrupt_handler uart0_udre_isr:13
void uart0_udre_isr(void)
{
    //character transferred to shift register so UDR is now empty
}
//******************************************************************************
//子函数
//******************************************************************************

void display_Dat(uchar Index,float Dat)
{
    float DisplayDat;
    uchar BitDat;
    
    //先换算成实际数据 
    DisplayDat=Dat;
    
    if(DisplayDat>9999.99)
    DisplayDat=9999.99;
    
    //组
    putled(1,0,Index);//显示0
    putled(2,0,0x12);//0x12
    //数据
    BitDat=(int)(DisplayDat/1000);
    putled(3,0,BitDat);
    DisplayDat=DisplayDat-BitDat*1000;
    
    BitDat=(int)(DisplayDat/100);
    putled(4,0,BitDat);
    DisplayDat=DisplayDat-BitDat*100;
    
    BitDat=(int)(DisplayDat/10);
    putled(5,0,BitDat);
    DisplayDat=DisplayDat-BitDat*10;
    
    BitDat=(int)(DisplayDat);
    putled(6,1,BitDat);
    DisplayDat=DisplayDat-BitDat;
    
    BitDat=(int)(DisplayDat*10);
    putled(7,0,BitDat);
    DisplayDat=DisplayDat-BitDat*0.1;
    
    BitDat=(int)(DisplayDat*100);
    putled(8,0,BitDat);
    DisplayDat=DisplayDat-BitDat*0.01;
}
// 显示电流数据 
void display_electricity()
{
    
    float DisplayDat;
    uchar BitDat;
    
    //先换算成实际数据 
    DisplayDat=AD[E_Index]*ADValue[E_Index]/0x3FF;
    
    if(DisplayDat>9999.99)
    DisplayDat=9999.99;
    
    //组
    putled(1,0,0);//显示0
    putled(2,0,E_Index+1);//0x12
    //数据
    BitDat=(int)(DisplayDat/1000);
    putled(3,0,BitDat);
    DisplayDat=DisplayDat-BitDat*1000;
    
    BitDat=(int)(DisplayDat/100);
    putled(4,0,BitDat);
    DisplayDat=DisplayDat-BitDat*100;
    
    BitDat=(int)(DisplayDat/10);
    putled(5,0,BitDat);
    DisplayDat=DisplayDat-BitDat*10;
    
    BitDat=(int)(DisplayDat);
    putled(6,1,BitDat);
    DisplayDat=DisplayDat-BitDat;
    
    BitDat=(int)(DisplayDat*10);
    putled(7,0,BitDat);
    DisplayDat=DisplayDat-BitDat*0.1;
    
    BitDat=(int)(DisplayDat*100);
    putled(8,0,BitDat);
    DisplayDat=DisplayDat-BitDat*0.01;
    
    
}

// 显示配比
void display_percent()
{
    
    
    if(DataBuff[0]!=0x09)
    {
        if(timer<=30)
        {
            putled(1,0,0);
            putled(2,0,0x10);
        } 
        if(timer>=30)
        {
            putled(1,0,0x10);
            putled(2,0,0);
        }
        
        putled(3,0,0);
        putled(4,0,0);
        putled(5,0,0);
        putled(6,0,0);
        putled(7,0,0);
        putled(8,0,0);
        return;
    }
    
    if(DataBuff[0]==0x09)//说明缓冲内有数据
    {
        //        包头                命令                长度                配比数据串        校验码
        //        -----------------------------------------------
        //        AA                     09         LEN1 LEN2 3XX 3XX 3XX 3XX 3XX 3XX 3XX 3XX  操作码.....        CRC1 CRC2
        //           2    |  2        |                      24     |      ......|    2       |
        //    LEN=2+2+24+N+2;LEN-包头
        //BB 09 00   CRC1 CRC2
        //显示哪一组 11 二个 2,9       11 11
        //ab cd.ef
        
        putled(1,0,0);
        putled(2,0,P_Index+1);//0x12-
        //显示数据
        
        
        putled(3,0,(int)(DataBuff[3+P_Index*3]/10));//a
        putled(4,0,DataBuff[3+P_Index*3]-(int)(DataBuff[3+P_Index*3]/10)*10);//b
        
        putled(5,0,(int)(DataBuff[3+P_Index*3+1]/10));//c
        putled(6,1,DataBuff[3+P_Index*3+1]-(int)(DataBuff[3+P_Index*3+1]/10)*10);//d
        
        putled(7,0,(int)(DataBuff[3+P_Index*3+2]/10));//e
        putled(8,0,DataBuff[3+P_Index*3+2]-(int)(DataBuff[3+P_Index*3+2]/10)*10);//f
        
        
    }         
    
}

// 重发-发送
void send_buff_key(uchar WithDog)
{
    int    DataLen=0;//长度
    uchar  Temp=0;
    
    //检查密码单元
    
    
    
    if(DataBuff[0]==0x09)//说明缓冲内有数据
    {
        DataLen=BytesToInt(DataBuff[1],DataBuff[2]);
        if(DataLen==0)
        return;
        
        if (CRC_Check(&DataBuff[0],DataLen-3,DataBuff[DataLen-3],DataBuff[DataLen-2]))//CRC校验
        {
            sendkeys(&DataBuff[27],DataLen-30,WithDog);
        }
    }
    
    
}


//*

⌨️ 快捷键说明

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