基于单片机的dsb多点测温系统lcd显示(完全免费)精品内容摘要:
度信号,以“一线总线”串行送给 CPU,同时可传送 CRC校验码,具有极强的抗干扰纠错能力。 9) 负压特性。 电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 9 1) 冷冻库、粮仓、储罐 、电信机房、电力机房、电缆线槽等测温和控制领域。 2) 轴瓦、缸体、纺织、空调等狭小空间工业设备测温和控制。 3) 汽车空调、冰箱、冷柜以及中低纬度干燥箱等。 4) 供热、制冷管道热量计量、中央空调分户热能计量等。 DS18B20实物如图。 图 实物图 DS18B20 有两种封装:三角 TO92直插式(用的最多、最普遍的封装)和八角 SOIC贴片式,封装引脚见图。 表 列出了 DS18B20 的引脚定义。 ( a) DS18B20 To92 (b)DS18B20 八角 SOIC 图 DS18B20 引脚封装图 表 DS18B20 引脚定义 引脚 定义 GND 电源负极 DQ 信号输入输出 VDD 电源正极 NC 空 10 ① DS18B20寄生电源供电方式 如下面图 (a)所示,在寄生电源供电方式下, DS18B20从单线信号线上汲取能量:在信号线 DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1) 进行 远距离测温时,无需本地电源 2) 可以在没有常规电源的条件下读取 ROM 3) 电路更加简洁,仅用一根 I/O口实现测温 要想使 DS18B20进行精确的温度转换, I/O线必须保证在温度转换期间提供足够的能量,由于每个 DS18B20在温度转换期间工作电流达到 1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠 ,会造成无法转换温度或温度误差极大。 因此, 该 电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。 并且工作电源 VCC必须保证在 5V,当电源电压下降时,寄生电 源能够汲取的能量也降低,会使温度误差变大。 ② DS18B20寄生电源强上拉供电方式 改进的寄生电源供电方式如下面图 (b)所示,为了使 DS18B20 在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到 E2 存储器操作时,用 MOSFET 把 I/O线直接拉到 VCC就可提供足够的电流,在发出任何涉及到拷贝到 E2 存储器或启动温度转换的指令后,必须在最多 10μS 内把 I/O 线转换到强上拉状态。 在强上拉方式下可以解决电流供应不 足 的问题,因此也适合于多点测温应用,缺点就是要多占用一根 I/O 口线进行强上拉切换。 ③ DS18B20 的外部电源供电方式 如下面图 (c)所示, 在外部电源供电方式下, DS18B20工作电源由 VDD引脚接入, 其 VDD端用 3~ , 此时 I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个 DS18B20传感器,组成多点测温系统。 注意:在外部供电的方式下, DS18B20的 GND引脚不能悬空,否则不能转换温度,读取的温度总是 85℃。 11 (a) 外部电源供电方式 (c) 寄生电源供电 方式 (b) 寄生电源强上拉供电方式 图 硬件电路连接好以后,单片机需要怎么样工作才能将 DS18B20中的温度数据读取出来呢。 下面将给出详细分析。 首先我们来看控制 DS18B20的指令: 1) 33H— 读 ROM。 读 DS18B20 温度传感器 ROM 的编码(即 64 位地址)。 2) 55H— 匹配 ROM。 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS18B20 并使之作出响应,为下一步对该 DS18B20 的读 /写做准备。 3) F0H— 搜索 ROM。 用于确定挂接在同一总线上 DS18B20的个数,识别 64 位 ROM地址,为操作个器件做好准备。 4) CCH— 跳过 ROM。 忽略 64 为 ROM 地址,直接向 18B20 发温度转换命令,适用于一个12 从机工作。 5) ECH— 告警搜索命令。 执行后只有温度超过设定值上限或下限的芯片才做出响应。 以上这些指令设计的存储器是 64 位光刻 ROM,表 列出了它的含义。 表 64位光刻 ROM各位定义 64位光刻 ROM 中的序列号是出厂前被光刻好的,它可以看做该 DS18B20 的地址序列码。 其各位排列顺序是:开始 8 位为产品类型标号,接下来 48 位是该 DS18B20 自身的序列号,最后 8位是前面 56位的 CRC 循环冗余校验码( CR=X8+X5+X4+1)。 光刻 ROM 的作用是使每一个 DS18B20 都各不相同,这样就可以实现一条总线上挂接多个 DS18B20 的目的。 下面介绍以上几条指令的用法。 当主机需要对众多在线 DS18B20 中的某一个进行操作时,首先应将主机逐个与 DS18B20 挂接,读出其序列号;然后再将所有的 DS18B20 挂接到总线上,单片机发出匹配 ROM命令( 55H),紧接着主机提供的 64位序列(包括 DS18B20的 48位序列号)之后的操作就是针对该 DS18B20 的。 如果主 机只对一个 DS18B20 进行操作,就不需要读取 ROM 编码以及匹配 ROM 编码了,只要用跳过 ROM( CCH)命令,就可以进行如下温度转换和读取操作。 1) 44H— 温度转换。 启动 DS18B20 进行温度转换, 12 位转换时最长为 750ms( 9 位为)。 结果存入内部 9 字节的 RAM 中。 2) BEH— 读暂存器。 读内部 RAM 中 9字节的温度数据。 3) 4EH— 写暂存器。 发出向内部 RAM 的 3 字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 4) 48H— 复制暂存器。 将 RAM中第 2,3字节的内容复制到 E2ROM 中。 5) B8H— 重调 E2ROM 中内容回复到 RAM中的第 3, 4字节。 6) B4H— 读供电方式。 读 DS18B20 的供电模式。 寄生供电时, DS18B20 发送 0;外接电源供电时, DS18B20 发送 1。 以上这些指令涉及的存储器为高速暂存器 RAM 和可电擦出 E2ROM,见表。 表 高速暂存器 RAM 寄存器内容 字节地址 温度值低位( LSB) 0 13 温度值高位( MSB) 1 高温限值( TH) 2 低温限值( LT) 3 配置寄存器 4 保留 5 保留 6 保留 7 CRC 校验值 8 高速 暂存器 RAM 由 9 个字节的存储器组成。 第 0~ 1 字节是温度的显示位;第 2 和第 3个字节是复制的 TH和 TL,同时第 2 和第 3个字节的数字可以更新;第 4 个字节是配置寄存器,同时第 4 个字节的数字可以更新;第 5,6,7 三个字节的保留的。 可电擦出E2ROM 又包括温度触发器 TH 和 TL,以及一个配置寄存器。 表 列出了温度数据在高速暂存器 RAM 的第 0 和第 1个字节中的存储格式。 表 温度数据存储格式 DS18B20 在出厂时默认配置为 12 位,其中最高位为符号位,即温度值共 11 位,单片机在读取数据时,一次会读 2字节共 16 位,读完后将低 11 位的二进制数转化为十进制数后再乘以 便为所测的实际温度值。 另外,还需要判断温度的正负。 前 5 个数字为符号位,这 5 位同时变化,我们只需要判断 11 位就可以了。 前 5 位为 1 时,读取的温度为负值,且测到的数值需要取反加 1 再乘以 才可得到实际温度值。 前 5位为 0 时,读取的温度为正值,且温度为正值时,只要将测得的数值乘以 即可得到实际温度值。 ① 初始化时序如图 14 图 初始化时 序 1) 先将数据线置高电平 1。 2) 延时(该时间要求不 是很严格,但是要尽可能短一点)。 3) 数据线拉到低电平 0。 4) 延时 750us(该时间范围可以在 480us~ 960us)。 5) 数据线拉到高电平 1。 6) 延时等待。 如果初始化成功则在 15~ 60us内产生一个有 DS18B20返回的低电平 0,据该状态可以确定它的存在。 但是应注意,不能无限地等待,不然会使程序进入死循环,所以要进行超时判断。 7) 若 CPU读到数据线上的低电平 0后,还要进行延时,其延时的时间从发出高电平算起(第 5)步的时间算起)最少要 480us。 8) 将数据线再次拉到高电平 1后结束。 ② DS18B20写数据时序图如图 图 写数据时序图 15 1) 数据线先置低电平 0。 2) 延时确定的时间为 15us。 3) 按从低位到高位的顺序发送数据(一次只发送一位)。 4) 延时时间为 45us。 5) 将数据线拉高到高电平 1。 6) 重复 1)~ 5)步骤,直到发送完整个字节。 7) 最后将数据线拉高到 1。 ③ DS18B20 读数据时序图如图 图 读数据时序图 1) 将数据线拉高到 1。 2) 延时 2us。 3) 将数据线拉低到 0。 4) 延时 6us。 5) 将数据线拉高到 1。 6) 延时 4us。 7) 读数据线的状态位,并进行数据处理。 8) 延时 30us。 9) 重复 1)~ 7)步 骤,直到读取完一个字节。 16 系统电路设计 单片机最小系统如图 如图 所示 图 系统电路图 这部分为单片机复位电路和时钟电路。 单片机复位后,程序计数器 PC=0000H,即指向程序存储器 0000H 单元,使 CPU 从首地址重新开始执行程序。 产生单片机复位的条件是:在 RST 引脚端出现满足复位时间要求的高电平状态,该时间等于系统时钟震荡周期建立时间再加 2 个机器周期时间 (一般不小于 10ms)。 时钟电路通过单片机的 XTAL1 和 XTAL2 引脚外接定时元件 12M 的晶振,电容 C1 和C2 一般去 30pF左右,主要作用是帮助振荡器起震。 晶体振荡频率高,则系统的时钟频率也越高,单片机运行速速也就越快。 17 显示电路设计 LCD1602 显示电路原理图 如图 所示 图 LCD1602 显示电路 此部分为 LCD1602 显示电路,通过 10K 可调电阻可以调节 1602 背光显示亮度。 P0口接一个 10K 的上拉排阻。 按键电路设计 四个独立按键电路图 如图 所示 图 按键电路 每个独立按键接一个 I/O 口构成独立按键,前三个按键 S4~ S6分别三个 DS18B20,S7 按 下时为全三个 DS18B20 温度全显示。 18 三点测温电路 三个 DS18B20 接线如图 所示,每个传感器接一个 I/O 口。 图 DS18B20 接口电路 单总线型 DS18B20 温度传感器采用一个 DS18B20 接一个 I/O 口的形式,大大简化了程序编写难度,通过排针可外接电源供电。 第四章 软件设计 软件开发工具的选择 要使单片机系统按照人的意图办事,需设法让人与计算机对话,并听从人的指挥。 程序设计语言是实现人机交换信息的最基本工具,可分为机器语言、汇编语言和高级语言。 机器语言用二进 制编码表示每一条指令,是计算机能直接识别和执行的语言。 用机器语言编写的程序成为机器语言程序或者指令程序(机器码程序)。 因为机器只能识别和执行这种机器码程序,所以又称它为目标程序。 用机器语言编写程序不易记忆、不易查错、不易修改。 为了克服机器语言的上述缺点,可采用有一定含义的符号,即指令助记符来表示,一般都采用某些有关的英文单词的缩写。 这样就出现了另一种程序语言 — 汇编语言。 汇编语言是用助记符、符号和数字等来表示指令的程序语言,容易理解和记忆,它与机器语言指令是一一对应的。 汇编语言不像高级语言(如 BASIC) 那样通用型强,而是属于某种计算机所独有,与计算机的内部硬件结构密切相关。 用汇编语言编写的程序称为19 汇编语言程序。 以上两种语言都是低级语言。 尽管汇编语言有不少优点,但它仍存在着机器语言的某些缺陷:与 CPU的硬件结构密切相关,不同的 CPU其汇编语言是不同的。 这使得汇编语言程序不能移植,使用不便;其次,要使用汇编语言进行程序设计必须了解所使用 CPU硬件的结构与性能,对程序设计人员有较高的要求。 为此,又出现了对单片机进行编程的高级语言,如 PL\M, C等。 Keil C51是美国 Keil Software公司 出品的 51系列兼容单片机 C语言软件开发系统,与汇编相比, C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C来开发,体会更加深刻。 Keil C51软件提。基于单片机的dsb多点测温系统lcd显示(完全免费)精品
相关推荐
{ SBUF=0xff。 while(!TI)。 delayms(10)。 TI=0。 } for(i=0xff。 i0。 i) { SBUF=0x00。 delayms(10)。 while(!TI)。 TI=0。 } ES=1。 flag=0。 } void juchi() //锯齿波 { for(i=0xff。 i0。 i) { SBUF=i。 while(!TI)。 TI=0。 }
示方式极大的缩减了发光单元的信号线数量,因此在 LED 显示技术中被广泛使用。 以 88 点阵模块为例,说明一下其使用方法及控制过程。 图 中,红色水平线 Y0、 Y1„„Y7 叫做行线,接内部发光二极管的阳极,每 一行 8 个 LED 的阳极都接在本行的行线上。 相邻两行线间绝缘。 同样,蓝色竖直线 X0、 X1„„X7 叫做列线,接内部每列 8个 LED 的阴极,相邻两列线间绝缘。
级管,是一种固态的半导体器件,它能够 直接把电能转化为光能。 LED的核心部分由 P 型半导体和 N 型半导体 而组成的 晶片。 在 P 型半导体, 空穴 的数量比自由电子的数量大得多,多数载流子 为 空穴 ,少数载流子是自由电子 ;在 N 型半导体,自由电子的数量比孔学的数量大的多,载体中大多数为自由电子,少数载流子为空 穴。 半导体的它们之间的连接将是一个 “ PN 结 ”。
输给液晶现实器进行显示。 液晶显示模块 该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块做比较的话,不仅硬件电路结构简洁,且该模块的价格也略低于相同点阵的图形液晶模块, LCD1602 的程序流程图如图 所示。 L C D 初始化开始清显示 R A M 区置显示行初值 , 显示指针指向第一行待显示数据送入缓冲区预设数据显示在指定区域中调整指针 , 指向 L C D
EA=1。 //开总中断 EX0=0。 //禁止外部中断 delayms(10)。 WP_IC_CARD =1。 ES=1。 i=10。 while(flag1)。 //当子程序传输数据终了时控制 Flag跳出循环 flag1=1。 WP_IC_CARD =1。 for(i=10。 i15。 i++){wr_24c01(i,display_buffer[i])。 delay(250)。 }
AT89C51 单片机为 40 引脚双列直插芯片 ,有四个 I/O 口 P0,P1,P2,P3, MCS51 单片机共有 4浙江林学院天目学院本科生毕业设计(论文) 7 个 8位的 I/O口( P0、 P P P3),每一条 I/O线都能独立地作输出或输入。 P0口: P0口为一个 8位漏级开路双向 I/O口,每脚可吸收 8TTL门电流。 当 P1口的管脚第一次写 1 时,被定义为高阻输入。