1、徐州工程学院毕业设计(论文) 摘要单片机已在各行业得到广泛应用,为适应更多的应用领域,厂家采取了在一块单片机芯片上集成多种功能部件和大容量存储器的方法。因而,整个应用系统不需要扩展,而体积变小、可靠性增高,使单片机成为真正意义上的单片机系统。本设计是基于STC89C52单片机和DS185B20实现温度的测量系统,单片机在本系统中作为温度输入和显示控制器件,DS18B20被用作温度数据的采集和温度输出器件。本系统采用单总线操作,线路简单,测量值精确,可实现多点测量,并对温度超过限制值,产生报警和数据采集。本系统被广泛应用于温度控制、温度检测、温度采、消防等系统中。关键词 单片机;数据转换;温度显
2、示;I徐州工程学院毕业设计(论文)目 录1 绪论11.1 本系统功能11.1.1 温度测量功能11.1.2 温度采集功能11.1.3 系统工作流程11.2 本系统优点21.2.1 线路简单21.2.2温度精确22 系统硬件介绍22.1本系统硬件和软件组成22.1.1 硬件组成22.1.2软件组成22.2 STC单片机介绍32.2.1 STC单片机功能介绍32.3 DS18B20数字温度传感器介绍62.3.1 功能介绍62.3.2 DS18B20温度传感器是存储器82.3.3 DS18B20内部逻辑图102.3.4 DS18B20温度传感器读写时序102.3.5 DS18B20存储器操作命令12
3、2.4 74HC573锁存器说明132.4.1 74HC573管脚功能图132.4.2 74HC573管脚功能132.5显示模块说明142.5.1 71LED数码管内部结构142.5.2共阳数码管数字编码153 程序的编写与调试153.1 程序的编写153.1.1 新建工程163.1.2编写程序163.2 程序的调试174 系统原理图的绘制184.1 绘制原理图库184.1.1软件启动184.1.2绘制原理图元件194.2 绘制PCB库194.2.1 绘制PCB元件204.3 系统完整原理图205 系统PCB图215.1 为覆铜PCB图215.2覆铜PCB图216 系统工作过程226.1 温度
4、的测量226.2 温度的采集237 程序框图及C语言程序247.1温度采集系统原理框图247.1.1温度显示模块247.1.2读温度子程序257.1.3温度转换子程序257.1.4计算温度子程序267.2温度采集系统C语言程序26结论35致谢36参考文献37371 绪论1.1 系统功能1.1.1 温度测量功能利用DS18B20数字温度传感器实现对温度进行准确的测量,使温度值显示到数码管上。1.1.2 温度采集功能利用DS18B20数字温度传感器进行温度的采集,单片机作为控制器件,数据通过串口(RS232)传至计算机,进行温度的采集。1.1.3系统工作流程,见图1-1系统上电初始化DS18B20
5、进行数据的采集并将数据以二进制的形式传至单片机单片机对数据进行处理数码管进行温度显示通过串口将数据传至计算机图1-1系统工作流程1.2 本系统优点1.2.1 线路简单DS18B20与单片机之间一根导线进行数据传输,不需要对数据进行转换,接线简单。1.2.2 温度测量准确DS18B20的温度分辨率为0.0625,所以对温度值可以进行准确的温度转换。2系统硬件介绍2.1系统硬件及软件组成2.11硬件组成本系统所用的硬件有:见表2-1。表2-1系统硬件清单器件名称数量STC89C52单片机1个74HC573锁存器2个LED发光二级管8个蜂鸣器1个独立键盘5个数码管(两个一组)2个三极管1个DS18B
6、201个MAX233串口芯片1个电容若干电阻若干导线若干2.1.2软件组成软件有:keil软件、windows操作系统和串口调试助手等软件组成。2.2 STC单片机介绍单片机作为微型计算机的一个重要分支,其应用范围很广,发展也很快。1971年Intel公司首次宣布4004的4位微处理器,1974年12月Fairchild(仙童)公司即推出了8位单片机F8,开创了单片机的门户。单片机在我国的应用始于20世纪70年代末,那时我国的科研工作者开始对单片机的应用进行了初期探索,20世纪80年代,单片机在我国得以广泛的应用,各理工科院校陆续开设了有关应用课程。在教学及应用上,Zilog公司生产的Z80C
7、PU成为我国工业控制的主流,以Z80为CPU组成的TP801单板机在教学上及应用领域发挥过巨大作用。20世纪80年代末至90年代初,我国在工业控制领域开始转向使用Intel公司生产的MCS-51。单片机从1976年公布8位机至今不到30年的时间,它没有像微处理器那样从8位、16位,一直发展到32位、64位,8位机目前依然是单片机的主流机型。但是,它突破了原有的集成结构,在内部继承了越来越多的外围电路和外设接口,从而发展成为控制器(MicroController)的体系结构,其发展历程大致分为以下几步:第一阶段:单片机的控索阶段第二阶段:单片机的完善阶段第三阶段:8位单片机的巩固发展及16位单片
8、机的推出阶段第四阶段:微控制器的全面发展阶段单片机已在各行业得到广泛应用,为适应更多的应用领域,厂家采取了在一块单片机芯片上集成多种功能部件和大容量存储器的方法。因而,整个应用系统不需要扩展,而体积变小、可靠性增高,使单片机成为真正意义上的单片机系统2.2.1 STC单片机功能介绍单片机是随着大规模集成电路的出现极其发展,将计算机的CPU,RAM,ROM,定时/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算机(single chipmicrocomputer).它拥有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗的显著优
9、点.主要应用于智能仪器仪表、工业检测控制、机电一体化等方面,并且取得了显著的成果.单片机应用系统可以分为:(1)最小应用系统是指能维持单片机运行的最简单配置的系统。这种系统成本低廉,结构简单,常构成一些简单的控制系统,如开关状态的输入/输出控制等。片内有ROM/EPROM的单片机,其最小应用系统即为配有晶振,复位电路,电源的单个单片机.片内无ROM/EPROM的单片机,其最小应用系统除了外部配置晶振,复位电路,电源外,还应外接EPROM或EEPROM作为程序存储器用.(2)最小功耗应用系统是指为了保证正常运行,系统的功耗最小.(3)典型应用系统是指单片机要完成工业测控功能所必须的硬件结构系统。
10、STC89C52 是一种低功耗、高性能 CMOS8 位微控制器,具有8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 STC89C52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52 具有以下标准功能: 8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器一个 6 向量 2 级中
11、断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。2211引脚结构,见图2-1图2-1单片机封装及引脚结构2212内部逻辑图,见图2-2图2-2内部逻辑图2213 引脚功能描述VCC :电源GND:地P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作
12、高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0 具有内部上拉电阻。在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和时器/计数器
13、2的触发输入(P1.1/T2EX),具体如下表所示。在 flash 编程和校验时,P1 口接收低 8 位地址字。P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVX DPTR)时, P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送 1。在使用8 位地址(如 MOVX RI)访问外部数据存储器时,P
14、2 口输出 P2 锁存器的内容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3 口亦作为 STC89C52 特殊功能(第二功能)使用,如下表所示。在 flash 编程和校验时,P3 口也接收一些控制信号。RST:复位输入。晶振工作时,RST 脚持续 2 个机器周期高电平将使单片机复位。看门狗计时完成
15、后,RST 脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在 flash 编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为 8EH 的 SFR 的第 0 位置“1”,ALE 操作将无效。这一位置“1”,ALE 仅在执行 MOVX
16、 或 MOVC 指令时有效。否则,ALE 将被微弱拉高。这个 ALE 使能标志位地址为 8EH 的 SFR 的第 0 位)的设置对微控制器处于外部执行模式下无效。PSEN:外部程序存储器选通信号PSEN是外部程序存储器选通信号。当 STC89C52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.3 DS18B20数字温度传感器介绍2.3.1 功能介绍DALLAS最新单线数字温度传感器DS18B20的“一线器件”体积更小、适用电
17、压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 “一线总线”字化温度传感器 同DS1820一样,DS18B20也 支持“一线总线”接口,测量温度范围为 -55C+125C,-10+85C范围内,精度为0.5C。DS1822的精度较差为 2C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同
18、,新的产品支持3V5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定912位的分辨率,精度为0.5C。可选更小的方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为2C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开
19、辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。DS18B20的内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下: DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位
20、是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位,见表2-1。表2-1DS18B20内部温度表示形式这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需
21、要取反加1再乘于0.0625即可得到实际温度。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。见表2-2表2-2DS18B20转化温度形式实际温度值数字输出(二进制)数字输出(十六进制)+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0
22、000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6EH-551111 1100 1001 0000FC90H2.3.2 DS18B20温度传感器的存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PPRAM,后者存放高温度和低温度触发器TH、T和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、T
23、L的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节,见表2-3。表2-3DS18B20暂存存储器的8个连续字节寄存器内容字节地址温度最低数字位0温度最高数字位1高温限值2低温限值3保留4保留5计数剩余值6每度计数值7CTR校验8该字节各位的意义如下: TM R1 R0 1 1 1 1 1 低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为1
24、2位),见表2-4表2-4分辨率设置表 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 DS1820使用中注意事项DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: (1)较小的硬件开销需要相对复杂的软件
25、进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序计时,对DS1820操作部分最好采用汇编语实现。 (2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。(3)连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生
26、错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。 (4)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,
27、另一组接VCC和地线,屏蔽层在源端单点接地。2.3.3 DS18B20的内部逻辑图,见图2-3。C64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器Vdd图2-3DS18B20内部内部逻辑图2.3.4 DS18B20读写时序主机使用时间隙(time slots)来读写 DSl820 的数据位和写命令字的位2.3.4.1初始化时序见图 2-4主机总线 to 时刻发送一复位脉冲(最短为 480us 的低电平信号)接着在 tl 时刻释放总线并进入接收状态DSl820 在检测到总线的上升沿之后 等待 15-60接着 DS1820 在 t2
28、时刻发出存在脉冲(低电平持续 60-240 us)如图中虚线所示图2-4DS18B20初始化时序图程序:Init_DS18B20(void)/初始化ds1820 DQ = 1; /DQ复位 _nop_(); _nop_(); /稍做延时2ms DQ = 0; /单片机将DQ拉低,发出复位脉冲(要求480us960us) Delay(70); /精确延时566us DQ = 1; /拉高总线(要求1660us) Delay(5); /延时46us presence = DQ; /如果=0则初始化成功 =1则初始化失败 Delay(25); DQ = 1; return(presence); /返
29、回信号,0=presence,1= no presence2.3.4.2写时间隙当主机总线 t o 时刻从高拉至低电平时 就产生写时间隙从 to 时刻开始 15us 之内应将所需写的位送到总线DSl820 在 t1为15-60us 间对总线采样 若低电平 写入的位是 0见若高电平 写入的位是连续写 2 位间的间隙应大于 1us ,见图2-5。 图2-5写时间隙程序:WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1;2.
30、3.4.3读时间隙见图 2-6 主机总线 to 时刻从高拉至低电平时总线只须保持低电平 l 7ts之后15捍 s也就是说t z 时刻前主机必须完成读位 并在 t o 后的 60 尸 s 一 120 fzs 内释放总线读位子程序(读得的位到 C 中) 图2-6读时序程序:ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(4);return(dat);2.3.5存储器操作命令,见
31、表2-5表2-5存储器操作命令指令约定代码功能读ROM33H读取DS18B20ROM中的编码(64位地址)符合ROM55H发出命令后,接着发出64位ROM编码,访问单总线上与该编码相同的DS18B20,使之做出反应,为下一步读写作准备。搜索ROM0F0H用于确定挂在同一总线上DS18B20的个数,和识别64位ROM地址,微操作各器件做准备。跳过ROM0CCH忽略64位ROM地址,直接向DS18B20发送温度转换命令,适用于单片工作。告警搜索命令0ECH执行后只有温度值超过限度值才做出反应,温度变换命令44H启动DS18B20进行温度转换,转换时间最长为500毫秒,结果存入内部就九字节RAM中。
32、读暂存器0BEH读内部RA九字节内容写暂存器4EH发出向内部RAM的第3、4字节写上下限温度命令,紧随该命令之后是传送两个字节数据。复制暂存器48H将RAM中的第3、4字节内容写到EEPRAM中。重调EEPRAM0B8H将EEPRAM中的第3、4字节内容写到RAM中。读供电方式0B4H读DS18B20供电模式,寄生供电DS18B20时发送“1”,外接电源发送“1”。2.4 锁存器74HC57374HC573为八进制3态非反转透明锁存器且跟LS/AL573 的管脚一样。器件的输入是和标准CMOS 输出兼容的;加上拉电阻,他们能和LS/ALSTTL 输出兼容。 当锁存使能端为高时,这些器件的锁存对
33、于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。输出能直接接到CMOS,NMOS 和TTL 接口上操作电压范围:2.0V6.0V低输入电流:1.0uACMOS 器件的高噪声抵抗特性2.4.1管脚功能见图2-7图2-7管脚功能2.4.2 74HC573功能,见表2-6表2-6 74H573N真值表输入输出 输出使能锁存使能 DQ L H HH L H L L L L X 不变 H X X Z2.5显示模块LED数码管正向压降一般为1.52V,额定电流为10mA,最大电流为40mA。本设计采用4位共阳LED数码管,从P0口输出段码,列扫描用还用P0口来实
34、现。2.5.1LED数码管内部结构,见图2-8。图2-8LED共阳数码管内部结构2.5.2共阳数码管数字编码,见表2-7表2-7:共阳数码管数字编码显示数字共阳极字段码0C0H1F9H2A4H3B0H499H592H682H7F8H880H990H3 程序的编写与调试3.1 程序的编写 本系统软程序采用C语言编写,所用软件位keil,见图3-1。图3-1keil软件编程界面3.1.1新建工程 打开keil软件,单击project-new project输入工程名选择相应单片机,见图3-2。图3-2新建工程3.1.2编写程序 根据电路编写程序,见图3-3。图3-3编写程序3.2调试程序 编译程序
35、,检查错误。如果没有错误,按Ctrl+F5进行程序调试,见图3-4。图3-4调试程序4 绘制系统原理图本系统是用altium designer 09 进行原理图的绘制,放置元器件在放置元器件之前首先应该绘制系统所用的原理图库和PCB库。4.1绘制原理图库4.1.1打开软件filenewlibrarySCH library,见图4-1。 4.1.2绘制原理图元件 单击Toolnew compennent元件名绘制元件,见图4-2。图4-2绘制原理图元件4.2绘制PCB库打开软件filenewlibraryPCB library ,见图4-3。图4-3绘制PCB库4.2.1绘制PCB元件单击Too
36、lnew blank compennent元件名绘制元件,见图4-4。图4-4绘制PCB元件4.3系统完整原理图,见图4-5。图4-5系统总原理图5 系统PCB图5.1未覆铜PCB图,见图5-1。图5-1未覆铜PCB5.2覆铜,见图5-2。图5-2覆铜PCB6 系统工作过程6.1 温度的测量 DS18B20数字温度传感器温度数据以数字的形式传至单片机,单片机将数据转换成十进制,送到数码管进行显示,这也就完成了,温度的测量,6-1。图6-1温度测量6.2温度数据的采集 DS18B20数字温度传感器温度数据以数字的形式传至单片机,单片机通过RS232将数据传至计算机,由串口调试助手进行数据的记录和
37、显示,见图6-2。图6-2温度数据的采集7程序框图及C语言程序7.1温度采集系统原理框图,见图7-1初始化调用显示子程序1S到?初次上电?读出温度值温度计算处理显示数据刷新发温度转换开始命令NY主流程图Y主流程图N图7-1温度采集系统原理框图7.1.1温度显示模块显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程,见图7-2。温度数据移入显示寄存器十位数0?N Y百位数0? NY百位数显示数据 (不显示符号)十位数显示符号百位数不显示 Y 结束图7-2温度显示模块流程图7.1.2读温度子程序读出温度子程序的主要功能是读出RAM中的9
38、字节,在读出时需要进行CRC校验,其程序流程,见图7-2。发DS18B20复位命令发跳过ROM命令读取温度命令读取操作,CRC校验9字节完?CRC校验正确?移入温度暂存器结束 N Y N Y图7-3读温度子程序7.1.3温度转换子程序温度转换命令子程序主要是发温度转换开始命令,其子程序流程见图7-4。DS18B20复位命令跳过ROM命令温度转换开始命令结束图7-4温度转换子程序流程7.1.4计算温度子程序此程序将RAM中读取值进行BCD码的转换运算并进行正负判定流程,见图7-5。开始温度零下? N温度值取补码置“”标志 Y置“+”标志计算小数位温度BCD值计算整数位温度BCD值结束图7-5计算
39、温度子程序流程7.2 温度采集系统C语言程序#include #define uchar unsigned char#define uint unsigned intsbit DS=P22;sbit fm=P23; /define interface 定义 DS18B20 接口int temp; / 温度变量uchar flag1,count; / sign of the result positive or negativesbit dula=P26;sbit wela=P27;unsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x
40、82,0xf8,0x80,0x90;/不带小数点编码。unsigned char code table1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; /带小数点编码。void delay(uint x) /delayuchar i,j; for(i=0;ix;i+)for(j=0;j0)i-; DS=1; i=4; while(i0)i-;bit tmpreadbit(void) /read a bit读一位 int i; bit dat; DS=0;i+; /i+小延时一下 DS=1;i+;i+; dat=DS; i=8;while(i0)i-; return (dat);uchar tmpread(void) /读一个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好 /一个字节在 DAT 里