Main C

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 7

#include "include.

h"

#define N1 7
#define VMIN 4357
#define VMAX 22018
#define N_results 7
unsigned int ch0results[N_results];
int flag=0,flag1=0;
int results,percent1,percent2=0,I,T,N_bling=0;
long sum=0,array1[5]={0},array2[5]={0},TMIN=0,TMAX=2000;
float percent;
void main()
{
_DINT();
WDTInit();
//ClockInit();
PortInit();
Delay_us(20);
flash_Init();
LCD_Init1();
Delay_ms(5);
ADC_Init();
SVSSetup(0x06,1);
while(1)
{
LCD_Init2();
switch(flag)
{case 0:
WDTCTL =WDT_MRST_32;
SD24CCTL0|=SD24SC;
Delay_ms(15);
_EINT();
break;
case 1:
_EINT();
if(TMIN>0||TMIN==0)
{
if(array1[4]==10)//主要是设置万位从 9 跳到“-”时,其他位均为 0,此刻 TMIN 被设置其实为-
0,但是显示处理时就默认为零,无法保留下’-‘号,故加此判断语句
_NOP();
else
array1[4]=TMIN/10000%10;
array1[3]=TMIN/1000%10;
array1[2]=TMIN/100%10;
array1[1]=TMIN/10%10;
array1[0]=TMIN%10;
}
else
{
/* if(array1[4]==10)
_NOP();
else
array1[4]=-1*TMIN/10000%10;*/
array1[4]=10;//设置上下线为负数时保持万位为“—”
array1[3]=-1*TMIN/1000%10;
array1[2]=-1*TMIN/100%10;
array1[1]=-1*TMIN/10%10;
array1[0]=-1*TMIN%10;
}
if(N_bling==4)
{
array1[N_bling]=(array1[N_bling]+flag1);
flag1=0;
if(array1[N_bling]==10)
{ TMIN=-1*(1000*array1[3]+100*array1[2]+10*array1[1]+array1[0]);
if(TMIN==0)
{ set_T(TMIN);
value_buffB[0]=0x20;
LCDWriteT();
Delay_ms(150);
LCDWriteT();
Delay_ms(150);
break;
}
}
else
{ if(array1[N_bling]>10)
array1[N_bling]=0;
TMIN=10000*array1[4]+1000*array1[3]+100*array1[2]+10*array1[1]+array1[0];
}
}
else
{
array1[N_bling]=(array1[N_bling]+flag1)%10;
flag1=0;
if(array1[4]==10)
TMIN=-1*(1000*array1[3]+100*array1[2]+10*array1[1]+array1[0]);
else
TMIN=10000*array1[4]+1000*array1[3]+100*array1[2]+10*array1[1]+array1[0];
}
set_T(TMIN);
if(array1[4]==10)
value_buffB[0]=0x20;
LCDWriteT();
Delay_ms(150);
LCDWriteT();
Delay_ms(150);
break;
case 2:
_EINT();
// WDTCTL=WDTPW+WDTCNTCL;
// WDTInit();
if(TMAX>0||TMAX==0)
{
if(array2[4]==10)
_NOP();
else
array2[4]=TMAX/10000%10;
array2[3]=TMAX/1000%10;
array2[2]=TMAX/100%10;
array2[1]=TMAX/10%10;
array2[0]=TMAX%10;
}
else
{
/* if(array2[4]==10)
_NOP();
else
array2[4]=-1*TMAX/10000%10;*/
array2[4]=10;
array2[3]=-1*TMAX/1000%10;
array2[2]=-1*TMAX/100%10;
array2[1]=-1*TMAX/10%10;
array2[0]=-1*TMAX%10;
}
if(N_bling==4)
{
array2[N_bling]=(array2[N_bling]+flag1);
flag1=0;
if(array2[N_bling]==10)
{ TMAX=-1*(1000*array2[3]+100*array2[2]+10*array2[1]+array2[0]);
if(TMAX==0)
{
set_T(TMAX);
value_buffB[0]=0x20;
LCDWriteT();
Delay_ms(200);
LCDWriteT();
Delay_ms(200);
break;
}
}
else
{ if(array2[N_bling]>10)
array2[N_bling]=0;
TMAX=10000*array2[4]+1000*array2[3]+100*array2[2]+10*array2[1]+array2[0];
}
}
else
{
array2[N_bling]=(array2[N_bling]+flag1)%10;
flag1=0;
if(array2[4]==10)
TMAX=-1*(1000*array2[3]+100*array2[2]+10*array2[1]+array2[0]);
else
TMAX=10000*array2[4]+1000*array2[3]+100*array2[2]+10*array2[1]+array2[0];
}
set_T(TMAX);
if(array2[4]==10)
value_buffB[0]=0x20;
LCDWriteT();
Delay_ms(200);
LCDWriteT();
Delay_ms(200);
break;
case 3:
// WDTCTL=WDTPW+WDTCNTCL;
// WDTInit();
write_flash(0x1040,TMIN);
write_flash(0x1000,TMAX);
value_buffB[0]=0x77;
value_buffB[1]=0xF3;
value_buffB[2]=0xB5;
value_buffB[3]=0xF3;
value_buffB[4]=0x8F;
LCDWriteByte2();
Delay_ms(1000);
FCTL3=0x1111u;
break;
default:
FCTL3=0x1111u;
break;
}
}
}

