MSP430单片机温度单片机课程设计报告书

合集下载

msp430实验报告

msp430实验报告

msp430实验报告msp430实验报告引言:msp430是一种低功耗、高性能的微控制器,被广泛应用于嵌入式系统和物联网设备中。

本实验报告将介绍我对msp430微控制器进行的一系列实验,包括实验目的、实验过程、实验结果以及对实验的总结和展望。

实验目的:本次实验的主要目的是熟悉msp430微控制器的基本功能和使用方法,以及学习如何进行简单的控制程序设计。

通过实验,我希望能够掌握msp430的基本操作和编程技巧,并且能够运用所学知识解决实际问题。

实验过程:在实验开始之前,我首先对msp430微控制器进行了一些基本的了解。

我了解到,msp430具有低功耗、高性能和丰富的外设接口等特点,可以满足各种嵌入式系统的需求。

接着,我根据实验指导书的要求,准备好实验所需的硬件设备和软件工具。

第一部分实验是关于GPIO口的实验。

我按照实验指导书上的步骤,将msp430与LED灯连接起来,并编写了一个简单的程序,实现了对LED灯的控制。

通过这个实验,我学会了如何配置GPIO口和编写简单的控制程序。

第二部分实验是关于定时器的实验。

我学习了如何配置msp430的定时器,并编写了一个简单的程序,实现了定时闪烁LED灯的功能。

通过这个实验,我深入了解了定时器的工作原理和编程方法。

第三部分实验是关于ADC的实验。

我学习了如何配置msp430的ADC模块,并编写了一个简单的程序,实现了对外部模拟信号的采样和转换。

通过这个实验,我了解了ADC的基本原理和使用方法。

实验结果:通过一系列实验,我成功地掌握了msp430微控制器的基本功能和使用方法。

我能够独立完成GPIO口的配置和控制、定时器的配置和编程、ADC的配置和采样等任务。

实验结果表明,msp430具有强大的功能和灵活的编程能力,可以满足各种嵌入式系统的需求。

总结和展望:通过本次实验,我对msp430微控制器有了更深入的了解,并且掌握了一些基本的操作和编程技巧。

然而,由于实验时间和条件的限制,我还没有完全发挥出msp430的潜力。

开题报告:基于MSP430单片机的温湿度测量系统设计

开题报告:基于MSP430单片机的温湿度测量系统设计

沈阳工业大学本科生毕业设计(论文)开题报告毕业设计(论文)题目:基于MSP430单片机的温湿度测量系统院系:自动化系专业班级:自动化学生姓名:指导教师:开题时间:2014年10 月30 日1.课题的目的和意义这次毕业设计选题的目的主要是让生活在信息时代的我们,将所学知识应用于生产生活当中,掌握温、湿度测量系统设计的流程,方案的论证,选择,实施与完善。

通过对温、湿度测量系统的设计、制作、了解信息采集测试、控制的全过程,提高在电子工程设计和实际操作方面的综合能力,初步培养在完成项目过程中所应具备的基本素质和要求。

培养研发能力,通过对电子电路的设计,初步掌握在给定条件和要求的情况下,如何巧妙合理地去设计系统中的各部分电路,并将它们有序的连接起来。

提高查阅资料、语言表达能力和理论联系实际的技能。

温、湿度是工业对象中主要的被控参数之一,当今社会温、湿度的测量与测量系统在生产与生活的各个领域中扮演着越来越重要的角色,大到工业冶金、环境检测、纺织厂、冷冻库、粮仓、医疗卫生等方面,小到浴霸、家庭冰箱、空调、电饭煲等方面都得到了广泛的应用。

例如冶金、机械、食品、化工各类工业中,广泛使用的各种加热炉、热处理炉、反应炉等,对工件的处理温、湿度都要求严格控制,而单片机温、湿度测量系统使温、湿度测量指标得到了大幅度提高。

其使用量日益增多,其地位和作用也倍显重要。

温、湿度测量系统的广泛应用使得这方面的研究意义颇为必要。

温、湿度测量系统的结构组成,测量原理使用维护等方面的基础内容已成为电子工程技术人员急需了解掌握的必要知识。

MSP430系列单片机是美国德州仪器公司推出的16位超低功耗、高性能产品,它具有处理能力强、运行速度快、资源丰富、开发方便等优点,有很高的性价比,在世界各国已得到广泛的应用,在国内,也已经进人飞速发展阶段,MSP430系列超低功耗16位单片机,越来越受到电子工程师亲睐,并得到广泛应用。

MSP430微控制器MCU(MicrocontrollerUnit)是TI公司推出的一款具有丰富片上外围的超低功耗16位FLASH型混合信号处理器,本系统使用的MSP430F149有一个串口通信接口,一个带有大量捕获P比较寄存器的16位定时器看门狗,一个模拟电压比较器。

基于msp430单片机的温度控制系统的设计

基于msp430单片机的温度控制系统的设计


1.4 ERP 的类型
参考文献
ERP 产品很多 如:完整的 ERP 系统是生产 供
销 财务完全集成 包含预算控制 计划自动生成
[1] 宁 俊 服装企业管理教学案例[M] 北京
和自动下达 包含供应商和客户的管理及供应链的 中国纺织出版社 2004
上接 83 页 MSP430F1121 单片机对温度的控制是通过可控硅实现的 由 MSP430F1121 单片机 P1.1 发出控制信号 控制可控硅的通断就可实现控制温度的目的 MSP430F1121 只要改变P1.1 的接通时间就可调节温度的变化 由于加热丝存在热惯性和时间滞后等特性 为精确控制温度带来困难 可通过脉冲加热控制法控制温度 即 通过测得的温度与设定温度的差值大小 分别采用不同宽度的脉冲 控制P1.1的接通时间达到控温的目的 3 结束语 MSP430F1121 单片机和热敏电阻体积小 重量轻 抗干扰性能强 价格低廉 结构稳定 可靠性高 灵活性好 一致性好 对环境要求不高的优点 应用简单方便 本文的温度测控系统仅是单片机广泛应用 的一例 相信单片机的应用会越来越广泛
以热敏电阻为测量元件的 MSP430F1121 单片机温度测控系统电路原理图略 可向作者索取 本文仅 对温度测量与控制电路部分进行描述
2.1 温度测量电路与软件设计
传统的办法采用充电的办法测量 为增加分别率 我们取内部的
0.25Vcc作为阈值电压 采用放电的办法可分别测出参考电阻Rref的
放电时间Tref 热敏电阻器电阻Rsensor 的放电时间Tsensor则有下
TAX_ISR add
&TAIV,PC
reti
C C R 1 _ I S R bic
#LPM0,0(SP)
reti

MSP430单片机实验报告

MSP430单片机实验报告

MSP430单片机实验报告--段式LCD显示1.实验介绍:实验演示了将ADC结果用段式LCD显示,并且还原输入电压也采用段式LCD显示。

ADC的结果可以通过ADC12MEM0的值来显示。

当程序运行时,LCD屏幕采用10进制显示出ADC12MEM0的值。

2.实验目的:a.熟悉IAR5.0软件开发环境的使用b.了解MSP430段式LCD的工作方式c.掌握MSP430段式LCD的编程方法3.实验原理:驱动LCD需要在段电极和公共电极上施加交流电压。

若只在电极上施加直流电压,液晶本身发生劣化。

解决这个问题的一般方法是使用短时也就驱动器,如MSP430F4xx系列单片机就集成有段式液晶驱动。

如果要在没有液晶驱动器的情况下使用段式液晶显示器,就要用到如图1所示电路。

图1中,A为电极信号输入端,控制该段液晶是否被点亮;B为交流方波信号输入端,将有一个固定频率的方波信号从此端输入;com为公共背极信号。

工作原理为;固定的方波信号被直接加载到液晶公共背极,同时该信号通过一个异或门加载到液晶段极。

当A端为低电平时,液晶的段极与公共背极将得到一个同相、同频率、同幅度的方波信号,液晶的两端始终保持没有电压差;当A端为高电平时,液晶的段极也公共背极将得到一个反相、同幅度、同频率的方波信号,液晶两端将保持一个交流的电压差。

这样既能使液晶保持点亮状态,又不会发生劣化而损坏液晶显示器。

图一.段式液晶驱动电路4.实验步骤:(1)将PC 和板载仿真器通过USB 线相连;5.实验现象:段式LCD显示屏显示的数字为002031,ADC12MEM0的值为07EF,其值为16进制,将其转换后值为2031与屏幕显示一致。

