毕业设计基于PIC16F877A单片机的八路温度巡回检测系统设计_第1页
毕业设计基于PIC16F877A单片机的八路温度巡回检测系统设计_第2页
毕业设计基于PIC16F877A单片机的八路温度巡回检测系统设计_第3页
毕业设计基于PIC16F877A单片机的八路温度巡回检测系统设计_第4页
毕业设计基于PIC16F877A单片机的八路温度巡回检测系统设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、 课 程 设 计八路温度巡回检测系统设计 院 (系): xxxxxx学院 专 业: xxxxxx 学 号: xxxxxxx 学生姓名: xxx 指导老师: xxx 摘 要本文介绍了一种基于pic16f877a单片机,利用ds18b20对多路温度采集,并进行温度的控制与检测,并通过12864液晶显示出来。系统中通过控制按钮实现了实时各路的报警温度,并且实现多路与任一单路温度显示切换,从而既可以进行多路的检测又可以进行任一单路的监控,而且还有数字跟图形两种显示方式更为直观。在温度超过设定温度时温度跟时间通过24c02存储起来,以便查看,同时可以通过固定电话远程报警,还能将温度上传至pc机,进行后续

2、处理。关键词:温度检测;单片机;串行通讯;ds18b20;目 录1系统设计72主芯片:pic16f877a单片机简介92.1 pic单片机的优越之处:92.2 pic16f877a引脚图及主要性能102.3 最小系统112.3.1复位功能112.3.2 系统时钟122.4 设计心得总结123lcd12864液晶原理介绍及接口实现123.1 液晶显示模块概述123.2 液晶引脚说明133.3 接口时序143.4 具体指令介绍153.5 显示坐标关系193.5.1、图形显示坐标193.5.2 汉字显示坐标203.6 与单片机的接口实现213.7设计心得总结224ds18b20原理介绍及接口实现22

3、4.1 ds18b20简介224.2ds18b20结构及其工作原理234.3ds18b20的接口实现294.3.1 硬件设计294.3.2 软件设计304.4设计心得总结314.4.1 焊接问题:314.4.2 软件设计:314.4.3 不足:315存储芯片at24c02简单介绍及接口实现325.1at24c02功能描述管脚定义325.2管脚定义及接口实现325.3设计心得346 实时时钟ds1302简单介绍及接口实现346.1 ds1302简介346.2 ds1302结构及工作原理346.3ds1302的接口实现357温度上限报警功能377.1 设计原理377.2 设计心得体会378与pc串

4、口通讯及vb上位机简单介绍388.1 与pc串口通信388.2 上位机介绍399 总结43附录44 部分原理图:44 参考文献:45基于pic单片机的多路温度监控巡回系统1 系统设计在工业生产和日常生活中,经常要对温度进行测量与控制,并且有时是对多个点进行温度测量,比如冷库温度监控、环境温度监测、农业温室监控、粮库温度监控等。在这种情况下,多点温度检测系统应运而生。多点温度检测系统通常能够对多个工作点的温度进行检测,显示当前温度,并能够对温度进行存储和报警,还能将温度上传至pc机,进行后续处理。传统的测温元件有热电偶和热电阻,需很多硬件支持并且电路复杂。本文将设计一款由新型的数字温度传感器ds

5、18b20配合单片机,具有温度检测、显示、存储、自动统计分析及跟电脑通讯连接还利用固定电话远程报警等功能的多点温度监控系统。多路温度监控系统30 pc机通讯4 * 温度传感器固话报警 图 1.1 多路温度监控系统模拟应用温度监控主系统构架框图如图 1.2 所示:pic16f877a单片机12864液晶显示实时时钟上限报警接口按键控制pc机通讯at24c02温度储存四路温度采集 图 1.2 多路温度监控系统构架框图图1.3 手工焊接实物图主要技术参数a温度检测范围 : -55+125b测量精度 : 0.0625c 显示方式: lcd12864显示d 报警方式: 固话报警2 主芯片:pic16f8

6、77a单片机简介2.1 pic单片机的优越之处:(1)哈佛总线结构:mcs-51单片机的总线结构是冯-诺依曼型,计算机 在同一个存储空间取指令和数据,两者不能同时进行;而pic单片机的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于 可以对程序和数据同时进行访问,所以提高了数据吞吐率。正因为在 pic单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位的,但指令总线位数分别位 12、14、16位。 (2)流水线结构:mcs-51单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指

7、令;而pic的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样就实现了单周期指令。 (3)寄存器组:pic单片机的所有寄存器,包括i/o口,定时器和程序计数器等都采用ram结构形式,而且都只需要一个指令周期就可以完成访问和操作;而mcs-51单片机需要两个或两个以上的周期才能改变寄存器的内容。 (4)运行速度高:由于采用了哈佛总线结构,以及指令的读取和执行才用了流水作业方式,使得运行速度大大提高。 (5)功耗低:pic单片机的功率消耗极低,是目前世界上最低的单片机品种之一。在4mhz时钟下工作时耗电不超过2ma,在睡眠模式下耗电可以低到1ua以下。 (6)驱动

8、能力强:i/o端口驱动负载的能力较强,每个i/o引脚吸入和输出电流的最大值可分别达到25ma和20ma,能够直接驱动发光二极管led、光电耦合器或者轻微继电器等。 (7)外接电路简洁pic单片机片内集成了上电复位电路、i/o引脚上拉电路、看门狗定时器等,可以最大程度减少或免用外接器件,以便实现“纯单片机”应用。这样,不仅方便于开发,而且还可节省用户的电路空间和制作成本。 (8)程序保密性强目前,尚无办法对其直接进行解密拷贝,可以最大限度的保护用户的程序版权。2.2 pic16f877a引脚图及主要性能pic16f877a的详细引脚如图2.21所示。 图 2.2-1 pic16f877a引脚图

9、图 2.2 -2 pic16f877a实物图主要性能参数如下所示:l 具有高性能risc cpul 仅有35条单字指令l 100000次擦写周期l 除程序分支指令为两个周期外,其余均为单周期指令l 运行速度: dc20mhz始终输入 dc200ns 指令周期l 8k * 14个 flash程序存储器368 * 8 个数据存储器(ram)字节256 * 8 eeprm 数据存储器字节l 提供14个中断源l 功耗低在5v, 4mhz 时钟运行时电流小于 2ma在3v, 32khz 时钟运行时电流小于20ual 支持在线串行编程(icsp)l 运行电压范围广,2.0v到5.5vl 输入及输出电流可达

10、到25mal timer0:带有预分频器的8位定时器/计数器l timer1:带有预分频器的16位定时器/计数器,在使用外部晶振震荡时钟时,在睡眠期间仍能工作l timer2:带有8位周期寄存器,预分频器和后分频器的8位定时器/计数器。l 2个捕捉器,比较器,pwm模块其中: 捕捉器是16位,最大分辨率是12.5ns 比较器是16位,最大分辨率是200ns pwm最大分辨率是10位l 10位多通道模数转换器2.3 最小系统 2.3.1复位功能pic16f877a的复位功能设计得比较完善,实现复位或引起复位的条件和原因可以归纳成4类:人工复位、上电复位、看门狗复位、欠压复位。这里简单介绍一下人工

11、复位人工复位:无论是单片机在正常运行程序,还是处在睡眠状态或出现死机状态,只要在人工复位端mclr加入低点平信号,就令其复位。本次设计的电路图如图2.31所示。 图 2.31 pic最小系统电路图 图2.32 最小系统实物图 2.3.2 系统时钟 数字电路的工作离不开时钟信号,每一步细微动作都是在一个共同的时间基准信号协调下完成的。作为时基发生器的时钟震荡电路,为整个单片机芯片的工作提供系统时钟信号,也为单片机与其他外接芯片之间的通讯提供可靠的同步时钟信号。pic16f877a的时钟电路是由片内的一个反相器和一个反馈电阻,与外接的1个石英晶体和2个电容,共同构成的一个自激多谐振荡器。电路如图2

