#include <msp430x44x.h>
//#include <string.h>
//#include <stdio.h>
//定义液晶显示笔画
#define a (0x01)
#define b (0x02)
#define c (0x10)
#define d (0x08)
#define e (0x40)
#define f (0x20)
#define g (0x04)
//#define h (0x80)
//显示字符的指针
const unsigned char LCD_Tab[] = {
a+b+c+d+e+f ,//显示 "0", LCD_Tab[00]
b+c ,//显示 "1", LCD_Tab[01]
a+b+d+e+g ,//显示 "2", LCD_Tab[02]
a+b+c+d+g ,//显示 "3", LCD_Tab[03]
b+c+f+g ,//显示 "4", LCD_Tab[04]
a+c+d+f+g ,//显示 "5", LCD_Tab[05]
a+c+d+e+f+g ,//显示 "6", LCD_Tab[06]
a+b+c ,//显示 "7", LCD_Tab[07]
a+b+c+d+e+f+g ,//显示 "8", LCD_Tab[08]
a+b+c+d+f+g ,//显示 "9", LCD_Tab[09]
a+b+c+e+f+g ,//显示 "A", LCD_Tab[0A]
c+d+e+f+g ,//显示 "b", LCD_Tab[0B]
a+d+e+f ,//显示 "C", LCD_Tab[0C]
b+c+d+e+g ,//显示 "d", LCD_Tab[0D]
a+d+e+f+g ,//显示 "E", LCD_Tab[0E]
a+e+f+g ,//显示 "F", LCD_Tab[0F]
0 ,//显示 " ", LCD_Tab[10]
};
unsigned int ix;
unsigned int results;
double dx;
double ADC_Result[256];
double ADC_SUM[5];
double SUM=0;
void mInitSTDIO() // 系统初始化
{
unsigned char i;
// 主时钟初始化
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
FLL_CTL0 |= XCAP14PF;
// P5口初始化
P5SEL = 0xFF; // P5用于LCD显示
// P6口初始化
P6SEL = 1; // P6.0用于ADC
P3DIR |= 0xFE; // 设置P6.1~P6.7为输出方式(临时)
// ADC12初始化
ADC12CTL0 = ADC12ON + REFON + REF2_5V + SHT0_6;// 打开ADC12, 2.5V参考电压, 设置SHT0 = 4*ADC12CLK*32
ADC12CTL1 = SHS_0 + SHP + CONSEQ_0; // SHS_0:采样输入信号源选用ADC12SC
// SHP:采样输入信号上升沿触发采样定时器,
// CONSEQ_0:单通道单次模式,
ADC12IE = 0x01; // ADC12.0通道中断使能
ADC12CTL0 |= ENC; // ADC12转换允许
// 初始化 LCD
LCDCTL = LCDON + LCD4MUX + LCDP0; // 4-Mux LCD, segments S0-S15
BTCTL = BTFRFQ1;
for(i = 0; i < 8; i++) LCDMEM[i] = 0; // 清除显示
}
void DisplayInt(unsigned int Data) //显示数据
{
unsigned char x;
unsigned int div_val;
div_val = 10000;
x = 4;
do
{
LCDMEM[x] = LCD_Tab[Data / div_val];
x--;
Data %= div_val;
div_val /= 10;
}while(div_val);
return;
}
//主程序
main()
{
mInitSTDIO(); // 系统初始化
_EINT();
while(1)
{
results = (unsigned int)SUM;
DisplayInt(results);
ADC12CTL0 |= ADC12SC; // Start conversion
// _BIS_SR(LPM3_bits); // Enter LPM3
_BIS_SR(LPM0_bits); // Enter LPM0
}
}
// ADC12 中断服务程序
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
int j,i=0;
for(j=0;j<2048;j++)
{
ADC_Result[j] =(double)ADC12MEM0;
}
for(j=0;j<512;j++)
{
ADC_SUM[i]+=ADC_Result[j];
}
ADC_SUM[i]=ADC_SUM[i]*1/160;
i++;
for(j=512;j<1024;j++)
{
ADC_SUM[i]+=ADC_Result[j];
}
ADC_SUM[i]=ADC_SUM[i]*2/160;
i++;
for(j=1024;j<1536;j++)
{
ADC_SUM[i]+=ADC_Result[j];
}
ADC_SUM[i]=ADC_SUM[i]*4/160;
i++;
for(j=1536;j<1792;j++)
{
ADC_SUM[i]+=ADC_Result[j];
}
ADC_SUM[i]=ADC_SUM[i]*8/160;
i++;
for(j=1792;j<2048;j++)
{
ADC_SUM[i]+=ADC_Result[j];
}
ADC_SUM[i]=ADC_SUM[i]*145/160;
for(i=0;i<5;i++)
{
SUM+=ADC_SUM[i];
}
// _BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0, SET BREAKPOINT HERE
}