?? section3.c
字號(hào):
#include <MSP430X14X.h>
#include "alarm.h"
#define AT_DATA1 0xef00
#define AT_DATA2 0xf000
#define AT_DATA3 0xf100
#define AT_DATA4 0xf200
// 全局變量
int FLAG_PORT;
int PORT_INPUT;
int PORT_count;
int nADC_Flag;
int nADC_Count;
int ADC_BUF_Temp[10];
int ADC_BUF[10;
int UP1;// 上門限整數(shù)部分
int UP2;// 上門限小數(shù)部分
int DOWN1; // 下門限整數(shù)部分
int DOWN2; // 下門限小數(shù)部分
void main(void)
{
int nTemp;
int *pFlash;
int nRes;
int nCount;
char chrTemp[6];
float fTemp;
int m_up1;
int m_up2;
int m_down1;
int m_down2;
char nTemp1;
char nTemp2;
char nTemp3;
WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
_DINT(); // 關(guān)閉中斷
// 初始化變量
FLAG_PORT = 0;
PORT_INPUT = 0;
PORT_count = 0;
nADC_Flag = 0;
nADC_Count = 0;
nRes = 1;
// 初始化
Init_CLK();
Init_ADC();
Init_TimerA();
Init_INPUTPort();
Init_TimerB();
Init_DispPort();
Init_AlarmPort();
_EINT(); // 打開(kāi)中斷
//讀取FLASH里面的內(nèi)容
pFlash= (int*)(AT_DATA1);
UP1 = *pFlash;
if(UP1 == 0X00FF)
{
nRes = 0;
}
else
{
UP1 *= 8;
}
pFlash= (int*)(AT_DATA2);
UP2 = *pFlash;
if(UP2 == 0X00FF)
{
nRes = 0;
}
else
{
UP1 += UP2;
}
pFlash= (int*)(AT_DATA3);
DOWN1 = *pFlash;
if(DOWN1 == 0X00FF)
{
nRes = 0;
}
else
{
DOWN1 *= 8;
}
pFlash= (int*)(AT_DATA4);
DOWN2 = *pFlash;
if(DOWN2 == 0X00FF)
{
nRes = 0;
}
else
{
DOWN1 += DOWN2;
}
if(nRes == 0)
{
nCount = 0;
// 需要讀取4個(gè)數(shù)據(jù)
for(;;) // 等待配置數(shù)據(jù)
{
if(FLAG_PORT == 1)
{
switch(nCount)
{
case 0:
{
FLASH_ww(AT_DATA1,PORT_INPUT)
break;
}
case 1:
{
FLASH_ww(AT_DATA2,PORT_INPUT)
break;
}
case 2:
{
FLASH_ww(AT_DATA3,PORT_INPUT)
break;
}
case 3:
{
FLASH_ww(AT_DATA4,PORT_INPUT)
break;
}
default:break;
}
FLAG_PORT = 0;
chrTemp[nCount] = PORT_INPUT;
nCount += 1;
if(nCount >= 4)
{
UP1 = chrTemp[0] * 8 + chrTemp[1];
DOWN1 = chrTemp[2] * 8 + chrTemp[3];
break;//數(shù)據(jù)配置完畢
}
}
}
}
for(;;)
{
if(nADC_Flag == 1)
{
nTemp = ADC_BUF_Temp[0];
nADC_Flag = 0;
// 這里只是簡(jiǎn)單的化成整數(shù)處理,就是乘以100
nTemp = 16434 - 29 * nTemp;
nTemp = (int)((nTemp / 100);//將結(jié)果除以100
nTemp1 = (int)(nTemp / 100);//最高位
nTemp2 = (nTemp - nTemp1 * 100) / 10;// 十位
nTemp3 = (nTemp - nTemp2 * 10 - nTemp1 * 100);//個(gè)位
// 這里只是簡(jiǎn)單的比較整數(shù)部分
if((nTemp > UP1) || (nTemp < DOWN1))
{
// 報(bào)警
Ring();
}
else
{
// 顯示
Display(nTemp2,nTemp3,0);
}
}
}
}
//////////////////////////////////////////////
// 定時(shí)器中斷,完成 ADC 轉(zhuǎn)換
interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
{
int results;
ADC12CTL0 &= ~ENC; // 關(guān)閉轉(zhuǎn)換
results = ADC12MEM0; // 讀出轉(zhuǎn)換結(jié)果
ADC_BUF[nADC_Count] = results;
nADC_Count += 1;
if(nADC_Count == 10)
{
nADC_Flag = 1; //設(shè)置標(biāo)志
nADC_Count = 0;
for(int i = 0;i < 10;i++) ADC_BUF_Temp[i] = ADC_BUF[i];
}
ADC12CTL0 |= ENC + ADC12SC; // 開(kāi)啟轉(zhuǎn)換
}
///////////////////////////////////////
// 處理來(lái)自端口 1 的中斷
interrupt [PORT1_VECTOR] void PORT_ISR(void)
{
Delay_us(100);//消除延時(shí)抖動(dòng)
if(P1IFG & BIT0) // P1.0列線上有按鍵輸入
{
P1IFG &= ~(BIT4); // 清除中斷標(biāo)志位
Delay_ms(1);
for(;;)
{
if((P1IFG & BIT4) == 0) break;
}
// 獲得輸入值
switch(PORT_count)
{
case 0:
{
PORT_INPUT = 9;
PORT_count = 1;
break;
}
case:1
{
PORT_INPUT = 7;
PORT_count = 2;
break;
}
case 2:
{
PORT_INPUT = 5;
PORT_count = 3;
break;
}
case 3:
{
PORT_INPUT = 3;
PORT_count = 4;
break;
}
case 4:
{
PORT_INPUT = 1;
PORT_count = 0;
break;
}
default:break;
}
FLAG_PORT = 1;
}
if(P1IFG & BIT1)//// P1.1列線上有按鍵輸入
{
P1IFG &= ~(BIT5); // 清除中斷標(biāo)志位
Delay_ms(1);
for(;;)
{
if((P1IFG & BIT5) == 0) break;
}
// 獲得輸入值
switch(PORT_count)
{
case 0:
{
PORT_INPUT = 0;
PORT_count = 1;
break;
}
case:1
{
PORT_INPUT = 8;
PORT_count = 2;
break;
}
case 2:
{
PORT_INPUT = 6;
PORT_count = 3;
break;
}
case 3:
{
PORT_INPUT = 4;
PORT_count = 4;
break;
}
case 4:
{
PORT_INPUT = 2;
PORT_count = 0;
break;
}
default:break;
}
FLAG_PORT = 1;
}
}
interrupt [TIMERB0_VECTOR] void TimerB_ISR(void)
{
// 設(shè)置相應(yīng)的行線為低電平
switch(PORT_count)
{
case 0:
{
// 設(shè)置為高電平
P1OUT |= BIT3;
P1OUT |= BIT4;
P1OUT |= BIT5;
P1OUT |= BIT6;
// 設(shè)置為低電平
P1OUT &= ~(BIT2);
break;
}
case:1
{
// 設(shè)置為高電平
P1OUT |= BIT2;
P1OUT |= BIT4;
P1OUT |= BIT5;
P1OUT |= BIT6;
// 設(shè)置為低電平
P1OUT &= ~(BIT3);
break;
}
case 2:
{
// 設(shè)置為高電平
P1OUT |= BIT3;
P1OUT |= BIT2;
P1OUT |= BIT5;
P1OUT |= BIT6;
// 設(shè)置為低電平
P1OUT &= ~(BIT4);
break;
}
case 3:
{
// 設(shè)置為高電平
P1OUT |= BIT3;
P1OUT |= BIT4;
P1OUT |= BIT2;
P1OUT |= BIT6;
// 設(shè)置為低電平
P1OUT &= ~(BIT5);
break;
}
case 4:
{
// 設(shè)置為高電平
P1OUT |= BIT3;
P1OUT |= BIT4;
P1OUT |= BIT5;
P1OUT |= BIT2;
// 設(shè)置為低電平
P1OUT &= ~(BIT6);
break;
}
default:break;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -