MSP430单片机温度单片机课程设计报告书_第1页
MSP430单片机温度单片机课程设计报告书_第2页
MSP430单片机温度单片机课程设计报告书_第3页
MSP430单片机温度单片机课程设计报告书_第4页
MSP430单片机温度单片机课程设计报告书_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

..XX理工大学计算机学院课程设计单片机系统设计班级计科1104姓名学号指导教师李业德韩慧二○一四年十一月日课程设计任务书及成绩评定课题名称_______温度测试系统设计_______题目的目的和要求:利用温度传感器和MSP430单片机设计一个温度测试系统,将测试结果<十进制>在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变<按键不动作时为正常测量显示>。温度显示格式为:XXX℃。设计进度及完成情况日期内容11.10选取题目,进行资料搜集和系统分析工作11.14进行单独程序设计以及完成单独接口电路11.16将全部程序综合并进行整体程序调试和连接整体接口电路11.18书写课程设计报告并写下相关问题总结11.20进行课程设计答辩,并打印上交主要参考文献及资料MSP430系列16位低功耗单片机原理及应用DS18B20温度传感器的使用智能仪器原理及应用学科部主任李业德Ⅵ、成绩评定:设计成绩:〔教师填写指导〔签字二○年月日目录I、题目的目的和要求:2II、设计进度及完成情况2III、主要参考文献及资料3Ⅵ、成绩评定:3目录4本次课程设计的目的和意义5设计题目6系统的主要功能、作用以及主要技术性能指标7总体设计方案、工作和组成原理8系统设计11设计总结26作品的使用或操作说明27设计图纸或图表28本次课程设计的目的和意义课程设计是让我熟练掌握了课本上的一些理论知识,课程设计也是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。加深我们对单片机原理与应用课程的理解设计题目温度测试系统设计:利用温度传感器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温度传感器保持按键数码管电路程序框图:总体设计流程图读取温度传感器数据流程图数码管温度显示程序设计://*************************定义引脚**********************************#defineLED8PORTP2OUT//P2接8个LED灯#defineLED8SELP2SEL//P2接8个LED灯#defineLED8DIRP2DIR//P2接8个LED灯#defineDATAPORT P4OUT//数据口所在端口P4#defineDATASELP4SEL//数据口功能寄存器,控制功能模式#defineDATADIRP4DIR//数据口方向寄存器#defineCTRPORT P6OUT//控制线所在的端口P6#defineCTRSELP6SEL//控制口功能寄存器,控制功能模式#defineCTRDIRP6DIR//控制口方向寄存器#defineDCTR0 P6OUT&=~BIT4//数码管段控制位信号置低#defineDCTR1P6OUT|=BIT4//数码管段控制位信号置高#defineWCTR0 P6OUT&=~BIT3//数码管位控制位信号置低#defineWCTR1P6OUT|=BIT3//数码管位控制位信号置高#defineKEYPORT P1OUT//按键所在的端口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为8MHZdo{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口初始设置为FFDATASEL=0x00;//设置IO口为普通I/O模式,此句可省DATADIR=0xFF;//设置IO口方向为输出DATAPORT=0xFF;//P4口初始设置为FFCTRSEL=0x00;//设置IO口为普通I/O模式,此句可省CTRDIR|=BIT3+BIT4+BIT2;//设置IO口方向为输出,控制口在P63,P64CTRPORT=0xFF;//P6口初始设置为FFKEYSEL=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>; //键盘消抖,延时20MSkey_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>; //延时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>;}//**********************向18B20写一个字节函数************************/*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>;//不是乘以0.0625的原因是为了把小数点后一位数据也转化为可以显示的数据 //比如温度本身为27.5度,为了在后续的数据处理程序中得到BCD码,我们先放大到275//然后在显示的时候确定小数点的位置即可,就能显示出27.5度了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=0.1*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;//没有按键按下时,默认显示1WDT_Init<>;//看门狗初始化Clock_Init<>;//时钟初始化Port_Init<>;//端口初始化,用于控制IO口输入或输出//Close_LED<>;DS18B20_Reset<>; //复位D18B20delay_ms<100>;//延时100mswhile<1>{Key_Scan<>;//键盘扫描,看是否有按键按下if<key!=0xff>

温馨提示

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

评论

0/150

提交评论