• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-09-04
  • 语言: 其他
  • 标签: msp430  温度报警  

资源简介

1. 利用一台PC台式机和1块MSP430F1xx实验板,PC机称主机,MSP430F1xx实验板称从机,主机和从机之间通过串口进行连接,主机负责下达命令,对从机进行监控;从机负责监控现场的信号,响应主机下达的命令,并传送主机所要的数据; 2. 从机采集的数据为现场温度(用可调的直流电压代替),从机实时将采集到的温度值通过1个数码管和8发光二极管显示出来;当从机检测到现场的温度超过一定值(如2.8v以上,实验时通过调节可调电阻值达到),并持续2秒以上,则发出通过蜂鸣器发出报警声,同时将LED1点亮,表示现场的制冷设备处于投入状态;蜂鸣报警声可由现场人员通过按下Key1键消除,也可以响到5秒后自动停止;当温度回到正常值(如2.5v以下,实验时通过调节可调电阻值达到),熄灭LED1,表示制冷设备处于关闭状态。要求将报警次数通过数码管显示出来。操作Key7键可切换数码管和发光二极管显示的内容,如果当前显示报警次数和制冷设备工作状态,按下Key7键,显示温度值,再按一下key7键,则显示是报警次数和制冷设备工作状态。按下Key3键可将报警次数清零。 3. 主机向从机下达的命令有: 1)获取现场当前的温度值; 2)获取现场的报警次数;3)清除报警次数。从机对主机发出的命令作出响应。

资源截图

代码片段和文件信息


#include “io430.h“
#include “intrinsics.h“

/*全局变量声明*/
char warn;//用于记录报警次数
char count1;//用于延时2S
int show;//用于记录按下KEY7情况,show=1,显示报警;show=0,显示温度
unsigned int tem;//用于实时记录温度值
float tem_show;//用于显示温度值
char string[16]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5e0x790x71};//用于数码管显示
char highlowlow1low2Lab;//用于温度显示
char *p;//用于温度显示的指针

/*函数声明*/
//初始化子程声明
void PORT_Init();//管脚初始化(LED,数码管,蜂鸣器,按键中断)
void ADC_Init();//数模转换初始化
//void Sys_Init();//时钟初始化
void USART1_Init();//串口0初始化

//功能子程
void delay();//用于延时,延时0.25S
int input(char Lab);//用于数码管输入
void show_w();//用于显示报警
void show_t();//用于显示温度
void temperature();//用于温度采样监测 

/*主程序*/
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  //变量初始化
  warn=0;
  count1=0;
  show=0;//先显示温度
  //端口初始化
  __disable_interrupt();
   USART1_Init();                   //串口初始化
   ADC_Init();                      //数模转换初始化
   PORT_Init();                     //管脚初始化
  __enable_interrupt();
  
  //循环测温,
  for(;;)
  {
    if(show==0)
    {
      show_t();
    }
    else
    {
      show_w();
    }
    
    temperature();//0.25S测一次
    
    if (tem>0xD93)
    {
      if (count1<8)
          count1++;
      //else if(count1==8)
          //warn++;
    }
    else if (tem<0x9B2)
    {
      count1=0;
      if (show==1)
      {
        P2OUT_bit.P2OUT_0=1;//LED1关
      };
    }
    else 
    {
      count1=0;
    }
    
    if (count1==8)//2S以上都大于2.8V
    {
      warn++;
      if(show==1)
      {
        P2OUT_bit.P2OUT_0=0;//LED1亮
      };
      P6OUT_bit.P6OUT_5=0;//蜂鸣器响
      unsigned int i;
      for(i=0;i<21;i++)
      {
        if(P6OUT_bit.P6OUT_5==0)
          delay();
      };
      P6OUT_bit.P6OUT_5=1;
    }
  };
}

/*按键中断*/
#pragma vector=PORT1_VECTOR         
__interrupt void port_int()
{
    if (P1IFG_bit.P1IFG_0==1)// 按下 key1
    {
      P6OUT_bit.P6OUT_5=1;//BUZZ停止响
      P1IFG_bit.P1IFG_0=0;
    }
    if (P1IFG_bit.P1IFG_2==1)// 按下 key3
    {
      warn=0;
      P1IFG_bit.P1IFG_2=0;
    }
    if (P1IFG_bit.P1IFG_6==1)// 按下 key7      
    {
      if(show==0)
      {
        show=1;
      }
      else
      {
        show=0;
      }
      P1IFG_bit.P1IFG_6=0;
    }
}

/*串口中断*/
#pragma vector=USART1RX_VECTOR     
__interrupt void U1RX_isr()
{
  char Rx;
  Rx=U1RXBUF;
  if (Rx==‘W‘) //将相关参数传给电脑:现场报警次数
    {
        while (!IFG2_bit.UTXIFG1);
        U1TXBUF=warn+‘0‘;
    }
  else if (Rx==‘T‘)//将相关参数传给电脑:当前温度值
    {
        while (!IFG2_bit.UTX

评论

共有 条评论