12、.31 所示。2.4 设计心得总结 pic16f877a的最小系统跟51相似,较为简单。芯片自身增加了很多功能,如:自带8路ad转换、增加spi总线,引脚复位功能多等。芯片自身功能的增加给设计带来了很多灵活性,同时也是学习的难点。3 lcd12864液晶原理介绍及接口实现3.1 液晶显示模块概述12864a-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16x16点阵)、128个字符(8x16点阵)及64x256点阵显示ram(gdram)。主要技术参数和显示特性:电源:vdd 3.3v+5v(内置升压电路,无需负压);显示内容:128列× 64行显示颜色:黄

13、绿显示角度:6:00钟直视lcd类型:stn与mcu接口:8位或4位并行/3位串行配置led背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等3.2 液晶引脚说明引脚号引脚名称方向功能说明1vss-模块的电源地2vdd-模块的电源正端3v0-lcd驱动电压输入端4rs(cs)h/l并行的指令/数据选择信号;串行的片选信号5r/w(sid)h/l并行的读写选择信号;串行的数据口6e(clk)h/l并行的使能信号;串行的同步时钟7db0h/l数据08db1h/l数据19db2h/l数据210db3h/l数据311db4h/l数据412db5h/l数据513db6h/l数据614db7h/

14、l数据715psbh/l并/串行接口选择:h-并行;l-串行16nc空脚17/reth/l复位 低电平有效18nc空脚19led_a-背光源正极(led+5v)20led_k-背光源负极(led-ov)逻辑工作电压(vdd):4.55.5v电源地(gnd):0v工作温度(ta):060(常温) / -2075(宽温)3.3 接口时序模块有并行和串行两种连接方法,本文采用并行接法(时序如下):8位并行连接时序图mpu写资料到模块程序实现如下:/* 名 称:send_i() * 功 能:写一个字节命令到lcd* 入口参数:unsigned char x 字符*/void send_i(unsign

15、ed char x)chk_busy(); /检测lcd是否工作繁忙rs = 0; /设置该字节数据为控制命令rw = 0; /设置此次操作为写portd = x; /送数据口portde = 1; /使能nop();nop();nop();e = 0; /禁止mpu从模块读出资料程序实现如下:/* 读数据*/unsigned char u8_lcd12864readbyte_f( void ) unsigned char byreturnvalue ; chk_busy() ; /检测lcd是否工作繁忙trisd=0xff; /设置pd口为输入状态 portd = 0xff ; /pd初始化

16、为高电平 rs=1; / 读置高 rw=1; / 写置高 e=0; / 使能置低 e=1; / 使能置高 byreturnvalue = portd ; / 读数据 e=0; / 关使能trisd=0x00; / 恢复pd口为输出 return byreturnvalue ; / 返回读到的数据3.4 具体指令介绍1、清除显示code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lllllllllh功能:清除显示屏幕,把ddram位址计数器调整为“00h”2、位址归位code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lllll

17、lllhx功能:把ddram位址计数器调整为“00h”,游标回原点,该功能不影响显示ddram3、位址归位code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lllllllhi/ds功能:把ddram位址计数器调整为“00h”,游标回原点,该功能不影响显示ddram功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由z地址计数器控制的,该命令自动将a0-a5位地址送入z地址计数器,起始地址可以是0-63范围内任意一行。z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。4、显示状态 开/关code: rw rs db7 db

