?? 溫度.c
字號:
#include "msp430x44x.h" // 包含頭文件
#include <math.h> //包含數學運算頭文件
#define Trt 25 //預先測量到的室溫
#define Th 50 //高溫告警溫度
#define Tl 0 //低溫告警溫度
int i=0, k=0,Vrt; //定義全局變量
int ADC_Result[16];
float T; //測量到的溫度
void init(void); //初始化函數
void ADC12(void); //A/D轉換函數
void Alarm(float t); //告警處理函數
void init(void)
{
TACTL=TASSEL1+TACLR+MC_0+TACLR; //定時器初始化,工作在"up"模式
CCTL0|=CCIE; //使能CCR0中斷
CCR0=0x0FF; //設定定時值
_EINT(); //打開中斷
P2DIR|=BIT0+BIT1; //P2.0和P2.1為告警輸出;
}
void ADC12(void)
{
ADC12CTL0 &=~ ENC; //在進行設置時首先復位ADC的轉換使能
ADC12CTL0 = ADC12ON+REF2_5V+SHT0_8+REFON; //采用內部2.5V參考,打開通道10REFON自動打開
ADC12CTL1 = SHP+ADC12SSEL_2; //上升沿采樣,主時鐘,MEM0
ADC12MCTL0 = EOS + INCH_10+SREF_1; //選擇通道10,Vref+為參考電壓,進行溫度測量
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC; // 開始轉換
if ((ADC12IFG & BIT0)==1) //如果轉換完畢,讀走數據
ADC_Result[i]=ADC12MEM0;
}
void Alarm(float t)
{
if(t>=Th)
P2OUT|=BIT1; //高溫告警
else if(t<=Tl)
P2OUT|=BIT0; //低溫告警
else
P2OUT&=~(BIT0+BIT1); //無告警
}
interrupt[TIMERA0_VECTOR] void Timer_A (void) //中斷處理子程序//
{
int ADC_Sum=0;
float Vst;
for (i=0;i<16;i++) //連續進行16次轉換,提高精度
{
ADC12();
ADC_Sum +=ADC_Result[i]; //求和
}
ADC_Sum>>=4; //將ADC_Sum右移4位,相當于除以16.得到平均的結果;
Vst=( ADC_Sum /4095.0)*2500; //完成轉換,得到電壓值
k++;
#ifndef Trt
T=(Vst-986)/3.35; //測出用0度作基準的溫度
#else
if (k==1) Vrt=Vst; //如果定義Trt,則將第一次的轉換結果作為室溫下的Vrt
T=(Vst-Vrt)/3.35+Trt; //測出用室溫作基準時的溫度
#endif
Alarm(T); //告警處理
}
void main (void)
{
init(); //初始化
LPM1; //進入低功耗模式1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -