MSP430单片机温度单片机课程设计报告书.docx

上传人:rrsccc 文档编号:10403662 上传时间:2021-05-14 格式:DOCX 页数:28 大小:321.77KB
返回 下载 相关 举报
MSP430单片机温度单片机课程设计报告书.docx_第1页
第1页 / 共28页
MSP430单片机温度单片机课程设计报告书.docx_第2页
第2页 / 共28页
MSP430单片机温度单片机课程设计报告书.docx_第3页
第3页 / 共28页
MSP430单片机温度单片机课程设计报告书.docx_第4页
第4页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《MSP430单片机温度单片机课程设计报告书.docx》由会员分享,可在线阅读,更多相关《MSP430单片机温度单片机课程设计报告书.docx(28页珍藏版)》请在三一文库上搜索。

1、山东理工大学计算机学院课程设计单片机系统设计班级计科 1104姓名学号指导教师李业德 韩慧二一四年十一月日.课程设计任务书及成绩评定课题名称 _温度测试系统设计 _I 、题目的目的和要求:利用温度传感器和 MSP430单片机设计一个温度测试系统,将测试结果 ( 十进制 ) 在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变 ( 按键不动作时为正常测量显示 ) 。温度显示格式为: XXX 。II 、 设计进度及完成情况日期内容11.10选取题目,进行资料搜集和系统分析工作11.14进行单独程序设计以及完成单独接口电路11.16将全部程序综合并进行整体程序调试和连接整体接口

2、电路11.18书写课程设计报告并写下相关问题总结11.20进行课程设计答辩,并打印上交.III 、 主要参考文献及资料MSP430系列 16位低功耗单片机原理及应用DS18B20温度传感器的使用智能仪器原理及应用学科部主任李业德、成绩评定:设计成绩:(教师填写)指导老师:(签字)二年月日.目录I 、题目的目的和要求:2II 、设计进度及完成情况2III、 主要参考文献及资料3、成绩评定:3目录 .4本次课程设计的目的和意义5设计题目 .6系统的主要功能、作用以及主要技术性能指标7总体设计方案、工作和组成原理8系统设计 .11设计总结 .22作品的使用或操作说明23设计图纸或图表.24.本次课程

3、设计的目的和意义课程设计是让我熟练掌握了课本上的一些理论知识, 课程设计也是一个学习新知识、 巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。加深我们对单片机原理与应用课程的理解.设计题目温度测试系统设计:利用温度传感器 DS18B20和 MSP430单片机设计一个温度测试系统, 将测试结果 ( 十进制 )在 LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变 ( 按键不动作时为正常测量显示 ) 。温度显示格式为: XXX 。.系统的主要功能、作用以及主要技术性能指标系统的主要功能是单片机实时从温度传感器读取温度数据信息, 并在数

4、码管显示, 同时扫描是否有保持按键按下,如果按下则不再继续从温度传感器读取温度数据信息,保持温度值不变。作用是可以实时读取环境中的温度信息, 供用户查看,同时当用户需要观察某温度时,可以按下按键保持温度不变。主要技术指标:1. 基本范围 0-99 2. 精度误差小于 0.5 3. LED 数码直读显示4. 扫描按键保持数值.总体设计方案、工作和组成原理数字温度计设计方案论证方案一由于本设计是测温电路, 可以使用热敏电阻之类的器件利用其感温效应, 在将随被测温度变化的电压或电流采集过来,进行 A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A

5、/D 转换电路,感温电路比较麻烦。方案二进而考虑到用温度传感器, 在单片机电路设计中, 大多都是使用传感器, 所以这是非常容易想到,所以可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出, 采用方案二, 电路比较简单, 软件设计也比较简单,故采用了方案二。主控制器单片机采用 MSP430单片机,处理能力强,功耗低,实现该功能仅需一个按键, 8 位数码管显示,以及 DS18B20温度传感器。显示电路:显示电路采用8 位共阴 LED数码管,从P4 口输出段码。图一总体设计框图温度传感器:DS18B20 温度传感器

6、是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912 位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个 DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5 ;零待机功耗;温度以9 或 12 位数字;.用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B20内部结构框图如图2

7、所示。 64 位 ROM的结构开始8 位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最后 8 位是前面56 位的 CRC检验码, 这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8 字节的存储器,结构如图3 所示。头 2 个字节包含测得的温度信息,第3 和第 4 字节和的拷贝,是易失的,每次上电复位时被刷新。第5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。 DS18B20工作时寄存器中的分辨率转