6.关键代码分析:#include <msp430x26x.h>#include "General_File.h"#include "I2C_Define.h"void I2C_Start(void){DIR_OUT;SDA_1;I2C_Delay();SCL_1;I2C_Delay();SDA_0;I2C_Delay();SCL_0;}//End I2C_Start/*函数名:I2C_Stop 功能:遵循I2C总线协议定义的停止*/void I2C_Stop(void){DIR_OUT;SDA_0;I2C_Delay();SCL_1;I2C_Delay();SDA_1;}//End I2C_Stop/* 函数名:I2C_ReceiveACK 功能:待接受ACK 信号,完成一次操作*/void I2C_Write_ACK( void ){SDA_1;DIR_IN;SCL_1;I2C_Delay();while(SDA_IN );SCL_0;I2C_Delay();DIR_OUT;return;}//End I2C_ReceiveACK/* 函数名:2C_Read_Ack 功能:接受数据后发送一个ACK信号*/void I2C_Read_Ack(void){DIR_OUT;SCL_0;SDA_0;I2C_Delay();SCL_1;I2C_Delay();SCL_0;SDA_1;}//End I2C_Read_Ack/* 函数名:I2C_Read_NoAck 功能:最后接受数据后发送NoACK信号*/void I2C_Read_NoAck( void ){DIR_OUT;SCL_0;SDA_1;I2C_Delay();SCL_1;I2C_Delay();SCL_0;}//End I2C_Read_Ack/* 函数名:I2C_Receiveuchar 功能:接受一个字节的数据*/uchar I2C_Receiveuchar(void){uchar Read_Data = 0x00; //返回值uchar DataBit = 0x00; //每一个clk 接受到的数据SCL_0;I2C_Delay();SDA_1;DIR_IN;for( uchar i = 0;i < 8;i++ ){SCL_1;I2C_Delay();DataBit = SDA_IN;SCL_0;I2C_Delay();I2C_Delay();Read_Data = ( ( Read_Data << 1 ) | DataBit ); //将数据依次存入Read_Data }return( Read_Data );}//End I2C_Receiveuchar/* 函数名:I2C_Senduchar 功能:遵循I2C总线协议定义发送一字节数据*/void I2C_Senduchar( uchar Wr_Data ){DIR_OUT;SCL_0;SDA_1;for( uchar i = 0;i < 8;i++ ){if( Wr_Data & 0x80 ){SDA_1; //最高位是否为1,为1则SDA= 1 }else{SDA_0; //否则SDA=0}I2C_Delay();SCL_1;I2C_Delay();SCL_0;I2C_Delay();Wr_Data <<= 1; //数据左移一位,进入下一轮送数}SDA_1;return;}//End I2C_Senduchar/************ BU9796FS相关指令定义**********/#define Write_Com 0x80#define Write_Data 0x00#define Display_ON 0x48#define Half_Bias 0x44#define Set_Reset 0x6A#define Ext_Clock 0x69#define Blink_Mode0 0x70#define Blink_Mode1 0x71#define Blink_Mode2 0x72#define Blink_Mode3 0x73#define Pixel_ON 0x7E#define Pixel_OFF 0x7D#define BU9796_Addr 0x7C#define Base_Add 0x00/************** 引用的外部函数*********************/extern void I2C_Start(void);extern void I2C_Stop(void);extern void I2C_Write_ACK(void);extern void I2C_Senduchar( uchar Wr_Data );/************** 定义段式LCD的阿拉伯数字码*********************/const uchar Num_Code[] ={0xAF, // 00x06, // 10x6D, // 20x4F, // 30xC6, // 40xCB, // 50xEB, // 60x0E, // 70xEF, // 80xCF, // 90x10, //. 如果要显示小数点,必须要将此值与下一位值相加0x88 //: ,包括LCD上的两个":"};uchar Disp_Data[]={ 5,5,7,3,1,5 };/* 函数名:Segment_Display 功能:段式LCD数据包写入服务程序,负责将一串字符送到段式LCD 上去显示*/void Segment_Display( const uchar Addr,const uchar *P_Data, uchar Length ){uchar User_Addr = Addr;I2C_Start(); //启动BU9796I2C_Senduchar( BU9796_Addr ); //写BU9796的物理地址I2C_Write_ACK();I2C_Senduchar( Base_Add + User_Addr * 2 ); //发送起始地址,下一个紧跟的是数据I2C_Write_ACK();for( uchar i = Length ;i > 0;i-- ){if( *P_Data != 0x0A ) // 显存中是否有小数点?如果有,就将小数点码值与下一位码值相加{I2C_Senduchar( Num_Code[ *P_Data++ ] );}else{uchar Temp_Disp_Data = Num_Code[ *P_Data++ ];I2C_Senduchar( Temp_Disp_Data + Num_Code[ *P_Data++ ]);i--;}I2C_Write_ACK();}I2C_Stop(); //访问结束}/* 函数名:Init_BU9796FS 功能:初始化驱动芯片BU9796的相关参数*/void Init_BU9796FS( void ){I2C_Start(); //启动BU9796I2C_Senduchar( BU9796_Addr ); //写BU9796的物理地址I2C_Write_ACK(); //等待ackI2C_Senduchar( Write_Com + Set_Reset); //启动软复位I2C_Write_ACK(); //等待ackI2C_Senduchar( Write_Com + Blink_Mode2 );I2C_Write_ACK();I2C_Senduchar( Write_Com + Display_ON ); //开显示I2C_Write_ACK();I2C_Senduchar( Write_Data + Base_Add ); //发送起始地址,下一个紧跟的是数据I2C_Write_ACK();for( uchar i = 0;i<10;i++ ) //清LCD显示屏{I2C_Senduchar( 0x00 );I2C_Write_ACK();}I2C_Stop(); //访问结束}/* 函数名:Init_MCU 功能:初始化MSP430的相关参数*/void Init_MCU( void ){/* WDTCTL = WDTPW + WDTHOLD; */ // 关看门狗BCSCTL3 |= XT2S_2; // XT2频率范围设置BCSCTL1 &= ~XT2OFF; // 打开XT2振荡器do{IFG1 &= ~OFIFG; // 清振荡器失效标志BCSCTL3 &= ~XT2OF; // 清XT2失效标志for( uint i = 0x47FF; i > 0; i-- ); // 等待XT2频率稳定}while (IFG1 & OFIFG); // 外部时钟源正常起动了吗?BCSCTL2 |= SELM_2 + SELS ; // 设置MCLK、SMCLK为XT2P4OUT &= ~BIT4;P4DIR |= BIT4; // 打开LCD显示部分的电源//P8REN |= BIT3 + BIT4;P8DIR |= BIT3 + BIT4; // 配置MSP430与BU9796的数据数P8OUT |= BIT3 + BIT4;P5OUT &= ~BIT7; // 点亮外部LEDP5DIR |= BIT7;}/* 函数名:main 功能:系统入口主函数*/void main( void ){WDTCTL = WDTPW + WDTHOLD; // 停看门狗ADC12CTL0 = SHT0_2 + ADC12ON; // 设置采样时间,开ADC12,Vref = V ACC ADC12CTL1 = SHP; // 使用定时器采样ADC12MCTL0 = INCH_1; // 选用A1通道ADC12IE = 0x01; // 开ADC12MCTL0中断ADC12CTL0 |= ENC; // 启动转换ADC12MCTL0 = INCH_1;P5DIR |= BIT7; // P5.7输出-LED/*for (;;){ADC12CTL0 |= ADC12SC; // 软件启动转换_BIS_SR(CPUOFF + GIE); // LPM0模式,由ADC12中断唤醒}*//* 功能:将16进制转化为10进制*/int a,b;a=ADC12MEM0;Disp_Data[5]=a%10;b=a/10;Disp_Data[4]=b%10;a=b/10;Disp_Data[3]=a%10;b=a/10;Disp_Data[2]=b%10;a=b/10;Disp_Data[1]=a%10;b=a/10;Disp_Data[0]=b%10;Init_MCU();Init_BU9796FS();P5OUT |= BIT7;Segment_Display( 0,Disp_Data,6 );_BIS_SR( CPUOFF );}#pragma vector=ADC12_VECTOR__interrupt void ADC12_ISR (void){ _BIC_SR_IRQ(CPUOFF); }。

