下载此文档

MSP430单片机温度单片机课程设计.pdf


文档分类:高等教育 | 页数:约30页 举报非法文档有奖
1/30
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/30 下载此文档
文档列表 文档介绍
该【MSP430单片机温度单片机课程设计 】是由【秋江孤影】上传分享,文档一共【30】页,该文档可以免费在线阅读,需要了解更多关于【MSP430单片机温度单片机课程设计 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
.
山东理工大学计算机学院
课程设计
单片机系统设计
班级计科1104
姓名
学号
指导教师李业德韩慧
二○一四年十一月日
;..:.
.
课程设计任务书及成绩评定
课题名称_______温度测试系统设计_______
I、题目的目的和要求:
利用温度传感器和MSP430单片机设计一个温度测试系
统,将测试结果(十进制)在LED上显示出来,并定义一个保
持按键,当按下该键时,将当前测试值保持不变(按键不动
作时为正常测量显示)。温度显示格式为:XXX℃。
II、设计进度及完成情况
日期内容
,进行资料搜集和系统分析工作



,并打印上交
;..:.
.
III、主要参考文献及资料
MSP430系列16位低功耗单片机原理及应用
DS18B20温度传感器的使用
智能仪器原理及应用
学科部主任李业德
Ⅵ、成绩评定:
设计成绩:(教师填写)
指导老师:(签字)
二○年月日
;..:.
.
目录
I、题目的目的和要求:...........................................................................................................................2
II、设计进度及完成情况...........................................................................................................................2
III、主要参考文献及资料...........................................................................................................................3
Ⅵ、成绩评定:...........................................................................................................................................3
目录...................................................................................................................................................................4
本次课程设计的目的和意义...........................................................................................................................5
设计题目...........................................................................................................................................................6
系统的主要功能、作用以及主要技术性能指标...........................................................................................7
总体设计方案、工作和组成原理...................................................................................................................8
系统设计.........................................................................................................................................................11
设计总结.........................................................................................................................................................26
作品的使用或操作说明.................................................................................................................................27
设计图纸或图表.............................................................................................................................................28
;..:.
.
本次课程设计的目的和意义
课程设计是让我熟练掌握了课本上的一些理论知识,课程设计也是一个学****新知识、巩固加
深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。
加深我们对单片机原理与应用课程的理解
;..:.
.
设计题目
温度测试系统设计:
利用温度传感器DS18B20和MSP430单片机设计一个温度测试系统,将测试结果(十进制)
在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变(按
键不动作时为正常测量显示)。温度显示格式为:XXX℃。
;..:.
.
系统的主要功能、作用以及主要技术性能指标
系统的主要功能是单片机实时从温度传感器读取温度数据信息,并在数码管显示,同
时扫描是否有保持按键按下,如果按下则不再继续从温度传感器读取温度数据信息,保
持温度值不变。
作用是可以实时读取环境中的温度信息,供用户查看,同时当用户需要观察某温度时,
可以按下按键保持温度不变。
主要技术指标:
℃-99℃



