📄 section3.c
字号:
#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;// 上门限整数部分
int UP2;// 上门限小数部分
int DOWN1; // 下门限整数部分
int DOWN2; // 下门限小数部分
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; // 关闭看门狗
_DINT(); // 关闭中断
// 初始化变量
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(); // 打开中断
//读取FLASH里面的内容
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个数据
for(;;) // 等待配置数据
{
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;//数据配置完毕
}
}
}
}
for(;;)
{
if(nADC_Flag == 1)
{
nTemp = ADC_BUF_Temp[0];
nADC_Flag = 0;
// 这里只是简单的化成整数处理,就是乘以100
nTemp = 16434 - 29 * nTemp;
nTemp = (int)((nTemp / 100);//将结果除以100
nTemp1 = (int)(nTemp / 100);//最高位
nTemp2 = (nTemp - nTemp1 * 100) / 10;// 十位
nTemp3 = (nTemp - nTemp2 * 10 - nTemp1 * 100);//个位
// 这里只是简单的比较整数部分
if((nTemp > UP1) || (nTemp < DOWN1))
{
// 报警
Ring();
}
else
{
// 显示
Display(nTemp2,nTemp3,0);
}
}
}
}
//////////////////////////////////////////////
// 定时器中断,完成 ADC 转换
interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
{
int results;
ADC12CTL0 &= ~ENC; // 关闭转换
results = ADC12MEM0; // 读出转换结果
ADC_BUF[nADC_Count] = results;
nADC_Count += 1;
if(nADC_Count == 10)
{
nADC_Flag = 1; //设置标志
nADC_Count = 0;
for(int i = 0;i < 10;i++) ADC_BUF_Temp[i] = ADC_BUF[i];
}
ADC12CTL0 |= ENC + ADC12SC; // 开启转换
}
///////////////////////////////////////
// 处理来自端口 1 的中断
interrupt [PORT1_VECTOR] void PORT_ISR(void)
{
Delay_us(100);//消除延时抖动
if(P1IFG & BIT0) // P1.0列线上有按键输入
{
P1IFG &= ~(BIT4); // 清除中断标志位
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); // 清除中断标志位
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)
{
// 设置相应的行线为低电平
switch(PORT_count)
{
case 0:
{
// 设置为高电平
P1OUT |= BIT3;
P1OUT |= BIT4;
P1OUT |= BIT5;
P1OUT |= BIT6;
// 设置为低电平
P1OUT &= ~(BIT2);
break;
}
case:1
{
// 设置为高电平
P1OUT |= BIT2;
P1OUT |= BIT4;
P1OUT |= BIT5;
P1OUT |= BIT6;
// 设置为低电平
P1OUT &= ~(BIT3);
break;
}
case 2:
{
// 设置为高电平
P1OUT |= BIT3;
P1OUT |= BIT2;
P1OUT |= BIT5;
P1OUT |= BIT6;
// 设置为低电平
P1OUT &= ~(BIT4);
break;
}
case 3:
{
// 设置为高电平
P1OUT |= BIT3;
P1OUT |= BIT4;
P1OUT |= BIT2;
P1OUT |= BIT6;
// 设置为低电平
P1OUT &= ~(BIT5);
break;
}
case 4:
{
// 设置为高电平
P1OUT |= BIT3;
P1OUT |= BIT4;
P1OUT |= BIT5;
P1OUT |= BIT2;
// 设置为低电平
P1OUT &= ~(BIT6);
break;
}
default:break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -