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

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 < 8; i++)
{
DQ_0;
delay_us(2);
if (dat & 0X01)
DQ_1;
else
DQ_0;
delay_us(60);
dat >>= 1;
;
DQ_1;
delay_us(10);
}
}
unsigned int DS18b20_read_byte(void)
{
unsigned i;
unsigned int byte = 0;
for (i = 0; i < 8; i++)
{
byte >>= 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 <<= 8;
Temp = Temp_h + Temp_l;
f_temp = Temp * 0.0625; /* 18b20的分辨率是0.0625 */
Temp = f_temp * 10 + 0.5; /* 乘以10表示小数点后面取一位,加0.5是四舍五入 */
return (Temp); /* Temp是整型 */
}
void readDS18B20andDisplay(void)
{

//Dogs102x6_stringDraw(0, 0, " HUATU ", DOGS102x6_DRAW_NORMAL); /* 初始化显示界面 */
unsigned char dis[10];
unsigned char time_cyc = 0;
while (1)
{
delay_ms(10);
time_cyc = (time_cyc + 1) % 30;
if (time_cyc == 1) /* 30 个10ms执行一次 */
{
temp_value = get_one_temperature(); /* 读取温度 */
dis[0] = temp_value % 1000 / 100 + '0';
dis[1] = temp_value % 100 / 10 + '0';
dis[2] = '.';
dis[3] = temp_value % 10 + '0';
dis[4] = 'C';
dis[5] = 0;
Dogs102x6_stringDraw(0, 0, dis, DOGS102x6_DRAW_NORMAL);
temp_3=58-temp_value;
delay_us( 10 );
Dogs102x6_lineDraw(x1,temp_2,x1+1,temp_3,0);
temp_2=temp_3;
x1 += 1; //横坐标+1
if(x1>102) //LCD显示溢出时,清屏
{
Dogs102x6_clearScreen();
x1=0;
}
}
}
}
  • 27
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值