#include "msp430x24x.h"
#define uint unsigned int
#define uchar unsigned char
void display();
void delay();
/***设置数码管显示****/
#define L1_OFF P4OUT|=0x20 //关L1
#define L1_NO P4OUT&=~0x20 //点亮L0
#define L2_OFF P4OUT|=0x40 //关L1
#define L2_NO P4OUT&=~0x40 //点亮L1
#define L3_OFF P4OUT|=0x80 //关L2
#define L3_NO P4OUT&=~0x80 //点亮L2
uchar const Led1[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //不带小数点编码
uchar led2[]={0x40,0x79,0x24,0x30,0x19,
0x12,0x02,0x78,0x00,0x10}; //带小数点编码
uint x;
uchar Disbuf[3],flag;
void RefreshDis(uint Data)
{
Disbuf[0]=Led1[Data/100%10];
Disbuf[1]=Led1[Data/10%10];
Disbuf[2]=Led1[Data%10];
}
/****转换数据处理及显示****/
void display(void)
{
P5OUT=Disbuf[0];//x/100%10];
L1_NO;
delay();
L1_OFF;
P5OUT=Disbuf[1];//x/10%10];
L2_NO;
delay();
L2_OFF;
P5OUT=Disbuf[2];//x%10];
L3_NO;
delay();
L3_OFF;
}
void delay(void)
{
uint m;
for(m=1000;m>0;m--);
}
void main()
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P4DIR=0xE0;//p4.6 .7输出
P4SEL=0;
P5DIR=0XFF;//P5段选编码输出
P5SEL=0;
P4OUT=0xFF;
P5OUT=0x00;
/****设置AD寄存器****/
ADC12CTL0=ADC12ON+SHT0_2;//打开AD转换内核,参考电压3.3V
ADC12CTL1=SHP;
//ADC12MCTL0=SREF_1;//分频
ADC12IE=0X01;//使能中断允许
ADC12CTL0|=ENC;
P6SEL|=1;//P6.0电压输入
P6DIR = 0xFE;
flag=0;
ADC12CTL0|=ADC12SC;//启动ADC转换器
_BIS_SR(LPM0_bits+ GIE);//进入低功耗睡眠模式
while(1)
{
display();
if(flag)
{
ADC12CTL0|=ADC12SC;//启动ADC转换器
flag=0;
}
//_EINT();//进入中断
// LPM3;
// _BIS_SR(CPUOFF+GIE);
}
}
/****ADC12中断服务****/
#pragma vector=ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
RefreshDis(ADC12MEM0/16);
//display();//中断处理
// _DINT();//清除中断
flag=1;
LPM0_EXIT;
//_BIS_SR_IRQ(CPUOFF);
}