基于MSP430单片机的温度测量及显示系统_第1页
基于MSP430单片机的温度测量及显示系统_第2页
基于MSP430单片机的温度测量及显示系统_第3页
基于MSP430单片机的温度测量及显示系统_第4页
基于MSP430单片机的温度测量及显示系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1.系统设计与框图 22.系统硬件主要电路 22.1MSP430单片机模块 22.1.1MSP430单片机工作特点 32.1.2MSP430单片机最小系统 32.2LCD1602液晶显示模块 42.2.1LCD1602引脚功能 42.2.2LCD1602指令说明 52.2.3LCD1602操作时序 62.3.DS18B20温度采集模块 72.3.1DS18B20封装形式及引脚功能 72.3.2DS18B20内部结构 82.3.3DS18B20测温原理 92.4.串口通信模块 102.4.1串行通信概述 102.4.2RS232接口电路 113.系统软件设计 123.1主程序 133.2DS18B20温度采集程序 133.3LCD1602液晶温度显示程序 153.4串口程序 164.系统调试与结果分析 174.1LCD1602液晶温度显示 174.2串口通信上位机温度显示 174.3串口示波器显示温度变化曲线 185.总结 19参考文献: 19基于MSP430单片机的温度测量及显示系统摘要:随着现代信息技术的飞速发展和传统工业改造的逐步实现,温度自动检测和显示系统在很多领域得到广泛应用。人们在温度检测的准确度、便捷、快速等方面有着越来越高的要求。而传统的温度传感器已经不能满足人们的需求,其渐渐被新型的温度传感器所代替。本文基于MSP430单片机,设计对环境温度进行采集的温度采集系统。利用DS18B20单总线进行温度测量,并通过单片机将温度显示在LCD1602上,并利用虚拟串口显示温度变化的曲线。关键词:MSP430;LCD1602;DS18B20;串口通信1.系统设计与框图温度采集系统是以MSP430单片机为核心的系统,它主要包括温度的采集、采集数据的处理、单片机通信、LCD液晶显示等几大模块,具体方案如图1-1所示:图1-1系统框图信号采集主要是由DS18B20及其外围电路构成。所得到的数字信号经过单片机的处理后,将温度值输出到LCD1602液晶上显示出来,同时通过串口通信发送到上位机上,并在串口示波器上显示出温度变化曲线,从而完成整个系统的工作。2.系统硬件主要电路2.1MSP430单片机模块MSP430F149是一种新型的混合信号处理器,采用了美国德州仪器(TexasInstruments)公司最新低功耗技术(工作电流为0.1一400pA),它将大量的外围模块整合到片内,特别适合于开发和设计单片系统。2.1.1MSP430单片机工作特点MSP430149单片机主要具有如下特点:①低电压、超低功耗。工作电压3.3V,等待方式下工作电流为1.3wA,在RAM保持关闭工作方式下工作电流仅为0A。②具有12位的模数转换器(ADC12),可以得到很高的精度,并且省去了使用专门的模数转换器给设计电路板带来的麻烦。③拥有大容量的存储空间。存储器方面包括多达60kFlashROM和2kRAM,如此数量的存储空间完全可以满足程序及数据的需要。④两通道串行通信接口。可用于与计算机进行异步或同步串行通信。⑤硬件乘法器。该乘法器独立于CPU进行乘法运算的操作,在提高乘法运算速度的同时也提升了CPU的利用效率。⑥串行在系统编程。通过仿真器对程序进行下载,并通过专用软件对程序及单片机的工作状态进行监控,极大地方便了程序的调试。2.1.2MSP430单片机最小系统MSP430单片机最小系统电路如图2-1-2(1)和图2-1-2(2)所示2.2LCD1602液晶显示模块LCD1602液晶显示器也叫1602字符型液晶显示器。它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成。每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块。2.2.1LCD1602引脚功能1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2.1所示:表2.1引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。2.2.2LCD1602指令说明1602液晶模块内部的控制器共有11条控制指令,如表2.2所示:表2.2控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。2.2.3LCD1602操作时序LCD1602读写操作时序如图2-2-3(1)和图2-2-3(2)所示:图2-2-3(1)读操作时序图2-2-3(2)写操作时序2.3.DS18B20温度采集模块DS18B20是Dallas公司继DS1820后推出的一种改进型智能数字温度传感器,与传统的热敏电阻相比,只需一根线就能直接读出被测温度值,并可根据实际需求来编程实现9~12位数字值的读数方式。2.3.1DS18B20封装形式及引脚功能图2-3-1DS18B20封装及引脚功能如图3-1-1所示,DS18B20的外形如一只三极管,引脚名称及作用如下:GND:接地端。DQ:数据输入/输出脚,与TTL电平兼容。VDD:可接电源,也可接地。因为每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采用数据总线供电方式时VDD接地,可以节省一根传输线,但完成数据测量的时间较长;采用外部供电方式则VDD接+5V,多用一根导线,但测量速度较快。2.3.2DS18B20内部结构图2-3-2DS18B20内部结构图3-1-2中出示了DS18B20的主要内部部件,下面对DS18B20内部部分进行简单的描述:(1)64位ROM。64位ROM是由厂家使用激光刻录的一个64位二进制ROM代码,是该芯片的标识号,如表2.3所示:表2.364位ROM标识8位循环冗余检验48位序列号8位分类编号(10H)MSBLSBMSBLSBMSBLSB第1个8位表示产品分类编号,DS18B20的分类号为10H;接着为48位序列号。它是一个大于281*1012的十进制编码,作为该芯片的唯一标示代码;最后8位为前56位的CRC循环冗余校验码,由于每个芯片的64位ROM代码不同,因此在单总线上能够并接多个DS18B20进行多点温度实习检验。(2)温度传感器。温度传感器是DS18B20的核心部分,该功能部件可完成对温度的测量通过软件编程可将-55~125℃范围内的温度值按9位、10位、11位、12位的分辨率进行量化,以上的分辨率都包括一个符号位,因此对应的温度量化值分别为0.5℃、0.25℃、0.125℃、0.0625℃,即最高分辨率为0.0625℃。芯片出厂时默认为12位的转换精度。当接收到温度转换命令(44H)后,开始转换,转换完成后的温度以16位带符号扩展的的二进制补码形式表示,存储在高速缓存器RAM的第0,1字节中,二进制数的前5位是符号位。如果测得的温度大于0,这5位为0,只要将测得的数值乘上0.0625即可得到实际温度;如果温度小于0,这5位为1,测得的数值需要取反加1再乘上0.0625即可得到实际温度。(3)高速缓存器。DS18B20内部的高速缓存器包括一个高速暂存器RAM和一个非易失性可电擦除的EEPROM。非易失性可点擦除EEPROM用来存放高温触发器TH、低温触发器TL和配置寄存器中的信息。(4)配置寄存器。配置寄存器的内容用于确定温度值的数字转换率。DS18B20工作是按此寄存器的分辨率将温度转换为相应精度的数值,它是高速缓存器的第5个字节,该字节定义如表2.4所示:表2.4匹配寄存器TMR0R111111TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时该位被设置为0,用户不要去改动;R1和R0用来设置分辨率;其余5位均固定为1。DS18B20分辨率的设置如表2.3所示:表3.3DS18B20分辨率的设置R1R0分辨率最大转换时间/ms009位93.750110位187.51011位3751112位750DS18B20依靠一个单线端口通讯。在单线端口条件下,必须先建立ROM操作协议,才能进行存储器和控制操作。因此,控制器必须首先提供下面5个ROM操作命令之一:1)读ROM;2)匹配ROM;3)搜索ROM;4)跳过ROM;5)报警搜索。这些命令对每个器件的激光ROM部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。成功执行完一条ROM操作序列后,即可进行存储器和控制操作,控制器可以提供6条存储器和控制操作指令中的任一条。一条控制操作命令指示DS18B20完成一次温度测量。测量结果放在DS18B20的暂存器里,用一条读暂存器内容的存储器操作命令可以把暂存器中数据读出。温度报警触发器TH和TL各由一个EEPROM字节构成。如果没有对DS18B20使用报警搜索命令,这些寄存器可以做为一般用途的用户存储器使用。可以用一条存储器操作命令对TH和TL进行写入,对这些寄存器的读出需要通过暂存器。所有数据都是以最低有效位在前的方式进行读写。2.3.3DS18B20测温原理DS18B20的测温原理如图3-1-3所示,其主要由斜率累加器、温度系数振荡器、减法计数器、温度存储器等功能部件组成。图2-3-3DS18B20测温原理DS1820是这样测温的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于-55℃的一个值。如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨率。这是通过改变计数器对温度每增加一度所需计数的的值来实现的。因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。DS18B20内部对此计算的结果可提供0.5℃的分辨率。温度以16bit带符号位扩展的二进制补码形式读出,表2.5给出了温度值和输出数据的关系。数据通过单线接口以串行方式传输。DS18B20测温范围-55℃~+125℃,以0.5℃递增。表2.5温度数据关系温度℃数据输出(二进制)数据输出(十六进制)+125000000001111101000FA+2500000000001100100032+0.500000000000000010001000000000000000000000-0.51111111111111111FFFF-251111111111001110FFCE-551111111110010010FF92S18B20遵循单总线协议,每次测温时都必须有4个过程[6]:•初始化;•传送ROM操作命令;•传送ROM操作命令;•数据交换;2.4.串口通信模块串行通信是一种能把二进制数据按位(逐位)进行传送的一种通信方式。计算机与外界的通信有两种基本方式:并行通信和串行通信。2.4.1串行通信概述串行通信按信息的格式又可分为异步通信和同步通信两种方式。在异步通信中,每一个字符要用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个地发送和接收。串行异步通信方式的特点是:数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。传送一个字符又称为一帧信息,传送一帧信息时,每一个字符前加一个低电平的起始位,然后是数据位,数据位可以是5~8位,低位在前,高位在后,数据位后可以带(也可以不带)一个奇偶校验位,最后是停止位,停止位用高电平表示,它可以是1位、1位半或2位(通常采用1位)。串行口工作方式分为以下四种:方式0:移位寄存器方式;方式1:8位数据异步通讯方式;方式2和方式3都是11为异步收发。2.4.2RS232接口电路串口通信电路如图2-4-2所示:图2-4-2RS232通讯电路3.系统软件设计系统的程序主要包括主程序、读出温度子程序、写出温度子程序、温度转换命令字程序、计算温度子程序和液晶显示数据子程序。程序的功能是实时显示温度、读出并处理DS18B20的测量温度值,并通过串口通信发送到上位机显示温度,同时在串口示波器上显示温度变化曲线。其程序流程如图3:图3主程序流程图3.1主程序主程序如下:voidmain(void){unsignedchari;unsignedchardis[5]={"00.0"};WDTCTL=WDTPW+WDTHOLD;InitSys();LCD_PortInit();LCD_init();LCD_clear();LCD_write_str(0,0,"TheTemperature:");LCD_write_str(5,1,"C");DS18B20_Reset();UART_PortInit();UART_Config();//温度显示与串口接收while(1){ds1820_start();//启动一次转换ds1820_read_temp();//读取温度数值dis[0]=temp_value%1000/100+0x30;dis[1]=temp_value%100/10+0x30;dis[2]='.';dis[3]=temp_value%10+0x30;LCD_write_str(0,1,dis);//Print_Str("123");for(i=0;i<4;i++){Send_Byte(dis[i]);Send_Byte('\n');}Delay_Nms(500);}}3.2DS18B20温度采集程序在本次设计系统中P1^6口用来单片机与温度传感器通讯;它用到的相关函数如下:ds_init()18B20初始化;ds_write()向18B20中写入数据;ds_read()由18B20读取数据;ds_temp()从18B20中读取温度值;dis[]把温度值送入1602中显示。具体程序如下所示:#include"ds18b20.h"#include"delay.h"#defineuintunsignedint#defineucharunsignedchar#defineuintunsignedintuinttemp_value;unsignedcharDS18B20_Reset(void)//初始化和复位{unsignedchari;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){return0x00;}else{return0x01;}}//*************************************************************************// DS18B20读一个字节函数//*************************************************************************unsignedchards1820_read_byte(void){unsignedchari;unsignedcharvalue=0;for(i=8;i!=0;i--){value>>=1;DQ_OUT;DQ_CLR;delay_us(4);//*延时4uS DQ_SET;DQ_IN;delay_us(10);//*延时10uS if(DQ_R){value|=0x80; }delay_us(60); //*延时60uS }return(value);}/*DS18B20字节写入函数*/voidds1820_write_byte(unsignedcharvalue){unsignedchari;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转换*/voidds1820_start(void){DS18B20_Reset();ds1820_write_byte(0xCC); //勿略地址ds1820_write_byte(0x44); //启动转换}//*************************************************************************// DS8B20读取温度信息//*************************************************************************unsignedintds1820_read_temp(void){unsignedinti;unsignedcharbuf[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);returni;}voiddata_do(uinttemp_d){uintA2t;A1=temp_d/100;//分出百,十,和个位A2t=temp_d%100;A2=A2t/10;A3=A2t%10;}3.3LCD1602液晶温度显示程序在本次设计系统中定义了P6^5口为1602液晶的使能端;P6^3为数据命令的选择端;P6^4为读写选择端。定义了有关的函数:LCD_write_com()向1602写入命令码函数LCD_write_data()向1602写入数据函数display()1602显示函数lcd_init()1602初始化lcd_display()1602显示初始化。具体程序如下所示:#include<msp430x14x.h>#include<math.h>#include"1602.h"#include"delay.h"voidLCD_PortInit(){P2DIR=0xff;P6DIR|=BIT3+BIT4+BIT5;}voidLCD_write_com(unsignedcharcom){ RS_CLR; RW_CLR; EN_SET; DATAPORT=com;//命令写入端口 Delay_Nms(5); EN_CLR;}voidLCD_write_data(unsignedchardata){ RS_SET; RW_CLR; EN_SET; DATAPORT=data;//数据写入端口 Delay_Nms(5); EN_CLR;}voidLCD_clear(void){//清屏幕显示 Delay_Nms(5);}voidLCD_write_char(unsignedcharx,unsignedchary,unsignedchardata){if(y==0){ LCD_write_com(0x80+x);//第一行显示}else{ LCD_write_com(0xC0+x);//第二行显示}LCD_write_data(data);}voidLCD_write_str(unsignedcharx,unsignedchary,unsignedchar*s){ if(y==0){ LCD_write_com(0x80+x);//第一行显示}else{ LCD_write_com(0xC0+x);//第二行显示}while(*s!='\0'){ LCD_write_data(*s); s++;}}voidLCD_init(void){LCD_write_com(0x38); //显示模式设置Delay_Nms(5);LCD_write_com(0x08); //显示关闭Delay_Nms(5);LCD_write_com(0x01); //显示清屏Delay_Nms(5);LCD_write_com(0x06); //显示光标移动设置Delay_Nms(5);LCD_write_com(0x0C); //显示开及光标设置Delay_Nms(5);}3.4串口程序#include"UART.h"#defineuintunsignedint#defineucharunsignedchar#defineulongunsignedlongvoidUART_PortInit(){P3SEL|=BIT4+BIT5;//设置IO口为第二功能模式,启用UART功能P3DIR|=BIT4;P3DIR&=~BIT5;}voidUART_Config(){U0CTL|=SWRST+CHAR;//复位SWRST,8位数据模式U0TCTL|=SSEL0;//SMCLK为串口时钟U0BR1=0x00;//BRCLK=1MHZ,Baud=BRCLK/NU0BR0=0x03;//N=UBR+(UxMCTL)/8U0MCTL=0x4A;//微调寄存器为0,波特率9600bpsME1|=UTXE0;//UART0发送使能ME1|=URXE0;//UART0接收使能U0CTL&=~SWRST;//IE1|=URXIE0;//接收中断使能位}//*************************************************************************//串口0发送数据函数//*************************************************************************voidSend_Byte(uchardata){while(!(IFG1&UTXIFG0));//发送寄存器空的时候发送数据U0TXBUF=data;}//*************************************************************************//串口0发送字符串函数//********************************************************************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论