TI中文支持网
TI专业的中文技术问题搜集分享网站

基于MSP430F1232的温度电压显示程序

麻烦专家帮我看看这到底是什么原因,我找了好多资料都没发现有什么问题。再此先表示感谢了!

/*单独显示温度可以实现,单独显示电压也可以实现,但是将温度与电压同时进行测量,则温度或者电压数值不发生变化。经过仿真器单步控制进行运行发现,能够多次进入temper()程序中,即能够多次进行温度测试,但是就是不能够改变内存中的温度值,不能使显示出来的温度变化*/

//

#include <msp430x12x2.h>

#define uchar unsigned char

#define CPU_F ((double)8000)

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1.0))

uchar led7[11]={0x3f,0x06,0x5b,0x4f,   //0,1,2,3,

              0x66,0x6d,0x7d,0x07,   //4,5,6,7,

              0x7f,0x6f,0x40};       //8,9,-

uchar abcd[8]={0x3d,0x5c,0x5c,0x5e,0,0,0,0};

unsigned long  real;

uchar flag;

void display(uchar a)          //a为0或者1,代表第一行和第二行

{

   uchar data;

   data=a*4-4;      

   P1OUT=abcd[data];         P3OUT=0x0f-data;      delay_us(100);

   P1OUT=abcd[data+1];       P3OUT=0x0e-data;      delay_us(100);

   P1OUT=abcd[data+2];       P3OUT=0x0d-data;      delay_us(100);

   P1OUT=abcd[data+3];       P3OUT=0x0c-data;      delay_us(100);

   P1OUT=0;  //关闭段码输出。使按键程序运行时对P3口操作不产生不想要的位显示。

}

//***显示温度程序

void temper(void)

{

 uchar tem;

 ADC10CTL1=INCH_10+ADC10DIV_4+ADC10SSEL_2+CONSEQ_2;    //模拟输入A10、ADC10CLK/8、CONSEQ_2单通道多次转换、INCH_10选择内部通道A10

 ADC10CTL0=SREF_1+ADC10SHT_3+ADC10SR+MSC+REFON+ADC10ON+ADC10IE;//启动采样与转换

 ADC10CTL0|=ENC+ADC10SC;

 tem=real*423/1024-278;

   abcd[0]=led7[tem/10];

   abcd[1]=led7[tem%10];

   abcd[2]=0x63;

   abcd[3]=0x39;

}

//***得到电压

void volt(void)

{

 uchar tem;

 ADC10CTL1=CONSEQ_2;    //模拟输入A10、ADC10CLK/8、CONSEQ_2单通道多次转换、INCH_10选择内部通道A10

 ADC10CTL0 = SREF_0+ADC10SHT_2 + MSC + ADC10ON + ADC10IE;////启动采样与转换

 ADC10CTL0|=ENC+ADC10SC;

 ADC10AE = 0x01;                          // P2.0 ADC option select

 ADC10DTC1 = 0x40;                         // 64 conversions

 tem=real*33/1023;

 abcd[4]=0x3e;

 abcd[5]=0x48;

 abcd[6]=led7[tem/10]+0x80;

 abcd[7]=led7[tem%10];

}

//***初始化定时器

void int_timera()

{

    TACTL  = TASSEL0 + TACLR ;      // SMCLK, clear TAR

    TACTL |= MC0 + TAIE;                       //增加模式,使能中断

    TACCR0=9999;                               //中断周期为10ms

}

//*************************************************************************

//                  主函数

//*************************************************************************

void main()

{

  WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset

  P1DIR=0xff;

  P3DIR=0xff;

  int_timera();

  BCSCTL1=0xe7;   //MOV.B #0E7h,&BCSCTL1        ;E7H  C7h  

  BCSCTL2=0x8a;   //MOV.B #08Ah,&BCSCTL2        ;88H  8CH  8Ah  8Eh  

  _EINT();

  flag=200;

  while(flag)

  {

   display(1);

  }

  flag=50;

  while(1)

  {  

    while(flag==0)

    {

      temper();

      volt();

      flag=50;

    }

    display(1);

    display(2);

  }

}

//******ADC中断服务程序**********

#pragma vector=ADC10_VECTOR

__interrupt void ADC10ISR (void)

{

 real=ADC10MEM;

 //ADC10CTL0&=~ADC10IFG;//清除中断标志位

}

#pragma vector = TIMERA1_VECTOR

__interrupt void timera(void)

{

 switch(TAIV)

 {

 case 2:break;

 case 4:break;

 case 10:flag–;break;

 }

}

Lina Lian:

Res Liu ,你好!

请问你‘但是将温度与电压同时进行测量,则温度或者电压数值不发生变化。’是什么意思?我看了你的程序,发现你只在测量通道10,即只在测量温度啊?

赞(0)
未经允许不得转载:TI中文支持网 » 基于MSP430F1232的温度电压显示程序
分享到: 更多 (0)