;..:.
.
总体设计方案、工作和组成原理
数字温度计设计方案论证
方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的
电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将
被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到,
所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就
可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
主控制器
单片机采用MSP430单片机,处理能力强,功耗低,实现该功能仅需一个按键,8位数码
管显示,以及DS18B20温度传感器。
显示电路:
显示电路采用8位共阴LED数码管,从P4口输出段码。
图一总体设计框图
温度传感器:
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传
统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~
12位的数字值读数方式。DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,~;
●零待机功耗;
●温度以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决定温度转换的精度位数,来设置分辨率。
温度传感器连接如下图所示,:
;..:.
.
;..:.
.
系统设计
接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算
接口电路设计:
主控制器MSP430
温度传感器
;..:.
.
保持按键
数码管电路
;..:.
.
程序框图:
总体设计流程图
读取温度传感器数据流程图
;..:.
.
数码管温度显示
程序设计:
//*************************定义引脚**********************************
#defineLED8PORTP2OUT//P2接8个LED灯
#defineLED8SELP2SEL//P2接8个LED灯
#defineLED8DIRP2DIR//P2接8个LED灯
#defineDATAPORTP4OUT//数据口所在端口P4
#defineDATASELP4SEL//数据口功能寄存器,控制功能模式
#defineDATADIRP4DIR//数据口方向寄存器
#defineCTRPORTP6OUT//控制线所在的端口P6
#defineCTRSELP6SEL//控制口功能寄存器,控制功能模式
#defineCTRDIRP6DIR//控制口方向寄存器
#defineDCTR0P6OUT&=~BIT4//数码管段控制位信号置低
#defineDCTR1P6OUT|=BIT4//数码管段控制位信号置高
#defineWCTR0P6OUT&=~BIT3//数码管位控制位信号置低
#defineWCTR1P6OUT|=BIT3//数码管位控制位信号置高
;..:.
.
#defineKEYPORTP1OUT//按键所在的端口P1
#defineKEYSELP1SEL//控制口功能寄存器,控制功能模式
#defineKEYDIRP1DIR//控制口方向寄存器
#defineKEYINP1IN//键盘扫描判断需要读取IO口状态值
ucharkey=0xFF;//键值变量
uinttemp_value;
floattruetemp;
uinttemp,A1,A2,A3;//定义的变量,显示数据处理
//*******************共阴数码管显示的断码表************************
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//*******************系统时钟初始化***************************
voidClock_Init()
{
uchari;
BCSCTL1&=~XT2OFF;//打开XT2振荡器
BCSCTL2|=SELM1+SELS;//MCLK为8MHZ,SMCLK为8MHZ
do{
IFG1&=~OFIFG;//清楚振荡器错误标志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0);//如果标志位1,则继续循环等待
IFG1&=~OFIFG;
}
//*******************MSP430内部看门狗初始化***********************
voidWDT_Init()
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
}
//*******************MSP430IO口初始化*****************************
voidPort_Init()
{
LED8SEL=0x00;//设置IO口为普通I/O模式,此句可省
;..:.
.
LED8DIR=0xFF;//设置IO口方向为输出
LED8PORT=0xFF;//P2口初始设置为FF
DATASEL=0x00;//设置IO口为普通I/O模式,此句可省
DATADIR=0xFF;//设置IO口方向为输出
DATAPORT=0xFF;//P4口初始设置为FF
CTRSEL=0x00;//设置IO口为普通I/O模式,此句可省
CTRDIR|=BIT3+BIT4+BIT2;//设置IO口方向为输出,控制口在P63,P64
CTRPORT=0xFF;//P6口初始设置为FF
KEYSEL=0x00;//设置IO口为普通I/O模式,此句可省
KEYDIR=0x0F;//高四位输入模式,低四位输出模式,外部上拉电阻
KEYPORT=0xF0;//初始值0xF0
}
//*************74HC573控制数码管动态扫描键值显示函数******************
voidDisplay_Key(ucharnum)
{
uchari,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个数码管后关闭数码管显示,否则可能导致
各个数码管亮度不一致
}
//*****************键盘扫描子程序,采用逐键扫描的方式******************
;..:.
.
ucharKey_Scan(void)
{
ucharkey_check;
ucharkey_checkin;
key_checkin=KEYIN;//读取IO口状态,判断是否有键按下
key_checkin&=0xF0;//屏蔽掉低四位的不确定值
if(key_checkin!=0xF0)//IO口值发生变化则表示有键按下
{
delay_ms(20);//键盘消抖,延时20MS
key_checkin=KEYIN;//再次读取IO口状态
if(key_checkin!=0xF0)//确定是否真正的有键按下
{
key_check=KEYIN;//有键按下,读取端口值
switch(key_check&0xF0)//判断是哪个键按下
{
case0xE0:key=1;break;
case0xD0:key=2;break;
case0xB0:key=3;break;
case0x70:key=4;break;
}
}
}
else
{
key=0xFF;//无键按下,返回FF
}
returnkey;
}
//******74HC573控制数码管动态扫描显示函数,显示采集到的温度**************
voidDisplay_DS18B20(uintdata_b,uintdata_s,uintdata_g)
{
uchari,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初始化*******************************
unsignedcharDS18B20_Reset(void)//初始化和复位
;..:.
.
{
unsignedchari;
DQ_OUT;
DQ_CLR;
delay_us(500);//延时500uS(480-960)
DQ_SET;
DQ_IN;
delay_us(80);//延时80uS
i=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);
}
//**********************向18B20写一个字节函数************************
/*DS18B20字节写入函数*/
voidds1820_write_byte(unsignedcharvalue)
{
unsignedchari;
for(i=8;i!=0;i--)
{
DQ_OUT;
DQ_CLR;
delay_us(4);//延时4uS
if(value&0x01)
{
DQ_SET;
}
delay_us(80);//延时80uS
DQ_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*);//
位数据也转化为可以显示的数据
//,为了在后续的数据处理程序中得
到BCD码,我们先放大到275
//然后在显示的时候确定小数点的位置即可,就能显

returni;
}
//*********************温度数据处理函数****************************
voiddata_do(uinttemp_d)
{
A3=temp_d%10;//分出百,十,和个位
temp_d/=10;
A2=temp_d%10;
A1=temp_d/10;
}
//***********************处理温度数据*********************
voidhandletemp()
;..:.
.
{
ds1820_start();//启动一次转换
ds1820_read_temp();//读取温度数值
data_do(temp_value);//处理数据,得到要显示的值
truetemp=*temp_value;
//judgeAlarm();//判断是否触发警报//已将其添加至按键程序
}
//***********************显示温度**********************
voidshowtemp()
{
ucharj;
for(j=0;j<100;j++)
{
Display_DS18B20(A1,A2,A3);//显示温度值
}
//delay_ms(100);//延时100ms
}
//***************************主程序************************
voidmain(void)
{
ucharflag1,flag2,flag3,flag4;
//uintkey_store=0x00;//没有按键按下时,默认显示1
WDT_Init();//看门狗初始化
Clock_Init();//时钟初始化
Port_Init();//端口初始化,用于控制IO口输入或输出
//Close_LED();
DS1

MSP430单片机温度单片机课程设计 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数30
  • 收藏数0 收藏
  • 顶次数0
  • 上传人秋江孤影
  • 文件大小1.16 MB
  • 时间2023-03-18