?? main.c
字號:
#include "msp430x22x4.h"
#include "FFT.h"
#include "math.h"
#include "ocj4x8.h"
#include "stdio.h"
#define N 64
unsigned char numbuf[4];
//unsigned char datakp0,datakp1,datakp2,datakp3;
//*****************************************************************遙控定義變量
unsigned int operate_code;//接受操作碼
unsigned char bitcnt,key;// 進入中斷次數 ,按鍵碼
unsigned char first = 1;//第一次進入遙控中斷標志位
unsigned int last,temp;
//**************************************************************AD轉換定義的變量
unsigned char adc_flag=0;//轉換完結束標志
unsigned char Start=0;//AD轉換開好控制鍵
//**********************************************************傅立葉變換定義的變量
float Re[64],Im[64];//轉換結果村于Re[N]中
float tatal_max;
//unsigned char max1,max2;
//float datekp[10];//數據存儲
//***************************函數聲明*******************************************
//void Signal(void);
void Mix(void);
//void Cycle(void);
void Inint()
{
WDTCTL=WDTPW+WDTHOLD;//關看們狗
BCSCTL1=CALBC1_1MHZ; //設定DCO 為1MHZ
DCOCTL=CALDCO_1MHZ;
//*******************************遙控解碼***************************************
P4SEL|=0x01;//P4.0選擇第二功能下降沿捕獲發生中斷 用于紅海外接收一體化
P1DIR|=0x04;//P1.2方向寄存器選擇輸出
P1OUT|=0x04;//P1.2輸出高電平,蜂鳴器不叫
//********************液晶顯示控制位********************************************
P4DIR|=0x02;
P3DIR|=0x0a;
//*****************TA定時器用于決定AD的采樣率***********************************
P2SEL|=0x01;//設置P2.0為模擬通道A0
ADC10CTL0&=~(ENC);//修改ADC寄存器的值
ADC10CTL1|=INCH_0+ADC10SSEL_3+CONSEQ_0 ;//選擇A0輸入通道,時鐘源為MCLK,單通道單次轉換
ADC10CTL0|=SREF_0 +ADC10ON+MSC;//vcc參考源,轉換模塊開啟
ADC10AE0|=0x01;//通道A0允許
ADC10CTL0|=ENC;//使能轉換
TACTL|=TASSEL_2 +TACLR ;
TACCTL0|=CCIE;
TACCR0=40000;//決定AD的采樣率
TACTL|=MC_1;
//***********************TB定時用于遙控解碼************************************
TBCTL=0x0220;//選擇時鐘源為系統時鐘,不分頻,為連續計數模式,溢出中斷禁止
TBCCTL0=0x8918;//下降沿捕獲,選擇CCI0A做為輸入源,同步捕獲,捕獲模塊允許中斷為捕獲模式
//***************************************************************************
_EINT();
}
//*******************************主函數由此開始*********************************
void main( void )
{
Inint();
key=0;
init_lcd();clrram ();
while(key==0) {dprintf(0,0,"音頻信號分析儀");
dprintf(1,2,"HUBU小組");
dprintf(2,3,"制作");
dprintf(3,0,"開始>>>");}
// while(key!=0){dprintf(0,1,"請按開始鍵!");key=0;}
clrram ();
while(1)
{
if(key==0x01){ Start=1;dprintf(3,0,"數據采集中...");}
//******************************************************************************
if(adc_flag==1)//數據采集完畢標志
{ clrram ();
// dprintf(0,0,"采集完畢");
// delay(60000);
clrram ();
dprintf(0,0,"分析方式選擇");
dprintf(1,0,"1.單頻信號-T");//key=0x11,單頻信號
dprintf(2,0,"2.混頻信號-T");//key=0x12,混頻信號
//key=0x13,周期性分析
while(1)
{
if(key==0x0a){WDTCTL = WDTPW|0xff00;} //系統復位
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&選擇單頻信號分析方式&&&&&&&&&&&&&&&&&&&&&&
if(key==0x11){clrram();}
while(key==0x11)
{
//Signal();
switch(key)
{case 0x13:{key=0x11;break;}//周期性分析Cycle();
case 0x07:{Start=0;while(key==0x07);break;}//此鍵設為暫停鍵,可按任意鍵返回
case 0x0a:{WDTCTL = WDTPW|0xff00;} //系統復位
}
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&選擇混頻信號分析方式&&&&&&&&&&&&&&&&&&&&&&&&&
if(key==0x12){clrram();}
while(key==0x12)
{
Mix();
while(1){if(key==0x0a)WDTCTL = WDTPW|0xff00;}
switch(key)
{case 0x13:{key=0x12;break;}//Cycle();break;}
case 0x07:{Start=0;while(key==0x07);break;}//此鍵設為暫停鍵,可按任意鍵返回
case 0x0a:{WDTCTL = WDTPW|0xff00;} //系統復位
}
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
}
} //if(adc_flag==1)//數據采集完畢標志
//******************************************************************************
}
}
//########################Timer_B interrupt 遙控解碼部分########################
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B(void)
{
if(first ==1)
{
TBCTL=0x0224;//定時器清零
P2OUT&=0xfe;
last=TBCCR0;
last=0;
first=0;
}
else if(first==0)
{
TBCTL=0x0224;//定時器清零
temp=TBCCR0-last;
if(temp>1024&&temp<1225){ temp=0;} // 判斷數據0信號
else if(temp>2145&&temp<2345){ temp=0x8000;} // 判斷數據1信號
else if(temp>13400&&temp<14600) // 判斷引導碼信號
{ bitcnt=0;//user_code0=0;user_code1=0;
operate_code=0; return;} // 返回,等待下次開始接收
else { first=1;return; } // 干擾信號
bitcnt++;
if(bitcnt<13){_NOP();}//user_code0|=temp; user_code0>>=1;} //開始接收前13位用戶識別碼
else if(bitcnt==13){_NOP();}// user_code0|=temp;}
else if(bitcnt<26){_NOP();}//user_code1|=temp;user_code1>>=1;} //開始接收后13位用戶識別碼
else if(bitcnt==26){_NOP();}//user_code1|=temp;}
else if(bitcnt<42){operate_code|=temp;operate_code>>=1;} //開始接收16位(8位操作碼和8位操作反碼)
else if(bitcnt==42){ bitcnt=0;
operate_code|=temp;
key=operate_code&0x00ff;
P1OUT&=0xfb;//P1.2輸出低電平,蜂鳴器叫
delay(40000);
P1OUT|=0x04;//P1.2輸出高電平,蜂鳴器不叫
}
}
}
//##########################Timer_A interrupt 確定采樣頻率######################
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
static unsigned char i;
if(Start==1)
{
ADC10CTL0&=~ENC;
Re[i]=(float)( (ADC10MEM)*3/1023);
i++;
if(i==64)
{adc_flag=1; Start=0;}
ADC10CTL0|=ENC+ADC10SC;
}
}
//*****************混頻信號分析************************************************
void Mix(void)
{
FFT(1,6,Re,Im);
//Apower(Re,Im);
tatal_max=Wpower(Re,Im);
dprintf(0,0,"總功率:");
sprintf(numbuf,"%0.3fmw",tatal_max);
dprintf(0,4,numbuf);
}
//ref_num(Re,datekp);
/*
datakp0=(unsigned char)(tatal_max);
datakp1=(unsigned char)((tatal_max-datakp0)*100);
dprintf(0,2,"測試結果");
dprintf(1,0,"總功率:");
dis_num(1,4,datakp0);
dprintf(1,5,".");
dis_num(1,6,datakp1);
datakp2=(unsigned char)(Re[1]);
datakp3=(unsigned char)((Re[1]-datakp2)*100);
dprintf(2,0,"頻率1: 100Hz");
dprintf(3,0,"功率1:");
dis_num(3,4,datakp2);
//dprintf(3,5,".");
//dis_num(3,6,datakp3);
*/
/*
while(page1==0); //遙控翻頁1
page1=0;
clrram ();
dprintf(0,0,"頻率2:");
sprintf(numbuf,"%0.0fHz",datekeep[2]);
dprintf(0,3,numbuf);
dprintf(1,0,"功率2:");
sprintf(numbuf,"%0.3fmw",datekeep[3]);
dprintf(1,3,numbuf);
dprintf(2,0,"頻率3:");
sprintf(numbuf,"%0.0fHz",datekeep[4]);
dprintf(2,3,numbuf);
dprintf(3,0,"功率3:");
sprintf(numbuf,"%0.3fmw",datekeep[5]);
dprintf(3,3,numbuf);
while(page2==0); //遙控翻頁2
page2=0;
clrram ();
dprintf(0,0,"頻率4:");
sprintf(numbuf,"%0.0fHz",datekeep[6]);
dprintf(0,3,numbuf);
dprintf(1,0,"功率4:");
sprintf(numbuf,"%0.3fmw",datekeep[7]);
dprintf(1,3,numbuf);
dprintf(2,0,"頻率5:");
sprintf(numbuf,"%0.0fHz",datekeep[8]);
dprintf(2,3,numbuf);
dprintf(3,0,"功率5:");
sprintf(numbuf,"%0.3fmw",datekeep[9]);
dprintf(3,3,numbuf);
}
void Signal(void)
{
FFT(6,Re,Im); //對采樣頻率做FFT
Apower(Re,Im);
}*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -