完整版MSP430单片机课程设计Word格式.docx
《完整版MSP430单片机课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《完整版MSP430单片机课程设计Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
![完整版MSP430单片机课程设计Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/25/e5cbdf93-0531-4042-9100-4ed02bf072e9/e5cbdf93-0531-4042-9100-4ed02bf072e91.gif)
industrial-gradeoperatingenvironment,inavarietyofindustryoccupies
animportantpositioninboth,appliedtomoreandmoreareasto
microcontrollercore,withLCDasadigitalcontroldisplayterminalequipment,throughthecontrolledobjectMCUintelligentcontrol.
MSP430microcontrollerapplicationsengineeringtechnologywillbewidelyused.And,itisabridgeleadingDSPfamily,withautomaticcontrol,lowpowerconsumptionandhighspeed,MSP430MCUwillgetmoreandmorepeople'
sfavorite.
Throughthisgraduationproject,IhaveacompleteunderstandingoftheMSP430microcontroller,andfocusonunderstandingtheMSP430F149chipschematicanditworks,andtheinternalhardwareresourcesandtheirownassemblersyntaxconductedexperimentsitandDS18B20linkedtothetemperaturesensorofthetemperature-measuringandalarm.
Keywords:
MSP430;
ultra-lowpower;
SCM;
DS18B20
一、概述
1.1引言
十七世纪是温度计诞生和发展的最初阶段,这个仪器几乎比任何其它仪器都得到更加广泛的应用。
现代历史研究认为最早发明温度计的科学家是伽利略,他在1592年发明了最早的气体温度计,最早的液体温度计则是荷兰科学家华伦海特制造出来的。
随着核能,宇航,冶金,低温,材料,微电子学和生物医学等方面的发展,对于温度测量控制的精度和范围提出了很高的要求,特别是对温度的测量不但要准确,而且需要读取数值时要更直观,更方便,这样的要求促进了温度测量和控
制技术的迅速发展。
在如今虽然水银温度计仍是各温度测量的计量标准,可是它的缺点则是刻度间隔通常很密,不能准确分辨,读数困难,而且它们的热容量比较大,这使得达到热平衡所需的时间非常长,因此更难读准,同时,玻璃管易碎,
里边的水银有毒,使用起来非常不方便。
后来出现了代替水银的有,酒精温度计和金属簧片温度计。
它们虽然无毒性,但是测量精度很低,只能作为一个大概的指示。
后来接着又出现了热电阻温度计、热电偶温度计等温度计。
之后随着大规模集成电路技术的提高,又出现了多种集成的数字化温度传感器。
如今随着电子工业的发展,数字仪表的优点有反应速度快,操作简单,并且对使用环境要求不高,市场上出现越来越多的数字式温度计,纵观国际上现有的温度计的变化,总趋势是从模拟信号向数字信号转变,相应的
体积也在不断的减小,一切向着数字化,智能化控制方向发展。
1.2现状和发展状况
温度检测和控制是在工业生产过程中是比较典型的应用之一,随着传感器在
生产生活中的广泛应用,利用新型总线式数字温度传感器来实现对温度的测试,并且让控制得到更快的开发。
在现在的生活中,所用到的家具设备,电器,工业产品等对温度的要求日益增高,与此同时灵敏的温度控制报警系统已经成为了日常生活中必
不可少的产品。
例如锅炉,冰箱的温控系统等,都需要用到了这一功能部件。
对此,我这次设计了基于MSP430F14单片机的温度检测系统,来模拟现实中的温度控制系统。
此系统的设计和布线简单,体积小,重量轻,结构紧凑,抗干扰能力比较强,扩展方便,性价比高,在工厂,大型仓库,智能化的建筑等领域的多点温度检测系统中有广阔的应用前景。
所以在科学技术发展的今天,温度的检测,控制应用于许多行业,随着电子工业的迅速发展,数字仪表的优点有反应速度快,操作简单,对使用环境要求不高,市场上出现了越来越多的数字式温度计,实践表明,低功耗,高精度的便携式数字式温度计使用十分方便,工作状况稳定,待机时间比较长,已经开始得到广泛应用。
1.3课题研究的主要内容
本设计的目的是实现基于MSP43C单片机的温度测量仪设计,主要内容有:
1、可利用单片机芯片内温度传感器或DS18B2C单线温度传感器。
2、5位数字显示(显示器可用LED数码管、LCD1002或LCD12664显示模块)。
二、系统方案设计
2.1系统组成结构
该系统主要由4模块组成,其中包括DS18B20温度传感器,MSP430F14微控制器,LED显示模块,报警模块4部分组成。
由温度传感器负责数据采集,经过处理器转换后由LED显示模块输出,同时报警模块负责温度报警的上下限,当温度到达设定值时就会发生报警。
其组成框图如下所示:
2.2系统工作流程
首先设定温度报警的上下限值,然后由温度传感器进行温度数据的采集,当微处理器检测到温度超过设定的范围值时就实行报警,提醒用户做相关操作。
•
2.3系统核心器件选型
MSP430F14单片机,DS18B2C温度传感器,液晶显示器
2.4系统硬件主要电路说明
2.4.1数据采集系统电路
该系统采用美国DALLAS^司生产的单线数字温度传感器DS18B2C来采集温度数据,作为单片机MSP430149勺温度传感器,该芯片有很多优点,可把温度信号直接转换成串行数字信号供微机处理。
由于每片DS18B20含有唯一的硅串行
数,从DS18B20卖出的信息或写入DS18B20勺信息,仅需要一根口线(单线接口)。
由于该系统采用DS18B20乍为温度采集传感器,这部分电路就比较简单了,下图为温度采集电路。
L:
j
:
NDif|—1
IK
1
V
DS18B20勺读写时序和测温原理和DS1820相同,只是得到的温度值的位数因分辨率不同而不同,DS18B20勺测温过程中温度的变化对晶振的振荡频率影响非常的小,会产生脉冲信号送到计数器1,而且是固定的频率。
但高温度的晶振的振荡频率就会随着温度的变化而产生明显的改变搞温度的晶振所产生的频率会做为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55C所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1
的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数
器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
高速缓存器存储器包含一个高速暂存RAh和一个非易失性的可电擦除的EP2RAM配置寄存器为高速缓存器中的第五个字节,它的内容用于确定温度值的
数字转换分辨率。
后五位一直是1,TM是测试模式位,用于设置DS18B20在工作模式还是测试模式,在DS18B20出厂时被设置为0,用户不需要去改动,R1和R0决定温度转换的精度位数⑹。
2.4.2PL2303下载电路
Q5C1<
PLLTSSICNELFILVDCLPLLUt;
tooTKJMOD"
GNDVEDI
R5TOR怒
DMDP
PL2303器件内置USB功能控制器,USB收发器,振荡器和带有全部调制解调器控制信号的UART所以我们只需要外接几个电容就可实现RS232信号与USB信号的转换,这样能够方便我们嵌入到各种设备当中。
这些信息的转换全部由器件自身完成,不需要我们自己动手操作。
2.4.3报警模块蜂鸣器电路
报警处埋模块相当简单,这里只是简单的在一个I/O口上送出数据来驱动蜂鸣器,该模块包括数据产生和初始化端口两个部分,数据的产生部分主要是在输出端口产生数据,这里不是简单的一个高电平或者是低电平的问题,而是要有一定频率的数据才可以,因为只有是交流信号才能够让蜂鸣器发出声。
而不同的周期信号可以得到不同的频率,则可以根据信号处理的知识来进行分析[7]。
244LCD1602显示模块电路
LCD咖
液晶显示1602利用的是液晶的物理性质,由电压控制其显示区域,可以显示图形,只要有电源就可以显示图形。
液晶显示装置有这不一般的厚度薄,适用于大规模集成电路的直接驱动,易于实现全彩色显示,这已被广泛应用于笔记本电脑,数码相机,CDA移动通信工具。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
1、显示质量高:
由于显示器在每一个点在收到信号之后就一直保持那种色彩和亮度,恒定发光,而不像显示器那样出现不断刷新的亮点。
所以液晶显示器的画面质量很高,一般不会出现闪烁的现象,比传统的显示器画面要胜出一筹。
2、数字式接口:
显示器全部是数字的,和其他单片机比起来更加的简单可靠,操作则也很方便。
3、体积很小,重量很轻,i一般的传统的显示器轻上很多。
而液晶显示器通过电极控制液晶内部的分子状态,从而达到显示的目的[8][9]。
4、功耗低:
相对与其他的单片机来说,液晶显示器的功耗主要消耗在驱动IC上,其他的则消耗在了内部电极上,因此消耗的电量比其它的传统显示器要少得多。
三、工作原理
本设计的原理是:
温度采集系统主要通过单线数字温度传感器DS18B2C采集得到温度数据,MSP430F14作为CPU从温度传感器读取数据,将得到的数据进行判断然后做相应处理,比如显示或报警。
温度传感器通过某种关系的换算,就可以得到温度传感器的输出电压,这样单片机通过模拟口采集得到传感器的输出电压。
由于MSP430F14片内集成了A/D转换通道,这样可以直接将单片机的A/D输入通道和传感器的模拟电压输出通道相连接另外系统通过键盘输入来完成对报警温度上下限的设置,通过显示电路将得到的数据显示出来,当超过设定值时则会报警。
该系统主要有电源及复位模块,温度传感器采集模块,温度报警模块和显示模块,分别有P1.0-P1.7,RESETP2.5,P2.6,P4.0-P4.7控制。
整个系统具有结构简单等特点。
温度传感器的采集模块和单片机的数模转换的通道连接,这样可以使得采集模块的设计简单化,从而使得设计的程序和模块简单易懂。
其中温度采集和显示模块的很多运算功能是通过单片机的Pl口来实
现的,由于Pl口中断功能,所以实现起来非常容易,并且也非常适合软件编程。
电源及复位模块主要是为整个系统提供可靠的电源,另外考虑到系统工作需要有
复位功能,因此也为系统提供复位信号。
四、软件设计
程序:
inelude<
msp430x14x.h>
//延时函数
#defineCPU_F((double)8000000)//外部高频晶振8MHZ
#defineCPU_F((double)32768)//外部低频晶振32.768KHZ
#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))
//自定义数据结构
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
//DS18B20控制脚,
单脚控制
#defineDQ_IN
P1DIR&
=~BIT6
//DS18B20接单片机P17口
#defineDQ_0UT
P1DIR|=BIT6
//
设置输出
#defineDQ_CLR
P10UT&
置低电平
#defineDQ_SET
P10UT|=BIT6
置高电平
#defineDQ_R
P1IN&
BIT6
读电平
#definewei_h
P50UT|=BIT5
#definewei_l
P50UT&
=~BIT5
#defineduan_h
P60UT|=BIT6
#defineduan_l
P60UT&
=~BIT6
inttemp_value;
inttemp;
定义的变量
显示数据处理
intA1,A2,A3;
//系统时钟初始化,外部8M晶振
//*******************************************************************voidClock_Init()
{
uchari;
BCSCTL1&
=~XT20FF;
//打开XT2振荡器
BCSCTL2|=SELM1+SELS;
//MCLK为8MHZSMCL为8MHZ
do{
IFG1&
=~0FIFG;
//清楚振荡器错误标志
for(i=0;
i<
100;
i++)
_N0P();
}
while((IFG1&
0FIFG)!
=0);
//如果标志位1,则继续循环等待
//MSP430内部看门狗初始化
//*******************************************************************voidWDT_Init()
WDTCTL=WDTPW+WDTHOLD;
//关闭看门狗
//*******************************************************************
******
//初始化IO口子程序//*******************************************************************
voidPort_Init()
P5DIR=0xFF;
//设置IO口方向为输出
P4DIR=0xFF;
//P4口初始设置为FFP6DIR=0xFF;
//DS18B2C初始化
初始化和复位
unsignedcharDS18B20_Reset(void)//
//延时500uS(480-960)
//延时80uS
//延时500uS(保持>480uS)
{unsignedchari;
DQ_OUT;
DQ_CLR;
delay_us(500);
DQ_SET;
DQ_IN;
delay_us(80);
i=DQ_R;
if(i)
return0x00;
else
return0x01;
******************************************************************
//DS18B20读一个字节函数
******unsignedchards1820_read_byte(void){
unsignedchari;
unsignedcharvalue=0;
for(i=8;
i!
=0;
i--)
value>
>
=1;
DQ_OUT;
delay_us(4);
DQ_SET;
DQ_IN;
delay_us(10);
if(DQ_R)
{value|=0x80;
}delay_us(60);
}return(value);
//*延时4uS
//*延时10uS
//*延时60uS
//向18B20写一个字节函数
/*DS18B20字节写入函数*/
voidds1820_write_byte(unsignedcharvalue){
DQ_CLR;
delay_us(4);
//延时4uS
if(value&
0x01)
delay_us(80);
//延时80uS
//位结束
//发送温度转换命令
******/*启动ds1820转换*/
voidds1820_start(void)
DS18B20_Reset();
ds1820_write_byte(0xCC);
//勿略地址
ds1820_write_byte(0x44);
//启动转换
//DS8B20读取温度信息
******unsignedintds1820_read_temp(void){
unsignedinti;
unsignedcharbuf[9];
勿略地址
读取温度
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的原因是为了把小数点后一位数据也转化为可以显示的数据returni;
}//*******************************************************************
//温度数据处理函数//*******************************************************************
voiddata_do(inttemp_d)
intA2t;
A1=temp_d/100;
//分出百,十,和个位A2t=temp_d%100;
A2=A2t/10;
A3=A2t%10;
//主程序
voidmain(void)
constunsignedcharseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
constunsignedchar
zww[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
字符编码以显示
elseif(A1==zww[1])A1=seg[1];
elseif(A1==zww[2])A1=seg[2];
elseif(A1==zww[3])A1=seg[3];
elseif(A1==z