《基于msp430单片机和DS18B20使用数码管显示的温度测量_毕业设计(论文)(26页).doc》由会员分享,可在线阅读,更多相关《基于msp430单片机和DS18B20使用数码管显示的温度测量_毕业设计(论文)(26页).doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于msp430单片机和DS18B20使用数码管显示的温度测量_毕业设计(论文)-第 26 页毕业设计论文基于msp430单片机和DS18B20使数码管显示的温度测量摘要:为了在现实生活和工业生产及过程控制中准确测量温度,设计了一种基于低功耗MSP430单片机的数字温度计,整个系统通过单片机MSP430F149控制DS18B20读取温度,采用数码管显示,温度传感器DS18B20与单片机之间通过串口进行数据传输,MSP430系列单片机具有超低功耗,且外围的整合性高,DS18B20只需一个端口即可实现数据通信,连接方便,通过多次实验证明,该系统的测试结果与实际环境温度一致,除了具有接口电路简单,
2、测量精度高,误差小,可靠性高等特点外,其成本低,功耗低的特点使其拥有更广阔的应用前景。关键字:温度测量 MSP430单片机 温度传感器DS18B20 超低功耗Abstract: in order to accurately measure the temperature in real life and industrial production and process control, a digital thermometer was designed with low power consumption based on MSP430 single chip microcomputer,
3、 the control system of DS18B20 read the temperature through the single-chip MSP430F149, the use of digital tube display, temperature sensor DS18B20 and single chip microcomputer for data transmission through the serial port, MSP430 Series MCU with low power consumption the periphery, and high integr
4、ation, DS18B20 only needs one port to realize the data communication, the connection is convenient, through many experiments, the test results of the system and the actual environment temperature is the same, except with the interface circuit is simple, high precision, small error, high reliability,
5、 low cost, low power consumption it has a wider application prospect.图表 1关键字:温度测量 MSP430单片机 温度传感器DS18B20 超低功耗Keywords: temperature measurement MSP430 temperature sensor DS18B20 ultra low2 power consumption 目录一温度测量器的总体设计2二温度测量器的硬件选择31 主控器件:MSP430F14932 温度信息采集单元:DS18B2042.1 DS18B2042.2 DS18B20管脚排列43.显
6、示单元:数码管及其驱动53.1 数码管53.2 驱动芯片:74HC5736三. 系统软件程序71、系统的程序流图72.处理DS18B20的子程序82、1 初始化时序92、2 写时序102、3 读时序113、温度计算子程序134、处理数码管显示的子程序15四、系统调试151、硬件检测和调试152、软件程序调试173、整体调试17五、结论分析17参考文献:17附录一:18附录二:18附录三:18清空内容一温度测量器的总体设计 生活中最常见的应该是利用物体的热胀冷缩测温度,比如家里用的温度计、体温计等等,这种很好做但是精密程度不够,反正生活中用的也不需要那么精密。这里提出使用电子器件测温度,利用温度
7、传感器,就是利用某些材料电阻随温度的变化,通过电学上面测电阻用公式换算到温度等于多少度。传感器用处应该很多,不光是测温度,侧压力、光照强度等都可以用类似的方法,就是把想要测的量全转化成测电学量,然后公式换算出温度。我们提出用单片机MSP430为温度测量的主控制器,温度传感器DS18B20通过单总线与单片机连接,数码管显示及其驱动原件位显示单元,系统的基本组成如图1所示。 温度信号温度传感器DS18B20数据交换单片机电源数码管供电供电数据显示 图 1 系统的基本组成二温度测量器的硬件选择1 主控器件:MSP430F149 MSP430F149是一种新型的混合信号处理器,采用了美国德州仪器(Te
8、xas Instruments)公司最新低功耗技术(工作电流为0.1一400 p A ),它将大量的外围模块整合到片内,特别适合于开发和设计单片系统。MSP430149单片机主要具有如下特点: 低 电 压、超低功耗。工作电压3.3V ,等待方式下工作电流为1.3 w A,在RAM保持关闭工作方式下工作电流仅为0 A 。 具 有 12位的模数转换器(ADC12) ,可以得到很高的精度,并且省去了使用专门的模数转换器给设计电路板带来的麻烦。 拥 有 大容量的存储空间。存储器方面包括多达60 k Flash ROM和2 k RAM,如此数量的存储空间完全可以满足程序及数据的需要。 两 通 道串行通信
9、接口。可用于与计算机进行异步或同步串行通信。 硬 件 乘法器。该乘法器独立于CPU进行乘法运算的操作,在提高乘法运算速度的同时也提升了CPU的利用效率。 串 行 在系统编程。通过仿真器对程序进行下载,并通过专用软件对程序及单片机的工作状态进行监控,极大地方便了程序的调试。2 温度信息采集单元:DS18B202.1 DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点: 采用单总线的接口方式 与微处理器连接时 仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络
10、,为测量系统的构建引入全新概念。 测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 + 125 ; 在 -10+ 85C 范围内,精度为 0.5C 。 在使用中不需要任何外围元件且有负压特性 电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。持多点组网功能 多个 DS18B20 可以并联在惟一的单线上,实现多点测温。供电方式灵活 DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而 使系统结构更趋简单,可靠性更高。 测量参数可配置 DS18B20 的测量分辨率可通过程序设定 912 位。 DS18B20 具
11、有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。2.2 DS18B20管脚排列1. GND为电源 地;2. DQ为数字信号输入输出端;3. VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 图 2 芯片BS18B20管脚图3.显示单元:数码管及其驱动 3.1 数码管 本次设计因为是要显示温度-55 + 125 ,则选择了四位十二段共阴极的数码管显示,其引脚图如下:seg1 a f seg2 seg3 b e d dp c g seg4 图 3 四位阴极数码管引脚图3.2 驱动芯片:74HC573 74H
12、C573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不是影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可与直接与系统总线接口并驱动总线,而不需要外接口。VccQ0Q1Q2Q3Q4Q5Q6Q7LPOED0D1D2D3D4D5D6D7GND74HC573 三. 系统软件程序1、系统的程序流图系统的程序主要包括主程序、读出温度子程序、写出温度子程序、温度转换命令字程序、计算温度子程序和数码管显示数据子程序。程序的功能是实时显示温度、读出并
13、处理DS18B20的测量温度值,温度测量没1s进行一次,其程序流程如图: 初始化到达1s?调用显示子程序初次上电?读出温度值,温度计算处理显示数据刷新温度转换开始命令是否否是 2.处理DS18B20的子程序 DS18B20的一线工作协议流程是:初始化ROM操作指令存储器操作指令数据传输。其工作时序包括:l 初始化时序l 写时序l 读时序2、1 初始化时序主机首先发出一个480960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就
14、一直在检测总线上是否有480960微秒的低电平出现,如果有,在总线转为高电平后等待1560微秒后将总线电平拉低60240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。 图4 初始化时序时间图程序C代码如下:/初始化DS18B20void DS18B20Init(void)DQ_OUT;/设置为输出方向DQ_LOW;/拉低总线Delayus(50);DQ_HIGH;/释放总线Delayus(6);DQ_IN;/设置为输入方向while(DQ_DATA);/等待应答信号while(DQ_DATA);/等待释放总线2、2 写时序 接下来就是主机发出各种操作命令,但各种
15、操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。 图 5 写时序图程序C
16、代码如下:/写一个字节void WriteByte(uchar WriteData)uchar i;uchar tmpData;for(i=0;i=1;DQ_OUT;DQ_LOW;if(tmpData)DQ_HIGH;elseDQ_LOW;Delayus(5);DQ_HIGH;2、3 读时序 对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始
17、拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成。 图 6 读时序图 程序C代码如下: /读一个字节uchar ReadByte(void)uchar i;uchar ReadData=0;for(i=0;i=1;DQ_HIGH;Delayus(1);DQ_IN;if(DQ_DATA) ReadData|=0x80;Delayus(6);return ReadData; 3、温度计算子程序 DS18B20中的温度传感器完成对温度的测
18、量,用16位二进制形式提供,形式表达,其中S为符号位。 SLS ByteMS ByteSSSSbit7 bit6 bit15 bit4 bit3 bit2 bit1 bit0bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8 图7 DS18B20的16位二进制形式例 如125的数字输出为07D0H (正温度 直接吧16进制数转成10进制即得到温度值 )-55的数字输出为 FC90H。 (负温度 把得到的16进制数 取反后 加1 再转成10进制数)程序C代码如下:/温度计算程序void GetT()if(MSB&0xF0)0) /判断是否为负温度flag=
19、1;elseflag=0;if(flag) /如果为负温度取反加1MSB=MSB;LSB=LSB+1;t1=MSB4);/计算各位数码管要显示的数值if(flag)Bit1=16; /如果为负温度则显示-elseBit1=t1/100;Bit2=t1%100/10;Bit3=t1%10; 图 8 温度转换的例图4、处理数码管显示的子程序 本设计使用的是四位十二段共阴极数码管,其中有四个位选引脚,控制数码管的各个位,八个段选引脚,控制每一个数码管的八个段位a、b、c、d、e、f、g、dp,详细如上图3的引脚图,共阴极数码管各引脚对高电平有效,实现其对温度的显示的C程序如下:/数码管扫描显示程序v
20、oid Display(void)for(uchar i=0;i4;i+)P3OUT=BitCode; /输出位码if(i=3) /输出段码,如果第三位显示小数点P2OUT=CodeBiti&0x7F;elseP2OUT=CodeBiti;BitCode0;i-);while(IFG1&OFIFG);/判断XT2 是否起振BCSCTL2=SELM1+SELS;/MCLK SMCLK 时钟源为TX2CLK 不分频/端口初始化函数void InitPort(void)P2SEL=0x00;/P2 口所有引脚设置为一般的IO 口P3SEL=0x00;/P3 口所有引脚设置为一般的IO 口P2DIR=
21、0xFF;/P2 口所有引脚设置为输出方向P3DIR=0xFF;/P3 口所有引脚设置为输出方向P2OUT=0x00;/P2 口先输出低电平P3OUT=0x80;/P3 口先输出低电平/P5SEL&=BIT7;/P5. 设7置为一般的IO 口/P5DIR|=BIT7;/P5.7 设置为输出方向/P5OUT&=BIT7;/P5.7 输出低电平来使能74HC573 来驱动数码管/ms 级延时子程序void DelayMs(uint ms)while(ms-)for(uint i=0;i700;i+);/数码管扫描显示程序void Display(void)for(uchar i=0;i4;i+)P
22、3OUT=BitCode; /输出位码if(i=3) /输出段码,如果第三位显示小数点P2OUT=CodeBiti&0x7F;elseP2OUT=CodeBiti;BitCode=1;/位码右移一位if(BitCode=0x10) BitCode=0x01;DelayMs(2); /延时1msP2OUT=0XFF;/10us 级延时子程序void Delayus(uint us)while(us-)_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_
23、NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
24、_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();/初始化DS18B20void DS18B20Init(void)DQ_OUT;/设置为输出方向DQ_LOW;/拉低总线Delayus(50);DQ_HIGH;/释放总线Delayus(6);DQ_IN;/设置为输入方向while(DQ_DATA);/等待应答信号while(D
25、Q_DATA);/等待释放总线/读一个字节uchar ReadByte(void)uchar i;uchar ReadData=0;for(i=0;i=1;DQ_HIGH;Delayus(1);DQ_IN;if(DQ_DATA) ReadData|=0x80;Delayus(6);return ReadData;/写一个字节void WriteByte(uchar WriteData)uchar i;uchar tmpData;for(i=0;i=1;DQ_OUT;DQ_LOW;if(tmpData)DQ_HIGH;elseDQ_LOW;Delayus(5);DQ_HIGH;/温度计算程序vo
26、id GetT()if(MSB&0xF0)0) /判断是否为负温度flag=1;elseflag=0;if(flag) /如果为负温度取反加1MSB=MSB;LSB=LSB+1;t1=MSB4);t2=(uint)(LSB&0x0F)*0.0625*10000); /得到温度小数部分并扩大10000 倍/计算各位数码管要显示的数值if(flag)Bit1=16; /如果为负温度则显示-elseBit1=t1/100;Bit2=t1%100/10;Bit3=t1%10;/Bit4=t2/1000;/Bit5=t2%1000/100;/Bit6=t2%100/10;/Bit7=t2%10;void main()WDTCTL=WDTPW+WDTHOLD;/关闭看门狗InitClock();InitPort();_DINT();/关闭中断/j=0;l=0;while(1)DS18B20Init();WriteByte(0xCC); /跳过ROM 配置WriteByte(0x44);/启动温度转换DS18B20Init();WriteByte(0xCC);WriteByte(0xBE); /读温度寄存器LSB=ReadByte(); /读温度数据低字节MSB=ReadByte(); /读温度数据高字节GetT(); /计算温度Display();附录三:电路焊接整体实物图