📄 main.c
字号:
typedef unsigned char uchar;
typedef unsigned int uint;
#include <msp430x16x.h>
#include "math.h"
#include "lcd.h"
#define uint unsigned int
#define uchar unsigned char
//uchar static adc_flag=0;
uchar static count=0;
void Disp1Char(uchar x,uchar y,uchar data);
////////////////////////////////////////////////////
void int_clk()
{
uchar i;
BCSCTL1&=~XT2OFF; //打开XT振荡器
BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M
do
{
IFG1 &= ~OFIFG; //清除振荡错误标志
for(i = 0; i < 100; i++)
_NOP(); //延时等待
}
while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待
IFG1&=~OFIFG;
}
//////////////////////////////////////////////////////
int_adc()
{
P6SEL |= 0X01; //选择AD通道
ADC12CTL0 = SHT0_2 + ADC12ON; // Set sampling time, turn on ADC12
ADC12CTL1 = SHP; // Use sampling timer
ADC12IE = 0x01; // Enable interrupt
ADC12CTL0 |= ENC;
}
////////////////////////////////////////////////////////
uint results;
int b1,b2,b3,b4;
float b;
uint padc=0;
float r1=815.3570158;
float B=1202.656618;
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
ADC12CTL0&=~ENC;
//adc_flag=1;
results = ADC12MEM0; // 读取A0转换结果
count++;
count=0;
LPM0_EXIT;
}
///////////////////////////////////////////
float rt,v;
void data()
{
v=results*2.5/4095;
rt=v*15000/(11*(3.3-v/11));
b=B/(log(rt)-log(r1)+B/298.15)-273.15;
b1=(uchar)(b/10);
b2=(uchar)(b-b1*10);
b3=(uchar)(((b-b1*10-b2)*100)/10);
b4=(uchar)(((b-b1*10-b2)*100)-b3*10);
Disp1Char(5,1,b1+48);
Disp1Char(6,1,b2+48);
Disp1Char(7,1,'.');
Disp1Char(8,1,b3+48);
Disp1Char(9,1,b4+48);
uchar d;
for(d=0;d<=20;d++)
{
Delay5ms();
}
count=0;
}
/////////////////////////////////////////////////////////////
int main( void )
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
int_clk(); //系统时钟初始化
LcdReset();
uchar *ptr="temperature:";
_EINT(); //使能中断
int_adc();//初始化串口
DispStr(0,0,ptr) ;
while(1)
{
ADC12CTL0 |= ADC12SC+ENC; // 开启转换
LPM0;
data();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -