MSP430F5529 温度传感器 DS18B20 LCD显示温度数值 绘制温度曲线 实验 代码 程序

您所在的位置:网站首页 温度传感器数值 MSP430F5529 温度传感器 DS18B20 LCD显示温度数值 绘制温度曲线 实验 代码 程序

MSP430F5529 温度传感器 DS18B20 LCD显示温度数值 绘制温度曲线 实验 代码 程序

2024-07-11 06:31| 来源: 网络整理| 查看: 265

MSP430F5529 温度传感器 DS18B20 LCD显示温度数值 绘制温度曲线 实验 代码 程序

直接进入github:https://github.com/CHARLIEVA/MSP430F5529

一.实验要求 采用实验开发板控制温度传感器,将温度曲线及数值变化实时显示在LCD屏上。 二.系统组成 实验器材: 1.PC 一台 2.MSP430F5529 一个 3.USB数据线 一条 4.DS18B20温度传感器 一个 5.连接线 3条 开发平台: CCS v6.1.1 接线和配置: 1.MSP430F5529通过左下角USB接入PC,并将开发板PowerSel拨到eZ-FET,使用CCS对开发板进行调试。 2.将开发板上VCC接入DS18B20的VDD,GND接DS18B20的GND,P3.7接DS18B20的DQ。

三.软件设计 软件功能:通过DS18B20温度传感器、LCD显示屏,实现实时变化的温度显示和温度曲线。 程序框图:

软件总体设计方案:通过MSP430F5529获取DS18B20温度传感器上的数据,在LCD屏幕上显示温度值和绘制温度曲线。

温度数值显示:将读取到的温度分别取十位、个位、小数点后一位。并与符号“C”、小数点“.”组合成温度数值显示,例如“27.0C”。

温度曲线绘制:使用Dogs102x6_lineDraw画线函数,程序每进入一次循环,横坐标加1,纵坐标取温度的负值+58(该操作为了让曲线绘制在显示器中央,LCD默认为左上角为(0,0)取负数是为了屏幕从下到上为增,便于观察)。每次取新的温度后,绘制线段的起始点为上一次取的温度值,终点为下一次取的温度值,再通过横坐标递增,实现绘制连续的曲线,直到横坐标达到102,溢出屏幕时,清屏。

四.实验步骤与结果 实验步骤: 1.按程序所写正确接线:MSP430F5529通过左下角USB接入PC,并将开发板PowerSel拨到eZ-FET,使用CCS对开发板进行调试。 2.将开发板上VCC接入DS18B20的VDD,GND接DS18B20的GND,P3.7接DS18B20的DQ。 3.通过CCS将编辑好的程序写入MSP430F5529。 4.运行和调试。 实验结果: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五.参考代码 1.main主程序关键代码及其注释。

void main( void ) { /* Stop WDT */ WDTCTL = WDTPW + WDTHOLD; /* 关闭看门狗 */ /* Use 32.768kHz XTAL as reference */ LFXT_Start( XT1DRIVE_0 ); /* 利用LFXT1(32.768kHZ)作为时钟参考 */ /* Set system clock to max (25MHz) */ Init_FLL_Settle( 25000, 762 ); /* 利用FLL(锁频环)将系统时钟设为最大25MHZ */ SFRIFG1 = 0; /* 清中断标志 */ SFRIE1 |= OFIE; /* 使能晶振失效中断 */ /* Globally enable interrupts */ __enable_interrupt(); /* 使能全局中断 */ /* Set up LCD */ Dogs102x6_init(); /* 初始化LCD */ Dogs102x6_backlightInit(); /* 背光初始化 */ Dogs102x6_setBacklight( brightness ); /* 设置初始背光值 */ Dogs102x6_setContrast( contrast ); /* 设置初始对比度值 */ Dogs102x6_clearScreen(); /* 清屏 */ /* 主循环 */ while ( 1 ) { readDS18B20andDisplay(); /* 读取温度值并显示 */ } }

2.lab7程序关键代码及其注释

#define CPU_F ( (double) 25000000) /* 外部高频晶振8MHZ */ /* #define CPU_F ((double)32768) //外部低频晶振32.768KHZ */ #define delay_us( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) ) #define delay_ms( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000.0) ) unsigned int temp_value = 0; /* 温度 */ unsigned int temp_2 = 27; /* temp_2初始温度 */ unsigned int x1 = 0; unsigned int temp_value_1 = 0; unsigned int temp_3 = 0; /********************************* ** 引脚定义 使用引脚P3.7** *********************************/ #define DQ_1 P3OUT |= BIT7 #define DQ_0 P3OUT &= ~BIT7 #define DQ_in P3DIR &= ~BIT7 #define DQ_out P3DIR |= BIT7 #define DQ_val (P3IN & BIT7) unsigned int DS18b20_Init(void) //初始化DS8B20 { unsigned Check_val; DQ_out; DQ_0; delay_us(600); DQ_1; delay_us(60); DQ_in; _NOP(); if ( DQ_val == 1) { Check_val = 0; /* 初始化失败 */ } if ( DQ_val == 0) { Check_val = 1; /* 初始化成功 */ } delay_us(10); DQ_out; DQ_1; delay_us(100); return (Check_val); } void DS18b20_write_byte(unsigned int dat) { unsigned int i; for (i = 0; i >= 1; ; DQ_1; delay_us(10); } } unsigned int DS18b20_read_byte(void) { unsigned i; unsigned int byte = 0; for (i = 0; i >= 1; DQ_0; delay_us(2); DQ_1; delay_us(2); DQ_in; _NOP(); if ( DQ_val) byte |= 0x80; delay_us(60); DQ_out; DQ_1; delay_us(10); } return (byte); } unsigned int get_one_temperature(void) /* 只读取了整数,没读取小数的部分 */ { unsigned int Temp_l = 0, Temp_h = 0, Temp = 0; float f_temp; /* delay_ms( 1000 ); */ DS18b20_Init(); DS18b20_write_byte( Skip_ROM); DS18b20_write_byte( Read_Scratchpad); Temp_l = DS18b20_read_byte(); Temp_h = DS18b20_read_byte(); DS18b20_Init(); DS18b20_write_byte( Skip_ROM); DS18b20_write_byte( Convert_Temperature); Temp_h


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3