📄 main.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 + -