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

📄 finger.c

📁 MSP430设计的继电保护控制和通信程序
💻 C
📖 第 1 页 / 共 5 页
字号:
      }
   }
}
/////////////////////////////////////
uchar CMDFpDelete(uchar Param1L,uchar Param1H)
{
   uchar *pComm;
   P5DIR |= BIT4;
   P5OUT &= ~BIT4;
   delay(500);
   RecCount=0;
   FrameCount =12;
   pComm = CMD_FP_DELETE;
   *(pComm + 2) = Param1L;
   *(pComm + 3) = Param1H;
   *(pComm + 11)= CheckSum(pComm,11);
   SendFrame(pComm,12);
   Time_count=50;
    while((RecCount != FrameCount)&&(Time_count>0))     //20s等待通讯
    {
        if(TACTL & TAIFG)
        {
           Time_count--;
           TACTL &= ~TAIFG;  //轻重断标志
        } 
    }
    if(Time_count==0)
    return ComErr;
   else
   {
       if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
       else 
       {  
           Param1_L=RecComm[2];
           Param1_H=RecComm[3];
           Param2_L=RecComm[4];
           Param2_H=RecComm[5];
           return RecComm[10];
      }
   }
} 
//////////////////////
uchar CMDFpVerify(uchar Param1L,uchar Param1H)
{
   uchar *pComm;
   P5DIR |= BIT4;
   P5OUT &= ~BIT4;
   delay(500);
   RecCount=0;
   FrameCount =12;
   pComm = CMD_FP_VERIFY;
   *(pComm + 2) = Param1L;
   *(pComm + 3) = Param1H;
   *(pComm + 11)= CheckSum(pComm,11);
   SendFrame(pComm,12);
   Time_count=50;
    while((RecCount != FrameCount)&&(Time_count>0))     //20s等待通讯
    {
        if(TACTL & TAIFG)
        {
           Time_count--;
           TACTL &= ~TAIFG;  //轻重断标志
        } 
    }
    if(Time_count==0)
    return ComErr;
   else
   {
        if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
        else 
        {  
           Param1_L=RecComm[2];
           Param1_H=RecComm[3];
           Param2_L=RecComm[4];
           Param2_H=RecComm[5];
           return RecComm[10];
      }
   }
}     
//////////////////////////////////
uchar CMDFpIdentify()
{
   uchar *pComm;
   P5DIR |= BIT4;
   P5OUT &= ~BIT4;
   delay(500);
   RecCount=0;
   FrameCount =12;
   pComm = CMD_FP_IDENTIFY;
   *(pComm + 11)= CheckSum(pComm,11);
   SendFrame(pComm,12);
   Time_count=70;
   while((RecCount != FrameCount)&&(Time_count>0))     //6s等待通讯
   {
        if(TACTL & TAIFG)
        {
           Time_count--;
           TACTL &= ~TAIFG;  //轻重断标志
        } 
    }
   if(Time_count == 0)
   return ComErr;
   else
   {
       if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
       else 
       {
           Param1_L=RecComm[2];
           Param1_H=RecComm[3];
           Param2_L=RecComm[4];
           Param2_H=RecComm[5];
           return RecComm[10];
       }
   }
}  
////////////////////////////////////
uchar CMDFpVerifyMaster(uchar Param1L,uchar Param1H)
{
   uchar *pComm;
   P5DIR |= BIT4;
   P5OUT &= ~BIT4;
   delay(500);
   RecCount=0;
   FrameCount =12;
   pComm = CMD_FP_VERIFY_MASTER;
   *(pComm + 2) = Param1L;
   *(pComm + 3) = Param1H;
   *(pComm + 11)= CheckSum(pComm,11);
   SendFrame(pComm,12);
   Time_count=50;
    while((RecCount != FrameCount)&&(Time_count>0))     //20s等待通讯
    {
        if(TACTL & TAIFG)
        {
           Time_count--;
           TACTL &= ~TAIFG;  //轻重断标志
        } 
    }
    if(Time_count==0)
    return ComErr;
   else
   {
       if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
       else
       {  
           Param1_L=RecComm[2];
           Param1_H=RecComm[3];
           Param2_L=RecComm[4];
           Param2_H=RecComm[5];
           return RecComm[10];
      }
       
   }
}
////////////////////////////////////
uchar CMDFpVerifyEnd()
{
   uchar *pComm;
   P5DIR |= BIT4;
   P5OUT &= ~BIT4;
   delay(500);
   RecCount=0;
   FrameCount =12;
   pComm = CMD_FP_VERIFY_END;
   *(pComm + 11)= CheckSum(pComm,11);
   SendFrame(pComm,12);
   Time_count=50;
    while((RecCount != FrameCount)&&(Time_count>0))     //200ms等待通讯
    {
        if(TACTL & TAIFG)
        {
           Time_count--;
           TACTL &= ~TAIFG;  //轻重断标志
        } 
    }
    if(Time_count==0)
    return ComErr;
   else
   {
       if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
       else 
       {  
           Param1_L=RecComm[2];
           Param1_H=RecComm[3];
           Param2_L=RecComm[4];
           Param2_H=RecComm[5];
           return RecComm[10];
      }
   }
}
//////////////////////////////////
uchar CMDFpIdentifyEx(uchar Param1L,uchar Param1H,uchar Param2L,uchar Param2H)
{
   uchar *pComm;
   P5DIR |= BIT4;
   P5OUT &= ~BIT4;
   delay(500);
   RecCount=0;
   FrameCount =12;
   pComm = CMD_FP_IDENTIFY_EX;
   *(pComm + 2) = Param1L;
   *(pComm + 3) = Param1H;
   *(pComm + 4) = Param2L;
   *(pComm + 5) = Param2H;
   *(pComm + 11)= CheckSum(pComm,11);
   SendFrame(pComm,12);
   Time_count=70;
    while((RecCount != FrameCount)&&(Time_count>0))     //20s等待通讯
    {
        if(TACTL & TAIFG)
        {
           Time_count--;
           TACTL &= ~TAIFG;  //轻重断标志
        } 
    }
    if(Time_count==0)
    return ComErr;
   else
   {
      if (RecComm[11]!=CheckSum(RecComm,11)) return CheckSumErr;
      else 
      {
           Param1_L=RecComm[2];
           Param1_H=RecComm[3];
           Param2_L=RecComm[4];
           Param2_H=RecComm[5];
           return RecComm[10];
      } 
   }
}
//isd4003语音芯片程序
//******************************************************************
void isdx(uchar com)
{
    uchar i;
    
    //SS=0;
    P5OUT &= ~BIT0;
    //delay(5);			//启动用时
    //SCLK=0;
    P5OUT &= ~BIT3;
    //delay(10);
    for(i=0;i<8;i++)
    {

	//delay(10);
	if((com & 0x01)==0)
	    P5OUT &= ~BIT1;
	else
	    P5OUT |= BIT1;
	//delay(10);

	//SCLK=1;			//上升沿锁存数据
	P5OUT |= BIT3;
	//delay(20);
	com=com>>1;
	//SCLK=0;
	P5OUT &= ~BIT3;
    }
   
}
//----------------------isd4003()-------------------------------------
 //void play(uchar addsH,uchar addsL)
void play(uint adds)
{
   uchar addsH,addsL;
   P5SEL &= ~(BIT0+BIT1+BIT2+BIT3);
   P5DIR |= (BIT0+BIT1+BIT3);
   P5DIR &= ~BIT2; 
   P1DIR &= ~BIT1;                          //用于检测放音结束标志 
   P5OUT |= BIT0;
   addsL = (adds & 0xff);
   adds = adds>>8;
   addsH = (adds & 0xff);
   addsH &= 0x07;             //取后三位
   isdx(0x00);
   isdx(POWERUP);
   P5OUT |= BIT0;
   isdx(addsL);	//开始地址
   isdx(SETPLAY | addsH);
   P5OUT |= BIT0;
   isdx(0x00);
   isdx(PLAY);
   P5OUT |= BIT0;
   while(P1IN & BIT1)
   {;}
   isdx(0x00);//停止取消也能正常停止
   isdx(STOP);
   P5OUT |= BIT0;
   isdx(0x00);
   isdx(POWERDN);
   P5OUT |= BIT0;
}
//液晶显示模块
uchar wait_free()
{
    uchar Status;
    P6DIR = 0x00;  //p6 is input port
    //ClrRS;
    P5OUT &= ~BIT5;
    //SetRW;
    P5OUT |= BIT6;
    //SetE;
    P5OUT |= BIT7;
    Status = P6IN;
    Time_count=10;
    while((Status & BIT7)&&(Time_count>0))     //20s等待通讯
    {
        if(TACTL & TAIFG)
        {
           Time_count--;
           TACTL &= ~TAIFG;  //轻重断标志
        }
        Status = P6IN; 
    }
    P6DIR = 0xff;  //p6 is output port
    if(Time_count==0) return BUSY;
    else 
    return FREE;
    
}
void write1_command(uchar command)
{
    //ClrRS;
    P5OUT &= ~BIT5;
    //ClrRW;
    P5OUT &= ~BIT6;
    //SetE;
    P5OUT |= BIT7;
    P6OUT = command;
    //ClrE;
    P5OUT &=~BIT7;
}
void write_command(uchar command)
{
     if(wait_free()==FREE)
     write1_command(command);
}
void write_data(uchar data)
{
     if(wait_free() == FREE)
    {
       //SetRS;
       P5OUT |= BIT5;
       // ClrRW;
       P5OUT &= ~BIT6;
       //SetE;
       P5OUT |= BIT7;
       P6OUT = data;
       //ClrE;
       P5OUT &= ~BIT7;
    }  
}
void InitLcm()
{
     P6DIR |= 0xff;
     P5DIR |= (BIT5+BIT6+BIT7);
     delay(500);   //delay > 40ms
     write1_command(0x30);    //set basic commandset
     delay(100);    //delay > 100us
     write1_command(0x30);    //set 8bit mode
     delay(10);    //delay > 37us
     write_command(0x0c);     //display status
     delay(100);     //delay > 100us
     write_command(0x01);     //clear screen
     delay(500);      //delay > 10ms
     write_command(0x06);    //设定光标的移动方向
     delay(100);
}
void DisString(uchar row,uchar line,char *Data_String)
{
     uchar Add,Status;
     Add = (row-1)*16+(line -1);
     write_command(Add | 0x80);
     Status = wait_free();
     if( Status == FREE)
     {
         write_data(*(Data_String));
         if(wait_free()==FREE)
         write_data(*(Data_String+1));
     }
}
void ClrString(uchar row,uchar line)
{
     uchar Add;
     Add = (row-1)*16+(line -1);
     write_command(Add | 0x80);
     if(wait_free()==FREE)
     {
         write_data(0x20);
         if(wait_free()==FREE)
         write_data(0x20);
     }
}

⌨️ 快捷键说明

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