




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I 本科生毕业论文 设计 本科生毕业论文 设计 题 目 基于单片机的智能人体电子秤的系统设计 姓 名 学号 院 系电气信息与自动化 专 业测控技术与仪器 指导教师 职称 讲师 2011 年 月 日 教务处制 基于单片机的人体智能秤 摘 要 随着微电子技术的应用 市场上使用的传统称重工具已经满足不了人们的要求 为了改变传统称重工具在使用上存在的问题 在本设计中将智能化 自动化 人性化 用在了电子秤重的控制系统中 本系统主要由单片机来控制 测量物体重量部分由称 重传感器及 A D 转换器组成 加上显示单元 此电子秤俱备了功能多 性能价格比高 功耗低 系统设计简单 使用方便直观 速度快 测量准确 自动化程度高等特点 本系统以 AT89C52 单片机为主控芯片 外围附以称重电路 显示电路 A D 转换 电路 键盘电路等构成智能称重系统电路板 从而实现自动称重系统的各种控制功能 主要通过 LCD 显示人体的体重 经键盘输入身高 结合身高与体重的关系来判别并显 示人体的身材 可以说 此设计集称重 判别身材和时间显示一体 功能齐全可进行推 广应用 所完成的电子秤很大程度上满足了应用需求 关键词 液晶显示 传感器 单片机 III 目目 录录 1 绪 论 1 2 系统设计 2 2 1 设计任务及要求 2 2 1 1 任务 2 2 1 2 要求 2 2 1 3 说明 2 2 2 总体设计方案 2 2 2 1 设计思路 2 2 2 2 方案论证与比较 2 2 2 3 系统组成 8 3 硬件电路的设计 9 3 1 外部电路的设计 9 3 1 1 单片机控制系统 9 3 1 2 单片机与转换器的接口电路 9 3 1 3 液晶显示接口电路 11 3 1 4 电源电路 13 3 1 5 键盘与单片机接口电路 13 4 软件设计 15 4 1 主程序的设计 15 4 1 1 系统主程序 15 4 1 2 欢迎模块 16 4 1 3 测量模块 17 4 1 4 身材模块 18 4 1 5 时间模块 19 4 1 6 键盘模块 20 5 系统测试 21 5 1 测试使用的仿真软件 21 5 2 测试 21 5 3 显示时间仿真 21 5 4 显示体重和身材的仿真 22 6 总结 23 致 谢 24 参考文献 25 附录 1 主电路图 26 附录 2 源程序清单 27 1 1 绪绪 论论 目前 随着社会的发展 生活水平不断提高 人们越来越关注自己的身体健康 许多人由于工作的压力和不良的饮食习惯 使得身体健康每况愈下 疾病也随之而来 而在这些人群中 患有肥胖和营养不良的病人居多 为方便人们及时了解自己的体重是否超出或低于标准的体重 在许多公共场合都 摆放了人体秤 商场 药店 马路旁等随处可见 给那些由于工作紧张没有时间到医 院做定期体验的人们带来了方便 人体秤已不再是医院的专用医疗器械 已成为人们 生活中不可缺少的一部分 普通人体秤测量身高和体重的结果都是直接用眼睛观看指针读取的 由于读数的 方法各不相同 读数时光线有明有暗等多种原因 使得读取数据的误差过大 由于人 体秤的使用非常普遍 解决这一问题显得尤为重要 近年来 随着科技不断进步 计算机已渗透到各个领域 单片机已逐渐成为科学 技术现代化的重要工具 正在不断地走向深入 单片机的应用已深入到人类的生活 生产等各种领域 在此基础上发展起来的由单片机控制的人体称 比普通人体称在耐 用性 适用环境 读数的准确度等方面有了很大的提高 智能人体秤经济 实用 适合在广大工薪阶层推广 因此 以单片机为控制核心 的人体秤 不但提高了读数的精确度 给人们以直观的效果 将身材标准与否一并显 示 与普通人体秤的价格相差无几 逐渐取代传统的人体秤 2 2 系统设计系统设计 2 12 1 设计任务及要求设计任务及要求 2 1 12 1 1 任务任务 设计一个人体智能秤 要求显示人体体重 显示时间 显示身材 2 1 22 1 2 要求要求 显示人体体重 身材以及显示时间 2 1 32 1 3 说明说明 1 人体称重的范围定为 10KG 100KG 身高的范围为 90CM 190CM 2 TJH 2C 型称重传感器 额定负载为 100KG 传感器电路采用的是单臂电桥 只 有一个电阻应变片 与其它型号的相比而言价格便宜 2 22 2 总体设计方案总体设计方案 2 2 12 2 1 设计思路设计思路 通过 TJH 2C 重力传感器对称重信号进行采集 经 INA126 将称重模拟信号进行放 大 通过 8 位的 A D 转换器完成数据采集 再把模拟信号转换为数字信号输入 MCU 由 MCU 完成一系列的运算 最后由 LCD 显示身材 体重和时间 2 2 22 2 2 方案论证与比较方案论证与比较 1 传感器模块 方案一 本设计中需要测量的是人体的体重 没有具体的测量的范围 所以本系统中 我采用 TJH 2C 型称重传感器 它的测量范围是 0 100kg 适合大多数的人群 如图 2 1 为传感器的原理图 图 2 1 TJH 2C 传感器原理图 称重传感器主要由弹性体 电阻应变片电缆线等组成 内部线路采用惠更斯电桥 当弹性体承受载荷产生变形时 输出信号电压由公式 1 Eout R2 R4 R2 R4 R1 R1 R2 R2 R3 R3 R4 R4 Ein 公式 1 称重传感器是影响人体称测量精度的关键部分 选用适当的传感器 用来感知被 测量 当人体站到称盘上时 重力传给传感器 该传感器发生行变 从而使阻抗发生 变化 电桥失去平衡 传感器输出一个变化的模拟信号 本系统中采用 TJH 2C 型称重 传感器 额定负载为 200KG 传感器电路采用的是单臂电桥电路 只有一个电阻应变 片 理想情况下 传感器输出信号 放大器输出信号 A D 转换输出信号 人体体重 之间的关系基本成线性 放大器的理想放大倍数为 327 方案二 采用应变片式压力传感器 压力传感器是现实中采用并使用的比较多的一种传感器 我们使用的压力传感器 主要利用压电效应制造而成的 这种的传感器也称为压电传感器 应变片压力传感器 原理如图 2 2 图 2 2 应变片压力传感器原理图 电阻应变片受力产生形变 使加在应变片电阻上的电压发生变化 这种应变片在 受力时产生的阻值变化通常较小 一般这种应变片都组成应变片电桥 并通过后续的 仪表放大器进行放大 在传输给处理电路 通常是 A D 转换和 CPU 显示或执行机构 因为应变片产生的阻值变化小 所以在测量时 一旦超过量程的上限值就会损坏仪器 而测量人体体重的变化范围很光 显然 采用此方案不适合 方案选择 通过比较 认为本设计相对需要较稳定相对电路简单的传感器 这样 可以省下一些时间 因此 选择了方案一 4 2 前端放大器的选择 方案一 利用普通低温漂运算放大器构成多级放大器 普通低温漂运算放大器构成多级放大器会引入大量噪声 由于 A D 转换器需要很 高的精度 所以几毫伏的干扰信号就会直接影响最后的测量精度 所以 此中方案不 宜采用 方案二 由高精度低漂移运算放大器构成差动放大器 差动放大器具有高输入阻抗 增益高的特点 可以利用普通运放做成一个差放大 器 如图 2 3 OP07 图 2 3 差动放大器原理图 电阻 R1 R2 电容 C1 C2 C3 C4 用于滤除前级的噪声 C1 C2 为普通小电容 可以滤除高频干扰 C3 C4 为大的电解电容 主要用于滤除 低频噪声 优点 输入级加入放大器 增大了输入阻抗 中间级为差动放大电路 滑 动变阻器 R6 可以调节输出零点 最后一级可以用于微调放大倍数 使输出满足满量 程要求 输出级为反向放大器 所以输出电阻不是很大 比较符合应用要求 缺点 此电路要求 R3 R4 相等 误差将会影响输出精度 难度较大 实际测量 每一级运 放都会引入较大噪声 对精度影响较大 方案 三 采用专用仪表放大器 如 INA126 INA121 等 以 INA126 为例如 图 2 4 图 2 4 INA126 放大器原理图 此类芯片内部采用差动输入 共模抑制比高 差模输入阻抗大 增益高 精度也 非常好 且外部接口简单 放大器增益 G 5 80K Rg 通过改变 Rg 的大小来改变 放大器的增益 方案选择 综上所述 选择方案三比较适合本系统的要求 3 A D 模块 方案一 双积分型 A D 转换器 如 ICL7135 ICL7109 等 双积分型 A D 转 换器精度高 具有精确的差分输入 输入阻抗高 可自动调零 超量程信号 全部输 出于 TTL 电平兼容 双积分型 A D 转换器具有很强的抗干扰能力 对正负对称的工 频干扰信号积分为零 所以对 50HZ 的工频干扰抑制能力较强 对高于工频干扰 例 如噪声电压 已有良好的滤波作用 只要干扰电压的平均值为零 对输出就不产生影 响 但是 双积分型 A D 的转换速度太缓慢了 这样就无法满足要低功耗的要求 显 然双积分型的 A D 不适合于本系统的设计 方案二 逐次逼近型 A D 转换器 如 ADS7805 ADS7804 等 逐次逼近型 A D 转换 一般具有采样 保持功能 采样频率高 功耗比较低 是 理想的高速 高精度 省电型 A D 转换器件 高精度逐次逼近型 A D 转换器一般都带有内部基准源和内部时钟 基于 89C52 构 成的系统设计时仅需要外接几个电阻 电容 方案选择 作为人体秤 系统对 A D 的转换速度要求适中 精度上 8 位的 A D 足 以满足要求 另外逐次逼近行型 A D 转换器 具有低廉的价格 综合的分析其优点和 缺点 选择方案二 4 控制模块 方案一 采用可编程逻辑器件 CPLD 作为控制器 CPLD 可以实现各种复杂的逻 辑功能 规模大 密度高 体积小 稳定性高 I O 资源丰富 易于进行功能扩展 采 用并行的输入输出方式 提高了系统的处理速度 适合作为大规模控制系统的控制核 心 但本系统不需要复杂的逻辑功能 对数据的处理速度的要求也不是非常高 而且 从使用及经济的角度考虑放弃此方案 方案二 采用凌阳公司的 16 位单片机 它是 16 位控制器 具有体积小 驱动能 力高 集成度高 易扩展 可靠性高 功耗低 结构简单 中断能力强等特点 处理 速度高 尤其用于语音处理和识别等领域 但是当凌阳单片机应用语音处理和辨识时 由于其占用的 CPU 资源较多而使得凌阳单片机同时处理其他任务的速度和能力降低 方案三 采用使用 Atmel 公司的 AT89C52 作为系统的的主控制器 AT89C52 是 一种低功耗 高性能 CMOS8 位微控制器 具有 8K 在系统可编程 Flash 存储器 与工 业 80C51 产品指令和引脚完全兼容 片上 Flash 允许程序存储器在系统可编程 亦适 于常规编程器 在单芯片上 拥有灵巧的 8 位 CPU 和在系统可编程 Flash 使得 AT89C52 为嵌入式控制应用系统提供高灵活 超有效的解决方案 方案选择 由于本设计要求不高 采用一般的 AT89C52 即可完成 所以选择方案 三 5 键盘模块 方案一 采用独立式键盘 它是各键盘相互独立地接到单片机的 I O 引脚 每一 个按键需要占用单片机的一个 I O 引脚 这是最简单的键盘结构 但有任何一个键按 下时 与之相连的输入数据线即被置为逻辑 0 低电平 而平时该数据线上保持为逻 辑 1 高电平 单片机程序中只要通过查询与键盘相连的 I O 脚位即可方便地实现按 键处理 不过 这种按键的缺点是按键多时 占用单片机的 I O 口线资源 本系统是 设计通过人体体重与身高的关系来判别人体健康的程度 所以只需 0 9 个数字键和一 个复位键 显然占用的 I O 线资源太多了 在本系统中不适用 方案二 采用并列式键盘可以减少占用单片机 I O 口的线资源 而在本系统的设 计中采用并列式键盘 4 4 只需要 8 根 I O 口线 并且在键盘上分配很合理 可以设置 0 9 个键 一个复位键 小数点 虽然在软件上完成行列式键盘的扫描 编程相对而 言很复杂 但这种行列式键盘的扫描程序已经有现成的程序可以借鉴 只需修改就可 以使用 方案选择 综上分析 选择方案 二 6 显示模块 方案一 采用 LED 示显示器 在单片机应用系统中 通常使用 LED 数码管显示器来显示各种数字和字符 由于 它有显示清晰 亮度高 使用电压低 寿命长的特点 所以使用非常广泛 但是本为 要求显示中文 用 LED 使电路复杂 所以不适合本系统 方案二 采用 LCD 液晶显示器 液晶显示器有微功耗 体积小 显示内容丰富 模块化 接口电路简单等诸多优 点 适合推广应用 而且有许多自带中文字库的芯片 适合本系统的设计 方案选择 综上分析 选用方案二 7 2 2 32 2 3 系统组成系统组成 本系统主要采用称重传感器模块 滤波放大电路模块 模数转换电路模快 显示 模块 键盘模块等部分组成 人体的体重信息由称重传感器转换成电信号 并通过测 量电路进行滤波放大 由单片机控制 A D 转换器完成数据采集 并由单片机完成运算 显示 人体智能秤系统框图如图 2 5 所示 图 2 5 人体智能秤系统框图 8 3 硬件电路的设计硬件电路的设计 3 13 1 外部电路的设计外部电路的设计 3 1 13 1 1 单片机控制系统单片机控制系统 AT89C52 最小系统图 它是整个电路正常工作不可缺少的部分 其中引脚 18 和 19 接晶整电路 CRY 12MHZ 9 引脚接复位电路 即可手动复位也可以上电复位 31 引脚接电源 低电平输入为真 如图 3 1 所示 图 3 1 单片机最小系统图 3 1 2 单片机与转换器的接口电路单片机与转换器的接口电路 A D 转换器是将模拟量转换为数字量的器件 它是模拟量与计算机之间的接口部 分 逐次逼近法型 A D 转换器的结构如图 2 由 N 位逐次逼近寄存器 N 位 D A 转换 器 比较器 N 位输出缓冲器及逻辑控制电路构成 其工作原理为 把输入的模拟电 压 Vin 作为目标值 用对分搜索的方法来逼近该值 当启动信号 START 有效后 时钟 信号 CLK 通过控制逻辑电路使 N 位寄存器的最高位置 1 其余各位为 0 此二进制代 码经 D A 转换器转换为电压 V0 该值为满量程的一半 将 V0 与输入电压 Vin 作比较 如 Vin V0 则保留这一位 否则该位请 0 然后 CLK 再对次高位置 1 并连同上一 次转换结果进行 D A 转换和比较 保留结果 重复以上过程直到比较完毕 发出转换 结果信号 EOC 并将 N 位寄存器中的转换结果送至输出缓冲器 如图 3 2 图 3 2 逐次逼近型 A D 转换器的结构 ADC0809 与单片机接口电路图如图 3 3 所示 单片机的低 8 位的地址信号在 ALE 作用下锁存在 74LS373 中 74LS373 输出的低 3 位信号分别加到 ADC0809 的通道选择 端 A B C 作为通道编码 单片机的 P2 7 作为片选信号 与 WR 进行或非操作得到 一个正脉冲 加到 ADC0809 的 ALE 和 START 的引脚上 由于 ALE 和 START 连接 在一起 因此 ADC0809 在锁存信道地址的同时也启动转换 在读取转换结果时 用单 片机的读信号 P2 4 和 P2 7 引脚经或非门后产生的正脉冲作为 OE 信号 用以打开三态 输出锁存器 显然 上诉操作时 P2 7 应为低电平 ADC0809 的 EOC 端经反相器连 接到单片机的 P2 5 引脚 作为查询或中断信号 图 3 3 单片机与 ADC0809 接口电路 3 1 3 液晶显示接口电路液晶显示接口电路 LCD 是利用晶体材料的电光效应制作的一种被动式显示器 液晶本身并不发光 依 靠电信号的控制使周围环境光在显示部位反射或透射而得以显示 液晶显示器是一种 体积小 重量轻 功耗低 被广泛应用的显示设备 在本系统中用 LCD 来显示称重人 的身材 主要显示汉字 LCD 显示的扫描方式是按行列式扫描 显示一个汉字是按左上 右上 左下 右 下的顺序按列显示的 显示汉字前 首先要提取汉字的字模 一个汉字共 32 字节 为 16 16 点阵 提取字模采用 AEDK51 机软件系统自带的字模提取软件 以 A51 的取模 格式 并将其参数设定为 逆向取模 字节正序 将要显示的汉字字模存放在程序区 内 需要显示时 给定特定的数据表地址即可 LCD 复位信号通过反相器接到单片机的 RESET 上 上电或手动复位时将随单片 机同时复位 由于复位后并行口输出高电平 LCD 处于选中状态 此时 LCD 将输出内 部状态字 将会影响数据总线上的数据传输 所以外接一个反相器 如图 3 4 图 3 4 LCD 显示接口电路图 12 3 1 4 电源电源电路电路 电源采用的是 9V 交流电压电源输入 5V 直流电压输出 稳压二极管 VD2 串接在 7805 的 2 引脚与地之间 可使输出电压得到提高 输出电压为稳压管输出电压与 VD2 输出电压之和 VD1 是输出保护二极管 一旦输出电压低于 VD2 稳压值时 VD1 导 通 将输出电流旁路 保护 7805 稳压管输出级不被损坏 如图 3 5 所示 图 3 5 电源电路图 3 1 5 键盘与单片机接口电路键盘与单片机接口电路 矩阵式键盘采用并列式结构 按键设置在行列的交点上如图 3 6 矩阵式键盘的行 线通过电阻接 5V 当键盘上没有键闭合时 所有的行线与列线是断开的 行线均呈高 电平 当键盘上某一键闭合时 该键所对应的行线与列线短接 此时该行线的电平将 由被短接的行线电平所决定 将行线接至单片机的输入接口 列线接至单片机的输出 接口 首先使所有的列线为低电平 然后读行线状态 若行线均为高电平 则没有键 按下 若读出的行线状态不全为高电平 则可以断定有键按下 先让 Y0 这一列为低 电平 其余行线为高电平 读行线状态 如行线状态不全为 1 则说明所按键在该 列 否则不在该列 然后让 Y1 列为低电平 其他列为高电平 判断 Y1 列有无键盘按 下 图 3 6 键盘原理图 采用 4 4 的键盘进行控制的 当相应的按键被按下时 哪个键的就会被接通 通 过数据线输入 MCU 进行计算 控制等 如图 3 7 图 3 7 键盘与单片机的接口图 14 4 软件设计软件设计 4 14 1 主程序的设计主程序的设计 4 1 14 1 1 系统主程序系统主程序 智能称的开发和设计中的主要包括主程序的设计 显示程序设计和键盘程序的设 计 A D 转换程序的设计和数据处理的设计 通过对程序进行初始化后 进入操作系 统显示 欢迎 判断是否有人称重 如果没有人使用返回等待 有人称重就进行测量 并在 LCD 上显示人体的重量 并判断出人的身材 结束后进返回初始程序再次等待 如图 4 1 图 4 1 主程序流程图 15 4 1 24 1 2 欢迎模块欢迎模块 本模块主要是通过对 LCD 的初始化设置后 通过提取固定字的字模 将相应的字 显示在 LCD 上 然后 启动 ADC0809 对重力传感器进行数据采样 当采样值小于 10kg 时 低于人体秤的下限值 说明无人站上 返回到继续等待状态 当采样值大于 10kg 说明有人站上 进入下测量模块 如图 4 2 图 4 2 人体秤重流程图 判断是否有人称重子程序 ZHONGLI YALI MOVDPTR ADCS 重力入口地址 MOVX DPTR A JB P2 0 MOVX A DPTR 采集重力值 CLR C SUBB A 0AH 将测量值与 10 比较 小于 10 则继续 JCYALI 测量 大于 10 则返回 说明有人称重 RET 16 4 1 34 1 3 测量模块测量模块 有人站上后 启动 ADC0809 进行模数转换 模数转换有中断和查询两种转换方法 本系统采用查询方法 压力传感器接 IN0 通道 位移传感接 IN1 通道 启动 A D 程序 如下 MOVDPTR ADCS 通道口地址 MOVX DPTR A 首先采集重力传感器的值 将 16 次采集数据去掉一个最大数 一个最小数求得平 均值存入 ADVAL 单中 并在 LCD 第 0 位至第 2 位按从低位到高位的顺序显示重力值 然后采集位移传感器的值 采集数据 求平均值与重力传感器的方法都相同 唯一不 同的是显示部分 在 LCD 的第 5 位至第 7 位按从低位到高位的顺序显示身高值 子程 序流程图如图 4 3 图 4 4 示 最后将测得的体重值存入 ADVAL1 中 身高值存入 SURM 中 以便在判断身材子程序中使用 图 4 3 数据采样子程序 图 4 4 显示子程序 17 4 1 44 1 4 身材模块身材模块 身高 体重测量完毕后 进入判断身材模块 本模块的设计思想如下 将身高和体重分别存入程序中 HIGH 为身高表 WEIGH 为体重表 身高表与体 重表中数据是一一对应的关系 首先在身高表中查找与测量身高值 SURM 相等的数值 记录下测量的身高值 在表中的地址 然后根据记录的地址到体重表查找对应的体重 找到后与测量体重值 ADVAL1 相比较 若测量的体重值与表内的标准值相等 则显示 正常 若小于标准值 则显示 偏胖 若大于标准值 显示 偏瘦 显示身材结果由 LCD 液晶显示 如图 4 5 图 4 5 判断身材流程图 18 4 1 54 1 5 时间模块时间模块 在人体秤上设计显示时间的程序 通过计时器计时秒钟的 当秒钟累加到 59 时 会通过 MCU 来判断 从而确定秒钟的溢出到分钟还是继续累加秒钟的工作 分钟与时 钟的工作原理和秒钟的原理一样 只是溢出到的目的不同如图 4 6 图 4 6 显示时间流程图 19 4 1 64 1 6 键盘模块键盘模块 扫描键盘并初始化 读取键盘上按下的键并判断是数字键还是功能键 如果按下 的是数字键转到数字处理程序并显示相应的数字 如果按下的是功能键转到功能处理 程序并显示最终的处理结果 然后返回键盘读取 如图 4 7 图 4 7 键盘扫描流程图 20 6 总结总结 在基于单片机的人体智能秤的设计当中 基本完成了设计任务书中的基本要求 在调试的实验中能够在允许的误差范围内显示人体的体重 通过此次设计对单片机有了深刻的认识 能够对它进行一些基本的控制 在设计 当中 对一些芯片也有了深刻的认识 能够运用这些芯片设计电路 毕业设计是专科学习阶段一次非常难得的理论与实际相结合的机会 通过这次比 较完整的人体智能秤的设计 我摆脱了单纯的理论知识学习状态 和实际设计的结合 锻炼了我的综合运用所学的专业基础知识 解决实际工程问题的能力 同时也提高我 查阅文献资料 集成手册以及电脑制图等其他专业能力水平 而且通过对整体的掌控 对局部的取舍 以及对细节的斟酌处理 都使我的能力得到了锻炼 经验得到了丰富 并且意志品质力 抗压能力及耐力也都得到了不同程度的提升 虽然毕业设计内容繁 多 过程繁琐 但我的收获却更加丰富 各种系统的适用条件 各种芯片的选择 各 种电路的设计 我都是随着设计的不断深入而不断学习并学会应用的 和老师的沟通 交流更使我茅塞顿开 21 致致 谢谢 本论文是在导师凌泽明老师的悉心指导下完成的 没有导师的指引 没有父母和 朋友的帮助和支持 我在大学的学术成长肯定会大打折扣 当我打完毕业论文的最后 一个字符 涌上心头的不是长途跋涉后抵达终点的欣喜 而是源自心底的诚挚谢意 论文工作的每一步工作都得到了凌老师的无微不至的关怀 在关键的时候导师为我指 点迷津 在此 我以这朴素的语言来表达我对凌老师衷心的感谢和崇高的敬意 22 参考文献参考文献 1 郑欢 单片机原理与应用技术 北京 高等教育出版社 2004 11 2 张玮 马乐惠 电子技术基础 西安 西安电子科技大学出版社 2006 9 3 单片机实训 北京 高等教育出版社 2003 4 4 许海平 微机原理与接口 北京 高等教育出版社 2004 7 5 孙涵芳 单片机原理及应用 修订版 北京 北京航空航天大学出版社 1996 年 6 何立民 单片机应用技术选编 1 8 北京 北京航空航天大学出版社 2002 7 维普期刊 8 超星图书馆 23 附录附录 1 主电路图主电路图 24 附录附录 2 源程序清单源程序清单 键盘扫描程序 DBUF EQU 30H TEMP EQU 40H YJ EQU 50H 结果存放 YJ1 EQU 51H 中间结果存放 GONG EQU 52H 功能键存放 DIN BIT 0B0H CLK BIT 0B1H ORG 00H START MOV R3 0 初始化显示为空 MOV GONG 0 MOV 30H 10H MOV 31H 10H MOV 32H 10H MOV 33H 10H MOV 34H 10H MLOOP CALL DISP PAN 调显示子程序 WAIT CALL TESTKEY 判断有无按键 J Z WAIT CALL GETKEY 读键 INC R3 按键个数 CJNE A 0 NEXT1 判断是否数字键 LJMP E1 转数字键处理 NEXT1 CJNE A 1 NEXT2 LJMP E1 NEXT2 CJNE A 2 NEXT3 LJMP E1 NEXT3 CJNE A 3 NEXT4 LJMP E1 NEXT4 CJNE A 4 NEXT5 LJMP E1 NEXT5 CJNE A 5 NEXT6 LJMP E1 NEXT6 CJNE A 6 NEXT7 LJMP E1 NEXT7 CJNE A 7 NEXT8 LJMP E1 NEXT8 CJNE A 8 NEXT9 LJMP E1 NEXT9 CJNE A 9 NEXT10 LJMP E1 NEXT10 CJNE A 10 NEXT11 判断是否功能键 LJMP E2 转功能键处理 NEXT11 CJNE A 11 NEXT12 LJMP E2 NEXT12 CJNE A 12 NEXT13 LJMP E2 NEXT13 CJNE A 13 NEXT14 LJMP E2 NEXT14 CJNE A 14 NEXT15 LJMP E2 NEXT15 CJNE A 15 NEXT16 LJMP E2 NEXT16 CJNE A 16 NEXT1 LJMP E2 E2 CJNE A 10 N21 判断功能键 LJMP JIA N21 CJNE A 11 N22 LJMP JIAN N22 CJNE A 12 N23 LJMP CHENG N23 CJNE A 13 N24 LJMP CHU N24 CJNE A 0 N25 LJMP FIRST 首次按功能键 N25 LJMP DEN N4 LJMP E2 FIRST MOV YJ R4 输入值送结果 MOV R3 0 按键次数清零 LJMP DISP1 结果处理 JIA MOV A YJ 上次结果送累加器 ADD A R4 上次结果加输入值 JB CY N4 溢出 MOV YJ A 存本次结果 MOV R3 0 按键次数清零 LJMP DISP1 JIAN MOV A YJ SUBB A R4 上次结果减输入值 JB CY N4 负数溢出 MOV YJ A MOV R3 0 LJMP DISP1 CHENG MOV A YJ MOV B A MOV A R4 MUL AB 上次结果乘输入值 JB OV N4 溢出 MOV YJ A LJMP DISP1 CHU MOV A R4 MOV B A MOV A YJ DIV AB 上次结果除输入值 MOV YJ A MOV R3 0 LJMP DISP1 DEN MOV R3 0 LJMP DISP1 DISP1 MOV B 10 MOV A YJ 结果送累加器 DIV AB 结果除 10 MOV YJ1 A 暂存 商 MOV A B 取个位数 MOV 34H A 个位数送显示缓存 MOV A YJ1 JZ DISP11 结果是否为一位数 MOV B 10 MOV A YJ1 DIV AB MOV YJ1 A MOV A B MOV 33H A 十位送显示缓存 MOV A YJ1 JZ DISP11 结果是否为二位数 MOV 32H A 百位数送显示缓存 DISP11 LJMP MLOOP DISP MOV R0 DBUF 显示子程序 MOV R1 TEMP 4 MOV R2 5 DP10 MOV DPTR SEGTAB MOV A R0 MOVC A A DPTR MOV R1 A INC R0 DEC R1 DJNZ R2 DP10 MOV R0 TEMP MOV R1 5 DP12 MOV R2 8 MOV A R0 DP13 RLC A MOV DIN C CLR CLK SETB CLK DJNZ R2 DP13 INC R0 DJNZ R1 DP12 RET SEGTAB DB 3FH 06H 5BH 4FH 66H 6DH 段码定义 DB 7DH 07H 7FH 6FH 77H 7CH DB 39H 5EH 79H 71H 00H 40H TESTKEY MOV P1 0FH 读入键状态 MOV A P1 CPL A ANL A 0FH 高四位不用 RET KEYTABLE DB 0DEH 0EDH 0DDH 0BDH 键码定义 DB 0EBH 0DBH 0BBH 0E7H DB 0D7H 0B7H 07EH 07DH DB 07BH 077H 0BEH 0EEH GETKEY 读键子程序 MOV R6 10 ACALL DELAY MOV P1 0FH MOV A P1 CJNE A 0FH K12 LJMP MLOOP K12 MOV B A MOV P1 0EFH MOV A P1 CJNE A 0EFH K13 MOV P1 0DFH MOV A P1 CJNE A 0DFH K13 MOV P1 0BFH MOV A P1 CJNE A 0BFH K13 MOV P1 07FH MOV A P1 CJNE A 07FH K13 LJMP MLOOP K13 ANL A 0F0H ORL A B MOV B A MOV R1 16 MOV R2 0 MOV DPTR KEYTABLE K14 MOV A R2 MOVC A A DPTR CJNE A B K16 MOV P1 0FH K15 MOV A P1 CJNE A 0FH K15 MOV R6 10 ACALL DELAY MOV A R2 RET K16 INC R2 DJNZ R1 K14 AJMP MLOOP A D 转换程序 ORG 0000H LJMP AD ORG 0030H AD MOV SP 30H MOV R0 50H MOV R6 08H MOV DPTR 78FFH 指向第一路 LOOP MOVX DPTR A 启动 0809 进行转换 LCALL DELAY 调用延时子程序 MOVX A DPTR 读转换结果 MOV R0 A 存转换结果 INC DPH 指向下一路 INC R0 调整存结果地址指针 DJNZ R6 LOOP 8 路未采集完继续 HERE SJMP HERE DELAY MOV R7 10H 软件延时子程序 DELAY MOV R7 80 延时子程序 DLOOP DJNZ R7 DLOOP DJNZ R6 DLOOP RET 时间程序 ORG 0000H LCD 显示器设置 RS BIT P2 0 RW BIT P2 1 LCDE BIT P2 2 时钟电路设置 BICNT DATA 30H BYCNT DATA 31H COMAND DATA 32H RCVDAT DATA 40H XMTDAT DATA 50H IODAT BIT P3 2 SCLK BIT P3 1 RST BIT P3 0 START MOV SP 60H 开机初始化 MOV P0 0FFH MOV P1 0FFH MOV P2 0FFH MOV P3 0FFH MAIN LCALL INI TIME 初始化 DS1302时钟 RUNI LCALL GET TIME 调用读时间子程序 LCALL DISP 调用数码管显示子程序 AJMP RUNI 重复循环 显示子程序 DISP LCALL B2T CH 数据转换 CLRLCDE MOVA 01 LCALL WCMD MOVA 02 LCALL WCMD MOVA 06 LCALL WCMD MOVA 0CH LCALL WCMD MOVA 38H LCALL WCMD MOVA 0C0H LCD 显示第二行 LCALL WCMD MOVA 20H LCALL WDAT LCALL WDAT MOVA 54H LCALL WDAT T MOVA 49 LCALL WDAT I MOVA 4DH LCALL WDAT M MOVA 45H LCALL WDAT E MOVA 3AH LCALL WDAT MOVA 42H 取小时 ANLA 0F0H RR A RR A RR A RR A ADDA 48 LCALL WDAT MOVA 42H ANLA 0FH ADDA 48 LCALL WDAT MOVA 0B0H LCALL WDAT NOP MOVA 41H 取分钟 ANLA 0F0H RR A RR A RR A RR A ADDA 48 LCALL WDAT MOVA 41H ANLA 0FH ADDA 48 LCALL WDAT MOVA 0B0H LCALL WDAT NOP MOVA 40H 取小时 ANLA 0F0H RR A RR A RR A RR A ADDA 48 LCALL WDAT MOVA 40H ANLA 0FH ADDA 48 LCALL WDAT RET 数据转换成十进制数存储 B2T CH MOV38H 1 JNB77H POS 温度高于零度 则转移 MOVA 2FH CPLA INCA MOV2FH A MOVA 2EH CPLA MOV2EH A MOV38H 0 POS MOVA 2FH ANLA 0FH 小数点后保留四位 MOVR1 04 MOVR0 3CH DIG MOVB 10 MULAB MOVB 16 DIVAB MOV R0 A MOVA B INCR0 DJNZR1 DIG 整数位操作 MOVA 2FH ANLA 0F0H RR A RR A RR A RR A MOV2DH A MOVA 2EH ANLA 0FH RL A RL A RL A RL A ORLA 2DH MOV2DH A 整数位存在2DH 地址中 MOVA 2DH MOVB 10 DIVAB MOV3BH B MOVB 10 DIVAB MOV3AH B MOV39H A RET LCD 写命令 WCMD LCALL YS4722U LCALL RCMD JNB01H WC AJMPWCMD 忙等待 WC CLRRS CLRRW MOVP0 A SETBLCDE CLRLCDE RET LCD 读命令 RCMD CLR01H CLR RS SETBRW MOVP0 0FFH SETBLCDE NOP MOVC P0 7 JNCRC SETB01H RC CLR LCDE RET LCD 写数据 WDAT LCALL YS4722U LCALL RCMD JNB01H WT AJMPWDAT 忙等待 WT SETBRS CLRRW MOVP0 A SETBLCDE CLRLCDE RET LCD 读数据 RDAT LCALL RCMD LCALL YS4722U JNB01H RT AJMPRDAT 忙等待 RT MOVP0 0FFH SETBRS SETBRW SETBLCDE NOP MOVA P0 CLRLCDE RET 下面是 DS1302时间控制初始化 INI TIME MOVCOMAND 8EH 命令字节为8E MOVBYCNT 1 单字节传送模式 MOVR0 XMTDAT 数据地址赋给 R0 MOVXMTDAT 00H 数据内容为0 写入允许 LCALL SEDBYT 调用写入数据子程序 NOP MOVCOMAND 0BEH MOVBYCNT 8 MOVR0 XMTDAT MOVXMTDAT 59H MOVXMTDAT 1 47H MOVXMTDAT 2 16H MOVXMTDAT 3 15H MOVXMTDAT 4 08H MOVXMTDAT 5 03H MOVXMTDAT 6 09H MOVXMTDAT 7 00H LCALL SEDBYT NOP MOVCOMAND 80H 启动时钟工作 MOVBYCNT 1 MOVR0 XMTDAT MOVXMTDAT 00H LCALL SEDBYT NOP RET 下面是 DS1302时间读取 GET TIME MOVCOMAND 0BFH MOVBYCNT 8 MOVR1 RCVDAT LCALL REVBYT NOP RET 下面是 DS1302发送数据控制 发送数据程序 名称 Send Byte 描述 发送 ByteCnt 个字节给被控器 DS1302 命令字节地址在 Command 中 所发送数据的字节数在 ByteCnt 中发送的数据在 XmtDat 缓冲区中 SEDBYT CLR RST 复位引脚 所有数据传输停止 NOP CLRSCLK 清时钟总线 SETBRST NOP MOVA COMAND 准备发送命令字节 MOVBICNT 08H 传送位数为8 SBYT0 RRCA 将最低位传送给进位位 C MOVIODAT C 位传送至数据总线 NOP SETBSCLK 时钟上升沿 发送数据有效 NOP CLRSCLK 清时钟总线 DJNZBICNT SBYT0 位传送未完毕则继续 NOP SBYT1 MOVA R0 准备发送数据 MOVBICNT 08H SBYT2 RRCA MOVIODAT C NOP SETBSCLK NOP CLR SCLK DJNZBICNT SBYT2 INCR0 DJNZBYCNT SBYT1 NOP CLRRST 逻辑操作完毕 清 RST RET 下面是 DS1302接收数据控制 接收数据程序 名称 Receive Byte 描述 从被控器 DS1302 接收 ByteCnt 个字节数据 命令字节地址在 Command 中 所接收数据的字节数在 ByteCnt 中接收的数据在 RcvDat 缓冲区中 REVBYT CLR RST NOP CLRSCLK NOP SETBRST MOVA COMAND MOVBICNT 08H RBYT0 RRCA MOVIODAT C NOP SETBSCLK NOP CLRSCLK DJNZBICNT RBYT0 NOP RBYT1 CLRA CLRC MOVBICNT 08H RBYT2 NOP MOVC IODAT RRCA SETBSCLK NOP CLRSCLK DJNZBICNT RBYT2 MOV R1 A INCR1 DJNZBYCNT RBYT1 NOP CLRRST RET 8位共阳数码管显示器字型码表 SGTB DB 54H 45H 4DH 50H 45H 52H 3AH YS4722U MOV R4 2 延时子程序 Y3 MOV R5 216 DJNZ R5 DJNZ R4 Y3 RET DELAY 1S 延时1s MOVR3 39H DL3 MOVR4 86H 外循环 DL2 MOVR5 20H DL1 NOP 内循环 NOP DJNZR5 DL1 DJNZR4 DL2 DJNZR3 DL3 RET LCD 显示初始化 INITLCD MOV CMD BYTE 30H LCALL WRITE CMD MOV CMD BYTE 30H LCALL WRITE CMD MOV CMD BYTE 38H 设定工作方式 LCALL WRITE CMD MOV CMD BYTE 0CH 显示状态设置 LCALL WRITE CMD MOV CMD BYTE 01H 清屏 LCALL WRITE CMD MOV CMD BYTE 06H 输入方式设置 LCALL WRITE CMD RET 在第一行显示内容 DISPMSG1 MOV CMD BYTE 80H 设置 DDRAM 的地址 LCALL WRITE CMD MOV R7 10H MOV R6 00H MOV DPTR TAB1 DISPMSG1 1 MOV A R6 MOVC A A DPTR MOV DAT BYTE A LCALL WRITE DAT INC R6 DJNZ R7 DISPMSG1 1 RET 在第二行显示内容 DISPMSG2 MOV CMD BYTE 0C0H 设置 DDRAM 的地址 LCALL WRITE CMD MOV R7 10H MOV R6 00H MOV DPTR TAB2 DISPMSG2 1 MOV A R6 MOVC A A DPTR MOV DAT BYTE A LCALL WRITE DAT INC R6 DJNZ R7 DISPMSG2 1 DISPMSG3 MOV CMD BYTE 0B0H 设置 DDRAM 的地址 LCALL WRITE CMD MOV R7 10H MOV R6 00H MOV DPTR TAB2 DISPMSG3 1 MOV A R6 MOVC A A DPTR MOV DAT BYTE A LCALL WRITE DAT INC R6 DJNZ R7 DISPMSG2 1 RET 要显示的内容 TAB1 DB 00H FEH 00H 00H 00H 00H 08H 08H 08H 08H 08H 08H 08H FFH 00H 00H DB 00H 7FH 01H 01H 01H 01H 01H 3FH 01H 01H 01H 01H 01H 7FH 00H 00H 正 DB 88H B0H 90H FEH 02H F1H 10H F0H 80H FCH 84H 84H 84H 84H 80H 80H DB 08H 18H 04H 7FH 20H 17H 04H 07H 00H 1FH 10H 10H 14H 08H 00H 00H 常 TAB2 DB 10H F0H 18H E8H 2CH E6H 25H 24H E4H 24H 44H 84H 04H 84H 44H 34H DB 00H 7FH 02H 3FH 22H 3FH 22H 22H 3FH 02H 02H 01H 03H 0CH 70H 20H 偏 DB 00H 3CH 64H A4H A4H 3CH E4H 24H 3CH 24H E4H 24H 22H 22H 2AH 11H DB 02H 02H 12H 32H 0AH 02H 3FH 02H 02H 02H 7FH 02H 02H 02H 02H 02H 胖 TAB3 DB 10H F0H 18H E8H 2CH E6H 25H 24H E4H 24H 44H 84H 04H 84H 44H 34H DB 00H 7FH 02H 3FH 22H 3FH 22H 22H 3FH 02H 02H 01H 03H 0CH 70H 20H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校改造装饰工程重点特殊部位处理措施
- 学校“三风”建设中常见问题及措施
- 合同编号(豫财招标采购-2026-1992)
- 展览展会筹备进度计划与保证措施
- 水电站工程质量保证体系及措施
- 与基础设施专业的施工配合措施
- 外墙保温岩棉板协议
- 农业生态循环种植养殖联合合同
- 农民合作社入股参与农业生产协议
- 负载型催化剂设计-洞察及研究
- 2021年成都中医药大学辅导员招聘考试题库及答案解析
- 液相色谱柱使用记录
- 项目检查汇报报告(52张)课件
- 直螺纹套筒现场平行检查及记录表
- 精选芭蕾舞男女演员之间的潜规则汇总
- JJG 856-2015 工作用辐射温度计检定规程-(高清现行)
- 新人教版小学美术五年级上册教学设计(全册)
- J-STD-020D[1].1中文版
- 益美高引风式冷却塔特点介绍
- 1沥青混合料生产工艺
- 相亲相爱 简谱
评论
0/150
提交评论