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

📄 main.c

📁 msp430开发的驻波表测试仪 数字显示的,国内没有的哦
💻 C
字号:
//驻波表 UV段
#include "msp430x13x.h"
#include "hz.c"
#include "show.c"

unsigned int l,r,curr,pre,swr,power_z,power_f; //驻波比,功率
unsigned char fun_sel;    //功能选择:1->测频 0->测驻波


const unsigned char power_preset[]={8 ,13,16,18,20,22,24,25,27,28,30};
const unsigned char power_bl[]=    {13,14,17,20,20,23,24,27,29,32,35}; // *10

unsigned char getpowerbl(unsigned int l)
{
  char i,lr;
  lr=l/10;
  if(lr<=power_preset[0])
  {
    return (power_bl[0]);  
  }
  for(i=1;i<=9;i++)
  {
    if(lr<power_preset[i])  
    {
      return(power_bl[i]);
    }
  }
  return(power_bl[10]);  //  >=5.0
}

void delay(unsigned int t)        /* 延时 */
{
        unsigned int i;
        unsigned char j;
	for(i=0;i<t;i++)
		for(j=0;j<10;j++);
}


#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
//interrupt[WDT_VECTOR] void watchdog_timer (void)
{
  unsigned char bl;
  
  if(l<10)           //正向功率不足,退出
  {
    swr=0;
    power_z=0;
    power_f=0;
    return;
  }
  curr=(int)(r*50/l);
    if((curr==pre))
     {
        bl=getpowerbl(l);
//        bl=10;
        power_z=l*bl/100;    
        bl=getpowerbl(r/2);
//        bl=10;
        power_f=r*bl/200;  
        if(power_z<=power_f) power_f=power_z-1;
        swr=(power_z+power_f)*100/(power_z-power_f);
     }
     else
     {
        pre=curr;
     }

  l=0;
  r=0;
} 

#pragma vector=PORT1_VECTOR
__interrupt void p1_in (void)

//interrupt[PORT1_VECTOR] void p1_in (void)
{
    if(P1IFG&BIT7)           //功能选择0->测驻波 1->测频
    { 
      if(fun_sel==0)  //由测驻波改为测频,开1.4中断,关1.2,1.3中断,关 WDT 中断
      {
        fun_sel=1;
        P1IE|=BIT4;
        P1IE&=~BIT2;
        P1IE&=~BIT3;
        IE1&=~WDTIE;                         // Enable WDT interrupt
        
      }
      else
      {
        fun_sel=0;
        show_face0();
        P1IE&=~BIT4;
        P1IE|=BIT2;
        P1IE|=BIT3;
        IE1|=WDTIE;                         // Enable WDT interrupt
      }
      delay(5000);
      P1IFG &=~BIT7;
    }
    
    if(P1IFG&BIT2)           // L in 正向
    { 
      l++;
      P1IFG &=~BIT2;
    }
    if(P1IFG&BIT3)           // R in  反向
    { 
      r++;
      P1IFG &=~BIT3;
    }
    if(P1IFG&BIT4)           //测频,2Hz信号入
    { 
    if(fun_sel==1)
    {
      unsigned long vol,pl,pl1,pl2,p3;
      unsigned char p1;
      delay(1);
      P1IFG &=~BIT4;
      vol=(long)TAR;
      p1=P1IN;
      if((p1&=BIT0)!=0X00) vol--;
      TAR=0;
      p3=P3IN;
      pl=(vol*256+p3)*4*256/1000;  //*4*256/100
//      pl=(vol*256+p3)*1024/100;  
      pl1=pl/10000;
      pl2=pl%10000;
      show_vol3(pl1,pl2);
      P1OUT|=BIT5;
      delay(3);
      P1OUT&=~BIT5;
     }
     P1IFG &=~BIT4;
    }
}

void main(void)
{ 
  WDTCTL=WDTPW+WDTHOLD;

  P1DIR = 0x62;     // 0110,0010 
  P1SEL|=BIT0;
  P1IES=0XFF;     //下降沿有效
  P1OUT&=~BIT5;
    
  P2DIR = 0xff; 
  P3DIR = 0x00; 
  P4DIR = 0xff; 
  P5DIR = 0xff; 
  P6DIR = 0xff; 

  TACTL = TACLR+MC0;              // clear TARS,tart Timer_A in continuous mode
  CCR0=65535;
  
  init_lcd();
  clear_lcd();
  show_cm();		    
  delay(20000);
  
  l=0;
  r=0;
   
  WDTCTL = WDT_ADLY_1000;                 
  P1IE|=BIT7;
        fun_sel=0;
        show_face0();
        P1IE&=~BIT4;
        P1IE|=BIT2;
        P1IE|=BIT3;
        IE1|=WDTIE;                         // Enable WDT interrupt
  P1IFG=0X00;
  _EINT();                        
  while(1)
  {
    if(fun_sel==0)
    {
      show_vol0(swr);                      
      show_vol21(power_z);  
      show_vol22(power_f);  
    }
    ;  
  }                                                           
}

⌨️ 快捷键说明

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