基于MSP430单片机外部温度采集程序
- 格式:doc
- 大小:55.50 KB
- 文档页数:9
基于MSP430的温度采集系统设计
田壮;赵岩;杜红棉
【期刊名称】《科技信息(学术版)》
【年(卷),期】2011(000)020
【摘要】采用单片机进行温度监测、数字显示、信息存储以及实时监控,对于提高企业生产效率和产品质量、节约能源等都有重要作用。
本文设计了一种采用MSP430单片机和DS18B20温度传感器控制的温度采集系统。
这个温度采集系统能够检测到当前温度并通过软件设定温度报警上下限,同时能够在温度满足报警条件时,通过Led和蜂鸣器使用户知道以便及时采取合适的措施。
该系统结构简单,抗干扰能力强,适合于较高要求条件下温度的测量,具有广泛的应用前景。
【总页数】2页(P235-236)
【作者】田壮;赵岩;杜红棉
【作者单位】中北大学电子测试技术国防重点实验室;中北大学电子测试技术国防重点实验室;中北大学电子测试技术国防重点实验室
【正文语种】中文
【中图分类】TP368.1
【相关文献】
1.基于MSP430单片机的温度采集与无线传输系统设计 [J], 王玉
2.基于MSP430单片机的温度采集系统设计 [J], 明廷日;邓鹏;马雪芬
3.基于MSP430及ADT7420的多点温度采集系统设计 [J], 孙瑞瑞;程广河
4.基于MSP430和WLK01L39的多点无线温度采集系统设计 [J], 李勇;张以帅;唐广耀
5.基于msp430的温度采集及远程传输系统设计 [J], 董琳琳;
因版权原因,仅展示原文概要,查看原文内容请购买。
毕业论文开题报告1.结合毕业设计(论文)课题情况,根据所查阅的文献资料,撰写2000字左右的文献综述:文献综述一、题目背景和研究意义温度是工业生产中最常见和最基本的参数之一,在生产过程中常需对温度进行实时监控。
通常采用单片机完成对温度信息的存储、实时控制、检测以及数字显示。
这对于提高企业生产效率、提升产品质量、节约能源等都有重要的作用。
为此,本文设计了一种温度采集系统,选用DS18B20数字温度传感器和TI公司的MSP430FG4618单片机作为主控制器[1]。
采用这种设计的温度采集系统,可以实现温度检测、信息存储、实时控制以及数字显示,对于提高企业生产效率、节约能源及资源都有重要的作用,具有很大的发展前景[1]。
二、温度传感器及温度测量的国内外发展现状2.1 温度传感器的国内外发展现状温度的测量方法通常分为两大类即接触式测温和非接触式测温。
接触式测温是基于热平衡原理,测温时,感温元件与被测介质直接接触,当达到热平衡时,获得被测物体的温度,例如,热电偶,热敏电阻,膨胀式温度计等就属于这一类;非接触式测温基于热辐射原理或电磁原理,测温时,感温元件不直接与被测介质接触,通过辐射实现热交换,达到测量的目的,例如,红外测温仪、光学高温计等[2]。
常用的测温传感器有热电偶,热电阻,导体温度传感器等,由于科学技术的发展,现多使用集成温度传感器,这里选用的是DS18B20。
集成温度传感器可以分为三类:模拟集成温度传感器、模拟集成温度控制器、智能温度传感器。
智能式传感器是一个以微处理器为内核扩展了外围部件的计算机检测系统。
相比一般传感器,智能式传感器有如下显著特点[3]:1.提高了传感器的精度智能式传感器具有信息处理功能,通过软件不仅可修正各种确定性系统误差(如2.本课题要研究或解决的问题和采用的研究手段(途径):一.本课题所要研究的问题:如何设计一个温度采集及显示系统。
1. 设计MSP430单片机的最小工作系统及其外围模块电路;2. 学习DS18B20温度传感器的单总线协议; 3. 调试各个功能模块的程序,使该系统能够测量并显示温度值;4. 检测系统的功耗。
基于MSP430单片机和LabVIEW的温度监控系统设计设计了基于MSP430F6638单片机和LabVIEW的温度采集系统。
温度传感器采用DS18B20,单片机通过串口将实时采集的温度数据上传到计算机,上位机采用LabVIEW 2017开发,实现温度的实时监控及温度数据的存储等功能。
系统设计简单,具有较高的可靠性和稳定性。
标签:温度监控;MSP430F6638;LabVIEW;DS18B20Abstract: A temperature acquisition system based on MSP430F6638 and LabVIEW is designed. The temperature sensor uses DS18B20,single-chip microcomputer to upload the real-time temperature data to the computer through the serial port. The upper computer is developed with LabVIEW 2017 to realize the functions of real-time temperature monitoring and temperature data storage. The system design is simple and has high reliability and stability.Keywords:temperature monitoring;MSP430F6638;LabVIEW;DS18B201 概述温度监控在工业、农业、电子、医药等领域具有重要的应用。
随着工业自动化进程的不断发展,嵌入式系统和虚拟仪器的应用越来越广泛。
本文以SP430F6638单片机为核心,采用数字温度传感器DS18B20,将采集的温度数据通过RS232串口上传到计算机,上位机采用LabVIEW2017进行开发设计。
基于MSP430单片机的温度采集与无线传输系统设计随着现代数字化和智能化技术的发展,温度检测在工业和农业等方面都有着广泛的应用。
温度采集系统通过采用以新型超低功耗MSP430F247单片机为控制核心,低功耗的HM系类蓝牙模块以及低功耗的DS18B20数字温度传感器为外部数据采集,完成现场温度的实时监测并通过蓝牙模块将采集的温度数据以无线方式传输到上位机,从而实现异地温度监测的功能,具有数据传输准确,可靠性高等特点。
标签:温度采集;无线传输;低功耗温度是表征物体冷热程度基本物理量,在工业和农业生产,以及日常生活等领域中,对温度的测量和控制都占有重要的地位。
温室大棚的温度也需要控制在一定的范围内才更有助于农作物的生长。
如何精确的测量温室大棚的温度,并快速、准确、稳定的控制被控对象,来满足作物对环境温度的要求,将有利于提高作物的产量和质量。
随着单片机等嵌入式技术的蓬勃发展,为现代温度测量控制大大促进了温度监控技术的发展。
计算机控制系统能够实现实时数据采集、实施决策控制、实时控制输出,其实时数据能够实时显示,操作人员可以根据实际情况选择手动或自动调节控制器的输出,并通过无线通信技术实现远程监控,从而保证农业生产的安全和可靠。
1 系统硬件设计1.1 系统结构原理与硬件组成系统采用的主芯片是MSP430F247单片机,外围模块有蓝牙模块,用于无线传输;DS18b20温度传感器,用于温度的采集;QY1609A0液晶显示屏;蜂鸣器,当温度超过报警上下限时用于报警;按键,对系统进行各项操作;LED指示灯,当系统的电池处于充电状态时指示灯亮,电池充电完成时灯灭;锂电池,用于对系统进行供电。
系统的结构框图如图1:图1 系统结构框图1.2 温度采集部分根据温室大棚控制精度的要求,选用DS18B20做为温度传感器。
DS18B20内部结构框图如图2所示。
主要是由存储器、控制器、单线接口、温度敏感器件构成。
图2 DS18B20内部结构框图DS18B20数字温度传感器的特点、性能如下:独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;测温范围-55℃~+125℃,固有测温分辨率0.5℃;支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温;测量结果以9~12位数字量方式串行传送。
摘要温度的采集和控制在各个行业中都占有重要位置,所以温度采集控制仪表具有广泛的应用前景,越来越多的领域应用到以单片机为控制核心,用液晶以及LED数码管为显示终端的数字化控制设备,通过单片机对被控对象进行智能控制。
本设计采用MSP430F149微处理器为核心处理器,以DS18B20温度传感器采集实现温度信息的采集和处理,并能实时显示温度信息,并能对温度上下限进行控制,通过键盘设定报警温度,高于或低于报警温度,系统报警。
系统硬件由电源及复位模块、温度采集模块、键盘输入模块、显示模块和报警模块六部分组成,软件采用模块化编程思想,采用C51编程语言实现系统功能。
通过搭建测试环境,对该系统进行功能测试和指标测试,测试结果表明,该系统的测试结果与实际环境温度相符合,并且温度报警也比较灵敏,除了具有接口电路简单、测量精度高、误差小、可靠性高等特点外,其低成本、低功耗的特点使其拥有更广阔的前景。
【关键词】MSP430F149,温度控制仪(键盘),DS18B20,LED数码管。
【论文类型】应用型Thesis: MSP430-based temperature acquisition system design Profession: Electronic and Information EngineeringStudents: Wang Yongfei Signature:Instructor: Zhang Xiaoli Signature:AbstractAcquisition and control of the temperature occupy an important position in various industries, so the temperature acquisition and control instrumentation has broad application prospects, more and more areas of application to control core microcontroller, LCD and LED digital tube display terminal of the digital control equipment, and intelligent control of the controlled object by the microcontroller.This design uses the MSP430F149 microprocessor as the core processor, DS18B20 temperature sensor collected temperature information acquisition and processing, and real-time display and control. Via the keyboard to set the alarm temperature, higher or lower than the alarm temperature, the system alarm. This article focuses on the hardware and software programming of the system design process. The hardware has six parts: the power and reset module, the temperature acquisition module, the keyboard input module, display module and alarm module.Up the test environment, the system functional tests and indicators for testing, test results show that the test results is consistent with the actual ambient temperature and the temperature alarm is also more sensitive in addition to the interface circuit is simple, high accuracy, error , high reliability, low-cost, low power consumption make it more broad prospects.【Key words】MSP430F149, the temperature control device (keyboard), DS18B20, LED digital tube.【Type of Thesis】Application目录1 绪论 (1)1.1课题研究目的及意义 (1)1.2课题主要研究内容及指标 (2)2 测温系统总体设计 (3)2.1 系统工作原理 (3)2.2 系统工作流程 (3)2.3 系统核心器件选型 (3)2.4 MSP430F149单片机 (4)2.5 单线数字温度传感器DS18B20 (6)3 测温系统的硬件设计 (8)3.1 电源及复位模块设计 (8)3.2 LED显示模块设计 (9)3.3键盘输入模块设计 (9)3.4温度采集模块设计 (10)3.5温度报警模块设计 (12)4 测温系统的软件设计 (13)4.1 系统软件结构及流程图 (13)4.2 LED显示模块程序设计 (15)4.3 键盘输入模块程序设计 (15)4.4 温度采集模块程序设计 (16)4.5 报警模块程序设计 (16)4.6 主模块程序设计 (17)5 系统测试 (18)5.1 系统硬件调试 (18)5.2 系统软件调试 (18)5.2.1 IAR开发环境简介 (18)5.2.2 软件调试 (19)5.2.3 两部分间的联合调试 (19)5.3系统结果测试 (19)6 总结与展望 (21)6.1 总结 (21)6.2 展望 (21)致谢 ......................................................................... 错误!未定义书签。
基于msp430开发板的ds18b20温度测量程序+1602显示#include#include#define uchar unsigned char#define uint unsigned int#define DQ_1 P2OUT |= BIT3 //DS18B20数据脚接P2.3,LaunchPad上TXD、RXD跳线帽,由“‖”接改为“〓”。
用USB连接电脑后就可用超级终端看到温度了。
#define DQ_0 P2OUT &= ~BIT3#define DQ_in P2DIR &= ~BIT3#define DQ_out P2DIR |= BIT3#define DQ_val (P2IN & BIT3)#define Read_ROM 0x33 //读ROM#define Match_ROM 0x55 //匹配ROM#define Skip_ROM 0xcc //跳过ROM#define Search_ROM 0xf0 //搜索ROM#define Alarm_Search 0xec //告警搜索#define Convert_T emperature 0x44 //温度转换#define Read_Scratchpad 0xbe //读暂存存储器9字节内容#define Write_Scratchpad 0x4e //写暂存存储器,写的是TH and TL ,接着发送两位数据就可以unsigned int Check_val; //初始化检测变量unsigned int Temp;//温度整数值void UartPutchar(unsigned char c);unsigned char UartGetchar();unsigned int DS18b20_init(void){DQ_out;DQ_0;__delay_cycles(600);DQ_1;__delay_cycles(60);DQ_in;_NOP();if(DQ_val){Check_val = 0; //初始化失败}else{Check_val = 1; //初始化成功}__delay_cycles(10);DQ_out;DQ_1;__delay_cycles(100);return Check_val;}void DS18b20_write_byte(unsigned int dat) {unsigned int i;for(i = 0; i < 8;i++){DQ_0;__delay_cycles(2);if(dat & 0X01)DQ_1;elseDQ_0;__delay_cycles(60);dat >>= 1;;DQ_1;__delay_cycles(10);}}unsigned int DS18b20_read_byte(void) {unsigned i;unsigned int byte = 0;for(i = 0;i < 8;i++){byte >>= 1;DQ_0;__delay_cycles(2);DQ_1;__delay_cycles(2);DQ_in;_NOP();if(DQ_val)byte |= 0x80;__delay_cycles(60);DQ_out;DQ_1;__delay_cycles(10);}return byte;}unsigned int get_one_temperature(void) {unsigned int Temp_l;unsigned int Temp_h;unsigned int t;float tt;DS18b20_init();DS18b20_write_byte(Skip_ROM);DS18b20_write_byte(Convert_Temperature); __delay_cycles(1000000);DS18b20_init();DS18b20_write_byte(Skip_ROM);DS18b20_write_byte(Read_Scratchpad); Temp_l=DS18b20_read_byte();Temp_h=DS18b20_read_byte();t=Temp_h;t<<=8;t=t|Temp_l;tt=t*0.0625;t= tt*10+0.5; //放大10倍输出并四舍五入return(t);}#define DataDir P1DIR#define DataPort P1OUT#define Busy 0x80#define CtrlDir P2DIR#define CLR_RS P2OUT&=~BIT0; //RS = P3.0 #define SET_RS P2OUT|=BIT0;#define CLR_RW P2OUT&=~BIT1; //RW = P3.1 #define SET_RW P2OUT|=BIT1;#define CLR_EN P2OUT&=~BIT2; //EN = P3.2 #define SET_EN P2OUT|=BIT2;void DelayNus(unsigned int n){CCR0 = n;TACTL |= MC_1; //增计数到CCR0while(!(TACTL & BIT0)); //等待TACTL &= ~MC_1; //停止计数TACTL &= ~BIT0; //清除中断标志}void Delay5ms(void){//unsigned int i;//i=40000;//while (i != 0)// {// i--;// }DelayNus(5000);}void WaitForEnable(void)P1DIR &= 0x00; //将P1口切换为输入状态CLR_RS;SET_RW;_NOP();SET_EN;_NOP();_NOP();while((P1IN & Busy)!=0); //检测忙标志CLR_EN;P1DIR |= 0xFF; //将P4口切换为输出状态}void write_com(unsigned char cmd) {WaitForEnable(); // 检测忙信号?CLR_RS;CLR_RW;_NOP();DataPort =cmd ; //将命令字写入数据端口_NOP();SET_EN; //产生使能脉冲信号_NOP();_NOP();CLR_EN;}void write_data( unsigned int data )WaitForEnable(); //等待液晶不忙SET_RS;CLR_RW;_NOP();DataPort = data; //将显示数据写入数据端口_NOP();SET_EN; //产生使能脉冲信号_NOP();_NOP();CLR_EN;}void zifuchuan(unsigned int *ch){while(*ch!=0)write_data(*ch++);Delay5ms();}void LcdReset(void){CtrlDir |= 0x07; //控制线端口设为输出状态DataDir = 0xFF; //数据端口设为输出状态write_com(0x38); //显示模式设置write_com(0x0c); //显示开,不开游标,不闪烁write_com(0x06); //写字符时整体不移动write_com(0x01); //显示清屏__delay_cycles(200);}/************************************************************* * 名称:void dis_temp(uint t)* 功能:分出十位、个位等* 入口参数:t* 出口参数:无* 说明: 送到1602显示*************************************************************/ void main(void){unsigned int a,b,c,d;// BCSCTL1|=DIVA_0;WDTCTL=WDTPW+WDTHOLD;// WDTCTL = WDT_ADLY_1000; // Stop watchdog timer// IE1 |=WDTIE;P1DIR = 0XFF;P1OUT = 0XFF;P2DIR = 0XFF;P2OUT = 0XFF;BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0; //dco不分频用作mclk,不分频默认用作smclkif (CALBC1_1MHZ != 0xFF){DCOCTL = 0x00;BCSCTL1 = CALBC1_1MHZ; /* Set DCO to 1MHz */DCOCTL = CALDCO_1MHZ;}BCSCTL1 |= XT2OFF + DIVA_0;LcdReset();while(1){a=get_one_temperature();b=a/100;c=(a%100)/10;d=a%10;P2SEL&=~BIT6;if(a>300){P2DIR|=BIT5;P2OUT|=BIT5;P2DIR|=BIT6;P2OUT|=BIT6;}else{P2DIR|=BIT5;P2OUT&=~BIT5;P2DIR|=BIT6;P2OUT&=~BIT6;}write_com(0x80+0x05);write_data(b+0x50);write_data(c+0x50);write_data(0x4e);write_data(d+0x50);write_data(0xbf); //显示温度的小圈write_data(0x23);//__delay_cycles();}}/*pragma vector=WDT_VECTOR__interrupt void watchdog_timer(void){_BIS_SR_IRQ(LPM3_bits); }*/。
基于MSP430单片机的温度测控装置的设计与开发设计与开发基于MSP430单片机的温度测控装置一、引言随着科技的不断进步,温度测控装置在生活和工业中扮演着重要的角色。
本文将介绍基于MSP430单片机的温度测控装置的设计与开发。
该装置可以用于实时监测环境温度,并根据设定的阈值控制温度。
二、硬件设计1.传感器选择:本设计采用温度传感器DS18B20。
它是一种数字式温度传感器,通过一根串行线来与单片机通信。
2.电路连接:将传感器与MSP430单片机连接。
传感器的VCC引脚接单片机的3.3V电源,GND引脚接地,DQ引脚接到单片机的GPIO引脚。
3.LCD模块:为了显示当前温度和控制参数,我们需要一个LCD模块。
将LCD模块的数据引脚接到单片机的GPIO引脚。
4.电源:设计一个适当的电源电路,以提供所需的电压和电流。
三、软件设计1.硬件初始化:在程序开始时,初始化MSP430单片机的GPIO引脚,配置传感器引脚为输入模式和LCD数据引脚为输出模式。
2.温度采集:通过传感器的引脚与单片机通信,获取当前温度数据。
传感器采用一线式通信协议,在读取温度数据之前,先向传感器发送读取命令,然后从传感器接收数据。
单片机通过GPIO引脚进行数据的收发。
3.温度显示:将获取到的当前温度数据通过LCD模块显示出来。
4.温度控制:设定一个温度阈值,当实际温度超过阈值时,单片机控制继电器等设备进行温度调节。
可以采用PID控制算法,根据当前温度与设定温度的差异,调整控制设备的输出。
5.程序循环:通过一个无限循环来保持程序运行。
四、测试与验证1.硬件测试:对硬件电路进行测试,确保传感器和LCD模块的接线正确,电源电压稳定。
2.软件测试:通过模拟不同温度值,确认温度采集、显示和控制功能正常。
3.综合测试:将温度测控装置放置在实际环境中,观察温度采集和控制性能,根据需要进行调整。
五、结论本文设计与开发了基于MSP430单片机的温度测控装置。
主函数#include<MSP430x14x.h>#include"wenducaiji.h"#include"12864.h"# define uint unsigned int# define uchar unsigned charuchar *dis1={"外部温度:"};void init_adc12();uint Do1Convert(void);void main(void){WDTCTL=WDTPW+WDTHOLD;P3DIR=0XFF;P4DIR=0XFF;P3OUT=0X00;P1DIR=0XFF; //设置DS18B20的IO状态P1OUT=0X00;TACTL |= TASSEL_2 + ID_3; //计数时钟选择SMLK=8MHz,1/8分频后为1MHz P5DIR=0x07;P6SEL|=0X01;init_adc12();init_adc12();init_clk(); //初始化晶振busyornot();init_lcd12684();display(0x80,dis1);while(1){float m;m=Do1Convert()*6.25;for(unsigned int i=0;i<0xffff;i++);led_showd(0x85,m); //显示外部温度}}void init_adc12(){//ADC12设置**************************P6SEL |= 0x01; //使用A/D通道A0ADC12CTL0 = ADC12ON ; //开ADC12内核,设SHT0=2 (N=4)ADC12CTL1 = SHP ; //SAMPCON信号选为采样定时器输出//ADC12内部参考电压设置ADC12CTL0 |= REF2_5V; //选用内部参考电压为2.5VADC12CTL0 |= REFON; //内部参考电压打开ADC12MCTL0 |= SREF_1; //R+=2.5V R-=VSS//转换允许ADC12CTL0 |= ENC ; //转换允许(上升沿)}温度采集模块#include <msp430x14x.h># define uint unsigned int# define uchar unsigned char#define DQ0 P1OUT &= ~BIT6#define DQ1 P1OUT |= BIT6void DelayNus(unsigned int n);unsigned char Init_18B20(void);void Write_18B20(unsigned char wdata);unsigned char Read_18B20(void);void Skip(void);void Convert(void);void Read_SP(void);unsigned int ReadTemp(void);unsigned int Do1Convert(void);/*******************************************函数名称:DelayNus功能:实现N个微秒的延时参数:n--延时长度返回值:无说明:定时器A的计数时钟是1MHz,CPU主频8MHz所以通过定时器延时能够得到极为精确的us级延时********************************************/void DelayNus(uint n){CCR0 = n;TACTL |= MC_1; //增计数到CCR0while(!(TACTL & BIT0)); //等待TACTL &= ~MC_1; //停止计数TACTL &= ~BIT0; //清除中断标志}/******************************************* 函数名称:Init_18B20功能:对DS18B20进行复位操作参数:无返回值:初始化状态标志:1--失败,0--成功********************************************/ uchar Init_18B20(void){uchar Error;_DINT();DQ0;DelayNus(500);DQ1;DelayNus(55);P1DIR &=~ BIT6;_NOP();if(P1IN & BIT6){Error = 1; //初始化失败P1DIR |= BIT6;}else{Error = 0; //初始化成功P1DIR |= BIT6;DQ1;}_EINT();DelayNus(400);return Error;}/******************************************* 函数名称:Write_18B20功能:向DS18B20写入一个字节的数据参数:wdata--写入的数据返回值:无********************************************/void Write_18B20(uchar wdata){uchar i;_DINT();for(i = 0; i < 8;i++){DQ0;DelayNus(6); //延时6usif(wdata & 0X01) DQ1;else DQ0;wdata >>= 1;DelayNus(50); //延时50usDQ1;DelayNus(10); //延时10us }_EINT();}/******************************************* 函数名称:Read_18B20功能:从DS18B20读取一个字节的数据参数:无返回值:读出的一个字节数据********************************************/ uchar Read_18B20(void){uchar i;uchar temp = 0;_DINT();for(i = 0;i < 8;i++){temp >>= 1;DQ0;DelayNus(6); //延时6usDQ1;DelayNus(8); //延时9usP1DIR &= ~BIT6;_NOP();if(P1IN & BIT6) temp |= 0x80;DelayNus(45); //延时45usP1DIR |= BIT6;DQ1;DelayNus(10); //延时10us}_EINT();return temp;}/*******************************************函数名称:Skip功能:发送跳过读取产品ID号命令参数:无返回值:无********************************************/ void Skip(void){Write_18B20(0xcc);}/*******************************************函数名称:Convert功能:发送温度转换命令参数:无返回值:无********************************************/ void Convert(void){Write_18B20(0x44);}/*******************************************函数名称:Read_SP功能:发送读ScratchPad命令参数:无返回值:无********************************************/ void Read_SP(void){Write_18B20(0xbe);}/*******************************************函数名称:ReadTemp功能:从DS18B20的ScratchPad读取温度转换结果参数:无返回值:读取的温度数值********************************************/ uint ReadTemp(void){uchar temp_low;uint temp;temp_low = Read_18B20(); //读低位temp = Read_18B20(); //读高位temp = (temp<<8) | temp_low;return temp;}/******************************************* 函数名称:Do1Convert功能:控制DS18B20完成一次温度转换参数:无返回值:测量的温度数值********************************************/ uint Do1Convert(void){uchar i;do{i = Init_18B20();}while(i);Skip();Convert();for(i = 20;i > 0;i--)DelayNus(600); //延时800ms以上do{i = Init_18B20();}while(i);Skip();Read_SP();return ReadTemp();}12864液晶显示模块#include <msp430x14x.h># define uint unsigned int# define uchar unsigned charuchar num[10]={"0123456789"};# define RS0 P3OUT&=~BIT0;# define RS1 P3OUT|=BIT0;# define RW0 P3OUT&=~BIT1;# define RW1 P3OUT|=BIT1;# define EN0 P3OUT&=~BIT2;# define EN1 P3OUT|=BIT2;# define uint unsigned int# define uchar unsigned charvoid init_clk();void busyornot();void init_lcd12684();void display(uchar add,uchar *str);void delayms();void led_showd(char address,float data);void init_clk(){ uchar i;BCSCTL1 &= ~XT2OFF; //打开XT2高体振荡器do{IFG1 &= ~OFIFG; //清除晶振失败标志for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振}while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振}void busyornot(){uchar busy;RS0;RW1;P4DIR=0X00;//输入,为读状态做准备do{EN1;_NOP();busy=P4IN;EN0;}while(busy&0x80);P4DIR=0XFF;//输出,为写作准备}void write_cmd(uchar cmd)//写命令到lcd{ busyornot();RW0;P4OUT=cmd;EN1;_NOP();EN0;}void init_lcd12684(){ delayms(50);write_cmd(0x30);//基本指令操作delayms(50);write_cmd(0x0c);//显示开,光标关delayms(50);write_cmd(0x01);//清除lcd显示的内容delayms(50);}void write_data(uchar data)//写数据到lcd{ busyornot();RS1;RW0;P4OUT=data;EN1;_NOP();EN0;}void display(uchar add,uchar *str){write_cmd(add);while(*str!='\0'){write_data(*str);str++;}}void led_showd(char address, float data) //显示浮点数,其中整数位2位,小数位2位{write_cmd(address);write_data(num[(int)data/1000]);write_data(num[(int)data%1000/100]);write_data(0x2e); //显示小数点write_data(num[(int)data%1000%100/10]);write_data(num[(int)data%10]); }void delayms(){for(int t=0;t<2000;t++){_NOP();}}。