msp430课程设计

msp430课程设计

msp430课程设计一、教学目标本课程的教学目标是使学生掌握MSP430单片机的基本原理、编程方法和应用技巧。

具体来说,知识目标包括了解MSP430单片机的结构、特点和工作原理,掌握C语言编程的基本语法,熟悉MSP430单片机的应用领域。

技能目标则要求学生能够熟练使用MSP430开发工具进行程序设计和调试,能够独立完成简单的MSP430单片机应用项目。

情感态度价值观目标则是培养学生对电子技术的兴趣和热情,提高他们的问题解决能力和创新意识。

二、教学内容本课程的教学内容主要包括MSP430单片机的硬件结构、编程语言、开发环境和应用实例。

具体来说,将讲解MSP430单片机的各个模块及其功能,包括CPU、内存、外设等,以及这些模块是如何协同工作来实现各种功能的。

接下来,将介绍C语言编程的基本语法和编程技巧,包括数据类型、运算符、控制语句等,以及如何使用MSP430的开发工具进行程序设计和调试。

最后,将通过一些具体的应用实例来展示如何使用MSP430单片机来解决实际问题,比如温度计、电子钟等。

三、教学方法为了达到上述教学目标,将采用多种教学方法相结合的方式进行教学。

首先,将采用讲授法来讲解MSP430单片机的硬件结构和C语言编程的基本语法。

通过讲解,使学生能够理解和掌握相关知识。

其次,将采用讨论法来探讨一些实际的应用案例,引导学生通过讨论和思考来解决问题。

此外,还将采用实验法让学生通过动手实践来加深对知识的理解和应用能力。

最后,将采用案例分析法来分析一些成功的MSP430单片机应用项目,使学生能够了解和掌握如何将理论知识应用于实际项目中。

四、教学资源为了支持教学内容的讲解和教学方法的实施,将准备一系列的教学资源。

首先,将使用教材《MSP430单片机原理与应用》作为主要的教学资料,引导学生学习和掌握相关知识。

其次,将提供一些参考书籍和在线资料,供学生进行深入学习。

此外,还将准备一些多媒体资料,如PPT、视频等,以直观的方式展示一些复杂的原理和应用案例。

MSP430单片机实现的温度控制