8、换为相应精度的温度数值。该字节各位的定义如图3 所示。低5 位一直为1,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1 和 R0 决定温度转换的精度位数,来设置分辨率。温度传感器连接如下图所示,DQ引脚与单片机的P5.3 相连:.系统设计接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算接口电路设计:主控制器 MSP430温度传感器.保持按键数码管电路.程序框图:总体设计流程图读取温度传感器数据流程图.数码管温度显示程序设计:/*定义引脚 *#define LED8PORTP2OUT/P2接8个LED

9、灯#define LED8SELP2SEL/P2接8个LED灯#define LED8DIRP2DIR/P2接8个LED灯#define DATAPORTP4OUT/数据口所在端口 P4#define DATASELP4SEL/数据口功能寄存器,控制功能模式#define DATADIRP4DIR/数据口方向寄存器#define CTRPORTP6OUT/控制线所在的端口 P6#define CTRSELP6SEL/控制口功能寄存器,控制功能模式#define CTRDIRP6DIR/控制口方向寄存器#define DCTR0P6OUT &= BIT4/数码管段控制位信号置低#define D

10、CTR1P6OUT |= BIT4/数码管段控制位信号置高#define WCTR0P6OUT &= BIT3/数码管位控制位信号置低#define WCTR1P6OUT |= BIT3/数码管位控制位信号置高#define KEYPORTP1OUT/按键所在的端口 P1#define KEYSELP1SEL/控制口功能寄存器,控制功能模式#define KEYDIRP1DIR/控制口方向寄存器#define KEYINP1IN/键盘扫描判断需要读取IO 口状态值ucharkey=0xFF;/键值变量uinttemp_value;floattruetemp;.uinttemp,A1,A2,A3

11、;/定义的变量 , 显示数据处理/*共阴数码管显示的断码表*uchar table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ *系统时钟初始化 *void Clock_Init()uchar i;BCSCTL1&=XT2OFF;/打开 XT2 振荡器BCSCTL2|=SELM1+SELS;/MCLK为 8MHZ,SMCLK为 8MHZdoIFG1&=OFIFG;/清楚振荡器错误标志for(i=0;i100;i+)_NOP();while(IFG1&OFIFG)!=0);/如

12、果标志位1,则继续循环等待IFG1&=OFIFG;/*MSP430内部看门狗初始化 *void WDT_Init()WDTCTL = WDTPW + WDTHOLD;/关闭看门狗/*MSP430IOvoid Port_Init()LED8SEL = 0x00;/LED8DIR = 0xFF;/LED8PORT = 0xFF;/P2DATASEL = 0x00;/DATADIR = 0xFF;/DATAPORT = 0xFF;/P4CTRSEL = 0x00;/CTRDIR |= BIT3 + BIT4 +BIT2;CTRPORT = 0xFF;/P6KEYSEL = 0x00;/KEYDIR

13、= 0x0F;/KEYPORT= 0xF0;/口初始化 *设置 IO 口为普通 I/O 模式,此句可省设置 IO 口方向为输出口初始设置为FF设置 IO 口为普通I/O 模式,此句可省设置 IO 口方向为输出口初始设置为FF设置 IO 口为普通I/O 模式,此句可省/设置 IO 口方向为输出 , 控制口在P63,P64口初始设置为FF设置 IO 口为普通I/O 模式,此句可省高四位输入模式,低四位输出模式,外部上拉电阻初始值 0xF0/*74HC573控制数码管动态扫描键值显示函数*void Display_Key(uchar num)uchar i,j;j=0x01;/此数据用来控制位选fo

14、r(i=0;i8;i+)/8个数码管依次显示DCTR1;/控制数码管段数据的74HC573的 LE 管脚置高WCTR1;/控制数码管位的74HC573的 LE 管脚置高.DATAPORT=j;/设置要显示的位,也就是哪一个数码管亮WCTR0;/锁存位数据,下面送上段数据以后,就显示出来了DATAPORT=tablenum;/送要显示的数据,这里是键值DCTR0;/锁存段数据,数码管亮一个时间片刻j=j1;/移位,准备进行下一位的显示delay_us(500);/显示一个时间片刻,会影响亮度和闪烁性Close_LED();/显示完 8 个数码管后关闭数码管显示,否则可能导致各个数码管亮度不一致/

15、*键盘扫描子程序,采用逐键扫描的方式*uchar Key_Scan(void)uchar key_check;uchar key_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

16、 (key_check & 0xF0)/判断是哪个键按下case 0xE0:key=1;break;case 0xD0:key=2;break;case 0xB0:key=3;break;case 0x70:key=4;break;elsekey=0xFF;/无键按下,返回FFreturn key;/*74HC573控制数码管动态扫描显示函数,显示采集到的温度*void Display_DS18B20(uint data_b,uint data_s,uint data_g)uchar i,j;j=0x01;/此数据用来控制位选for(i=0;i3;i+)/用后 3 位数码管来显示DCTR1;W

17、CTR1;DATAPORT=j;WCTR0;.j=(j1);DATAPORT=0x00;/前 5 位都不显示,送数据00 即可DCTR0;delay_ms(2);DCTR1;/开始显示第 6 位 , 即十位WCTR1;DATAPORT=j;WCTR0;j=(j1);/DATAPORT=tableA1;DATAPORT=tabledata_b;DCTR0;delay_ms(1);DCTR1;/开始显示个位WCTR1;DATAPORT=j;WCTR0;j=(j1);/DATAPORT=tableA2|0x80;/显示小数点DATAPORT=tabledata_s|0x80;/显示小数点DCTR0;

18、delay_ms(1);DCTR1;/开始显示小数点后面的数据WCTR1;DATAPORT=j;WCTR0;j=(j1);/DATAPORT=tableA3;DATAPORT=tabledata_g;DCTR0;delay_ms(1);DCTR1;/开始显示温度单位WCTR1;DATAPORT=j;WCTR0;j=(j1);/DATAPORT=tableA3;DATAPORT=0x63;DCTR0;delay_ms(1);DCTR1;/开始显示温度单位WCTR1;DATAPORT=j;WCTR0;j=(j480uS)if (i)return 0x00;elsereturn 0x01;/*DS1

19、8B20读一个字节函数 *unsigned char ds1820_read_byte(void)unsigned char i;unsigned char value = 0;for (i = 8; i != 0; i-)value = 1;DQ_OUT;DQ_CLR;delay_us(4);/*延时 4uSDQ_SET;DQ_IN;delay_us(10);/*延时 10uSif (DQ_R)value|=0x80;delay_us(60);/*延时 60uSreturn(value);./*向 18B20 写一个字节函数 */*DS18B20 字节写入函数*/void ds1820_wr

