📄 main.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 + -