MSP430单片机实现的温度控制
本实例中主要使用到的单片机资源包括 ADC10,定时器 TA2 和通用 IO 口。软件上用到 ADC 中断和定时器中断。具体内容将在以下章节加以介绍。
1.1.2 作品功能简介
本作品为温度控制器,利用热电阻温度传感器进行温度检测,并通过设置上下限对温度 进行继电器加电/断电的温度控制,并对当前温度和继电器状态在 LCD 上进行显示。
-1-
第一章 作品概述
1.1 作品基本情况介绍
1.1.1 MSP430G2231 简介
本实例使用芯片为 MSP430G2231,其内部主要资源包括:低功耗 16 位 MSP430 微处理 器;2KB 的 Flash 存储器,128B 的 RAM,一个带两路捕获功能的定时器模块 TA2,支持 SPI 和 I2C 通信的通用串行接口 USI,8 通道 10 位 ADC(6 路外部输入+1 路内部温度传感 器+1 路内部电压),LF、DCO、VLO 组成的时钟系统,10 个通用 IO 口(P1.0~P1.7,P2.6, P2.7)。
图 1.1 系统硬件结构
-3-
1.2.2 系统软件结构
本实例软件结构较为简单,如图 1.2 所示,系统首先进行初始化,包括进行时钟源选择, 看门狗的关闭,AD 模块和定时器模块的工作方式设置,单片机各 I/O 口的初始化即液晶初 始化和初始显示等工作。在系统初始化完成以后,进入主循环。在主循环以中断方式进行 AD 采样,采样结束唤醒 CPU,每采样八次计算一次平均值并进行采样结果读取和数据处理过 程,主要包括电压电阻和温度值的计算。此过程持续进行直到定时器 1s 定时中断的到来, 在定时中断中,重新写入定时初始值,进行温度比较并根据比较结果控制继电器动作,然后, 刷新 LCD 显示结果,即每一秒钟刷新一次显示结果。

MSP430单片机-课程设计(任务书 指导书)新

MSP430单片机-课程设计(任务书  指导书)新

《MSP430单片机最小系统搭建》任务书及设计指导书课程设计实验报告班级学号10移动专1姓名机械与电子信息学部计算机科学与技术教研室2012年12月《MSP430单片机最小系统搭建》任务书及设计指导书一、课程设计目的在课堂理论教学的基础上,通过课程设计和实验动手焊接电路,把MSP430F149 CPU与LED发光二极管,电源,晶体振荡器,键盘连接起来,组成MSP430F149单片机最小系统。

在焊接之前学会测量所使用的数字集成电路。

在组成MSP430F149单片机的基础上,使用C语言编写程序,编译,连接,下载目标码到MSP430F149最小系统,调试MSP430F149片内外围模块。

二、课程设计内容本课程设计包括如下几个部分:1、MSP430 CPU板及其焊接2.LED灯电路的制作3、电源电路的制作4、晶体振荡器电路制作5、键盘电路制作6、数码管显示7、键盘电路8、IAR Embedded Workbench IDE使用;MSP430F149最小系统的程序设计;软件下载、运行与调试9、书写课程设计报告三、课程设计指导1、课程设计MSP430单片机应用电路图阅读课程MSP430单片机应用电路图,明确LED发光二极管,电源,晶体振荡器,数码管,键盘各个部分的焊接内容,需要掌握的焊接要点。

2、元件和工具清单:每人元件和器件一套,器件有LED发光二极管,电源,晶体振荡器,数码管,键盘各个电路部分的电阻,电容,数字集成电路,晶体振荡器等元件和器件。

器件清单见附件1工具烙铁一把,共用斜口钳,剪刀,程序下载线。

设计内容及设计指导一、LED灯电路的制作1、要求:使用8个LED发光二极管与74HC573八位锁存器连接,再与MSP430端口P2的P2.0~P2.7连接。

通过程序控制使这八个LED发光二极管亮和不亮。

LED电路图如下:2、设计要点2.1使用数字万用电表测量和辨别LED发光二极管正级和负级,以便连接电路。

MSP430单片机课程设计

MSP430单片机课程设计

文华学院学生课程考查报告考查课程:MSP430单片机应用设计设计题目:基于MSP430单片机的温度测量仪设计专业班级:**学号:****姓名: **指导教师:**实验日期:2016年5月8日基于MSP430单片机的温度测量仪设计文华学院摘要MSP430单片机是德州公司最新开发的具有16位总线带FLASH的单片机,由于它的性价比和集成度高,受到广大技术开发人员的青睐。

它的可靠性能比较好,加强电干扰运行不受影响,适应工业级的运行环境,在各种行业中都占有重要的位置,越来越多的领域应用到以单片机为控制核心,用液晶显示作为显示终端的数字化控制设备,通过单片机对被控制对象进行智能控制。

MSP430单片机将会在工程技术应用中得到广泛的应用。

而且,它是通向DSP 系列的桥梁,随着自动控制的低功耗化和高速化,MSP430系列单片机将会得到越来越多人的喜爱。

通过这次毕业设计,我对MSP430单片机有了完整的了解,并且着重了解了MSP430F149芯片的原理图以及它的工作原理,对内部的硬件资源和自身的汇编语法进行了实验,把它和DS18B20温度传感器联系在一起实现了温度的测量以及报警。

