MSP430G2553做DS18B20温度控制器

发布者:忙中取乐最新更新时间:2016-08-17 来源: eefocus关键字:MSP430G2553  DS18B20  温度控制器 手机看文章 扫描二维码
随时随地手机看文章
//P2.5 继电器输出
#include"msp430g2553.h"
#include"LCD1602_4bit.h"
#include"DS18B20.H"
unsigned char temp_L,temp_H,temp_s,temp_s_flag,temp_s_H,temp_s_M,temp_s_L,temp;
unsigned char time_num;
unsigned char i1;
unsigned char table_1[]="Real:";
unsigned char table_2[]="set:";
unsigned char table_3[]="setting:";
unsigned char key3_flag;//,key1_flag,key2_flag;
void time0_int(void)
{
CCTL0 = CCIE;              //CCTLx是捕获/比较控制寄存器
CCR0 = 40000;
TACTL = TASSEL_2+MC_1+ID_3;//增计数模式从0计到CCR0
}
void io_int(void)
{
  P1DIR&=~BIT3;//输入
  P1DIR&=~BIT4;//输入
  P2DIR&=~BIT4;//输入
  P2DIR|=BIT5;//输出
  
}
 
void key_scan(void)
{
  if((P2IN&BIT4)==0)
  {
    delay_ms(15);
    if((P2IN&BIT4)==0)
    {
    key3_flag++;
    if(key3_flag==5)
    {
      key3_flag=0;
   for(i1=0; i1<4; i1++)
   {
   LCD1602_4bit_CMD(0xc0+i1);
   LCD1602_4bit_Data(table_2[i1]);
   }
     if(temp_s_flag==0)
     {
     LCD1602_4bit_CMD(0xc0+0x04);
     LCD1602_4bit_Data(0x20);   
     }
     else
     {
     LCD1602_4bit_CMD(0xc0+0x04);
     LCD1602_4bit_Data(0x2d);   
     }
   LCD1602_4bit_CMD(0xc0+0x05);
   LCD1602_4bit_Data(0x30+temp_s_H);
   LCD1602_4bit_CMD(0xc0+0x06);
   LCD1602_4bit_Data(0x30+temp_s_M);
   LCD1602_4bit_CMD(0xc0+0x07);
   LCD1602_4bit_Data(0x30+temp_s_L);
   for(i1=0; i1<5; i1++)
   {
   LCD1602_4bit_CMD(0xc8+i1);
   LCD1602_4bit_Data(0x20);
   }
    }
 
    if(key3_flag==1)
    {
      temp_s_flag=0;temp_s_H=0;temp_s_M=0;temp_s_L=0;
      LCD1602_4bit_CMD(0xc0+0x09);
      LCD1602_4bit_Data(0x20); 
     for(i1=0; i1<8; i1++)
     {
     LCD1602_4bit_CMD(0xc0+i1);
     LCD1602_4bit_Data(table_3[i1]);
     }
       if(temp_s_flag==0)
       {
       LCD1602_4bit_CMD(0xc0+0x09);
       LCD1602_4bit_Data(0x20);   
       }
       else
       {
       LCD1602_4bit_CMD(0xc0+0x09);
       LCD1602_4bit_Data(0x2d);   
       }
       LCD1602_4bit_CMD(0xc0+0x0a);
       LCD1602_4bit_Data(0x30+temp_s_H);
       LCD1602_4bit_CMD(0xc0+0x0b);
       LCD1602_4bit_Data(0x30+temp_s_M);
       LCD1602_4bit_CMD(0xc0+0x0c);
       LCD1602_4bit_Data(0x30+temp_s_L);
    }
    while((P2IN&BIT4)==0)
    {} 
    }
  }
  if((P1IN&BIT3)==0)
  {
    delay_ms(15);
    if((P1IN&BIT3)==0)
    {
    if(key3_flag==1)
    {
      LCD1602_4bit_CMD(0xc0+0x09);
      LCD1602_4bit_Data(0x20);//空格
      temp_s_flag=0;//表示正温度
    }
    if(key3_flag==2)
    {
      temp_s_H++;
      if(temp_s_H==2)
      {
      temp_s_H=0;
      }
        if(temp_s_flag==1)
        {
        temp_s_H=0;
        }
      LCD1602_4bit_CMD(0xc0+0x0a);
      LCD1602_4bit_Data(0x30+temp_s_H);
    }
    if(key3_flag==3)
    {
      temp_s_M++;
      if(temp_s_M==10)
      {
      temp_s_M=0;
      }
        if(temp_s_flag==0&&temp_s_H==1&&(temp_s_M>2))
        {
        temp_s_M=0;
        }
        if(temp_s_flag==1&&(temp_s_M>5))
        {
        temp_s_M=0;
        }      
      LCD1602_4bit_CMD(0xc0+0x0b);
      LCD1602_4bit_Data(0x30+temp_s_M);
    }
    if(key3_flag==4)
    {
      temp_s_L++;
      if(temp_s_L==10)
      {
      temp_s_L=0;
      }
        if(temp_s_flag==0&&temp_s_H==1&&temp_s_M==2&&(temp_s_L>5))
        {
        temp_s_L=0;
        }
        if(temp_s_flag==1&&temp_s_M==5&&(temp_s_L>5))
        {
        temp_s_L=0;
        } 
      LCD1602_4bit_CMD(0xc0+0x0c);
      LCD1602_4bit_Data(0x30+temp_s_L);
    }  
 
    while((P1IN&BIT3)==0)
    {} 
    }
  }
  if((P1IN&BIT4)==0)
  {
    delay_ms(15);
    if((P1IN&BIT4)==0)
    {
    if(key3_flag==1)
    {
      LCD1602_4bit_CMD(0xc0+0x09);
      LCD1602_4bit_Data(0x2d); 
      temp_s_flag=1;//表示负温度    
    }
    if(key3_flag==2)
    {
    temp_s_H--;
    if(temp_s_H==255)
    {
    temp_s_H=1;
    }
      if(temp_s_flag==1)
      {
      temp_s_H=0;
      }
      LCD1602_4bit_CMD(0xc0+0x0a);
      LCD1602_4bit_Data(0x30+temp_s_H);
    }
    if(key3_flag==3)
    {
      temp_s_M--;
      if(temp_s_M==255)
      {
      temp_s_M=9;
      }
        if(temp_s_flag==0&&temp_s_H==1&&(temp_s_M>2))
        {
        temp_s_M=2;
        }
        if(temp_s_flag==1&&(temp_s_M>5))
        {
        temp_s_M=5;
        } 
      LCD1602_4bit_CMD(0xc0+0x0b);
      LCD1602_4bit_Data(0x30+temp_s_M);
    }
    if(key3_flag==4)
    {
      temp_s_L--;
      if(temp_s_L==255)
      {
      temp_s_L=9;
      }
        if(temp_s_flag==0&&temp_s_H==1&&temp_s_M==2&&(temp_s_L>5))
        {
        temp_s_L=5;
        }
        if(temp_s_flag==1&&temp_s_M==5&&(temp_s_L>5))
        {
        temp_s_L=5;
        }  
      LCD1602_4bit_CMD(0xc0+0x0c);
      LCD1602_4bit_Data(0x30+temp_s_L);   
    } 
    while((P1IN&BIT4)==0)
    {} 
    }
  }
}
void display(void)
{
  temp=(temp_H&0x0f)<<4;
  if((temp_H&0xf0)==0xf0)
  {
    LCD1602_4bit_CMD(0x85);
    LCD1602_4bit_Data(0x2d);
  }
  else
  {
    LCD1602_4bit_CMD(0x85);
    LCD1602_4bit_Data(0x20);
  }
    temp=temp|((temp_L&0xf0)>>4);
    LCD1602_4bit_CMD(0x86);
    LCD1602_4bit_Data(0x30+temp/100);
    LCD1602_4bit_CMD(0x87);
    LCD1602_4bit_Data(0x30+(temp%100)/10);
    LCD1602_4bit_CMD(0x88);
    LCD1602_4bit_Data(0x30+temp%10);
    
}
void warning(void)
{
if(temp_s_flag==0)
{
if(temp>=(temp_s_L*100+temp_s_M*10+temp_s_L))
{P2OUT|=BIT5;}
else
{P2OUT&=~BIT5;}
}
if(temp_s_flag==1)
{
if(temp<=(temp_s_M*10+temp_s_L))
{P2OUT|=BIT5;}
else
{P2OUT&=~BIT5;}
}
}
void main(void)
{
   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
   DCOCTL  = 0x00;                           // Set DCO 1MHz
   BCSCTL1 = CALBC1_1MHZ;                    
   DCOCTL  = CALDCO_1MHZ;
   
   
   
   //time0_int();
   _EINT();
 
   P2DIR |= 0x0f;
   P1DIR |= 0xf0;
   delay_ms(20);
   io_int();
   LCD1602_4bit_init();
   for(i1=0; i1<5; i1++)
   {
   LCD1602_4bit_CMD(0x80+i1);
   LCD1602_4bit_Data(table_1[i1]);
   }
   for(i1=0; i1<4; i1++)
   {
   LCD1602_4bit_CMD(0xc0+i1);
   LCD1602_4bit_Data(table_2[i1]);
   }   
   
 
   while(1)
   {
//   LCD1602_4bit_CMD(0x85);
//   LCD1602_4bit_Data(0x30+time_num);
   Read_temp();
   key_scan();
   display();
   warning();
/*   P2OUT|=BIT5;
   delay_ms(2000);
   P2OUT&=~BIT5;
   delay_ms(2000);
   P1OUT&=~BIT6;
   delay_ms(1000);*/
   }
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void timeA1(void)
{
time_num++;
if(time_num==20)
{
time_num=0;
}
 
}
关键字:MSP430G2553  DS18B20  温度控制器 引用地址:MSP430G2553做DS18B20温度控制器

上一篇:MSP430单片机查错
下一篇:STC不断电的下载方法

推荐阅读最新更新时间:2024-03-16 15:05

基于ds18b20温度带上限程序--LCD1602液晶显示
这是用1602来显示的,程序是修改前面几个实验的,当温度 40度时电风扇不转,当 =40度时电风扇转动,为参加电子比赛做的单片机系统实验。程序为汇编语言(ASM),带详细注释,值得新手朋友参考! 全部程序: ORG 0000H ;单片机内存分配申明! TEMPER_L EQU 29H;用于保存读出温度的低8位 TEMPER_H EQU 28H;用于保存读出温度的高8位 FLAG1 EQU 38H;是否检测到DS18B20标志位 a_bit equ 20h ;数码管个位数存放内存位置 b_bit equ 21h ;数码管十位数存放内存位置 RS EQU P3.7;确定具体硬件的连接方式 RW EQU P3.6 ;确
[单片机]
51单片机+1602+DS18B20的温度报警程序
51单片机做的温度显示,温度显示在LCD1602液晶屏上。 然后按键可以调整温度阈值,温度高于或低于所设温度,蜂鸣器就会响…… 单片机源程序如下: /************************************************************************************** * 基于单片机的实时温度报警系统设计 * (1)DS18b20采集到的温度可以实时地在数码管或者在液晶上显示出来; (2)用三个独立键盘设置阀值,包括设置键,加键
[单片机]
51单片机+1602+DS18B20的温度报警程序
DS18B20和AT89C2051的家用温度测量器设计
         一、设计概况   本制作采用USB口作为供电端口,用DS18B20温度传感器进行温度信息采集,用AT89C2051单片机进行控制,采用四位共阳数码管显示,从而实现对温度的测量显示(系统框图如图1所示)。本设计可培养学生对单片机学习的兴趣,提高其制作与编程能力。   图1 系统框图    二、电路原理   采用PROteUS仿真软件进行原理图设计与程序仿真。电路如图2所示。 图2 电路图   1、电源   采用USB口供电,可将USB适配器接人电路板的USB口或直接接计算机USB口。这样,既节省了资源,又能够获得较为理想的工作电压。USB口的外形及电源口定义如图3所示。
[电源管理]
<font color='red'>DS18B20</font>和AT89C2051的家用温度测量器设计
MSP430G2553单片机——利用蜂鸣器播放一首歌
利用MSP430G2553单片机和无源蜂鸣器播放一首歌,下面给出两种方案。 方案一: 播放《两只老虎》 #include MSP430G2553.h //音乐播放 // by wys void P_Onclick(int n,int j); //7个基本音的子函数 void jby_1(int s); void jby_2(int s); void jby_3(int s); void jby_4(int s); void jby_5(int s); void jby_6(int s); void jby_7(int s); void main(void) { WDTCTL = WDTPW + WDTHOLD;
[单片机]
STM8S-Discovery第三个程序 - DS18B20
/******** STM8S-Discovery DS18B20 Test ******** * 版本.........: 1.0 * 目标.........: STM8S105C6 * 文件名.......: main.c * 编译器.......: IAR for STM8 V1.1 **********************************************/ #include iostm8s105c6.h #include stdio.h #define UART_BAUD 9600 //波特率 #define F_MASTER 16000000 //主频率 #define D
[单片机]
基于ARM和CPLD的温度控制器的设计
   1 引言   随着计算机技术的飞速发展,在日常生活和生产中,人们要求更精确测量和控制温度等模拟物理量,不仅满足工业现场实时监控,上位PC机遥观、遥测和遥控等,而且要求连-接互联网,以实现远程监控和访问数字化、智能化的传感器功能。   这里提出一种以ARM微控制器为核心,结合CPLD技术的温度控制系统。该系统将温度传感器采集的信息A/D转换后传输至微处理器处理,其处理数据再经网络接121远程传输。或通过RS232串行接口与上位机PC机通信实现分布式温度监控系统。    2 系统硬件设计   该系统设计主要是针对工业控制领域现场仪器仪表开发的,其硬件设计框图如图1所示,该框图包括ARM微处理器、电源、监控复位、存储器扩展
[嵌入式]
基于ARM和CPLD的<font color='red'>温度控制器</font>的设计
快速入门msp430g2553
1.如何新建一个工程 2.点亮一个led灯 首先知道led1的io口是1.0 /*将P1.0设置为输出,P1DIR是P1口的方向寄存器*/ P1DIR |= BIT0; /*将P1.0设置为高电平,点亮LED1*/ P1OUT |= BIT0; led2(闪烁)的io口是1.6 /*初始化LED2所在IO口P1.6为输出*/ P1DIR |= BIT6; /*初始化LED2所在IO口P1.6为低电平,LED2初始状态为灭*/ P1OUT &= ~BIT6; while(1) { P1OUT ^= BIT6; /*此语句等效为P1OUT = P1OUT ^ BIT6
[单片机]
快速入门<font color='red'>msp430g2553</font>
51单片机学习笔记:DS18B20测温程序
C代码 #include my51.h #include smg.h #include ds18b20.h void main() //测试 ,6位数码管显示温度值 { u8 i=0; u16 temp=0; while(1) { temp=ds18b20_readTemperaData(); for(i=0;i 100;i++) { displaySMG(ds18b20_processTempData(temp)); } } } C代码 #if
[单片机]
51单片机学习笔记:<font color='red'>DS18B20</font>测温程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved