3694|5

24

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

今天用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();
}
}

最新回复

奇怪了 为什么 我显示是70多呢。。。 int main( void ) { WDTCTL=WDTPW+WDTHOLD; //关看门狗 P1DIR |=BIT7+BIT5+BIT6+BIT0; BCSCTL1 =CALBC1_1MHZ; //设定DCO 为1MHZ DCOCTL =CALDCO_1MHZ; ADC10CTL0 = ADC10ON+REFON+ADC10SHT_3+SREF_1; // 设置 ADC10, 参考电压1.5v, 采样时间 ADC10CTL1 = INCH_10; // 用采样定时器 ADC10CTL0|=ADC10IE; // 使能 ADC10IFG.0 while(1) {      ADC10CTL0 |=ENC+ADC10SC; //启动AD 转换          _BIS_SR(GIE+CPUOFF); //开总中断并进入低功耗          temp_value=((ad_value*1.5/1023)-0.986)/0.0035; //计算温度      Temp2 = (int)temp_value/ 10;      Temp1 =(int)temp_value % 10;      Temp0 = ((int)(temp_value*100) % 100)/10;      Initialize_LCD();                   pos(0, 0);                   write_string( "WENDU:");                   pos(0,3);                   write_data(Temp2 + '0');                   write_data(Temp1 + '0');                   write_data('.');                   write_data(Temp0 + '0');                   write_data('C');    delay_ms(500);          // delay 1 second } } #pragma vector = ADC10_VECTOR //ADC10 中断服务 __interrupt void adc_isr(void) { ad_value=ADC10MEM; //将AD 采样值存入ad_value _BIC_SR_IRQ(CPUOFF); //退出低功耗0 }  详情 回复 发表于 2012-8-16 20:58

点评

奇怪了 为什么 我显示是70多呢。。。 int main( void ) { WDTCTL=WDTPW+WDTHOLD; //关看门狗 P1DIR |=BIT7+BIT5+BIT6+BIT0; BCSCTL1 =CALBC1_1MHZ; //设定DCO 为1MHZ DCOCTL =CALDCO_1MHZ; ADC10CTL0 = AD  详情 回复 发表于 2012-8-16 20:58
 
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
不错

点评

本人新手上路 谢谢支持 :carnation:  详情 回复 发表于 2012-7-23 19:09
 
 

回复

24

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 qxdzhidao 的帖子

本人新手上路  谢谢支持  :carnation:
 
 
 

回复

182

帖子

0

TA的资源

一粒金砂(高级)

4
 
呵呵,做的不错! 其实也可以用定时器控制AD的,因为很多时候没必要时时刻刻都进行AD转换测温度,可以定时10ms等等之类的,未进入定时中断时进入低功耗模式,产生中断后开启转换并等待读取温度值显示,之后又进入低功耗模式了~
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

5
 
是不是有些变量还没定义啊???,编译后有错误啊!!!ADCresult,DegC...
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 楼主 ice0107 的帖子

奇怪了 为什么 我显示是70多呢。。。
int main( void )
{
WDTCTL=WDTPW+WDTHOLD; //关看门狗
P1DIR |=BIT7+BIT5+BIT6+BIT0;
BCSCTL1 =CALBC1_1MHZ; //设定DCO 为1MHZ
DCOCTL =CALDCO_1MHZ;

ADC10CTL0 = ADC10ON+REFON+ADC10SHT_3+SREF_1; // 设置 ADC10, 参考电压1.5v, 采样时间
ADC10CTL1 = INCH_10; // 用采样定时器
ADC10CTL0|=ADC10IE; // 使能 ADC10IFG.0



while(1)
{
     ADC10CTL0 |=ENC+ADC10SC; //启动AD 转换
         _BIS_SR(GIE+CPUOFF); //开总中断并进入低功耗
         temp_value=((ad_value*1.5/1023)-0.986)/0.0035; //计算温度
     Temp2 = (int)temp_value/ 10;
     Temp1 =(int)temp_value % 10;
     Temp0 = ((int)(temp_value*100) % 100)/10;

     Initialize_LCD();
                  pos(0, 0);
                  write_string( "WENDU:");
                  pos(0,3);
                  write_data(Temp2 + '0');
                  write_data(Temp1 + '0');
                  write_data('.');
                  write_data(Temp0 + '0');
                  write_data('C');

   delay_ms(500);          // delay 1 second
}

}
#pragma vector = ADC10_VECTOR //ADC10 中断服务
__interrupt void adc_isr(void)
{
ad_value=ADC10MEM; //将AD 采样值存入ad_value
_BIC_SR_IRQ(CPUOFF); //退出低功耗0
}
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表