msp430中的ADC12的通道10连接到内部模拟温度传感器上,可以测量msp430芯片温度,并且把温度显示在12864液晶上。
下面是调试后的程序。
#include
unsigned int long temp;
unsigned int long TemperF; //华氏温度
unsigned int long TemperC; //摄氏温度
#define uchar unsigned char
#define uint unsigned int
uchar a[]={\"华氏温度: \"};
uchar b[]={\"摄氏温度: \"};
//省略12864部分的程序
void main()
{
WDTCTL=WDTPW+WDTHOLD;
uint i;
initsys();//msp430 系统初始化
PSB_0;//液晶串行
init();//液晶初始化
ADC12CTL0=SHT0_8+REFON+ADC12ON;//内部1.5v参考电压,打开adc12,设置采样保持时间
ADC12CTL1=SHP;//使用采样定时器
ADC12MCTL0=SREF_1+INCH_10;//参考电压和通道选择
ADC12IE=BIT0;//ADC12MEM0 具有中断能力
ADC12CTL0|=ENC; //允许转换
_EINT(); //开启系统中断
while(1)
{
ADC12CTL0|=ADC12SC; //开启采样并AD转换
TemperF=(temp-2519)*761;
TemperF=TemperF/4096; //简化的华氏温度
TemperC=(temp-2692)*423;
TemperC=TemperC/4096;//简化的摄氏温度
send_com(0x80);
for(i=0;i<10;i++)
send_data(a);
display((uint)TemperF);//12864显示华氏温度
send_com(0x90);
for(i=0;i<10;i++)
send_data(b);
display((uint)TemperC);//12864显示摄氏温度
}
}
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
temp=ADC12MEM0;
}