18、6 db5 db4 db3 db2 db1 db0llllllhdc b 功能: d=1;整体显示on c=1;游标on b=1;游标位置on5、游标或显示移位控制code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lllllhs/cr/lx x 功能:设定游标的移动与显示的移位控制位:这个指令并不改变ddram的内容6、功能设定code: rw rs db7 db6 db5 db4 db3 db2 db1 db0llllhdlx0 rex x 功能:dl=1(必须设为1) re=1;扩充指令集动作 re=0:基本指令集动作7、设定cgram位址code: r

19、w rs db7 db6 db5 db4 db3 db2 db1 db0lllhac5ac4ac3ac2ac1 ac0功能:设定cgram位址到位址计数器(ac)8、设定ddram位址code: rw rs db7 db6 db5 db4 db3 db2 db1 db0llhac6ac5ac4ac3ac2ac1 ac0 功能:设定ddram位址到位址计数器(ac)9、读取忙碌状态(bf)和位址code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lhbfac6ac5ac4ac3ac2ac1 ac0 功能:读取忙碌状态(bf)可以确认内部动作是否完成,同时可以读出

20、位址计数器(ac)的值10、写资料到ramcode: rw rs db7 db6 db5 db4 db3 db2 db1 db0hld7d6d5d4d3d2d1 d0 功能:写入资料到内部的ram(ddram/cgram/tram/gdram)11、读出ram的值code: rw rs db7 db6 db5 db4 db3 db2 db1 db0hhd7d6d5d4d3d2d1 d0 功能:从内部ram读取资料(ddram/cgram/tram/gdram)12、待命模式(12h)code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lllllllll h 功

21、能:进入待命模式,执行其他命令都可终止待命模式13、卷动位址或iram位址选择(13h)code: rw rs db7 db6 db5 db4 db3 db2 db1 db0llllllllh sr 功能:sr=1;允许输入卷动位址 sr=0;允许输入iram位址 14、反白选择(14h)code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lllllllhr1 r0功能:选择4行中的任一行作反白显示,并可决定反白的与否15、睡眠模式(015h)code: rw rs db7 db6 db5 db4 db3 db2 db1 db0llllllhslx x功能:s

22、l=1;脱离睡眠模式 sl=0;进入睡眠模式16、扩充功能设定(016h)code: rw rs db7 db6 db5 db4 db3 db2 db1 db0llllhhx1 reg l 功能:re=1;扩充指令集动作 re=0;基本指令集动作 g=1;绘图显示on g=0;绘图显示off17、设定iram位址或卷动位址(017h)code: rw rs db7 db6 db5 db4 db3 db2 db1 db0lllhac5ac4ac3ac2ac1 ac0 功能:sr=1;ac5ac0为垂直卷动位址 sr=0;ac3ac0写iconram位址18、设定绘图ram位址(018h)code

23、: rw rs db7 db6 db5 db4 db3 db2 db1 db0llhac6ac5ac4ac3ac2ac1 ac0 功能:设定gdram位址到位址计数器(ac)备注、1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取bf标志时bf需为0,方可接受新的指令;如果在送出一个指令前并不检查bf标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。2、“re”为基本指令集与扩充指令集的选择控制位元,当变更“re”位元后,往后的指令集将维持在最后的状态,除非再次变更“re”位元,否则使用

24、相同指令集时,不需每次重设“re”位元。本次设计液晶初始化如下:void lcd_init()rst = 0; /复位lcddelay(1); /保证复位所需要的时间(1ms)rst = 1; /恢复lcd正常工作/nop();/psb = 1; /设置lcd为8位并口通信send_i(0x30); /基本指令操作send_i(0x01); /清除显示send_i(0x06); /指定在写入或读取时,光标的移动方向send_i(0x0c); /开显示,关光标,不闪烁3.5 显示坐标关系3.5.1、图形显示坐标水平方向x以字节单位 垂直方向y以位为单位/*函数名称:draw_pm功 能:在整个液

25、晶屏幕上画图参 数:无返回值 :无*/void draw_pm(const uchar *ptr) uchar i,j,k; send_i(0x34); /打开扩展指令集i = 0x80; for(j = 0;j < 32;j+) send_i(i+); send_i(0x80); for(k = 0;k < 16;k+) send_d(*ptr+); i = 0x80; for(j = 0;j < 32;j+) send_i(i+); send_i(0x88); for(k = 0;k < 16;k+) send_d(*ptr+); send_i(0x36); /打开

26、绘图显示send_i(0x30); /回到基本指令集3.5.2 汉字显示坐标 x坐标line180h81h82h83h84h85h86h87hline290h91h92h93h94h95h96h97hline388h89h8ah8bh8ch8dh8eh8fhline498h99h9ah9bh9ch9dh9eh9fh/* 名 称: writelcd()* 功 能: 在lcd上显示字符串* 入口参数:const unsigned char *pt 字符串的首地址*/void writelcd(const unsigned char *pt) while(*pt)/检测是否达到了字符串最后 send

27、_d(*pt+); /发送数据给lcd/ 应用如下const uchar table1 =" 基pic 单片机"const uchar table2 =" 多路温度" const uchar table3 =" 巡回检测系统" const uchar table4 ="2009年12月01日"send_i(0x80); / 定位在第一行writelcd(table1); / 写:基pic 单片机send_i(0x90); / 定位在第二行writelcd(table2); / 写:多路温度send_i(0x88);

28、 / 定位在第三行writelcd(table3); / 写:巡回检测系统send_i(0x98); / 定位在第四行writelcd(table4); / 写:2009年12月01日3.6 与单片机的接口实现12864液晶的电路连线图如图3.6 -1所示,实物位置如图3.6 -2所示 图 3.6 -1 12864液晶电路连接图 图 3.6 -2 12864液晶模块实物图3.7 设计心得总结lcd12864与1602相比需要较大的电流驱动,如果出现图片模糊不清晰或者灰暗,除了检查背光灯外应考虑电源问题。最好采用大于5v的电源,经7805稳压管稳压驱动,以保证电流。基本驱动跟1602相似难度不大

29、。中文及图像显示是12864最大的特点也是难点,主要是指令较多,还有就是图像驱动需要了解液晶内部原理。整屏画图可以使用pctolcd2002把图片转换成16进制数,局部画曲线、直线、圆等需要一些算法,比较复杂4 ds18b20原理介绍及接口实现4.1 ds18b20简介ds18b20是dallas半导体公司推出的第一片支持“一线总线”接口的温度传感器,他它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。ds18b20具有以下优点:(1) 适应电压范围宽,电压范围在3.0v5.5v,在寄生电源方式下可由数据线供电。(2) 独特的单线接口方

30、式,与微处理器连接时只需要一条口线即可实现微处理器与ds18b20的双向通信。(3) 支持多点组网功能,多个ds18b20可以并联在唯一的三线上,实现组网多点测温。(4) 在使用中不需要任何外围元件,全部传感元件以及转换电路集成在形如一直三极管的集成电路内。(5) 测温范围-55+125,在-10+85时进度为±0.5(6) 可编程分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。(7) 负压特性。电源极性接反时,芯片不会因为过热而烧毁,但不能正常工作。4.2 ds18b20结构及其工作原理图4.1ds18b20内部结构图ds18b

31、20的内部结构图如图4.1所示。由此我们可以看出ds18b20主要由4部分组成:64位rom、温度传感器、非挥发的温度报警触发器th和tl、配置寄存器。ds18b20的管脚排列如图4.2所示,其中dq为数字信号输入输出端;gnd为电源地;vdd为外接供电电源输入端,在寄生电源接线方式时接地。图4.2 ds18b20引脚和封装每颗ds18b20在出厂前都有一个64位光刻rom,它可以看作该ds18b20的地址序列码。其各位排列顺序是:开始8位为产品类型标号,接下来48位是该ds18b20自身的序列号,最后8位是前面56位的crc循环冗余校验码(crc=x8+x5+x4+1)。光刻rom的作用是使

