⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用IAR编写的MSP430利用D1820温度传感器测温度并且显示到LCD
💻 C
字号:
//主题:DS18B20+449组合应用
/*描述:MCU读取数字温度传感器DS18B20的转换结果,并将其数据进行换算后显示在DM128-1
模块中*/
//编写:微控设计网 DC版主 日期:2008.1.
//编译环境:IAR EW430 V3.42A
//验证平台: www.microcontrol.cn MC430F44开发板 V1.0
//声明:此程序只供微控用户使用.在未得到DC版主的许可请勿将资料外公开和用于商业用途.
//******************************************************************************
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
//  //* An external watch crystal between XIN & XOUT is required for ACLK *//	
#include <msp430x44x.h>
#include "DS1820.h"

#define TP 0x10         //温度正符号段
#define TN 0x01         //温度负符号段
#define Eo 0x40
#define OK 0x80
#define D3_Dot 0x10
#define unit 0x10
char digit[10] =
{
  0xEB,  /* "0" LCD segments a+b+c+d+e+f */
  0x60,  /* "1" */
  0xC7,  /* "2" */
  0xE5,  /* "3" */
  0x6C,  /* "4" */
  0xAD,  /* "5" */
  0xAF,  /* "6" */
  0xE0,  /* "7" */
  0xEF,  /* "8" */
  0xED   /* "9" */
};

//unsigned char TempSign=0x00;    //温度正负符号段
//******************************************************************************
//清LCD屏
void LcdClr(void)
{ unsigned char i;
  for (i=0; i<31; i++)
  {
   LCDMEM[i] = 0x00;                        // CLR LCDMEM
  }
}
//*****************************************************************************
void LcdInit(void)
{ LCDCTL = LCDON + LCD4MUX + LCDSG0_2;      // LCD on, 4-Mux, segments S2-S33
  BTCTL = BTFRFQ1;                          // LCD clock freq is ACLK/128
  P5SEL = 0xFC;                             // Select P5.2-7 as Com and Rxx
  LcdClr();
  LCDMEM[15] |= unit ;                       //温度单位指示
}
//*****************************************************************************
//将温度值转换成可显示十进制值
//取数范围整数3位,小数点后3位.
void display_number(float f_data)
{ unsigned long value;
  float n;
  n=f_data *1000;
  value = (unsigned long int)n; 

  //value = (unsigned long int)(value *1000);   //将浮点数变为整型数
  
  if((value/100000)==0)
    LCDMEM[1] = 0x00;
  else
    LCDMEM[1] = digit[value/100000];          //100位
  value = value%100000;
  
   LCDMEM[2] = digit[value/10000];           //10位
  value = value%10000;   
  
   LCDMEM[3] = digit[value/1000];            //1位
  value = value%1000; 
  
   LCDMEM[4] = digit[value/100];             //0.1位
  value = value%100; 

   LCDMEM[5] = digit[value/10];              //0.01位
  value = value%10; 
  
   LCDMEM[6] = digit[value/1];               //0.001位
   
   LCDMEM[3] |= D3_Dot;
}
//******************************************************************************
void LED(void)
{
  if(P1OUT & BIT1)
     P1OUT &= ~BIT1;
  else
     P1OUT |= BIT1;
}
//******************************************************************************
//MSP430F14初始化
void mcuinit(void)
 { LcdInit();
   P1DIR |=BIT1;                                  //P1.1驱动LED
   P3DIR |=BIT6+BIT7;                             //设DQ电时为1
   DQ1;
 }

//******************************************************************************
//MC430F14 DS18B20实验主程序
void main(void)
 {
  WDTCTL = WDTPW + WDTHOLD;                       // 停止WDT
  mcuinit();
  while(1)
  { P3OUT &= ~BIT7;
   GetTemp();                                     //读取温度
   P3OUT |= BIT7;
   if(symbol==1)
     { LCDMEM[10] |= TP;                           //处理正负符合
       LCDMEM[11] &= ~TN;
     }
   else
     { LCDMEM[11] |= TN;
       LCDMEM[10] &= ~TP;
     } 
   if(Error==1)                                   
   {  LCDMEM[12] &= ~OK;
      LCDMEM[12] |= Eo;//失
   }
   else
   { LCDMEM[12] &= ~Eo; 
     LCDMEM[12] |= OK; //正     
   }
   LED();
   display_number(Temper);                      //数据变换显示数据
  } 
 }
//******************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -