//*****************************************************************************
//
// ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
// //* An external watch crystal between XIN & XOUT is required for ACLK *//
//
//
// M. Buccini / H. Grewal
// Texas Instruments Inc.
// Aug 2009
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A
//*****************************************************************************
#include <msp430x43x.h>
#include <math.h>
#include "FDC.h"
const unsigned char digit[16] =
{
0x7D, /* "0" LCD segments a+b+c+d+e+f */
0x60, /* "1" */
0x3E, /* "2" */
0x7A, /* "3" */
0x63, /* "4" */
0x5B, /* "5" */
0x5F, /* "6" */
0x70, /* "7" */
0x7F, /* "8" */
0x7B, /* "9" */
0x02, /* "-" */
0x80, /* "." */
0x6E, /* "d" */
0xEE, /* "d." */
0x0D, /* "L" */
0x00 /* " " */
};
// These need to be global in this example. Otherwise, the
// compiler removes them because they are not used
unsigned long int ADC0_Bias;
unsigned long int ADC5_Avg1;
unsigned long int ADC4_Avg2;
unsigned long int ADC3_Batt;
unsigned int ADC_Offset;
unsigned char Sample_Cnt;
unsigned char Cycle_Cnt;
unsigned char Key_Value;
unsigned char dB_dBm_Flag=0;
unsigned char Auto_Off_Flag;
unsigned char Shut_Down_Flag;
//unsigned char Low_Power_Flag;
unsigned long int Auto_Off_Cnt;
float Opm_Power;
float Opm_Power_Cnt;
float TIA_RES;
float Ref_Power;
unsigned int On_Off_Cnt;
unsigned int dB_dBm_Cnt;
unsigned int Freq_Mod_Cnt;
unsigned int Freq_Count;
unsigned char Freq_Mod_Flag;
unsigned char Direct_Flag;
float Keep_Opm_Power;
unsigned char Keep_Mod_Flag;
unsigned char Keep_Direct_Flag;
unsigned char Test_Down_Flag;
unsigned char Test_Up_Flag;
unsigned int Test_Up_Cnt;
unsigned char Back_Light_Flag;
unsigned long Cap1 = 0;
unsigned long Cap2 = 0;
unsigned long Cap3 = 0;
unsigned long Cap4 = 0;
unsigned int Cap = 0;
unsigned long int CC = 0;
unsigned int Gain1 = 0;
unsigned int M_ID = 0;
unsigned int D_ID = 0;
unsigned int Test_Cnt=0;
unsigned char Time_Cnt=0;
unsigned char Test_Flag=0;
unsigned char Send_Flag=0;
unsigned char Sent_String[4];
union Myunion{
float f;
unsigned char c[4];
}f1;
#define CPU_F ((double)4000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
void ADC12_Init(void);
void TimerA_Init(void);
void Disp_Low(void);
void Disp_Hig(void);
void Disp_Set(void);
void Display(unsigned int c);
void Disp_Clear(void);
void Write_Opm_Float (void);
void Read_Opm_Float (void);
/////////////////////////FDC1004 IIC////////////////////////////
void Start(void);
void Stop(void);
void Answer(void);
void NAnswer(void);
unsigned char Ack_Master(void);
unsigned char Nack_Master(void);
void SAck_Master(void);
void SNack_Master(void);
unsigned char RAnswer(void);
void WriteData(unsigned char data);
void Write_Pointer(unsigned char data);
void FDC1004_Write_Addr(unsigned char data);
void FDC1004_Read_Addr(unsigned char data);
unsigned char ReadData(void);
void Config_FDC1004(unsigned char result,unsigned char address);
void Triggering_FDC1004(unsigned char address);
void WaitFor_FDC1004(unsigned char address);
unsigned int ReadID_FDC1004(unsigned char address);
unsigned int ReadData_FDC1004(unsigned char address);
unsigned int ReadData_Avg(unsigned char result,unsigned char address);
void Uart_Send_Data(unsigned char dat);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// by compiler optimization
P1DIR = 0xE0;
P1OUT |= 0x00;
P6DIR = 0x01;
P6OUT |= 0x00;
//FCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for Flash Timing Generator
SCFQCTL = SCFQ_4M; //set fMCLK = 128*fACLK = 4MHz
//FLL_CTL0 |= XCAP14PF; // Configure load caps
SCFI0|=FN_2;
//ADC12CTL0 = REFON | REF2_5V;
//SCFQCTL = SCFQ_1M;
FLL_CTL0|=DCOPLUS;
//delay_ms(1000);
//while(1);
delay_ms(500);
BTCTL = BT_fLCD_DIV32 | BT_fCLK2_DIV64
| BT_fCLK2_ACLK_DIV256; // LCD clock freq is ACLK/128
LCDCTL = LCDON+LCD4MUX + LCDSG0_1; // LCD on, 4-Mux, segments S0-S15;
FCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for Flash Timing Generator
//while(1);
P5SEL = 0xFC; // Select P5.2-7 as Com and Rxx
P1DIR = 0xE0;
P1OUT |= 0x00;
P2DIR |= 0xC9;
P2OUT &= 0xC0;
P6DIR = 0x01;
//P6SEL |= 0x3F; // Enable A/D channel inputs
P3DIR |= 0x19;
P6OUT |= 0x00;
/////////////////////////////////////////////////////////////////////////////
//FLL_CTL0 |= XCAP18PF; // Configure load caps
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL1; // UCLK = SMCLK
UBR00 = 0x3C; // 1MHz 9600
UBR10 = 0x03; // 1MHz 9600
UMCTL0 = 0x2C; // modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0; // Enable USART0 RX interrupt
P2DIR |= 0x10; // P2.4 output direction
//////////////////////////////////////////////////////////////////////////////////
// U0CTL=CHAR;
// U0TCTL = SSEL1; // UCLK = SMCLK
// U0BR0 = 0x45; // 8Mhz/115200 - 69.44
// U0BR1 = 0x00; //
// U0MCTL = 0x2C; // modulation
// //////////
//
// ME1|=UTXE0;//+URXE0; //打开串行中断0
/////////////////////////////////////////////////////////////////////////////////
//while(1);
//delay_ms(10);
LCDMEM[0] = 0x00;
LCDMEM[1] = 0xFF;
LCDMEM[2] = 0xFF;
LCDMEM[3] = 0xFF;
LCDMEM[4] = 0xFF;
LCDMEM[5] = 0x00;
LCDMEM[6] = 0x00;
LCDMEM[7] = 0x00;
Auto_Off_Flag = 1;
Auto_Off_Cnt = 0;
Back_Light_Flag=1;
Back_Light_Off;
Cap = 0;
CC = 0;
Time_Cnt = 0;
Test_Cnt = 0;
Test_Flag = 0;
//485 out
P2DIR|=0x08;
P2OUT |= 0x08;
//ADC12_Init();
TimerA_Init();
_EINT();
delay_ms(200);
M_ID = ReadID_FDC1004(0xFE);
D_ID = ReadID_FDC1004(0xFF);
Config_FDC1004(4,0x08);//配置FDC1004
Triggering_FDC1004(0x0C);//触发测量
WaitFor_FDC1004(0x0C);
Cap1 = ReadData_FDC1004(0x00);//读取电容值
Cap2 = ReadData_FDC1004(0x02);//读取电容值
Cap3 = ReadData_FDC1004(0x04);//读取电容值
Cap4 = ReadData_FDC1004(0x06);//读取电容值
LCDMEM[1] = 0x7D;
LCDMEM[2] = 0x7D;
LCDMEM[3] = 0x7D;
LCDMEM[4] = 0x7D;
//delay_ms(1000);
//WaitFor_FDC1004(0x0C);//等待测量结束
while(1)
{
switch(Key_Value)
{
case ON_OFF_UP:
Shut_Down_Flag = 1;
break;
case BL_SET_UP:
Back_Light_On;
Key_Value = NO_KEY;
Auto_Off_Cnt= 0;
break;
case STORE_SET_UP:
Back_Light_Off;
Key_Value = NO_KEY;
Auto_Off_Cnt= 0;
break;
case UPLOAD_SET_UP:
Auto_Off_Cnt= 0;
Key_Value = NO_KEY;
break;
case ZERO_SET_UP:
WaitFor_FDC1004(0x0C);
Cap1 = ReadData_FDC1004(0x00);//读取电容值
Cap2 = ReadData_FDC1004(0x02);//读取电容值
Cap3 = ReadData_FDC1004(0x04);//读取电容值
Cap4 = ReadData_FDC1004(0x06);//读取电容值
Cap = (Cap1+Cap2+Cap3+Cap4)/4;
Display(Cap);
Sent_String[0] = Cap/10000 + 0x30;
Uart_Send_Data(Sent_String[0]);
Sent_String[1] = Cap/1000%10 + 0x30;