32、每一个ds18b20都各不相同,这样就可以实现一条总线 挂接多个ds18b20的目的。由于ds18b20是在一根i/o线上读写数据,因此,对读写的数据位有着严格的时序要求。ds18b20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:复位时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。(1) ds18b20的复位时序:图4.3 ds18b20复位时序图程序实现如下:/* 名 称:r

33、eset() * 功 能:18b20复位*/#define dq rb7#define dq_high() trisb7=1#define dq_low() trisb7=0;dq=0void reset()uchar st=1;dq_high(); / 先拉至高电平nop();nop();while(st)dq_low(); / 低电平delayus(70,30); / 延时503usdq_high(); /释放总线等电阻拉高总线delayus(4,4); /延时60usif(dq=1) /没有接收到应答信号,继续复位st=1;else /接收到应答信号st=0;delayus(50,10)

34、; /延时430us(2) ds18b20的读时序:对于ds18b20的读时序分为读0时序和读1时序两个过程。 对于ds18b20的读时隙是从主机把单总线拉低之后,在15us之内释放单总线,以让ds18b20把数据传输到单总线上。ds18b20在完成一个读时序过程,至少需要60us才能完成。图4.4 ds18b20读时序图/* 名 称:read_byte() * 功 能:18b20读字节* 出口参数:读出18b20的内容*/uch read_byte()uch i;uch value = 0; /读出温度static bit j;for (i = 8;i > 0;i-)value >

35、;>= 1;dq_low();nop();nop();nop();nop();nop();nop(); /6usdq_high(); /拉至高电平nop();nop();nop();nop();nop(); /4us j = dq;if (j) value |= 0x80;delay(2, 7); /63usreturn (value);(3) ds18b20的写时序:对于ds18b20的写时序仍然分为写0时序和写1时序两个过程。 对于ds18b20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证ds18b20能够在15us到45us之间能够正确地采样io总

36、线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。 图4.5 ds18b20写时序图/* 名 称:write_byte() * 功 能:写18b20写字节* 入口参数:uch val 待写的数据*/void write_byte(uch val)uch i;uch temp;for (i = 8;i > 0;i-)temp = val & 0x01; /最低位移出dq_low();nop();nop();nop();nop();nop();/从高拉至低电平,产生写时间隙if (temp = 1) dq_high(); /如果写1,拉高电平delay

37、(2, 7); /延时63usdq_high();nop();nop();val = val >> 1; /右移一位ds18b20内部带有共9个字节的高速暂存器ram和电可擦除eeprom,起结构如表2所示。表2 ds18b20高速暂存器结构寄存器内容字节地址温度值低位(lsb)0温度值高位(msb)1高温限值(th)2低温限值(tl)3配置寄存器4保留5保留6保留7crc校验值8ds18b20所包含的操作指令如表3所示。表3 ds18b20操作指令rom操作指令指令约定代码功能读rom33h读ds18b20温度传感器rom中的编码(即64位地址)匹配rom55h发出命令后接着发出

38、64位rom编码,访问总线上与该编码对应的芯片搜索romf0h用于确定挂接在同一总线上ds18b20的个数跳过romcch忽略64位rom地址,直接向ds18b20发温度变换命令告警搜索ech执行后只有问多超过上限或下限的芯片才响应ram操作指令指令约定代码功能温度转换44h启动ds18b20温度转换。12位转换时长典型值750ms读暂存器beh读内部ram中9字节的数据。写暂存器4eh向ram第2、3字节写上、下限温度数据,紧跟命令之后传送2字节数据复制暂存器48h将ram中第2、3字节的内容复制到内部eeprom中重调eepromb8h将eeprom中内容恢复到ram中第3、4字节温度数据

39、在高速暂存器ram的第0和第1个字节中的存储格式如下表4所示。表4 ds18b20温度数据存储格式位7位6位5位4位3位2位1位0232221202-12-22-32-4位15位14位13位12位11位10位9位8sssss262524ds18b20在出厂是默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读2字节共16位,读完后将低11位的二进制数转化为十进制数后再乘以0.0625便为所测的实际温度值。另外,还需要判断温度的正负。前5个数字为符号位,这5位同时变化,我们只需要判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值需要取反加1再乘以0.

40、0625才可得到实际温度值。前5位为0时,读取的温度为正值,且温度为正值时,只要将测得的数值乘以0.0625即可得到实际温度值。考虑到实际使用的需要,在这里我们只使用一个ds18b20,故每次操作前只需复位后发出skip rom指令(即跳过rom指令)再读出温度的正值、并精确到小数点后一位,即可满足设计需求。/* 名 称:get_temp() * 功 能:启动温度转换*/void get_tem()uchar tem1,tem2,num;float aaa;reset(); /复位write_byte(0xcc); /跳过romwrite_byte(0x44); /温度转换for(num=10

41、0;num>0;num-) /确保温度转换完成所需要的时间reset(); /再次复位,等待从机应答write_byte(0xcc); /忽略rom匹配write_byte(0xbe); /发送读温度命令tem1=read_byte(); /读出温度低8tem2=read_byte(); /读出温度高8位shu=(tem2<<4|tem1>>4); /温度整数部分aaa=(tem2*256+tem1)*6.25; /温度小数部分temper=(int)aaa; /强制转换成整型a1=temper/1000; /取温度十位a2=temper%1000/100; /取

42、个位a3=temper%100/10; /小数点后个位a4=temper%10; /小数点后十位4.3 ds18b20的接口实现4.3.1 硬件设计ds18b20在本次设计中接线图如图4.6 所示,实验板硬件图如图4.7所示这次实验只焊了两个温度传感器而已,其他两个用法一样,留作外接口,可以方便外用。 图4.6 ds18b20原理图 图4.7 dsb18b20硬件连接实物图4.3.2 软件设计根据ds18b20约定的通讯协议,每次使用ds18b20之前都必须经过三个步骤,即先复位ds18b20,接着发出rom操作指令,然后才可以发出ram操作指令以进行温度转换等命令。本系统将实现读出ds18b

43、20的温度并实时显示到lcd12864上,分辨率为0.0625。由于ds18b20对时序要求很严格,所以在程序设计时,时序要多加注意一点,不过数字不是死的,只要控制合理控制也不是扫描大问题。 ds18b20首次初始化时开启温度转换,之后每1s进行一次ds18b20的温度读取和转换,具体实现效果图如图4.8 流程图如图4.9所示 图 4.8温度采集效果实物图芯片上电复位ds18b20发出skip rom指令启动温度转换1s到?yn复位ds18b20发出skip rom指令读取温度图4.9 ds18b20读取温度流程图4.4 设计心得总结4.4.1 焊接问题:焊接ds18b20时,速度要快,如果高

44、温的电烙铁持续接触传感器很容易烧掉ds18b20,因为电烙铁一般温度为350 450度,而传感器承受温度为125度。我曾经因此烧坏了两个传感器,得此痛训!4.4.2 软件设计:ds18b20时序要求较为严格,这里的严格不是说一定要按手册的时间一摸一样而是说相对其他芯片来说严格了一点。如果读取不到温度应该检查一下时序时间设计问题。再有一个难点就是温度转换问题。温度能显示到小数点后4位,如果要将温度全部读出,应该将整数部分乘以10000再加上小数部分,化浮点数为整数,当然也可以直接采用浮点数相乘。开机会出现85c那是18b20复位值4.4.3 不足:此次设计没有处理温度负数情况,如果要处理应该判断最高位符号位,然后取反加一。18b20可单总线挂多个,这里io口有剩再加上为了程序设计简单采用了并口方式。5 存储芯片at24c02简单介

温馨提示

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

评论

0/150

提交评论