关键词:MSP430;超低功耗;单片机;DS18B20AbstractTexas MSP430 microcontroller is the latest development of a 16-bit bus with FLASH MCU, due to its cost-effective and highly integrated, by the majority of technology developers of all ages. Its reliability is better, enhancing electrical interference unaffected, adapt industrial-grade operating environment, in a variety of industry occupies an important position in both, applied to more and more areas to microcontroller core, with LCD as a digital control display terminal equipment, through the controlled object MCU intelligent control.MSP430 microcontroller applications engineering technology will be widely used. And, it is a bridge leading DSP family, with automatic control, low power consumption and high speed, MSP430 MCU will get more and more people's favorite.Through this graduation project, I have a complete understanding of the MSP430 microcontroller, and focus on understanding the MSP430F149 chip schematic and it works, and the internal hardware resources and their own assembler syntax conducted experiments it and DS18B20 linked to the temperature sensor of the temperature-measuring andalarm.Keywords: MSP430; ultra-low power; SCM; DS18B20一、概述1.1 引言十七世纪是温度计诞生和发展的最初阶段,这个仪器几乎比任何其它仪器都得到更加广泛的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

理工大学计算机学院课程设计单片机系统设计班级计科1104姓名学号指导教师业德韩慧二○一四年十一月日课程设计任务书及成绩评定课题名称_______温度测试系统设计_______I、题目的目的和要求:利用温度传感器和MSP430单片机设计一个温度测试系统,将测试结果(十进制)在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变(按键不动作时为正常测量显示)。

温度显示格式为:XXX ℃。

II、设计进度及完成情况III、主要参考文献及资料MSP430系列16位低功耗单片机原理及应用DS18B20温度传感器的使用智能仪器原理及应用学科部主任业德Ⅵ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○年月日目录I、题目的目的和要求: (2)II、设计进度及完成情况 (2)III、主要参考文献及资料 (3)Ⅵ、成绩评定: (3)目录 (4)本次课程设计的目的和意义 (5)设计题目 (6)系统的主要功能、作用以及主要技术性能指标 (7)总体设计方案、工作和组成原理 (8)系统设计 (11)设计总结 (22)作品的使用或操作说明 (23)设计图纸或图表 (24)本次课程设计的目的和意义课程设计是让我熟练掌握了课本上的一些理论知识,课程设计也是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。

加深我们对单片机原理与应用课程的理解设计题目温度测试系统设计:利用温度传感器DS18B20和MSP430单片机设计一个温度测试系统,将测试结果(十进制)在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变(按键不动作时为正常测量显示)。

温度显示格式为:XXX ℃。

系统的主要功能、作用以及主要技术性能指标系统的主要功能是单片机实时从温度传感器读取温度数据信息,并在数码管显示,同时扫描是否有保持按键按下,如果按下则不再继续从温度传感器读取温度数据信息,保持温度值不变。

作用是可以实时读取环境中的温度信息,供用户查看,同时当用户需要观察某温度时,可以按下按键保持温度不变。

主要技术指标:1. 基本围0℃-99℃2. 精度误差小于0.5℃3. LED数码直读显示4. 扫描按键保持数值总体设计方案、工作和组成原理数字温度计设计方案论证方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。

方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。

主控制器单片机采用MSP430单片机,处理能力强,功耗低,实现该功能仅需一个按键,8位数码管显示,以及DS18B20温度传感器。

显示电路:显示电路采用8位共阴LED数码管,从P4口输出段码。

图一总体设计框图温度传感器:DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

DS18B20的性能特点如下:●独特的单线接口仅需要一个端口引脚进行通信;●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;●无须外部器件;●可通过数据线供电,电压围为3.0~5.5V;●零待机功耗;●温度以9或12位数字;●用户可定义报警设置;●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20部结构框图如图2所示。

64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。

温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。

高速暂存RAM的结构为8字节的存储器,结构如图3所示。

头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

该字节各位的定义如图3所示。

低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。

