|
发表于 2012-7-4 01:59:13
|
显示全部楼层
uint v,k;
uint ADC_Value;
uchar t0,t1,t2,t3,t4;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Close Watch Dog Timer
LcdReset();
Init_ADC12();
for (;;)
{
DispNChar(0,0,8,"voltage:");
ADC12CTL0 |= ADC12SC; // 软件启动转换
_BIS_SR(CPUOFF + GIE); // LPM0模式,由ADC12中断唤醒
Disp1Char(0,1,t0+'0');
Disp1Char(1,1,'.');
Disp1Char(2,1,t1+'0');
Disp1Char(3,1,t2+'0');
Disp1Char(4,1,t3+'0');
Disp1Char(5,1,t0+'0');
Disp1Char(6,1,'V');
}
}
void Init_ADC12()
{
ADC12CTL0 = SHT0_2 + ADC12ON; // 设置采样时间,SHT0:保持采样定时器0,打开ADC12内核
ADC12CTL1 = SHP; // 使用定时器采样 由采样输入信号的上升沿触发采样定时器
ADC12MCTL0 = INCH_1; // 选用A1通道 默认Vref+ = AVcc,Vref- = AVss
ADC12IE = 0x01; // 开ADC12MCTL1中断
ADC12CTL0 |= ENC; // 转换允许
// 用软件启动A/D转换,要使用一条指令来完成ADC12SC与ENC的设置
}
// ADC12 interrupt service routine
#pragma vector=ADC12_VECTOR
__interrupt void ADC12_ISR (void)
{
k = ADC12MEM0; // 读取A/D转换结果
v = (int)(3.3*k*10000/4095); // 12位A/D
ADC_Value = (uint)(v*10000);
t0 = ADC_Value/10000;
t1 = ADC_Value/1000%10;
t2 = ADC_Value/100%10;
t3 = ADC_Value/10%10;
t4 = ADC_Value%10;
_BIC_SR_IRQ(CPUOFF); // 退出LMP0
} |
|