1、c51单片机温度传感器控制电机转动职 oi啟io亂 u 忡 iv 询 iw课程设计报告基于单片机的DS18B20温度控制设计学院:专业:班级:计算机科学与工程计算机科学与技术090603学号:090603120姓名:张阳阳指导老师: 乔永兴1引言 32设计要求 32.1基本要求 32.2扩展功能 错误 !未定义书签。3总体方案设计 33.1方案论证 33.1.1方案一 33.1.2方案二 33.2总体设计框图 44硬件设计 44.1单片机系统 44.2数字温度传感器模块 54.2.1DS18B20 性能 54.2.2DS18B20 外形及引脚说明 64.2.3DS18B20 接线原理图 64.
2、2.4DS18B20 时序图 64.2.5数据处理 84.3 显示电路 95软件设计 95.1主程序模块 95.2读温度值模块 105.3中断模块 125.4温度查询模块 错误 !未定义书签。6源程序 137总结 15参考文献: 151引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它 所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒 适。数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。其中 数字温度计就是一个典型的例子。数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、 功能多样话等优点。 其主要用于对测温要求准确度比较高
3、的场所, 或科研实验室 使用,该设计使用STC89C5单片机作控制器,数字温度传感器 DS18B20测量温 度,单片机接受传感器输出,经处理用 LED数码管实现温度值显示。2设计要求2.1基本要求实现实时温度显示,测温范围050C,误差50C以内3总体方案设计3.1方案论证3.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化 的电压或电流采样, 进行 A/D 转换后就可以用单片机进行数据处理, 实现温度显 示。这种设计需要用到 A/D 转换电路, 增大了电路的复杂性, 而且要做到高精度 也比较困难。3.1.2方案二考虑到在单片机属于数字系统,容易想到数字温度传感器
4、,可选用 DS18B20 数字温度传感器, 此传感器为单总线数字温度传感器, 起体积小、 构成的系统结 构简单,它可直接将温度转化成串行数字信号给单片机处理, 即可实现温度显示。 另外DS18B20具有3引脚的小体积封装,测温范围为-55+125摄氏度,测温分 辨率可达 0.0625 摄氏度,其测量范围与精度都能符合设计要求。以上两种方案相比较,第二种方案的电路、软件设计更简单,此方案设计的系统在功耗、测量精度、范围等方面都能很好地达到要求,故本设计采用方案二3.2总体设计框图LED显示模块、按键控本方案设计的系统由单片机系统、数字温度传感器、 制模块、温度报警模块组成,其总体架构如下图 1。
5、图1系统总体方框图4硬件设计4.1单片机系统1.本设计采用STC89C5单片机作为控制器,完成所有功能的控制,包括:DS18B20数字温度传感器的初始化和读取温度值LED数码管显示驱动与控制 按键识别和响应控制 温度设置和报警 温度值的存储和读取2.单片机系统电路原理图:图2单片机系统原理图4.2数字温度传感器模块4.2.1 DS18B20 性能独特的单线接口仅需一个端口引脚进行通信简单的多点分布应用 无需外部器件 可通过数据线供电 零待机功耗测温范围-55+125 C,以0.5 C递增可编程的分辨率为 912位,对应的可分辨温度分别为 0.5 C、0.25 C、0.125 C和 0.0625
6、 C温度数字量转换时间200ms 12位分辨率时最多在750ms内把温度 转换为数字应用包括温度控制、工业系统、消费品、温度计和任何热感测系统 负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正 常工作422 DS18B20外形及引脚说明图3 DS18B20外形及引脚GND地DQ单线运用的数据输入/输出引脚VD可选的电源引脚4.2.3DS18B20接线原理图单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时, 其状态为高电平。MX2 lB2Odi RllDMg10 ao S1SE2:-图4 DS18B20接线原理图4.2.4DS18B20 时序图主机使用时间隙来读写 DS
7、18B20的数据位和写命令字的位。1.初始化时序如下图:UNE TYPE LEGENO:Bus masleHT adtrye lowDStBBfQ ah榊 towBcuh bus fnai减事 and OS18B2D Bde lewRea l or putt-up图5 DS18B20初始化时序2.DS18B20读写时序:图6 DS18B20读写时序425数据处理高速暂存存储器由9个字节组成,其分配如表 5所示。当温度转换命令 发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前, 咼位在后。-1一210MSb(uni
8、t =C)LSbSsSSs图7字节分配LSBNLSB下表为12位转化后得到的 12位数据,存储在 18B20的两个8比特的 RAM中,二进制中的前面 5位是符号位,如果测得的温度大于 0,这5位为0,只要将测到的数值乘于 0.0625即可得到实际温度;如果温度小于 0,这5位为1,测到的数值需要取反加 1再乘于0.0625即可得到实际 温度。例如+125 C的数字输出为 07D0H,实际温度=07D0H*0.0625=2000*0.0625=125 C。例如-55C的数字输出为 FC90H,则应先将11位数据位取反加 1得370H (符 号位不变,也不作运算),实际温度=370H*0.0625
9、=880*0.0625=55 C。可见其中低四位为小数位。TEMPERATUREDIGITAL OUTPUT1 Biliary)DIGITAL OUTPn (Hz)+12化J000 011L 1101 GOOD07301kr 峠毗0000 0101 0101 00000550k*+25.0615C0000 0001 1001 0001019111十10丄2刖C0000 0000 1019 0010D0A211oofto moo mm 1cmoc0000 0000 0000 0000OOOOh;5CC11L1 111L 1111 1003FFFSh n-10曰cmi mi oioi hid1 心
10、mi mo oiio miFF6F11iiii i ion loot onoDFWhTh# 亠WU图8 DS18B20温度数据表4.3显示电路LED数码管显示采用动态扫描方式,能简化电路布线,节约单片机 I/O端口段码和位码由单片机P0送出,分别用74HC673N锁存。ELJJM5软件设计5.1主程序模块图9数码管驱动显示电路主程序需要调用3个子程序,分别为:实时温度显示子程序:驱动数码管把实时温度值送出在 LED数码管显示查询记录温度值子程序:查询过去存储的温度值,最多可查询 10个值 温度设定、报警子程序:设定报警温度值,当温度超过该值时产生报警, 即驱动蜂鸣器鸣叫、8个发光二极管发光主程
11、序流程图:图12主程序流程图5.2读温度值模块读温度值模块需要调用4个子程序,分别为:DS18B20初始化子程序:让单片机知道 DS18B20在总线上且已准备好操 作DS18B20写字节子程序:对 DS18B20发出命令DS18B20读字节子程序:读取DS18B20存储器的数据延时子程序:对DS18B20操作时的时序控制1.读温度值模块流程图:返回2. DS18B20初始化子程序流程图:图14 DS18B20初始化子程序流程图3.DS18B20写字节和读字节子程序流程图:5.3中断模块中断采用T0方式1,初始值定时为50ms。中断模块需调用两个子程序:读温度值子程序:定时读取温度值,实时更新温
12、度值 记录温度值子程序:定时记录温度值,供查询使用把这两个子程序放在中断的原因是, 不会因为调整报警温度或查询历史温度 值而停止更新温度值和记录温度值。中断模块流程图:定时器重置初值计数值加11秒?读温度值1HNr记录温度值:中断返回图17中断模块流程图6源程序#in elude #in elude #defi ne BYTE un sig ned char#defi ne WORD un sig ned int#defi ne AD0809 XBYTE0X8000 sbit P1_0= P1A0;sbit P1_1= P1A1; sbit CH0=P1A0;sbit CH1=P1A1;/BY
13、TE code dis_code=0x03,0x9f,0x25,0x0d,0x99,0x49,/ 0x41,0x1f,0x01,0x09,0x11,0xc1,/ 0x63,0x85,0x61,0x71,0x00; /* 字符编码 */BYTE code dis_code = 0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x00;float disp(BYTE dat); void dse nd(BYTE dat);void start();void start(float temp) if(temp 30.0)P1_0 = 0X00 ; P1_1
14、= 0X01 ;CH0 = P1_0;CH1 = P1_1; elseP1_0 = 0X00 ; P1_1 = 0X00 ;CH0 = P1_0;CH1 = P1_1;/* 显示子程序 */float disp(BYTE dat)WORD j;float temp=dat;BYTE a,b;temp = dat / 255.0 * 50.0; for(j=0;j5000;j+);a = temp ; a %= 10; dsend(a);b = temp /10;dsend(b);return temp; void dsend(BYTE dat)BYTE i=dat;SBUF=dis_codei
15、; while (TI=0);TI=0;/* 采用查寻方式 AD 转换程序 */ void main(void) BYTE dat;BYTE dat1;WORD j;7 总结此次课程设计中,难点在于 DS18B20的使用,即对它的时序控制、初始化以 及字节读写方法, 任何一个环节出错或是时序控制不到位的话就不能得到正确的 数据。一旦学会了正确的使用方法, 就能感觉到它带来的便利是热电偶不能比拟 的,以后再次使用的话就能很快上手了。软件设计中,把程序按功能分模块的话能提高编程效率,把问题一一解决, 同时画流程图能帮助理清思路, 使问题简单化。 另一方面, 取变量名时也要讲究 技巧,应尽量使其见名知意,同样地,写程序时加注释确是非常必要的,否则隔 一段时间后, 想再改进或做扩展的话就比较困难了, 因为即使是自己写的程序也 变得难读难懂了。参考文献:1.徐玮.C51单片机高效入门(第2版).北京:机械工业出版社,2010.2.龙脉工作室,刘鲲,孙春亮(修订版) . 北京:人们邮电出版社, 2010.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1