20、ite_byte(unsigned char value)unsigned char i;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 转换 */void ds1820_start(void)DS18B20_Reset();ds1820_write_byte(0xCC);/勿略地址ds1820_write_byte(0x44);/启动转换/*DS8B

21、20读取温度信息 *unsigned int ds1820_read_temp(void)unsigned int i;unsigned char buf9;DS18B20_Reset();ds1820_write_byte(0xCC);/勿略地址ds1820_write_byte(0xBE);/读取温度for (i = 0; i 9; i+)bufi = ds1820_read_byte();i = buf1;i = 8;i |= buf0;temp_value=i;temp_value=(uint)(temp_value*0.625);/不是乘以0.0625 的原因是为了把小数点后一位数据

22、也转化为可以显示的数据/比如温度本身为27.5度,为了在后续的数据处理程序中得到 BCD码,我们先放大到275/然后在显示的时候确定小数点的位置即可,就能显示出 27.5 度了.return i;/*温度数据处理函数 *void data_do(uint temp_d)A3=temp_d%10;/分出百,十,和个位temp_d/=10;A2=temp_d%10;A1=temp_d/10;/*处理温度数据 *void handletemp()ds1820_start();/启动一次转换ds1820_read_temp();/读取温度数值data_do(temp_value);/处理数据,得到要显

23、示的值truetemp=0.1*temp_value;/judgeAlarm();/判断是否触发警报/ 已将其添加至按键程序/*显示温度 *void showtemp()uchar j;for(j=0;j100;j+)Display_DS18B20(A1,A2,A3);/显示温度值/delay_ms(100);/延时 100ms/*主程序 *void main(void)uchar flag1,flag2,flag3,flag4;/uint key_store=0x00;/没有按键按下时,默认显示1WDT_Init();/看门狗初始化Clock_Init();/时钟初始化Port_Init()

24、;/端口初始化,用于控制IO 口输入或输出/Close_LED();DS18B20_Reset();/复位 D18B20delay_ms(100);/延时 100mswhile(1)Key_Scan();/键盘扫描,看是否有按键按下if(key!=0xff)/如果有按键按下,则显示该按键键值1 4switch(key)case1: LED8PORT=0xfc;flag1=1;flag2=0;flag3=0;flag4=0;break;/对温度数据.处理判断警报 , 然后显示 ,handletemp();showtemp();case 2: LED8PORT=0xf3;flag1=0;flag2

25、=1;flag3=0;flag4=0;break;/ 温度数据处理判断警报 , 关闭显示 , 节省电源 ,handletemp();Close_LED();case3:LED8PORT=0xcf;flag1=0;flag2=0;flag3=1;flag4=0;break;/关闭警报,SOUNDOFF;handletemp();case 4:LED8PORT=0x3f;flag1=0;flag2=0;flag3=0;flag4=1;break;/测试警报SOUNDON;elseLED8PORT&=0xff;/if(flag1=1)/handletemp();showtemp();if(flag2

26、=1)handletemp();showtemp();if(flag3=1)SOUNDOFF;handletemp();if(flag4=1)SOUNDON;.设计总结对整个设计工作过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。在本次设计的过程中,我发现很多的问题,也学到了许多东西。虽然我以前也做过类似的课程设计,但这次设计真的让我长进了很多。本次单片机课程设计的重点就在于测温及按键编程软件算法的设计,其中有许多很巧妙的算法。我以前总是能看懂别人写的程序,但自己单独写时就会出现很多问题,经过这次锻炼我基本掌握了C 语言编程的方法并在以前的基础上有所提高。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。.作品的使用或操作说明作品上电后,按下复位按键,数码管开始显示当前环境温度,并实时刷新数据,按下保持按键后,温度会保持在当前温度不变,当再次按下显示按键后,温度又会开始实时显示。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1