温度的采集与显示资料_第1页
温度的采集与显示资料_第2页
温度的采集与显示资料_第3页
温度的采集与显示资料_第4页
温度的采集与显示资料_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上课 程 设 计 报 告课程名称 综合电子设计 题目 温度的采集与显示_指导教师 设计起止日期 2015年4月-5月 系 别 自动化 专 业 自控 学生姓名 班级/学号 成 绩 _专心-专注-专业摘要本系统由单片机控制模块MSP430f5529,AY-SEB Kit模块组成,运用模块MSP430f5529的温度传感器与 AY-SEB Kit模块的显示屏,通过编程实现对温度的采集与显示,并且超过一个预定值可以闪红灯报警。一、 功能介绍1. 单片机控制模块MSP430f5529中的温度传感器采集当前温度2. AY-SEB Kit中的LED驱动模块显示采集的摄氏温度3. AY

2、-SEB Kit中的LED驱动模块显示采集的华氏温度,华氏温度由公式计算出4. AY-SEB Kit中的LED驱动模块显示制作者姓名拼音5. 超过设定报警温度可以闪烁单片机上的红灯报警二、 方案论证与比较对采集来的温度进行显示的方法有两种:方案一 用1602显示屏显示。1602采用并口传输,速度较快。内部集成有显示芯片,可以识别英文字母、阿拉伯数字和日语片假名。1602总共有两行每行十格,可以符合本次显示要求。价格带背光的蓝底白字12元一块,不带光和绿光黑字会便宜一些。方案二 用老师提供的口袋电子系统实验套件AY-SEB Kit中的LED显示模块显示。LED采用恒流驱动,BUCK斩波电路反馈端

3、的不同接法可以实现恒压输出或恒流输出。FB所接位置不同,输出情况不同。TPS62260内部Vref为0.6V,所以无论何种接法,反馈的最终效果都是VFB=Vref=0.6V。实验平台采用集成BUCK斩波芯片TPS62260的恒流输出来实现LED驱动。比较:方案二中的模块显示效果更好,但是由于老师提供的数量有限不能满足每位同学都能用到。而方案一的1602显示屏更容易获得,但显示效果欠佳。三、 系统设计整个系统可以分为三个部分:温度采集、LCD液晶显示、LED报警灯。系统总体的设计图如下:MSP430单片机LCD液晶显示温度传感器A/DLED报警灯温度采集MSP430F5529内置温度传感器,经过

4、A/D模块采样,量化,将得到的数据送到MSP430F5529控制器处理。经过一定的算法,得到温度的正常值。12864LCD液晶显示该部分主要是通过程序控制,按照12864LCD液晶模块的时序,将要显示的字符数据送到12864LCD中,经过驱动程序处理,可以使字符显示出来。LED报警灯该部分结果最为简单,直接使用MSP430F5529单片机的P1.0口控制的LED灯。若温度超上限,则灯亮报警,否则灯灭,不报警。四、 单元电路设计12864LCD液晶显示部分电路RST为复位端,与P36引脚相连;SDA为片选端,与P12引脚相连;SCLK为数据/命令选择端,与P40引脚相连;A0为时钟信号端,与P3

5、7相连;CS为数据端,与P82引脚相连。五、 软件设计12864LCD液晶显示时序图(串口模式)SPI是串行外设接口,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。其中SDO 为主设备数据输入,从设备数据输出端口;SDI为主设备数据输出,从设备数据输入端口; SCLK为时钟信号端口,由主设备产生;CS为从设备使能信号,由主设备控制。CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时,对此芯片的操作才有效。通讯是通过数据交换完成的,数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCL

6、K提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿时改变,在紧接着的下降沿被读取,完成一位数据传输。这样,在至少8次时钟信号的改变,就可以完成8位数据的传输。此外它的传输是一位一位的,但不同于普通的串行通信(一次连续传输至少8位),SPI是允许中断的。初始化控制流程图数字转字符判忙写命令、数据得到数据首先进行初始化,通过A/D转换采集到温度传感器的温度,经过一定算法之后可以得到温度值,但是此时的是一个数值型的值,需要将其转换成字符。接下来判忙,等空闲时传递命令和数据,最后在显示屏上显示。表1. 清单PC机一台CCS Edit软件单片机MSP430f

7、5529一片AY-SEB Kit开发板一片六、 结束语基本功能(1)通过单片机内部的温度传感器获得当前温度; (2)显示所获温度(3)可以预设标准温度; (4)如果温度大于预设值或小于预设值,用LED通知。能通过串口与上位机通信,传输并显示当前温度。七、 附录附录中主要包含有主要元器件清单,程序清单(要求有中文注释),印制板图和系统使用说明1.印制板图如图所示,显示板第一行显示Celsius 29.85,表示当前摄氏温度为29.85度;第二行显示姓名拼音,第三行显示Fahrenheit 85.7,表示当前华氏温度为85.7。而当摄氏温度超过30度时,红色LED灯会闪烁。2.程序清单:#incl

8、ude "driverlib.h"#include "DAC.h"#include "Template_Driver.h"#include "grlib.h"#include "adc12_a.h"#include "timer_a.h"#define CALADC12_15V_30C *(unsigned int *)0x1A1A) / Temperature Sensor Calibration-30 C /See device datasheet for TLV tab

9、le memory mapping#define CALADC12_15V_85C *(unsigned int *)0x1A1C) / Temperature Sensor Calibration-85 Cunsigned int temp;volatile float temperatureDegC;volatile float temperatureDegF;#define MAX_DAC_DIV8(4096>>3)tContext g_sContext;extern uint16_t ADC12_SingleSample(void);extern void GrString

10、NumberCentered(const tContext *pContext, int16_t Number,uint8_t ui8Dot,uint8_t ui8X, uint8_t ui8Y);unsigned int dCnt4;void main(void)WDTCTL = WDTPW | WDTHOLD;REFCTL0 &= REFMSTR; / Reset REFMSTR to hand over control to / ADC12_A ref control registers ADC12CTL0 = ADC12SHT0_8 + ADC12REFON + ADC12ON

11、; / Internal ref = 1.5V ADC12CTL1 = ADC12SHP; / enable sample timer ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_10; / ADC i/p ch A10 = temp sense i/p ADC12IE = 0x001; / ADC_IFG upon conv result-ADCMEMO _delay_cycles(100); / delay to allow Ref to settle ADC12CTL0 |= ADC12ENC;P2DIR |= BIT0; / 关闭白光LED灯P2OUT |

12、= BIT0;P3DIR |= BIT4; /打开背光LEDP3OUT |= BIT4;P3OUT &= BIT4;Template_DriverInit();GrContextInit(&g_sContext, &g_sTemplate_Driver);GrContextForegroundSet(&g_sContext, ClrWhite);GrContextBackgroundSet(&g_sContext, ClrBlack);GrContextFontSet(&g_sContext, &g_sFontCm16b);GrClear

13、Display(&g_sContext);GrStringDraw(&g_sContext, "Celsius", AUTO_STRING_LENGTH, 0,0, OPAQUE_TEXT);GrStringDraw(&g_sContext, "Fan meng ran", AUTO_STRING_LENGTH, 0,20, OPAQUE_TEXT);GrStringDraw(&g_sContext, "Fahrenheit", AUTO_STRING_LENGTH, 0,40, OPAQUE_TEXT

14、);GrFlush(&g_sContext);_EINT();P1DIR|=BIT0;P1OUT&=BIT0;while(1)ADC12CTL0 &= ADC12SC; ADC12CTL0 |= ADC12SC; / Sampling and conversion start _bis_SR_register(LPM4_bits + GIE); / LPM0 with interrupts enabled _no_operation(); temperatureDegC = (float)(long)temp - CALADC12_15V_30C) * (85 - 30

15、) / (CALADC12_15V_85C - CALADC12_15V_30C) + 30.0f; / Temperature in Fahrenheit Tf = (9/5)*Tc + 32 temperatureDegF = temperatureDegC * 9.0f / 5.0f + 32.0f; GrStringNumberCentered(&g_sContext, temperatureDegC*100,2,80,5); GrStringNumberCentered(&g_sContext, temperatureDegF*10,1,100,45); GrFlus

16、h(&g_sContext); _no_operation(); / SET BREAKPOINT HERE if(temperatureDegC>30) P1OUT|=BIT0; else P1OUT&=BIT0;#pragma vector=ADC12_VECTOR;_interrupt void ADC12ISR (void) switch(_even_in_range(ADC12IV,34) case 0: break; / Vector 0: No interrupt case 2: break; / Vector 2: ADC overflow case 4:

17、 break; / Vector 4: ADC timing overflow case 6: / Vector 6: ADC12IFG0 temp = ADC12MEM0; / Move results, IFG is cleared _bic_SR_register_on_exit(LPM4_bits); / Exit active CPU break; case 8: break; / Vector 8: ADC12IFG1 case 10: break; / Vector 10: ADC12IFG2 case 12: break; / Vector 12: ADC12IFG3 case

18、 14: break; / Vector 14: ADC12IFG4 case 16: break; / Vector 16: ADC12IFG5 case 18: break; / Vector 18: ADC12IFG6 case 20: break; / Vector 20: ADC12IFG7 case 22: break; / Vector 22: ADC12IFG8 case 24: break; / Vector 24: ADC12IFG9 case 26: break; / Vector 26: ADC12IFG10 case 28: break; / Vector 28: A

19、DC12IFG11 case 30: break; / Vector 30: ADC12IFG12 case 32: break; / Vector 32: ADC12IFG13 case 34: break; / Vector 34: ADC12IFG14 default: break; void Boost_Init()GrStringDrawCentered(&g_sContext, "Lv", AUTO_STRING_LENGTH, 80, 40, OPAQUE_TEXT);GrStringNumberCentered(&g_sContext, 1,

20、0,100,40);GrFlush(&g_sContext);/=数字转字符串函数=void Num2String(int16_t i16Number,uint8_t ui8Dot,uint8_t *p)int8_t i=0 ,ds=0;uint8_t pos=0,m=0;uint8_t DispBuff11=0;uint8_t tempBuff11=0; if(i16Number<0) i16Number=-i16Number;/处理负数DispBuff0='-' /显示负号m=1;/跟踪缓存位置 else m=0; /等效为-清除负号 for(i=m;i<

21、;11;i+) /拆分数字 DispBuffi=(i16Number%10); i16Number /= 10; for(i=10;i>=0;i-) /消隐无效"0" if (DispBuffi=0) DispBuffi=0; else pos=i;/ 保存当前第一个有效值 break; tempBuff0 = DispBuff0;/ 保存对应的符号位 for(i=10;i>=m;i-) / 高低位数据转换存储位置,高位在前,符号位不变 if(i <= pos) tempBuffpos-i+m = DispBuffi+ 0x30; else tempBuffi = 32;/ 空格(ASCII) if(ui8Dot>0) if(ui8Dot < pos+1-m)/ pos +1 - m 为当前数组数据位数 for(i=pos;i>=pos-(ui8Dot-1);i-) tempBuffi+1=

温馨提示

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

评论

0/150

提交评论