温度传感器连接如下图所示,DQ引脚与单片机的P5.3相连:系统设计接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算接口电路设计:主控制器MSP430温度传感器保持按键数码管电路程序框图:总体设计流程图读取温度传感器数据流程图数码管温度显示程序设计://*************************定义引脚********************************** #define LED8PORT P2OUT //P2接8个LED灯#define LED8SEL P2SEL //P2接8个LED灯#define LED8DIR P2DIR //P2接8个LED灯#define DATAPORT P4OUT //数据口所在端口P4#define DATASEL P4SEL //数据口功能寄存器,控制功能模式#define DATADIR P4DIR //数据口方向寄存器#define CTRPORT P6OUT //控制线所在的端口P6#define CTRSEL P6SEL //控制口功能寄存器,控制功能模式#define CTRDIR P6DIR //控制口方向寄存器#define DCTR0 P6OUT &= ~BIT4 //数码管段控制位信号置低#define DCTR1 P6OUT |= BIT4 //数码管段控制位信号置高#define WCTR0 P6OUT &= ~BIT3 //数码管位控制位信号置低#define WCTR1 P6OUT |= BIT3 //数码管位控制位信号置高#define KEYPORT P1OUT //按键所在的端口P1#define KEYSEL P1SEL //控制口功能寄存器,控制功能模式#define KEYDIR P1DIR //控制口方向寄存器#define KEYIN P1IN //键盘扫描判断需要读取IO口状态值uchar key=0xFF; //键值变量uint temp_value;float truetemp;uint temp,A1,A2,A3; //定义的变量,显示数据处理//*******************共阴数码管显示的断码表************************uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// *******************系统时钟初始化***************************void Clock_Init(){uchar i;BCSCTL1&=~XT2OFF; //打开XT2振荡器BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZdo{IFG1&=~OFIFG; //清楚振荡器错误标志for(i=0;i<100;i++)_NOP();}while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待IFG1&=~OFIFG;}//*******************MSP430部看门狗初始化***********************void WDT_Init(){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗}//*******************MSP430IO口初始化*****************************void Port_Init(){LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省LED8DIR = 0xFF; //设置IO口方向为输出LED8PORT = 0xFF; //P2口初始设置为FFDATASEL = 0x00; //设置IO口为普通I/O模式,此句可省DATADIR = 0xFF; //设置IO口方向为输出DATAPORT = 0xFF; //P4口初始设置为FFCTRSEL = 0x00; //设置IO口为普通I/O模式,此句可省CTRDIR |= BIT3 + BIT4 +BIT2; //设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; //P6口初始设置为FFKEYSEL = 0x00; //设置IO口为普通I/O模式,此句可省KEYDIR = 0x0F; //高四位输入模式,低四位输出模式,外部上拉电阻 KEYPORT= 0xF0; //初始值0xF0}//*************74HC573控制数码管动态扫描键值显示函数****************** void Display_Key(uchar num){uchar i,j;j=0x01; //此数据用来控制位选for(i=0;i<8;i++) //8个数码管依次显示{DCTR1; //控制数码管段数据的74HC573的LE管脚置高WCTR1; //控制数码管位的74HC573的LE管脚置高DATAPORT=~j; //设置要显示的位,也就是哪一个数码管亮WCTR0; //锁存位数据,下面送上段数据以后,就显示出来了DATAPORT=table[num]; //送要显示的数据,这里是键值DCTR0; //锁存段数据,数码管亮一个时间片刻j=j<<1; //移位,准备进行下一位的显示delay_us(500); //显示一个时间片刻,会影响亮度和闪烁性}Close_LED(); //显示完8个数码管后关闭数码管显示,否则可能导致各个数码管亮度不一致}//*****************键盘扫描子程序,采用逐键扫描的方式****************** uchar Key_Scan(void){uchar key_check;uchar key_checkin;key_checkin=KEYIN; //读取IO口状态,判断是否有键按下key_checkin&= 0xF0; //屏蔽掉低四位的不确定值if(key_checkin!=0xF0) //IO口值发生变化则表示有键按下{delay_ms(20); //键盘消抖,延时20MSkey_checkin=KEYIN; //再次读取IO口状态if(key_checkin!=0xF0) //确定是否真正的有键按下{key_check=KEYIN; //有键按下,读取端口值switch (key_check & 0xF0) //判断是哪个键按下{case 0xE0:key=1;break;case 0xD0:key=2;break;case 0xB0:key=3;break;case 0x70:key=4;break;}}}else{key=0xFF; //无键按下,返回FF}return key;}//******74HC573控制数码管动态扫描显示函数,显示采集到的温度************** void Display_DS18B20(uint data_b,uint data_s,uint data_g){uchar i,j;j=0x01; //此数据用来控制位选for(i=0;i<3;i++) //用后3位数码管来显示{DCTR1;WCTR1;DATAPORT=~j;WCTR0;j=(j<<1);DATAPORT=0x00; //前5位都不显示,送数据00即可 DCTR0;delay_ms(2);}DCTR1; //开始显示第6位,即十位WCTR1;DATAPORT=~j;WCTR0;j=(j<<1);//DATAPORT=table[A1];DATAPORT=table[data_b];DCTR0;delay_ms(1);DCTR1; //开始显示个位WCTR1;DATAPORT=~j;WCTR0;j=(j<<1);//DATAPORT=table[A2]|0x80; //显示小数点DATAPORT=table[data_s]|0x80; //显示小数点DCTR0;delay_ms(1);DCTR1; //开始显示小数点后面的数据WCTR1;DATAPORT=~j;WCTR0;j=(j<<1);//DATAPORT=table[A3];DATAPORT=table[data_g];DCTR0;delay_ms(1);DCTR1; //开始显示温度单位WCTR1;DATAPORT=~j;WCTR0;j=(j<<1);//DATAPORT=table[A3];DATAPORT=0x63;DCTR0;delay_ms(1);DCTR1; //开始显示温度单位WCTR1;DATAPORT=~j;WCTR0;j=(j<<1);//DATAPORT=table[A3];DATAPORT=0x39;DCTR0;delay_ms(1);DCTR1;WCTR1;DATAPORT=0xff;WCTR0;}//************************DS18B20初始化******************************* unsigned char DS18B20_Reset(void) //初始化和复位{unsigned char i;DQ_OUT;DQ_CLR;delay_us(500); //延时500uS(480-960)DQ_SET;DQ_IN;delay_us(80); //延时80uSi = DQ_R;delay_us(500); //延时500uS(保持>480uS)if (i){return 0x00;}else{return 0x01;}}//**********************DS18B20读一个字节函数**************************** unsigned char ds1820_read_byte(void){unsigned char i;unsigned char value = 0;for (i = 8; i != 0; i--){value >>= 1;DQ_OUT;DQ_CLR;delay_us(4); //*延时4uSDQ_SET;DQ_IN;delay_us(10); //*延时10uSif (DQ_R){value|=0x80;}delay_us(60); //*延时60uS}return(value);}//**********************向18B20写一个字节函数************************/*DS18B20字节写入函数*/void ds1820_write_byte(unsigned char value){unsigned char i;for (i = 8; i != 0; i--){DQ_OUT;DQ_CLR;delay_us(4); //延时4uSif (value & 0x01){DQ_SET;}delay_us(80); //延时80uSDQ_SET; //位结束value >>= 1;}}//********************发送温度转换命令*********************************/*启动ds1820转换*/void ds1820_start(void){DS18B20_Reset();ds1820_write_byte(0xCC); //勿略地址ds1820_write_byte(0x44); //启动转换}//***********************DS8B20读取温度信息************************ unsigned int ds1820_read_temp(void){unsigned int i;unsigned char buf[9];DS18B20_Reset();ds1820_write_byte(0xCC); //勿略地址ds1820_write_byte(0xBE); //读取温度for (i = 0; i < 9; i++){buf[i] = ds1820_read_byte();}i = buf[1];i <<= 8;i |= buf[0];temp_value=i;temp_value=(uint)(temp_value*0.625); //不是乘以0.0625的原因是为了把小数点后一位数据也转化为可以显示的数据//比如温度本身为27.5度,为了在后续的数据处理程序中得到BCD码,我们先放大到275//然后在显示的时候确定小数点的位置即可,就能显示出27.5度了return i;}//*********************温度数据处理函数****************************void data_do(uint temp_d){A3=temp_d%10; //分出百,十,和个位temp_d/=10;A2=temp_d%10;A1=temp_d/10;}//***********************处理温度数据*********************void handletemp(){ds1820_start(); //启动一次转换ds1820_read_temp(); //读取温度数值data_do(temp_value); //处理数据,得到要显示的值truetemp=0.1*temp_value;//judgeAlarm(); //判断是否触发警报//已将其添加至按键程序}//***********************显示温度**********************void showtemp(){uchar j;for(j=0;j<100;j++){Display_DS18B20(A1,A2,A3); //显示温度值}//delay_ms(100); //延时100ms}//***************************主程序************************void main(void){uchar flag1,flag2,flag3,flag4;//uint key_store=0x00; //没有按键按下时,默认显示1WDT_Init(); //看门狗初始化Clock_Init(); //时钟初始化Port_Init(); //端口初始化,用于控制IO口输入或输出//Close_LED();DS18B20_Reset(); //复位D18B20delay_ms(100); //延时100mswhile(1){Key_Scan(); //键盘扫描,看是否有按键按下if(key!=0xff) //如果有按键按下,则显示该按键键值1~4{{switch(key){case 1: LED8PORT=0xfc;flag1=1;flag2=0;flag3=0;flag4=0;break;//对温度数据处理判断警报,然后显示,handletemp();showtemp();case 2: LED8PORT=0xf3;flag1=0;flag2=1;flag3=0;flag4=0;break;//温度数据处理判断警报,关闭显示,节省电源,handletemp();Close_LED();case 3: LED8PORT=0xcf;flag1=0;flag2=0;flag3=1;flag4=0;break;//关闭警报,SOUNDOFF;handletemp();case 4: LED8PORT=0x3f;flag1=0;flag2=0;flag3=0;flag4=1;break;//测试警报SOUNDON;}}}else{LED8PORT&=0xff; //if(flag1==1){//handletemp();showtemp();}if(flag2==1){handletemp();showtemp();}if(flag3==1){SOUNDOFF;handletemp();}if(flag4==1){SOUNDON;}}}}设计总结对整个设计工作过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。

相关文档
最新文档