单片机原理综合实训指导书v2(201306)_第1页
单片机原理综合实训指导书v2(201306)_第2页
单片机原理综合实训指导书v2(201306)_第3页
单片机原理综合实训指导书v2(201306)_第4页
单片机原理综合实训指导书v2(201306)_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理综合实训单片机原理综合实训 指导书指导书 深圳信息职业技术学院软件学院嵌入式专业 2013 年 4 月 目录 实训大纲 3 实训目的 3 实训名称 3 实训要求 3 实训内容 4 实验设备 4 实训考核 4 操作过程评价 70 4 学生实训表现评价 20 5 实训报告质量评价 10 5 综合评价成绩 5 具体实验 6 基础 uVision2 使用方法 6 一 总体项目方案设计 11 1 1 项目要求 11 1 2 系统基本方案选择和论证 11 1 2 2 显示模块选择方案和论证 11 1 2 3 时钟芯片的选择方案和论证 12 1 3 电路设计最终方案决定 12 二 系统的硬件设计与实现 12 2 1 电路设计框图 12 2 2 系统硬件概述 12 2 3 主要单元电路的设计 13 2 3 1 单片机主控制模块的设计 13 2 3 2 时钟电路模块的设计 13 2 3 3 时钟芯片原理及说明 14 2 3 4 显示模块的设计 15 2 3 5 按键模块设计 24 2 3 6 闹钟模块设计 24 三 系统的软件设计 24 3 1 程序流程框图 24 3 2 子程序的设计 25 参考资料 49 实训大纲实训大纲 课程类别课程类别 专业必修课专业必修课 适用对象适用对象 1212 嵌入式专业嵌入式专业 独立实践学时 一周独立实践学时 一周 27 27 学时学时 实训目的实训目的 本实训旨在学习本实训旨在学习 单片机原理单片机原理 课程后 完成相应的整体程序设计课程后 完成相应的整体程序设计 任务 任务 1 1 通过实训 运用相关的单片机原理课程中单元电路及单功能程序 通过实训 运用相关的单片机原理课程中单元电路及单功能程序 并将其根据需要设计整合成为整机电路和整机程序 并将其根据需要设计整合成为整机电路和整机程序 2 2 通过实训 掌握单片机应用系统的硬件扩展与配置 软件设计与调通过实训 掌握单片机应用系统的硬件扩展与配置 软件设计与调 试的方法 获得整机设计能力和系统程序的调试能力 试的方法 获得整机设计能力和系统程序的调试能力 3 3 通过实训 掌握单片机程序设计的基本步骤 方法和常用技巧 通过实训 掌握单片机程序设计的基本步骤 方法和常用技巧 实训名称实训名称 实训要求实训要求 本实训要求完成一个综合实验项目 电子钟 1 具有时 分 秒等显示功能 2 具备时 分 秒校准功能 3 具备闹钟功能 4 每个小组要撰写实训报告 实验内容应包括 是实验目的 设备 原理 步骤简述 原始数 据 结果和分析以及程序清单等 实训内容实训内容 本实训以单片机原理为基础 完成一个电子钟综合实训 共计一周 27 学时 实训任务分解如下 其其 中中 序号序号实实 训训 内内 容容学时学时 上午上午下午下午其他其他 1 1 项目主程序设计6 6 程序程序 设计设计 程序程序 调试调试 2 2 时钟和显示模块设计6 6 程序程序 设计设计 程序程序 调试调试 3 3 校准和按键模块设计6 6 程序程序 设计设计 程序程序 调试调试 4 4 闹钟模块和整体调试6 6 程序程序 设计设计 程序程序 调试调试 5 5实验报告提交3 33 3 学学 时时 总总 计计2727 实验设备实验设备 1 Keil UVision 编程软件 2 XL2000 单片机试验仪 实训考核实训考核 1 院内实训的考核 考核内容由三部分组成 分别为 学生实际操作的情况 学生的实训表现 实训小组 提交报告的质量 操作过程评价 70 学生按照进度完成所分配的任务 每天实训结束时 教师根据学生的完成情况及完成 效果进行评价 这部分考核为形成性考核 以完成实训项目内容和要求为依据进行评价 占总成绩的 70 即 70 分 具体评定标准如下 按要求完成基本任务 50 分 工作记录完整 发现问题的数量达到 80 10 分 工作记录完整 能够发现所有问题 10 分 学生实训表现评价 20 该部分成绩由两部分组成 具体评定标准如下 教师考评 由教师根据学生平时学习态度 考勤情况等确定 占总成绩的 10 即 10 分 学生自评互评 实训小组根据实训的团队合作情况 实训执行情况进行互评 此 项共占学生总成绩的 10 即 10 分 评定标准与过程评价标准相同 实训报告质量评价 10 由指导教师根据实训小组提交的实训报告质量评分 此项占总成绩的 10 即 10 分 综合评价成绩 综合评价成绩由上述三部分组成 评定等级分为优秀 良好 合格 不合格 实训报告 具体实验具体实验 基础 基础 uVision2uVision2使用方法使用方法 1 1 实验目的实验目的 熟悉和掌握 8051 单片机常用的仿真编译软件 uVision2 的使用方法 软件安装 直接拷贝光盘 开发工具 keil 到 c 盘的根目录 去掉所有文件的只读属性 注意必须是 c 盘根目录 不要安装在其他目录 执行 keil uv2 uv2 exe 即可 可将文件发送到桌面快 捷方式 KEIL 软件是他的驱动软件 用户也可自行搜索下载更新版本的 KEIL 软件 2 2 实验原理实验原理 Keil C51 的操作界面如实验图 1 1 所示 下面我们用一个简单的例子来了解 Keil 的使用 图1 1 建立您的第一个项目 软件操作指南 1 点击 Project 工程 菜单 选择 New Project 新工程 在文件名中 输入您的第一个程序项目名称 假定我们用 test 保存 后的文件扩展名 为 uv2 这是 KEIL uVision2 项目文件扩展名 以后我们可以直接点击此文 件以打开先前做的项目 注意输入的时候不要输入文件的后缀名 默认即 可 为了查找方便 假定我们保存在c 盘的根目录 这时会弹出让你选择 单片机型号的对话框 我们选择 ATMEL AT89C52 注意我们实际使用的是 89s52 他们的资源基本是一致的 不必理会 图1 2 2 汇编源文件的建立 点击 FILE 文件 菜单中的 NEW 新文件 命令新建一个文 本编辑窗口 在里面输入一个程序范例如流水灯程序 然后点击 FILE 文件 菜单中的 SAVE 保存 命令保存文件 注意必须输入文件的后缀名 asm 例如保存为 C prog 001 asm 注意不要有中文目录 文件名不超过8 个字符 否则编译不通过 如 果您是第一次使用 那么我建议您直接保存在 c 盘的根目录 文件名同样取001 ASM 不要试图把他保存在桌面 我的文档等等 图1 3 3 点击Target 1 目标 1 前面的 出现 Source Group 1 源程序组 1 选中 右键点选 Add files Group Source Group 1 增加文件到源程序组 1 这时选择文 件类型为 Asm 再选中 001 asm 文件 再按Add 添加 在随后的提示框中按 确定 图1 4 4 在使用之前应必须对软件项目进行如下设置 单击 Project 工程 菜单 再在下 拉菜单中单击 options for target target 1 目标 1 属性 在下图中选择output 输 出 Create HEX file 产生 hex 文件 的选项 以便汇编后生成 HEX 代码 供编程 器使用 图1 5 5 你可以看到 Project Build 菜单或按钮栏可用了 选择它 或按F7 编译 相应的 错误和提示将在最下一栏框里显示出来 你可以根据提示进行修改程序错误 你在改正程 序中的所有错误后编译通过后 然后按下Debug Start Stop Debug Session菜单和相应的 按钮就可用了 选择它就可以开始进行软件调试了 图1 6 6 此时在C 盘的根目录就生成了 test hex 文件 有了这个hex 文件 在按图第三个红色 的 debug 或按 Ctrl F5 快捷键可以进入仿真 图1 8 进入调试状态后 Debug 菜单项中的命令可以使用了 有关编译的工具栏按 钮消失了 出现了一个用于运行和调试的工具栏 Debug 菜单上的大部份命 令都有相应的快捷按钮 图1 9 一 总体项目方案设计 1 1 项目要求 要求完成一个综合实验项目 电子钟 1 具有年 月 日 时 分 秒等显示功能 2 具备年 月 日 时 分 秒校准功能 3 具备闹钟功能 4 其他补充功能 1 2 系统基本方案选择和论证 1 2 11 2 1 单片机芯片的选择方案和论证 单片机芯片的选择方案和论证 方案一 采用 89C51 芯片作为硬件核心 采用 Flash ROM 内部具有 4KB ROM 存储空间 能于 3V 的超低压工作 而且与 MCS 51 系列单片机完全兼容 但是运用于电路设计中时由于不具备 ISP 在线编程技术 当在对 电路进行调试时 由于程序的错误修改或对程序的新增功能需要烧入程序时 对芯片的多次拔插会对 芯片造成一定的损坏 方案二 采用 AT89S52 片内 ROM 全都采用 Flash ROM 能以 3V 的超底压工作 同时也与 MCS 51 系列单片 机完全该芯片内部存储器为 8KB ROM 存储空间 同样具有 89C51 的功能 且具有在线编程可擦除技术 当在对电路进行调试时 由于程序的错误修改或对程序的新增功能需要烧入程序时 不需要对芯片多 次拔插 所以不会对芯片造成损坏 所以选择采用 AT89S52 作为主控制系统 1 2 2 显示模块选择方案和论证 方案一 采用 LED 液晶显示屏 液晶显示屏的显示功能强大 可显示大量文字 图形 显示多样 清晰可见 但 是价格昂贵 需要的接口线多 所以在此设计中不采用 LED 液晶显示屏 方案二 采用点阵式数码管显示 点阵式数码管是由八行八列的发光二极管组成 对于显示文字比较适 合 如采用在显示数字显得太浪费 且价格也相对较高 所以也不用此种作为显示 方案三 采用 LED 数码管动态扫描 LED 数码管价格适中 对于显示数字最合适 而且采用动态扫描法与单片 机连接时 占用的单片机口线少 所以采用了 LED 数码管作为显示 1 2 3 时钟芯片的选择方案和论证 方案一 直接采用单片机定时计数器提供秒信号 使用程序实现年 月 日 星期 时 分 秒计数 采 用此种方案虽然减少芯片的使用 节约成本 但是 实现的时间误差较大 所以不采用此方案 方案二 采用 DS1302 时钟芯片实现时钟 DS1302 芯片是一种高性能的时钟芯片 可自动对秒 分 时 日 周 月 年以及闰年补偿的年进行计数 而且精度高 位的 RAM 做为数据暂存区 工作电压 2 5V 5 5V 范围内 2 5V 时耗电小于 300nA 1 3 电路设计最终方案决定 综上各方案所述 对此次作品的方案选定 采用 AT89S52 作为主控制系统 DS1302 提供时钟 LED 数码管动态扫描作为显示 二 系统的硬件设计与实现 2 1 电路设计框图 图 2 1 总体框图设计 2 2 系统硬件概述 本电路是由 AT89S52 单片机为控制核心 具有在线编程功能 低功耗 能在 3V 超低压工作 时钟 电路由 DS1302 提供 它是一种高性能 低功耗 带 RAM 的实时时钟电路 它可以对年 月 日 周日 时 分 秒进行计时 具有闰年补偿功能 工作电压为 2 5V 5 5V 采用三线接口与 CPU 进行同步通 信 并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据 DS1302 内部有一个 31 8 的用于临 时性存放数据的 RAM 寄存器 可产生年 月 日 周日 时 分 秒 具有使用寿命长 精度高和低 功耗等特点 同时具有掉电自动保存功能 温度的采集由 DS18B20 构成 显示部份由 8 个数码管 使 用动态扫描显示方式对数字的显示 AT89S52 主控制模 块 DS1302 时钟模块 LED 数码管动态 扫描显示模块 键盘模块 2 3 主要单元电路的设计 2 3 1 单片机主控制模块的设计 AT89S52 单片机为 40 引脚双列直插芯片 有四个 I O 口 P0 P1 P2 P3 MCS 51 单片机共有 4 个 8 位的 I O 口 P0 P1 P2 P3 每一条 I O 线都能独立地作输出或输入 单片机的最小系统如下图所示 18 引脚和 19 引脚接时钟电路 XTAL1 接外部晶振和微调电容的一端 在 片内它是振荡器倒相放大器的输入 XTAL2 接外部晶振和微调电容的另一端 在片内它是振荡器倒相放 大器的输出 第 9 引脚为复位输入端 接上电容 电阻及开关后够上电复位电路 20 引脚为接地端 40 引 脚为电源端 如图 2 2 所示 图 2 2 主控制系统 2 3 2 时钟电路模块的设计 图 2 3 示出 DS1302 的引脚排列 其中 Vcc1 为后备电源 Vcc2 为主电源 在主电源关闭的情 况下 也能保持时钟的连续运行 DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电 当 Vcc2 大于 Vcc1 0 2V 时 Vcc2 给 DS1302 供电 当 Vcc2 小于 Vcc1 时 DS1302 由 Vcc1 供电 X1 和 X2 是振荡源 外接 32 KHz 晶振 RST 是复位 片选线 通过把 RST 输入驱动置高电平来启动所有的数据传送 RST 输入有两种功能 首先 RST 接通控制逻辑 允许地址 命令序列送入移位寄存器 其次 RST 提 供终止单字节或多字节数据的传送手段 当 RST 为高电平时 所有的数据传送被初始化 允许对 DS1302 进行操作 如果在传送过程中 RSTS 置为低电平 则会终止此次数据传送 I O 引脚变为高阻态 上电动行时 在 Vcc 大于等于 2 5V 之前 RST 必须保持低电平 中有在 SCLK 为低电平时 才能将 RST 置为高电平 I O 为串行数据输入端 双向 SCLK 始终是输入端 图 2 3 DS1302 的引脚图 2 3 3 时钟芯片原理及说明 1 时钟芯片 DS1302 的工作原理 DS1302 在每次进行读 写程序前都必须初始化 先把 SCLK 端置 0 接着把 RST 端置 1 最后才给予 SCLK 脉冲 读 写时序如下图 4 所示 图 5 为 DS1302 的控制字 此控制字的位 7 必须置 1 若为 0 则不能把对 DS1302 进行读写数据 对于位 6 若对程序进行读 写时 RAM 1 对时间进行读 写时 CK 0 位 1 至位 5 指操作单元的地址 位 0 是读 写操作位 进行读操作时 该位为 1 该位为 0 则表示进行的是写操作 控制字节总是从最低位开始输入 输出的 表 6 为 DS1302 的日历 时间寄 存器内容 CH 是时钟暂停标志位 当该位为 1 时 时钟振荡器停止 DS1302 处于低功耗状态 当 该位为 0 时 时钟开始运行 WP 是写保护位 在任何的对时钟和 RAM 的写操作之前 WP 必须为 0 当 WP 为 1 时 写保护位防止对 任一寄存器的写操作 2 DS1302 的控制字节 DS1302 的控制字如表 1 所示 控制字节的高有效位 位 7 必须是逻辑 1 如果它为 0 则不能把数 据写入 DS1302 中 位 6 如果 0 则表示存取日历时钟数据 为 1 表示存取 RAM 数据 位 5 至位 1 指 示操作单元的地址 最低有效位 位 0 如为 0 表示要进行写操作 为 1 表示进行读操作 控制字节 总是从最低位开始输出 RAM RD 1 A4 A3 A2 A1 A0 CK WR 表 1 DS1302 的控制字格式 3 数据输入输出 I O 在控制指令字输入后的下一个 SCLK 时钟的上升沿时 数据被写入 DS1302 数据输入从低位即位 0 开始 同样 在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据 读出数 据时从低位 0 位到高位 7 如下图 4 所示 图 2 4 DS1302 读 写时序图 4 DS1302 的寄存器 DS1302 有 12 个寄存器 其中有 7 个寄存器与日历 时钟相关 存放的数据位为 BCD 码形式 其 日历 时间寄存器及其控制字见表 2 表 2 5 DS1302 的日历 时间寄存器 此外 DS1302 还有年份寄存器 控制寄存器 充电寄存器 时钟突发寄存器及与 RAM 相关的寄 存器等 时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容 DS1302 与 RAM 相 关的寄存器分为两类 一类是单个 RAM 单元 共 31 个 每个单元组态为一个 8 位的字节 其命令控 制字为 C0H FDH 其中奇数为读操作 偶数为写操作 另一类为突发方式下的 RAM 寄存器 此方 式下可一次性读写所有的 RAM 的 31 个字节 命令控制字为 FEH 写 FFH 读 2 3 4 显示模块的设计 采用 XL2000 实验仪器完成显示部分程序设计 由于实验设备只有 8 位数码管 不能同时显示年 月日时分秒 需要通过按键进行选择 相关显示程序参考 数码管动态扫描显示数码管动态扫描显示 原理图 8 个数码管它的数据线并联接到 JP5 位控制由 8 个 PNP 型三级管驱动后由 JP8 引出 相关原理 相关原理 数码管是怎样来显示 1 2 3 4 呢 数码管实际上是由 7 个发光管组成 8 字形构成的 加上小数点就是 8 个 我 们分别把他命名为 A B C D E F G H 搞懂了这个原理 我们如果要显示一个数字 2 那么 A B G E D 这 5 个段的发光管亮就可以了 也就是把 B E H 小数点 不亮 其余全亮 根据硬件的接法我们编出以下程序 当然在此之前 还必须指定哪一个数码管亮 这 里我们就指定最后一个 P2 7 LOOP CLR P2 7 选中最后的数码管 SETB P0 7 B 段不亮 SETB P0 5 小数点不亮 SETB P0 1 C 段不亮 CLR P0 2 其他都亮 CLR P0 3 CLR P0 4 CLR P0 6 CLR P0 0 JMP LOOP 跳转到开始重新进行 END 把这个程序编译后写入单片机 可以看到数码管的最后一位显示了一个数字 2 也许你会说 显示 1 个 2 字就要 10 多行程序 太麻烦了 显示数字 2 则是 C F H 小数点 不亮 同时由于接法为共阳接法 那么为 0 低电平 是亮 为 1 高电平 是灭 从高往低排列 p0 7 p0 0 写成二进制为 把他转化为 16 进制则为 A2H 我们可以根据硬件 的接线把数码管显示数字编制成一个表格 以后直接调用就行了 有了这个表格上面显示一个 2 的程序则可简化为 LOOP CLR P2 7 选中左边的数码管 MOV P0 0A2H 送数字 2 的代码到 P0 口 JMP LOOP 跳转到开始重新进行 END 原理图中把所有数码管的 8 个笔划段 a h 同名端连在一起 而每一个显示器的公共极 COM 是各自独立地受 I O 线 控制 CPU 向字段输出口送出字形码时 所有显示器接收到相同的字形码 由 8 个 PNP 的三极管 来控制这 8 位哪一位 工作 例如上面的例子中我们选中的是 P2 7 就是最后的一位亮了 同样的如果要第一位亮 只需要把程序 CLR P2 7 改 为 CLR P2 0 即可 在这里就有了一个矛盾 所有数码管的 8 个笔划段 a h 同名端连在一起 那么在一个屏幕上如何显示 0 1 2 3 4 5 这样不同的数字呢 的确 在这样的接法中 同一个瞬间所有的数码管显示都是相同的 不能显示不同的数字 在单片 机里 首先显示一个数 然后关掉 然后显示第二个数 又关掉 那么将看到连续的数字显示 轮流点亮扫描过程中 每位 显示器的点亮时间是极为短暂的 约 1ms 由于人的视觉暂留现象及发光二极管的余辉效应 尽管实际上各位显示器 并非同时点亮 但只要扫描的速度足够快 给人的印象就是一组稳定的显示数据 不会有闪烁感 例如数码管显示这么 8 个数 在单片机中实际的工作流程如下 先打开 P2 0 送 0 然后关掉 P2 0 打开 P2 1 送 1 再关 掉 P2 1 打开 P2 2 送 2 依次向下 由于速度足够快 那么我们将连续的看到这 8 个数 程序运行照片 程序运行照片 1 接 8 位数码管的数据线 将数码管部份的数据口 JP5 接到 CPU 部份的 P0 口 JP51 2 接 8 位数码管的显示位线 将数码管部份的显示位口 JP8 接到 CPU 部份的 P2 口 JP52 程序流程图 程序流程图 汇编语言参考程序 汇编语言参考程序 ORG 0000H AJMP MAIN ORG 0080H MAIN CLR P2 0 选中第一个数码管 MOV P0 28H 显示 0 LCALL DELAY 调用延时 MOV P0 0FFH 关显示 SETB P2 0 CLR P2 1 选中第二个数码管 MOV P0 7EH 显示 1 LCALL DELAY MOV P0 0FFH SETB P2 1 CLR P2 2 选中第三个数码管 MOV P0 0A2H 显示 2 LCALL DELAY MOV P0 0FFH SETB P2 2 CLR P2 3 选中第四个数码管 MOV P0 62H 显示 3 LCALL DELAY MOV P0 0FFH SETB P2 3 CLR P2 4 选中第五个数码管 MOV P0 74H 显示 4 LCALL DELAY MOV P0 0FFH SETB P2 4 CLR P2 5 选中第六个数码管 MOV P0 61H 显示 5 LCALL DELAY MOV P0 0FFH SETB P2 5 CLR P2 6 选中第七个数码管 MOV P0 21H 显示 6 LCALL DELAY MOV P0 0FFH SETB P2 6 CLR P2 7 选中第八个数码管 MOV P0 7AH 显示 7 LCALL DELAY SETB P2 7 MOV P0 0FFH AJMP MAIN 重新开始 DELAY 延时子程序 MOV R7 2 D1 MOV R6 25 D2 DJNZ R6 D2 DJNZ R7 D1 RET END 2 3 5 按键模块设计 按键接到 P1 口下半部分 用一条 4PIN 数据排线 把按键部份的 JP37 接到 CPU 部份的 P1 口 JP44 的 p1 4 p1 7 按键模块参考程序见 xlisp 程序说明 2 3 6 闹钟模块设计 用 1 条 1PIN 线把喇叭部分的 JP16 接单片机 P3 3 参考程序见 xlisp 程序说明小喇叭程序 三 系统的软件设计 3 1 程序流程框图 图 3 1 主程序流程图 开始 初始化 DS1302 读写日期 时间 分离日期 时间 显示值 显示子程序 日期 时间修改子程序 返回 定时闹铃子程序 图 3 2 时间调整流程图 3 2 子程序的设计 DS1302DS1302 的结构及工作原理的结构及工作原理 DS1302 是美国 DALLAS 公司推出的一种高性能 低功耗 带 RAM 的实时时钟电路 它可以对年 月 日 周日 时 分 秒进行计时 具有闰年补偿功能 工作电压为 2 5V 5 5V 采用三线接口与 CPU 进行同步通信 并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据 DS1302 内部有一个 31 8 的用于临时性存放数据的 RAM 寄存器 DS1302 是 DS1202 的升级产品 与 DS1202 兼容 但增加 了主电源 后背电源双电源引脚 同时提供了对后背电源进行涓细电流充电的能力 2 12 1 引脚功能及结构引脚功能及结构 DS1302 的引脚排列 其中 Vcc1 为后备电源 VCC2 为主电源 在主电源关闭的情况下 也能保持时 钟的连续运行 DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电 当 Vcc2 大于 Vcc1 0 2V 时 Vcc2 给 DS1302 供电 当 Vcc2 小于 Vcc1 时 DS1302 由 Vcc1 供电 X1 和 X2 是振荡源 外接 32 768kHz 晶振 RST 是复位 片选线 通过把 RST 输入驱动置高电平来启动所有的数据传送 RST 输入有两种功能 首 先 RST 接通控制逻辑 允许地址 命令序列送入移位寄存器 其次 RST 提供终止单字节或多字节数 据的传送手段 当 RST 为高电平时 所有的数据传送被初始化 允许对 DS1302 进行操作 如果在传送 过程中 RST 置为低电平 则会终止此次数据传送 I O 引脚变为高阻态 上电运行时 在 Vcc 2 5V 之前 RST 必须保持低电平 只有在 SCLK 为低电平时 才能将 RST 置为高电平 I O 为串行数据输入 输出端 双向 后面有详细说明 SCLK 始终是输入端 相关原理 相关原理 程序运行照片 程序运行照片 接线方法 1 按键接到 P1 口下半部分 用一条 4PIN 数据排线 把按键部份的 JP37 接到 CPU 部份的 P1 口 JP44 的 p1 4 p1 7 2 接 8 位数码管的数据线 将数码管部份的数据口 JP5 接到 CPU 部份的 P0 口 JP51 3 接 8 位数码管的显示位线 将数码管部份的显示位口 JP8 接到 CPU 部份的 P2 口 JP52 4 用 1 条 1PIN 线把喇叭部分的 JP16 接单片机 P3 3 5 用 1 条 1PIN 线把继电器部分的 JP18 接单片机 P3 5 6 用一条 4PIN 数据排线 把 DS1302 部份的 JP83 接到 CPU 部份的 P1 口 JP44 的 p1 0 p1 3 汇编语言参考程序 汇编语言参考程序 8 位数码管显示 P0 为段码口 P2 为位码口 时钟芯片 DS1302 接线方法 八位数码管用两条 8pin 排线分别连 p0 p2 口 24c02 用一条 2pin 线连接 P3 6 P3 7 喇叭用一条 1pin 线连接 P3 3 端口按键 JP37 用一条 4PIN 线连接 P1 4 1 5 1 6 1 7 DS1302 的 JP83 用一条 4PIN 线连接 P1 0 1 1 1 2 1 3 DS1302 端口位定义 IO DATA BIT P1 1 数据传送总线 SCLK BIT P1 0 时钟控制总线 RST BIT P1 2 复位总线 K1 EQU P1 4 独立键 K2 EQU P1 5 K3 EQU P1 6 K4 EQU P1 7 BEEP EQU P3 3 蜂鸣器 RELAY EQU P3 5 继电器 T CONU EQU 22H 中断计数 TIME L EQU 23H 定时初值 TIME H EQU 24H TIME DATA EQU 50H 显示时间单元首地址 DATE DATA EQU 60H 显示日期单元首地址 DS DATA EQU 58H 显示定时时间单元首地址 ORG 0000H AJMP MAIN ORG 000BH AJMP INT T0 ORG 0080H MAIN MOV TMOD 01H T0 方式 1 MOV TIME L 00H 50MS 定时值 MOV TIME H 4CH MOV T CONU 00H 中断次数 MOV IE 82H EA 1 ET0 1 MOV A 00H MOV R0 40H 从 40H 单元开始 MOV R1 40H 清 64 个单元 M CLEAR MOV R0 A INC R0 DJNZ R1 M CLEAR MOV 7FH 0AH 送熄灭符 SETB BEEP LCALL TIME DELAY 调显示延时 LCALL PROSET DS1302 初始化 MAIN1 LCALL GET TIME 从 DS1302 读数据程序 LCALL CHULI 实时时间数据处理 MOV R0 TIME DATA 显示时 分 秒 LCALL DISP MOV R0 TIME DATA LCALL TIME DISPLAY LCALL SET KEY 键功能程序 LCALL COMP 实时时间与定时时间比较 JB K1 MAIN1 CALL BEEP BL MAIN2 LCALL CHULI 日期数据处理 MOV R0 DATE DATA LCALL DISP 显示年 月 日 MOV R0 DATE DATA LCALL TIME DISPLAY JB K1 MAIN2 CALL BEEP BL MAIN3 LCALL DS CHULI 定时时间数据处理 MOV R0 DS DATA LCALL DS SP 显示定时时间 MOV R0 DS DATA LCALL DS DISPLAY JB K1 MAIN3 CALL BEEP BL AJMP MAIN1 中断服务子程序 300MS 对闪动标记取反一次 INT T0 PUSH ACC PUSH PSW MOV TL0 TIME L MOV TH0 TIME H INC T CONU MOV A T CONU CJNE A 06H INT END MOV T CONU 00H CPL 0AH INT END POP PSW POP ACC RETI DS1302 初始化子程序 R0 数据 R1 地址 PROSET CLR RST DS1302 复位 CLR SCLK NOP NOP SETB RST MOV R1 80H 写秒寄存器 MOV R0 00H 启动振荡器 LCALL WRITE MOV R1 82H 写分寄存器 MOV R0 58H LCALL WRITE MOV R1 84H 写时寄存器 MOV R0 80H LCALL WRITE MOV R1 90H 写充电寄存器 MOV R0 0ABH LCALL WRITE RET 读时间 日期数据子程序 存放单元 40H 46H GET TIME MOV R1 81H 读秒 LCALL READ MOV 40H R0 MOV R1 83H 读分 LCALL READ MOV 41H R0 MOV R1 85H 读时 LCALL READ MOV 42H R0 MOV R1 87H 读出日期 LCALL READ MOV 43H R0 MOV R1 89H 读出月份 LCALL READ MOV 44H R0 MOV R1 8BH 读出星期 LCALL READ MOV 46H R0 MOV R1 8DH 读出年 LCALL READ MOV 45H R0 RET 写 DS1302 子程序 WRITE CLR SCLK NOP NOP SETB RST NOP MOV A R1 MOV R2 08H WRI 01 RRC A 传输地址到 DS1302 NOP NOP CLR SCLK NOP NOP MOV IO DATA C NOP NOP SETB SCLK NOP NOP DJNZ R2 WRI 01 CLR SCLK NOP NOP MOV A R0 MOV R2 08H WRI 02 RRC A 传输数据到 DS1302 NOP CLR SCLK NOP NOP MOV IO DATA C NOP NOP SETB SCLK NOP NOP DJNZ R2 WRI 02 CLR SCLK NOP NOP CLR RST NOP NOP RET 读 DS1302 子程序 READ CLR SCLK NOP NOP SETB RST NOP NOP MOV A R1 MOV R2 08H READ 01 RRC A NOP 先传输地址到 DS1302 MOV IO DATA C NOP NOP SETB SCLK NOP NOP CLR SCLK NOP NOP DJNZ R2 READ 01 NOP NOP SETB IO DATA CLR A CLR C MOV R2 08H READ 02 CLR SCLK NOP NOP MOV C IO DATA NOP NOP RRC A 再从 DS1302 接收数据 NOP NOP SETB SCLK NOP NOP DJNZ R2 READ 02 MOV R0 A CLR RST RET 实时时间 日期数据处理子程序 CHULI MOV A 40H 处理秒数据 ANL A 0FH MOV 50H A MOV 70H A MOV A 40H ANL A B SWAP A MOV 51H A MOV 71H A MOV A 41H 处理分数据 ANL A 0FH MOV 52H A MOV 72H A MOV A 41H ANL A B SWAP A MOV 53H A MOV 73H A MOV A 42H 处理时数据 ANL A 0FH MOV 54H A MOV 74H A MOV A 42H ANL A B SWAP A MOV 55H A MOV 75H A MOV A 43H 处理日数据 ANL A 0FH MOV 60H A MOV 76H A MOV A 43H ANL A B SWAP A MOV 61H A MOV 77H A MOV A 44H 处理月数据 ANL A 0FH MOV 62H A MOV 78H A MOV A 44H ANL A B SWAP A MOV 63H A MOV 79H A MOV A 45H 处理年数据 ANL A 0FH MOV 64H A MOV 7AH A MOV A 45H ANL A B SWAP A MOV 65H A MOV 7BH A MOV A 46H 处理周数据 MOV 66H A MOV 7CH A RET 实时时间 日期查表取数子程序 DISP MOV R0 TIME DATA MOV R3 06H DISP1 MOV A R0 MOV DPTR TAB NU MOVC A A DPTR MOV R0 A INC R0 DJNZ R3 DISP1 RET 时间 日期显示子程序 TIME DISPLAY MOV R0 TIME DATA 取得显示单元首地址 MOV R1 07FH 从第一个数码管开始 MOV R2 08H 共 8 个数码管 DISLP MOV P0 R0 获得当前单元数据 MOV A R1 MOV P2 A 数码显示 JB ACC 5 DISLP1 第三位数码管显示 MOV P0 0f7H JMP DISLP3 DISLP1 JB ACC 2 DISLP2 第六位数码管显示 MOV P0 0f7H JMP DISLP3 DISLP2 INC R0 DISLP3 MOV A R1 为下一个数准备 RR A 下一个单元 MOV R1 A 保存 LCALL DELAY 为了保证数码管亮度 延时 DJNZ R2 DISLP 重复显示 直到全部数据刷新过 RET 返回 DELAY MOV R4 0AH L15 MOV R5 64H L16 DJNZ R5 L16 DJNZ R4 L15 RET SET KEY SETB K1 增加键 SETB K2 减少键 SETB K3 选择键 SETB K4 定时设定功能键 NOP JB K4 KEY01 LCALL BEEP BL JMP DS KEY 进入定时值设定子程序 KEY01 JB K2 KEY02 LCALL BEEP BL JMP SET TIME 进入时间设定子程序 KEY02 JB K3 KEY03 LCALL BEEP BL CPL 20H 0 止闹标记取反 KEY03 RET DS KEY CALL DS DELAY JNB K4 LCALL DSSET CALL DS DELAY RET 实时时间设定子程序 K1 为加键 K2 为减键 K3 为选择键 SET TIME MOV R1 8EH 写保护寄存器 MOV R0 00H 允许写入 LCALL WRITE MOV R1 80H 写秒寄存器 MOV R0 80H 停止振荡器工作 LCALL WRITE SETB TR0 K001 CALL TIME DELAY 校时 JNB K3 K001 K3 为位移键 K010 CALL CHULI JNB 0AH KH01 MOV 54H 7FH 送入熄灭符 MOV 55H 7FH JMP KH02 KH01 MOV 54H 74H 送实时值 MOV 55H 75H 送实时值 KH02 MOV R0 TIME DATA CALL DISP MOV R0 TIME DATA CALL TIME DISPLAY JNB K1 K011A JNB K2 K011B JNB K3 K002 JMP K010 K011A MOV A 42H ADD A 01H DA A MOV 42H A XRL A 24H JNZ K012A MOV 42H 00H K012A MOV R1 84H 写时寄存器 MOV R0 42H LCALL WRITE CALL TIME DELAY JMP K010 K011B MOV A 42H XRL A 00H JZ K012B SETB C 求补运算 CLR A ADDC A 99H 加 99 SUBB A 01H 减去减数 ADD A 42H 加被减数 DA A 十进制调整 MOV 42H A XRL A 00H JNZ K012C K012B MOV 42H 23H K012C MOV R1 84H 写时寄存器 MOV R0 42H LCALL WRITE CALL TIME DELAY JMP K010 K002 CALL TIME DELAY 校分 JNB K3 K002 K3 为位移键 K020 CALL CHULI JNB 0AH KM01 MOV 52H 7FH 送入熄灭符 MOV 53H 7FH JMP KM02 KM01 MOV 52H 72H 送实时值 MOV 53H 73H 送实时值 KM02 MOV R0 TIME DATA CALL DISP MOV R0 TIME DATA CALL TIME DISPLAY JNB K1 K021A JNB K2 K021B JNB K3 K003 JMP K020 K021A MOV A 41H ADD A 01H DA A MOV 41H A XRL A 60H JNZ K022A MOV 41H 00H K022A MOV R1 82H 写分寄存器 MOV R0 41H LCALL WRITE CALL TIME DELAY JMP K020 K021B MOV A 41H XRL A 00H JZ K022B SETB C 求补运算 CLR A ADDC A 99H 加 99 SUBB A 01H 减去减数 ADD A 41H 加被减数 DA A 十进制调整 MOV 41H A XRL A 00H JNZ K022C K022B MOV 41H 59H K022C MOV R1 82H 写分寄存器 MOV R0 41H LCALL WRITE CALL TIME DELAY JMP K020 K003 CALL DATE DELAY 校日 JNB K3 K003 K3 为位移键 K030 CALL CHULI JNB 0AH KR01 MOV 60H 7FH 送入熄灭符 MOV 61H 7FH JMP KR02 KR01 MOV 60H 76H 送实时值 MOV 61H 77H 送实时值 KR02 MOV R0 DATE DATA CALL DISP MOV R0 DATE DATA CALL TIME DISPLAY JNB K1 K031A JNB K2 K031B JNB K3 K004 JMP K030 K031A MOV A 43H ADD A 01H DA A MOV 43H A XRL A 32H JNZ K032A MOV 43H 00H K032A MOV R1 86H 写日寄存器 MOV R0 43H LCALL WRITE CALL DATE DELAY JMP K030 K031B MOV A 43H XRL A 00H JZ K032B SETB C 求补运算 CLR A ADDC A 99H 加 99 SUBB A 01H 减去减数 ADD A 43H 加被减数 DA A 十进制调整 MOV 43H A XRL A 00H JNZ K032C K032B MOV 43H 31H K032C MOV R1 86H 写日寄存器 MOV R0 43H LCALL WRITE CALL DATE DELAY JMP K030 K004 CALL DATE DELAY 校月 JNB K3 K004 K3 为位移键 K040 CALL CHULI JNB 0AH KC01 MOV 62H 7FH 送入熄灭符 MOV 63H 7FH JMP KC02 KC01 MOV 62H 78H 送实时值 MOV 63H 79H 送实时值 KC02 MOV R0 DATE DATA CALL DISP MOV R0 DATE DATA CALL TIME DISPLAY JNB K1 K041A JNB K2 K041B JNB K3 K005 JMP K040 K041A MOV A 44H ADD A 01H DA A MOV 44H A XRL A 13H JNZ K042A MOV 44H 00H K042A MOV R1 88H 写月寄存器 MOV R0 44H LCALL WRITE CALL DATE DELAY JMP K040 K041B MOV A 44H XRL A 00H JZ K042B SETB C 求补运算 CLR A ADDC A 99H 加 99 SUBB A 01H 减去减数 ADD A 44H 加被减数 DA A 十进制调整 MOV 44H A XRL A 00H JNZ K042C K042B MOV 44H 12H K042C MOV R1 88H 写月寄存器 MOV R0 44H LCALL WRITE CALL DATE DELAY JMP K040 K005 CALL DATE DELAY 校年 JNB K3 K005 K3 为位移键 K050 CALL CHULI JNB 0AH KY01 MOV 64H 7FH 送入熄灭符 MOV 65H 7FH JMP KY02 KY01 MOV 64H 7AH 送实时值 MOV 65H 7BH 送实时值 KY02 MOV R0 DATE DATA CALL DISP MOV R0 DATE DATA CALL TIME DISPLAY JNB K1 K051A JNB K2 K051B JNB K3 K008 JMP K050 K051A MOV A 45H ADD A 01H DA A MOV 45H A XRL A 9AH JNZ K052A MOV 45H 00H K052A MOV R1 8CH 写年寄存器 MOV R0 45H LCALL WRITE CALL DATE DELAY JMP K050 K051B MOV A 45H XRL A 00H JZ K052B SETB C 求补运算 CLR A ADDC A 99H 加 99 SUBB A 01H 减去减数 ADD A 45

温馨提示

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

评论

0/150

提交评论