#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
//Delay_ms(10);
WDTCTL=WDTPW+WDTCNTCL;
WDTInit();
if(P2IFG&BIT7)
{
// WDTCTL=WDTPW+WDTCNTCL;
// WDTInit();
P2IFG&=~BIT7;
Delay_ms(60);
if(!(P2IN&BIT7))
{
flag+=1;
if(flag==2)
N_bling=0;
else if(flag>3)
flag=0;
}

}
else if(P2IFG&BIT0)//位选择
{
P2IFG&=~BIT0;
if(flag>0)
{
Delay_ms(20);
if(!(P2IN&BIT0))
{
N_bling++;
if(N_bling>4)
N_bling=0;
}

}
}
else if(P2IFG&BIT6)//数值选择
{
P2IFG&=~BIT6;
if(flag>0)
{
Delay_ms(20);
if(!(P2IN&BIT6))
flag1=1;
}
}
else
{
FCTL3=0x1111u;
}

#pragma vector=SD24_VECTOR
__interrupt void SD24AISR(void)
{
static unsigned int index=0;
switch(SD24IV)
{
_EINT();
WDTCTL=WDTPW+WDTCNTCL;
WDTInit();
// WDTCTL =WDT_MRST_32;
case 2:
break;
case 4:
ch0results[index]=SD24MEM0;
sum+=ch0results[index];
if(++index==N_results)
{
index=0;
results=sum/N_results;
sum=0;
percent=(float)(results-VMIN)/(VMAX-VMIN);
percent1=(int)(percent*10000+0.5);
if((percent1-percent2)>1||(percent2-percent1)>1)
percent2=percent1;
percent=percent2/10000.0;
I=400+(int)(1600*percent);
T=TMIN+(int)(percent*(TMAX-TMIN));
// T=(int)((I-400)*(TMAX-TMIN)/1600);
deal_I(I);
if(T>(TMAX+(TMAX-TMIN)*0.14))
deal_TH();
else if(T<(TMIN-(TMAX-TMIN)/40))
deal_TL();
else if(T<0)
deal_T2(T);
else
deal_T1(T);
LCDWriteByte1();
break;
}
case 6:
break;
case 8:
break;
default:
FCTL3=0x1111u;
break;
}
//__bis_SR_register_on_exit(LPM0_bits);
}
void PortInit()
{
//定义需要用到的 I/O 口
P1DIR=0xEF;//P1.4 为输入,其他为输出
P1OUT&=~BIT2;//P1.2 输出低
P1OUT|=/*BIT2+*/BIT5+BIT6;//P1.5,P1.6 配置为输出高
P1REN|=BIT5+BIT6;//P1.5,P1.6 上拉/下拉电阻使能
P2DIR&=~(BIT0+BIT6+BIT7);//P2.0,P2.6,P2.7 为输入
//P2REN|=BIT0+BIT6+BIT7;
P2SEL&=~(BIT0+BIT6+BIT7);//P2SEL 的 bit6,bit7 初始值为 1,把老子整惨了
P2IE|=BIT0+BIT6+BIT7;//p2.0,P2.6,P2.7 带中断
P2IES|=BIT0+BIT6+BIT7;//p2.0,P2.6,P2.7 上升沿促发
P2IFG&=~(BIT0+BIT6+BIT7);//P2.0,P2.6,P2.7 中断标志位清零

void flash_Init(void)
{
long TC,TD;
TC=read_flash(0x1040);//read c 段
TD=read_flash(0x1000);//read d
if(TC==TD)
{
_NOP();
}
else
{
TMIN=TC;
TMAX=TD;
}
}

void ClockInit()
{

//自己设置启动时钟源,msp430afe2**系列没有 LFXT1,系统默认 Dco


uchar i;
//DCOCTL=CALDCO_8MHZ_;
//BCSCTL1=CALBC1_8MHZ_;
//BCSCTL2=0X06;
DCOCTL=0X30;
BCSCTL1=0X83;
do{
IFG1&=~OFIFG;//清除震荡失效标志位
for(i=0;i<100;i++)
_NOP();
}while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;

void write_flash(unsigned long addr,long value)//向指定地址写入一个 long 型值


{
long *Flash_ptr;
Flash_ptr=(long *)addr;
FCTL1=FWKEY+ERASE;
FCTL3=FWKEY;
*Flash_ptr=0;
FCTL1=FWKEY+WRT;
*Flash_ptr=value;
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
}

long read_flash(unsigned long addr)//读取一个 long 的数据


{
long *address;
address=(long *)addr;
return *address;
}

void WDTInit()
{
WDTCTL =WDTPW+WDTHOLD;
//WDTCTL = WDT_MDLY_32;//1000MS
// IE1|=WDTIE;
}

void ADC_Init(void)
{
volatile unsigned int i;
SD24CTL=SD24REFON+SD24XDIV_3+SD24VMIDON+SD24SSEL_1;//SD24_init(0x00B0,SD24REFON);//
内部参考
SD24CCTL0=SD24SNGL+SD24DF+SD24XOSR+SD24OSR_1024+SD24IE;
SD24INCTL0|=SD24INCH_0+SD24INTDLY_0;//param.inputChannel=SD24_INPUT_CH_ANALOG;//模
拟通道选择
//__delay_cycles(0x3600);//延时到 1.2V 参考启动
for(i=0;i<0x3600;i++);
//SD24CCTL0|=SD24SC;
//Delay_ms(50);
}

void TimeAInit()
{
TACCTL0=CCIE;
TACCR0=62500;
TACTL=TASSEL_2+MC_3;
}

You might also like