今天用Launchpad的ADC10做了一个采集片内温度,12864显示。
[复制链接]
这个程序 只贴部分吧了,至于12864串行显示模块,大家看我前面的帖子吧,
完整的程序可以实现温度的测量了,就是我对参考电压选择还是有点不理解,求大神指点一二!
unsigned char s1[]={"当前片内温度显示"};
unsigned char s2[]={"温度: °C"};
void change(float a) //处理DegC
{
int m;
qian=(int)a/10;//
bai=(int)a%10;//
m=(int)(a*100)%100; //
shi=m/10;
ge=m%10;//
s2[6]=0x30+qian;
s2[7]=0x30+bai;
s2[8]='.';
s2[9]=0x30+shi;
s2[10]=0x30+ge;
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10ISR (void)
{
ADCresult = ADC10MEM; // 读取结果
_BIC_SR_IRQ(LPM0_bits); // 清 LPM0
change(DegC);
write_com(0x03); //发指令,地址归位
delay(50);
write_com(0x80);
print_string(s1);
write_com(0x90);
print_string(s2);
}
void main()
{
unsigned int i;
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
int_port(); //端口初始化
ADC10CTL0 = ADC10ON+REFON+ADC10SHT_3+SREF_1; // 设置 ADC10, 参考电压1.5v, 采样时间
ADC10CTL1 = INCH_10; // 用采样定时器
ADC10CTL0|=ADC10IE; // 使能 ADC10IFG.0
lcdinit(); //LCD初始化
_EINT();
for (i=0; i<3600; i++) // 延时等待参考稳定
{
}
ADC10CTL0 |= ENC;
_EINT(); // 使能中断
while(1)
{
ADC10CTL0|= ENC+ADC10SC; // 开始转换
_BIS_SR(LPM0_bits); // 进入 LPM0
DegC=((ADCresult*1.5/1023)-0.986)/0.00355;
_NOP();
}
}
|