基于AT89S51单片机的电子时钟(带温度显示)_第1页
基于AT89S51单片机的电子时钟(带温度显示)_第2页
基于AT89S51单片机的电子时钟(带温度显示)_第3页
基于AT89S51单片机的电子时钟(带温度显示)_第4页
基于AT89S51单片机的电子时钟(带温度显示)_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

基于基于AT89S51单片机的电子时钟 带温度显示 设计单片机的电子时钟 带温度显示 设计 摘要 本设计以数字集成电路技术为基础 单片机技术为核心 软件设计采用模块化结 构 C 语言编程 系统通过 LCD 显示数据 可以显示日期 年 月 日 时 分 秒 以及温 度 在内容安排上首先描述系统硬件工作原理 着重介绍了各硬件接口技术和各个接口 模块的功能 其次 详细的阐述了程序的各个模块和实现过程 关键词 单片机 电子时钟 温度传感器 DS1302 DS18B20 LCD1602 基于基于AT89S51单片机的电子时钟 带温度显示 设计单片机的电子时钟 带温度显示 设计 摘要摘要 1 1 设计要求设计要求 2 2 2 方案论证与设计方案论证与设计 2 2 12 1 用可编程逻辑器件设计用可编程逻辑器件设计 2 2 1 12 1 1 控制器部分控制器部分 3 2 22 2 显示部分的方案选择显示部分的方案选择 3 2 32 3 系统设计系统设计 3 2 3 1 晶体振荡器电路晶体振荡器电路 3 2 3 2 分频器电路 3 2 3 3 时间计数器电路 3 2 3 4 时钟电路 4 2 3 5 复位电路 4 2 3 6 复位电路的可靠性设计 4 2 3 7 按键部分 5 3 3 9 根据各模块的功能互相连接成电子时钟的控制电路 5 3 3 各硬件介绍各硬件介绍 6 3 13 1 AT89S51AT89S51 的引脚说明的引脚说明 7 3 23 2 发光二极管指示电路设计发光二极管指示电路设计 8 3 3 LCM1602 简介简介 9 3 53 5 DS1302DS1302 简介简介 10 4 4 系统硬件设计所需的器材系统硬件设计所需的器材 11 5 5 系统软件总体设计系统软件总体设计 11 6 6 主程序流程图主程序流程图 14 7 7 安装制作安装制作 14 1 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 8 8 调试与检测安全调试与检测安全 14 9 9 结束语结束语 15 前言前言 电子时钟是实现对年 月 日 时 分 秒数字显示的计时装置 广泛用于个人 家庭 车站 码头 办公室 银行大厅等场所 成为人们日常生活中的必需品 数字 集成电路的发展和石英晶体振荡器的广泛应用 使得数字钟的精度远远超过老式钟表 钟表的数字化给人们生产生活带来了极大的方便 在此基础上完成的电子时钟精度高 功能易于扩展 可扩展成为诸如定时自动报警 按时自动打铃 时间程序自动控制 定时广播 自动起闭路灯 定时开关烘箱 通断动力设备 甚至各种定时电气的自动 启用等电路 所有这些 都是以钟表数字化为基础的 因此 研究数字时钟及扩大其 应用有着非常现实的意义 本设计就是数字时钟简单的扩展应用 1 设计要求设计要求 本设计准备实现的功能 1 显示日期功能 年 月 日 时 分 秒以及 2 可通过按键切换年 月 日及时 分 秒的显示状态 3 可随时调校年 月 日或时 分 秒 4 可每次增减一进行时间调节 5 可动态完整显示年份 实现真正的万年历显示 6 可显示温度 2 2 方案论证与设计方案论证与设计 2 12 1 控制器部分控制器部分方案论证方案论证 方案一 可采用 ALTERA 公司的 FLEX10K 系列 PLD 器件 设计起来结构清晰 各个模块 从硬件上设计起来相对简单 控制与显示的模块间的连接也会比较方便 但是考虑到本设计的特点 EDA 在功能扩展上比较受局限 而且 EDA 占用的资源也 相对多一些 从成本上来讲 用可编程逻辑器件来设计也没有什么优势 方案二 凌阳 16 位单片机有丰富的中断源和时基 它的准确度相当高 并且 C 语 2 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 言和汇编兼容的编程环境也很方便来实现一些递归调用 I O 口功能也比较强大 方便 使用 用凌阳 16 位单片机做控制器最有特色的就是它的可编程音频处理 可完成语音 的录制播放和识别 这些都方便对设计进行扩展 使设计更加完善 成本也相对低一 些 但是 在控制与显示的结合上有些复杂 显示模组资源相对有限 而且单片机的 稳定性不是很高 而且就需要完成万年历这个不太复杂的设计可以不必用凌阳 16 位单 片机来完成 采用 51 单片机既能够实现既定功能 成本也不高 综合考虑最后选择用 51 单片机来作为中心控制器件 硬件控制电路主要用了 AT89S51 芯片处理器 LCD 显示器等 根据各自芯片的功 能互相连接成电子万年历的控制电路 软件控制程序主要有主控程序 电子万年历的 时间控制程序 时间显示及星期显示程序等组成 主控程序中对整个程序进行控制 进行了初始化程序及计数器 还有键盘功能程序 以及显示程序等工作 时间控制程 序是电子万年历中比较重要的部分 时间控制程序体现了年 月 日 时 分 秒及 星期的计算方法 时间控制程序主要是定时器 0 计时中断程序每隔 10ms 中断一次当作 一个计数 每中断一次则计数加 1 当计数 100 次时 则表示 1 秒到了 秒变量加 1 同理再判断是否 1 分钟到了 再判断是否 1 小时到了 再判断是否 1 天到了 再判断 是否 1 月到了 再判断是否 1 年到了 若计数到了则相关变量清除 0 先给出一般年份 的每月天数 如果是闰年 第二个月天数不为 28 天 而是 29 天 再用公式 s v 1 y 1 4 y 1 100 y 1 400 d 计算当前显示日期是星期几 当调节 日期时 星期自动的调整过来 闰年的判断规则为 如果该年份是 4 或 100 的整数倍 或者是 400 的整数倍 则为闰年 否则为非闰年 在我们的这个设计中由于只涉及 100 年范围内 所以判断是否闰年就只需要用该年份除 4 来判断就行了 温度的显示主要 是靠 ds18b20 采集现在的温度数据 CPU 读取数据进行显示 当各自的条件得不到满 足时 对应的显示器状态就不发生改变 只是在满足条件的情况下 显示器的状态才 变化 3 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 图 1 单片机控制电路 Fig 1 SCM Control circuit 2 22 2 显示部分的方案显示部分的方案论证论证 方案一 采用 8 段数码管虽经济实惠 但操作比液晶显示来说略显繁琐 方案二 液晶显示方式 液晶显示效果出众 可以运用菜单项来方便操作 比较 简单 所以 最后选择液晶显示方案 图 2 液晶显示电路 Fig 2 lcm1602 circuit 2 32 3 数字温度计设计方案论证数字温度计设计方案论证 2 3 1 方案一 由于本设计是测温电路 可以使用热敏电阻之类的器件利用其感温效应 在将随 被测温度变化的电压或电流采集过来 进行 A D 转换后 就可以用单片机进行数据的 处理 在显示电路上 就可以将被测温度显示出来 这种设计需要用到 A D 转换电路 感温电路比较麻烦 2 3 2 方案二 1 进而考虑到用温度传感器 在单片机电路设计中 大多都是使用传感器 所 4 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 以这是非常容易想到的 所以可以采用一只温度传感器 DS18B20 此传感器 可以很容 易直接读取被测温度值 进行转换 就可以满足设计要求 从以上两种方案 很容易看出 采用方案二 电路比较简单 软件设计也比较简 单 故采用了方案二 2 2 方案二的总体设计框图方案二的总体设计框图 温度计电路设计总体设计方框图如图 1 所示 控制器采用单片机 AT89S51 温度传 感器采用 DS18B20 用 LCD1602 显示温度 2 42 4 系统设计系统设计 2 4 1 晶体振荡器电路 晶体振荡器电路给数字钟提供一个频率稳定准确的 32768Hz 的方波信号 可保证 数 字钟的走时准确及稳定 不管是指针式的电子钟还是数字显示的电子钟都使用了晶体 荡器电路 图 3 DS1302 电路 Fig 3 ds1302 circuit 2 4 2 分频器电路 分频器电路将高频方波信号经分频后得到 1Hz 的方波信号供秒计数器进行计数 分频器实际上也就是计数器 2 4 3 时间计数器电路 时间计数电路由秒个位和秒十位计数器 分个位和分十位计数器及时个位和时十 位计数器电路构成 其中秒个位和秒十位计数器 分个位和分十位计数器为 60 进制计 数器而根据设计要求 时个位和时十位计数器为 12 进制计数器 2 4 4 时钟电路 内部时钟电路如图所示 在 XTAL1 和 XTAL2 引脚上外接定时元件 内部振荡电路 5 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 就产生自激振荡 定时元件通常石英晶体和电容组成的并联谐振回路 晶体振荡器选 择 12MHZ 电容采用 30PF 图 4 时钟电路 Fig 4 Clock circuit 2 4 5 复位电路 影响单片机系统运行稳定性的因素可大体分为外因和内因两部分 1 外因 射频干扰 它是以空间电磁场的形式传递在机器内部的导体 引线或零件引脚 感生出相应的干扰 可通过电磁屏蔽和合理的布线 器件布局衰减该类干扰 电源线或电源内部产生的干扰 它是通过电源线或电源内的部件耦合或直接传导 可通过电源滤波 隔离等措施来衰减该类干扰 2 内因 振荡源的稳定性 主要由起振时间频率稳定度和占空比稳定度决定 起振时间可由 电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电路的可靠性 2 4 6 复位电路的可靠性设计 复位是单片机的初始化操作 单片机启运运行时 都需要先复位 其作用是使 CPU 和系统中其他部件处于一个确定的初始状态 并从这个状态开始工作 因而 复位是 一个很重要的操作方式 但单片机本身是不能自动进行复位的 必须配合相应的外部 电路才能实现 复位电路的基本功能是 系统上电时提供复位信号 直至系统电源稳定后 撤销 复位信号 为可靠起见 电源稳定后还要经一定的延时才撤销复位信号 以防电源开 关或电源插头分 合过程中引起的抖动而影响复位 6 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 图5 RC 复位电路 Fig 5 RC Reset Circuit 2 4 7 按键部分 本设计总的用了四个按扭开关作为键盘 其中一个是复位键 另三个中的其中两 个是调整时间增加 减少的键 第三个是切换年 月 日及时 分 秒的显示状态并 在所切换的显示状态下配合加减两个键调整时间 图 6 按键电路 Fig 6 Key circuit 3 3 各硬件介绍各硬件介绍 3 13 1 AT89S51AT89S51 的引脚说明的引脚说明 AT89S51 系列单片机中有 PDIP PLCC TQFP 多种封装形式 本设计采用的是 PDIP 封装 40 管脚的单片机 各引脚如图 2 2 所示 7 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 图 9 AT89S51 的 PDIP 封装引脚图 Fig 9 AT89S51 40 个引脚中 4 组 8 位共 32 个 I O 口 正电源和地线两根 外置石英振荡器的 时钟线两根 现在对这些引脚的功能加以说明 1 Pin9 RESET Vpd复位信号复用脚 当 AT89S51 通电 时钟电路开始工作 在 RESET 引脚上出现 24 个时钟周期以上的高电平 系统开始复位 而 RESET 由高电平下 降为低电平后 系统即从 0000H 地址单元开始执行程序 2 Pin29 PESN 当访问外部程序存储器时 此脚输出负脉冲选通信号 外部程序 存储器则把指令数据放到 P0 口上 由 CPU 读入并执行 3 Pin30 ALE PROG 地址锁存允许信号端 单片机上电后 ALE 引脚不断向外输 出正脉冲信号 ALE 信号可以用作对外输出时钟或定时信号 4 Pin31 EA Vpp程序存储器的内外部选通线 89S51 单片机 内置有 4kB 的程 序存储器 当 EA 为高电平并且程序地址小于 4kB 时 读取内部程序存储器指令数据 而超过 4kB 地址则读取外部指令数据 如 EA 为低电平 则不管地址大小 一律读取外 部程序存储器指令 3 23 2 发光二极管指示电路设计发光二极管指示电路设计 发光二极管简称为 LED 由镓 Ga 与砷 AS 磷 P 的化合物制成的二极管 当电子与空穴复合时能辐射出可见光 因而可以用来制成发光二极管 在电路及仪器 8 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 中作为指示灯 或者组成文字或数字显示 磷砷化镓二极管发红光 磷化镓二极管发 绿光 碳化硅二极管发黄光 它是半导体二极管的一种 可以把电能转化成光能 常简写为 LED 发光二极管与 普通二极管一样 是由一个 PN 结组成 也具有单向导电性 当给发光二极管加上正向 电压后 从 P 区注入到 N 区的空穴和由 N 区注入到 P 区的电子 在 PN 结附近数微米内 分别与 N 区的电子和 P 区的空穴复合 产生自发辐射的荧光 不同的半导体材料中电 子和空穴所处的能量状态不同 当电子和空穴复合时释放出的能量多少不同 释放出 的能 量越多 则发出的光的波长越短 常用的是发红光 绿光或黄光的二极管 设计中 我使用了1个发光二极管作为电源的指示 为了避免供给发光二极管 的电流过大 使用1K 的电阻进行限流 3 3 LCD1602 简介简介 图 11 LCM1602 Fig 11 LCM1602 LCM1602 采用标准的 16 脚接口 其中 第 1 脚 VSS 为地电源 第 2 脚 VDD 接 5V 正 电源 第 3 脚 V0 为液晶显示器对比度调整端 接正电源时对比度最弱 接地电源时 对比最高 对比度过高时会产生 鬼影 使用时可以通过一个 10K 的电位器调整对 比度 第 4 脚 RS 为寄存器选择 高电平时选择数据寄存器 低电平时选择指令寄存 器 第 5 脚 RW 为读写信号线 高电平时进行读操作 低电平时进行写操作 当 RSRW 共同为低电平时可以写入指令或者显示地址 当 RS 为低电平 RW 为高电平时可读 忙信号 当 RS 为高电平 RW 为低电平时可以写入数据 第 6 脚 E 端为使能端 当 E 端 由高电平跳变成低电平时 液晶模块执行命令 第 7 14 脚 D0 D7 为 8 位双向数据 线 第 15 16 脚 空脚 3 43 4 DS1302DS1302 简介简介 1 DS1302 的结构及工作原理 DS1302 1 是美国DALLAS 公司推出的一种高性能 低功耗 带RAM的实时时钟芯片 它可以对年 月 日 周日 时 分 秒进行计时 且具有闰年补偿功能 工作电压宽达2 5 5 5V 采用三线 接口与CPU 进行同步通信 并可采用突发方式一次传送多个字节的时钟信号或RAM数据 DS1302 9 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 内部有一个31 的用于临时性存放数据的RAM 寄存器 DS1302 是DS1202 的升级产品 与 DS1202 兼容 但增加了主电源 后背电源双电源引脚 同时提供了对后背电源进行涓细电流充电 的能力 1 1 引脚功能表及内部结构图 DS1302 的引脚及内部结构如图1 所示 引脚功能如表 1 所示 1 2 DS1302 的控制字节说明 DS1302 的控制字如图2 所示 控制字节的最高有效位 位7 必须是逻辑1 如果它为0 则不能把数据写入到DS1302 中位6 如 果为0 则表示存取日历时钟数据 为1 表示存取RAM数据 位 至位1 指示操作单元的地址 最低 有效位 位0 如为0 表示要进行写操作 为1 表示进行读操作 控制字节总是从最低位开始输出 1 3 复位 通过把 输入驱动置高电平来启动所有的数据传送 输入有两种功能 首先 接通控制逻辑 允许 10 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 地址 命令序列送入移位寄存器 其次 提供了终止单字节或多字节数据的传送手段 当 为高电 平时 所有的数据传送被初始化 允许对DS1302进行操作 如果在传送过程中置 为低电平 则会 终止此次数据传送 并且I O 引脚变为高阻态 上电运行时 在Vcc 2 5V 之前 必须保持低电平 只有在SCLK 为低电平时 才能将RST 置为高电平 1 4 数据输入输出 在控制指令字输入后的下一个SCLK 时钟的上升沿时数据被写入DS1302 数据输入从低位即位0 开始 同样 在紧跟8 位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302 的数据 读出 数据时从低位0 位至高位7 数据读写时序见图 1 5 DS1302 的寄存器 DS1302 共有12 个寄存器 其中有7 个寄存器与日历 时钟相关 存放的数据位为BCD 码形式 其日历 时间寄存器及其控制字见表2 此外 DS1302 还有年份寄存器 控制寄存器 充电寄存 器 时钟突发寄存器及与RAM相关的寄存器等 时钟突发寄存器可一次性顺序读写除充电寄存器 外的所有寄存器内容 DS1302 与RAM 相关的寄存器分为两类 一类是单个RAM单元 共31 个 每个单元组态为一个8 位的字节 其命令控制字为COH FDH 其中奇数为读操作 偶数为写操作 再一类为突发方式下的RAM 寄存器 此方式下可一次性读写所有的RAM 的31 个字节 命令控制 字为FEH 写 FFH 读 3 53 5 DS1302DS1302 简介简介 3 5 1 温度传感器 DS18B20 DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传 感器 与传统的热敏电阻等测温元件相比 它能直接读出被测温度 并且可根据实际 要求通过简单的编程实现 位的数字值读数方式 TO 92 封装的 DS18B20 的引脚排列见下图 其引脚功能描述见表 1 底 视图 11 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 DS18B20 表 1 DS18B20 详细引脚功能描述 序 号 名称引脚功能描述 1GND 地信号 2DQ 数据输入 输出引脚 开漏单总线接口引脚 当被用着在寄生电源 下 也可以向器件提供电源 3VDD 可选择的 VDD 引脚 当工作于寄生电源时 此引脚必须接地 DS18B20 的性能特点如下 独特的单线接口仅需要一个端口引脚进行通信 多个 DS18B20 可以并联在惟一的三线上 实现多点组网功能 无须外部器件 可通过数据线供电 电压范围为 3 0 5 5 零待机功耗 温度以 或 位数字 用户可定义报警设置 报警搜索命令识别并标志超过程序限定温度 温度报警条件 的器件 负电压特性 电源极性接反时 温度计不会因发热而烧毁 但不能正常工作 DS18B20 采用 脚 PR 35 封装或 脚 SOIC 封装 其内部结构框图如图 2 所示 图 2 DS18B20 内部结构 64 位 ROM 的结构开始 位是产品类型的编号 接着是每个器件的惟一的序号 共 有 48 位 最后 位是前面 56 位的 CRC 检验码 这也是多个 DS18B20 可以采用一线进 行通信的原因 温度报警触发器 和 可通过软件写入户报警上下限 DS18B20 温度传感器的内部存储器还包括一个高速暂存 和一个非易失性的可 电擦除的 EERAM 高速暂存 RAM 的结构为 字节的存储器 结构如图 3 所示 头 个字 I O C 64 位 RO M 和 单 线 接 口 高 速 缓 存 存储器与控制逻辑 温度传感器 高温触发器 TH 低温触发器 TL 配置寄存器 8 位 CRC 发生器 Vdd 12 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 节包含测得的温度信息 第 和第 字节 和 的拷贝 是易失的 每次上电复 位时被刷新 第 个字节 为配置寄存器 它的内容用于确定温度值的数字转换分辨 率 DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值 该字节各位的定义 如图 3 所示 低 位一直为 是工作模式位 用于设置 DS18B20 在工作模式还 是在测试模式 DS18B20 出厂时该位被设置为 用户要去改动 R1 和 0 决定温度转 换的精度位数 来设置分辨率 TM R1 1R01111 图 3 DS18B20 字节定义 由表 1 可见 DS18B20 温度转换的时间比较长 而且分辨率越高 所需要的温度数 据转换时间越长 因此 在实际应用中要将分辨率和转换时间权衡考虑 高速暂存 的第 字节保留未用 表现为全逻辑 第 字节读出 前面所有 字节的 CRC 码 可用来检验数据 从而保证通信数据的正确性 当 DS18B20 接收到温度转换命令后 开始启动转换 转换完成后的温度值就以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的第 字节 单片机可以 通过单线接口读出该数据 读数据时低位在先 高位在后 数据格式以 0 0625 LSB 形式表示 当符号位 时 表示测得的温度值为正值 可以直接将二进制位转换为十进 制 当符号位 时 表示测得的温度值为负值 要先将补码变成原码 再计算十 进制数值 表 2 是一部分温度值对应的二进制温度数据 表 1 DS18B20 温度转换时间表 R0R1 0 0 0 1 0 1 1 1 9 10 11 12 分辨率 位 温度最大转向时间 ms 93 75 187 5 375 750 DS18B20 完成温度转换后 就把测得的温度值与 RAM 中的 TH T 字节内容作比较 若 TH 或 T TL 则将该器件内的报警标志位置位 并对主机发出的报警搜索命令 作出响应 因此 可用多只 DS18B20 同时测量温度并进行报警搜索 在 64 位 ROM 的最高有效字节中存储有循环冗余检验码 CRC 主机 ROM 的前 56 位来计算 CRC 值 并和存入 DS18B20 的 CRC 值作比较 以判断主机收到的 ROM 数据是 温度 LSB 温度 MSB TH 用户字节 1 TL 用户字节 2 配置寄存器 保留 保留 保留 CRC 13 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 否正确 DS18B20 的测温原理是这这样的 器件中低温度系数晶振的振荡频率受温度的影响 很小 用于产生固定频率的脉冲信号送给减法计数器 高温度系数晶振随温度变化 其振荡频率明显改变 所产生的信号作为减法计数器 的脉冲输入 器件中还有一个 计数门 当计数门打开时 DS18B20 就对低温度系数振荡器产生的时钟脉冲进行计数进 而完成温度测量 计数门的开启时间由高温度系数振荡器来决定 每次测量前 首先 将 55 所对应的一个基数分别置入减法计数器 温度寄存器中 计数器 和温度 寄存器被预置在 55 所对应的一个基数值 减法计数器 对低温度系数晶振产生的脉冲信号进行减法计数 当减法计数器 的预置值减到 时 温度寄存器的值将加 减法计数器 的预置将重新被装入 减 法计数器 重新开始对低温度系数晶振产生的脉冲信号进行计数 如此循环直到减法 计数器计数到 时 停止温度寄存器的累加 此时温度寄存器中的数值就是所测温度 值 其输出用于修正减法计数器的预置值 只要计数器门仍未关闭就重复上述过程 直到温度寄存器值大致被测温度值 表 2 一部分温度对应值表 温度 二进制表示十六进制表示 1250000 0111 1101 0000 07D0H 850000 0101 0101 0000 0550H 25 06250000 0001 1001 0000 0191H 10 1250000 0000 1010 0001 00A2H 0 50000 0000 0000 0010 0008H 00000 0000 0000 1000 0000H 0 51111 1111 1111 0000 FFF8H 10 1251111 1111 0101 1110 FF5EH 14 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 25 06251111 1110 0110 1111 FE6FH 551111 1100 1001 0000 FC90H 另外 由于 DS18B20 单线通信功能是分时完成的 它有严格的时隙概念 因此读 写时序很重要 系统对 DS18B20 的各种操作按协议进行 操作协议为 初使化 DS18B20 发复位脉冲 发 ROM 功能命令 发存储器操作命令 处理数据 DS 18B 20DS 18B 20DS 18B 20 4 7 K GNDGNDGND VCC VCC单 片 机 图 4 DS18B20 与单片机的接口电路 3 5 2 DS18B20 时序 DS18B20 的复位时序 DS18B20 的读时序 对于 DS18B20 的读时序分为读 0 时序和读 1 时序两个过程 对于 DS18B20 的读时隙是从主机把单总线拉低之后 在 15 秒之内就得释放单总线 以让 DS18B20 把数据传输到单总线上 DS18B20 在完成一个读时序过程 至少需要 60us 才能完成 15 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 DS18B20 的写时序 对于 DS18B20 的写时序仍然分为写 0 时序和写 1 时序两个过程 对于 DS18B20 写 0 时序和写 1 时序的要求不同 当要写 0 时序时 单总线要被拉 低至少 60us 保证 DS18B20 能够在 15us 到 45us 之间能够正确地采样 IO 总线上的 0 电平 当要写 1 时序时 单总线被拉低之后 在 15us 之内就得释放单总线 4 4 系统硬件系统硬件设计所需的器材设计所需的器材 5V 电源 3V 电源 AT89S51 单片机 1 个 液晶显示器 1 个 DS1302 1 个 DS18B20 一个 电阻 1 K 的 2 个 4 7K 的 2 个 4 7 欧排阻 8550 三极管 晶振 12M 的一个 32768K 的一个 电容 30P 的两个 LED 二极管 1 个 22 f 电容 1 个 轻触开关 5 个 16 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 5 5 系统软件总体设计系统软件总体设计 系统的软件设计采用汇编语言 对单片机进行编程实现各项功能 程序在 WindowsXP 环境下采用 Keil 软件编写 软件控制程序主要有主控程序 电子时钟的时 间控制程序 h 和温度显示程序组成 主控程序中对整个程序进行控制 进行了初始化 程序还有键盘功能程序 以及显示程序和时间控制程序是电子时钟中比较重要的部分 时间控制程序体现了年 月 日 时 分 秒的计算方法 6 6 主程序流程图主程序流程图 开始 单片机读DS1302数据 单片机送数据到LCD1602 单片机判断按键 单片机处理按键调显示数 据 结束 图 16 主流程框图 Fig 16 The process flow chart 源程序源程序 使用说明 按使用说明 按 s1 进入日期设置 进入设置后进行光标左移 进入日期设置 进入设置后进行光标左移 按按 s2 进入时间设置 设置完成后进行确认 进入时间设置 设置完成后进行确认 按按 s3 进行减 进行减 17 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 按按 s4 进行加 进行加 include define uint unsigned int define uchar unsigned char sbit rw P2 6 sbit rs P2 5 1602 IO 口位定义口位定义 sbit en P2 7 sbit rst P3 5 sbit sclk P3 6 1302 IO 口位定义口位定义 sbit io P3 4 18 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 sbit key1 P1 0 sbit key2 P1 1 独立按键位定义独立按键位定义 sbit key3 P1 2 sbit key4 P1 3 sbit DQ P2 2 uchar tempL 0 临时变量低位临时变量低位 uchar tempH 0 临时变量高位临时变量高位 uint temperature uint hour minute second year month day uint key 0 uchar tab num 0 x30 0 x31 0 x32 0 x33 0 x34 0 x35 0 x36 0 x37 0 x38 0 x39 0 x3a 0 x2d 对应字对应字 符为 符为 0 1 2 3 4 5 6 7 8 9 uchar tab time 1 2 10 3 4 10 5 6 uchar tab date 2 0 1 0 11 0 9 11 2 7 延时函数 延时延时函数 延时 z 毫秒毫秒 19 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 void delay uint z uint x y for x 0 x z x for y 0 y 110 y 函数功能函数功能 延时子程序延时子程序 入口参数入口参数 k 出口参数出口参数 void delay18b20 unsigned int k 20 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 unsigned int n n 0 while n 480ms DQ 1 拉高数据线拉高数据线 delay18b20 14 等待 等待 15 60ms 22 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 函数功能函数功能 向向 DS18B20 读一字节数据读一字节数据 入口参数入口参数 出口参数出口参数 dat ReadOneChar void unsigned char i 0 unsigned char dat 0 23 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 for i 8 i 0 i DQ 1 delay18b20 1 DQ 0 dat 1 DQ 1 if DQ dat 0 x80 delay18b20 4 24 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 return dat 函数功能函数功能 向向 DS18B20 写一字节数据写一字节数据 入口参数入口参数 dat 出口参数出口参数 WriteOneChar unsigned char dat 25 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 unsigned char i 0 for i 8 i 0 i DQ 0 DQ dat delay18b20 5 DQ 1 dat 1 delay18b20 4 26 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 函数功能函数功能 向向 DS18B20 读温度值读温度值 入口参数入口参数 出口参数出口参数 temperature uint ReadTemperature void Init DS18B20 初始化初始化 WriteOneChar 0 xcc 跳过读序列号的操作跳过读序列号的操作 WriteOneChar 0 x44 启动温度转换启动温度转换 27 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 delay18b20 125 转换需要一点时间 延时转换需要一点时间 延时 Init DS18B20 初始化初始化 WriteOneChar 0 xcc 跳过读序列号的操作跳过读序列号的操作 WriteOneChar 0 xbe 读温度寄存器 头两个值分别为温度的低位读温度寄存器 头两个值分别为温度的低位 和高位 和高位 tempL ReadOneChar 读出温度的低位读出温度的低位 LSB tempH ReadOneChar 读出温度的高位读出温度的高位 MSB 温度转换 把高低位做相应的运算转化为实际温度温度转换 把高低位做相应的运算转化为实际温度 temperature tempH 256 tempL 5 8 delay18b20 200 return temperature 28 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 1302 写一个字节写一个字节 void write byte uchar dat uchar i dat w dat w dat for i 0 i 1 sclk 0 sclk 1 sclk 0 29 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 1302 读一个字节读一个字节 uchar read byte uchar i k k 0 for i 0 i 1 if io k k 0 x80 sclk 1 sclk 0 sclk 0 return k 1302 把数据写入地址把数据写入地址 void write add uchar add uchar dat rst 0 30 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 sclk 0 rst 1 write byte add write byte dat 10 4 dat 10 sclk 0 rst 0 1302 从地址读出数据从地址读出数据 uchar read add uchar add uchar temp dat1 dat2 rst 0 sclk 0 rst 1 write byte add temp read byte sclk 0 rst 0 dat1 temp 16 dat2 temp 16 31 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 temp dat1 10 dat2 return temp 1302 时间初始化时间初始化 void ds1302 init write add 0 x8e 0 x00 打开写保护 写入时间 打开写保护 写入时间 write add 0 x80 50 初始化初始化 秒秒 50 write add 0 x82 59 初始化初始化 分分 59 write add 0 x84 23 初始化初始化 时时 23 write add 0 x86 31 初始化初始化 日日 31 write add 0 x88 12 初始化初始化 月月 12 write add 0 x8c 10 初始化初始化 年年 2010 write add 0 x8e 0 x80 关闭写保护 禁止写入 关闭写保护 禁止写入 1302 读出时间读出时间 void ds1302 32 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 write add 0 x8e 0 x00 打开写保护 读出时间 打开写保护 读出时间 second read add 0 x81 从从 1302 读出时间读出时间 秒 秒 minute read add 0 x83 从从 1302 读出时间读出时间 分 分 hour read add 0 x85 从从 1302 读出时间读出时间 时 时 day read add 0 x87 从从 1302 读出时间读出时间 日 日 month read add 0 x89 从从 1302 读出时间读出时间 月 月 year read add 0 x8d 从从 1302 读出时间读出时间 年 年 write add 0 x8e 0 x80 关闭写保护 禁止读出 关闭写保护 禁止读出 写命令函数写命令函数 void write com uchar com rs 0 rw 0 en 0 delay 5 P0 com delay 5 en 1 delay 5 33 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 en 0 写数据函数写数据函数 void write data uchar date rs 1 rw 0 en 0 delay 5 P0 date delay 5 en 1 delay 5 en 0 1602 显示一个字符显示一个字符 void DisplayOne uchar p 34 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 write data p 时间重新赋值时间重新赋值 void time tab time 0 hour 10 tab time 1 hour 10 tab time 3 minute 10 tab time 4 minute 10 tab time 6 second 10 tab time 7 second 10 tab date 2 year 10 tab date 3 year 10 tab date 5 month 10 tab date 6 month 10 tab date 8 day 10 tab date 9 day 10 35 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 1602 初始化初始化 void init write com 0 x38 write com 0 x0c write com 0 x06 write com 0 x01 时间显示函数时间显示函数 void DisplayTime uint n ds1302 time write com 0 x80 6 for n 0 n 10 n DisplayOne tab num tab date n 显示日期显示日期 36 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 write com 0 x80 0 x40 6 for n 0 n 13 n 7 write com 0 x80 0 x40 n write com 0 x0f key 0 switch n case 13 if key 2 second if second 60 second 0 time write add 0 x8e 0 x00 write add 0 x80 second write add 0 x8e 0 x80 write com 0 x80 0 x40 12 DisplayOne tab num tab time 6 41 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 DisplayOne tab num tab time 7 write com 0 x80 0 x40 13 write com 0 x0f key 0 if key 4 second if second 1 second 59 time write add 0 x8e 0 x00 write add 0 x80 second write add 0 x8e 0 x80 write com 0 x80 0 x40 12 DisplayOne tab num tab time 6 DisplayOne tab num tab time 7 write com 0 x80 0 x40 13 write com 0 x0f key 0 case 10 42 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 if key 2 minute if minute 60 minute 0 time write add 0 x8e 0 x00 write add 0 x82 minute write add 0 x8e 0 x80 write com 0 x80 0 x40 9 DisplayOne tab num tab time 3 DisplayOne tab num tab time 4 write com 0 x80 0 x40 10 write com 0 x0f key 0 if key 4 minute if minute 1 minute 59 time 43 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 write add 0 x8e 0 x00 write add 0 x82 minute write add 0 x8e 0 x80 write com 0 x80 0 x40 9 DisplayOne tab num tab time 3 DisplayOne tab num tab time 4 write com 0 x80 0 x40 10 write com 0 x0f key 0 case 7 if key 2 hour if hour 24 hour 0 time write add 0 x8e 0 x00 write add 0 x84 hour write add 0 x8e 0 x80 write com 0 x80 0 x40 6 DisplayOne tab num tab time 0 44 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 DisplayOne tab num tab time 1 write com 0 x80 0 x40 7 write com 0 x0f key 0 if key 4 hour if hour 1 hour 23 time write add 0 x8e 0 x00 write add 0 x84 hour write add 0 x8e 0 x80 write com 0 x80 0 x40 6 DisplayOne tab num tab time 0 DisplayOne tab num tab time 1 write com 0 x80 0 x40 7 write com 0 x0f key 0 45 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 if key 1 start key 0 write com 0 x0c break if key 3 stop write com 0 x80 m write com 0 x0f while 1 KeyScan if key 3 m m 3 if m 15 m 9 46 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 write com 0 x80 m write com 0 x0f key 0 switch m case 15 if key 2 day if day 32 day 1 time write add 0 x8e 0 x00 write add 0 x86 day write add 0 x8e 0 x80 write com 0 x80 14 DisplayOne tab num tab date 8 DisplayOne tab num tab date 9 write com 0 x80 15 write com 0 x0f key 0 47 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 if key 4 day if day 0 day 31 time write add 0 x8e 0 x00 write add 0 x86 day write add 0 x8e 0 x80 write com 0 x80 14 DisplayOne tab num tab date 8 DisplayOne tab num tab date 9 write com 0 x80 15 write com 0 x0f key 0 case 12 if key 2 month if month 13 48 本科生本科生毕业论毕业论文文 设计设计 打印打印专专用用纸纸 month 1 t

温馨提示

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

评论

0/150

提交评论