⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 基于MSP430的温度采集质料
💻 C
字号:
#include<msp430x14x.h>
#define uchar unsigned char
#define uint unsigned int
uint time[2];
uchar falg,t;
float rest;
float temp;
uchar floot[];
/*共阳数码管0、1、2、3、4、5、6、7、8、9、清屏*/
const uchar codebusf[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
/*共阳数码管位选*/
const uchar busf[]={0x01,0x02,0x04};
/*温度查表值*/
const float  Temptabe[]={329.4,312.8,297.0,282.2,268.2,255.0,242.5,230.7,219.5,208.9,
                         198.9,189.4,180.5,172.0,164.0,156.3,149.1,142.3,135.8,129.6,
		         123.8,118.2,112.9,107.9,103.2,98.64,94.34,90.25,86.35,82.65,
			 79.13,75.77,72.58,69.54,66.64,63.88,61.24,58.73,56.34,54.05,
			 51.87,49.79,47.81,45.91,44.10,42.37,40.71,39.13,37.62,36.17,
			 34.79,33.47,32.20,30.99,29.83,28.72,27.66,26.64,25.66,24.73,
			 23.83};

/***************************
函数名称:in_clk
函数功能:设置SMCLK时钟源
****************************/					
void int_clk()
{
    uchar i;
    BCSCTL1&=~XT2OFF;  //打开XT振荡器
    BCSCTL2|=SELM1+SELS;//SMCLK 8M
    do
	{
        IFG1 &= ~OFIFG;                 //清除振荡错误标志
        for(i = 0; i < 100; i++)
	  _NOP();			//延时等待
        }
     while ((IFG1 & OFIFG) != 0);	//如果标志为1继续循环等待
    IFG1 &=~OFIFG;
}


/*******************
 函数名称:Delay_1ms
 函数功能:延时
********************/
 void Delay_1ms(unsigned int nValue)//delay 1ms at 8M
{
   unsigned int nCount;
   unsigned int ii;
   unsigned int jj;
   nCount = 1592;
   for(ii = nValue;ii > 0;ii--)
   {
      for(jj = nCount;jj > 0;jj--)
      _NOP();
   }
}

void int_TimeA()
{
  TACTL=TACLR;
  TACTL=TASSEL1;
  TACCTL1=CM1+SCS+CAP+CCIE;
}
void Time1_fag()
{
  P1OUT|=BIT3;
  Delay_1ms(20);
  P1OUT&=~BIT1;
  Delay_1ms(200);
}

void Time2_fag()
{
  P1OUT|=BIT2;
  Delay_1ms(20);
  P1OUT&=~BIT2;
  Delay_1ms(200);
}
/**********************
函数名称:Procedata
函数功能:查表求温度
**********************/
void Procedata()
{
   uchar i= 0;
   for(i = 0;i < 60;i++)
   {
     if(( Temptabe[i]<=rest)&&( Temptabe[i+1]>rest))
     {
       temp=(float)(i+(Temptabe[i]-rest)/(Temptabe[i]-Temptabe[i+1]));
       temp=100* temp;
       break;
    }
   }
 }
/*********************************
 函数名称:separate
 函数功能:分离temp存入缓冲floot中
**********************************/
 void separate()
 {
    if(temp/10)
   {  floot[t]=(int)temp%10;
      temp=temp/10;
      t++;
   }
     floot[t]=(int)temp%10;
}
/*************************
函数名称:restxianshi
函数功能:数码显示函数
*************************/
void restxianshi()
{  uchar n;
  for(n=0;n<3;n++)
  {
      P2OUT=0xff;
      P3OUT=busf[n];
      P2OUT=codebusf[floot[n]];
  }
  if(n==3)n=0;
}

void main()
{
  WDTCTL=WDTPW+WDTHOLD;
  int_clk();
  P1SEL=0X02;
  P1DIR=0X0C;
  P2DIR=0x07;
  P3DIR=0xff;
  int_TimeA();
  falg=1;
  while(1)
  {
     TACTL|=MC1;//开始工作
     Time1_fag();
     Time2_fag();
     rest=37*time[1]/time[0];
     Procedata();
     separate();
     restxianshi();
 }
}

#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)//中断服务程序
{
  switch(TAIV)
  {
    case 2:
     {
       if(falg==1)
           {
             TACTL&=~MC1;
             time[0]=TACCR1;
             int_TimeA();
             falg=2;
             TACTL|=MC1;
            }
      if(falg==2)
         {
            TACTL&=~MC1;
            time[1]=TACCR1;
            int_TimeA();
            falg=1;
          }

     }
    case 4:break;
    case 10:break;
}
}















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -