




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 基于单片机实时钟设计毕业设计基于单片机实时钟设计毕业设计 目录 一 引言 10 二 系统原理与器件选择11 2 1 设计要求设计要求 11 2 2 设计背景条件设计背景条件 11 2 3 系统基本方案的选择系统基本方案的选择 11 2 3 1 电路设计框图电路设计框图11 2 3 2 单片机芯片的选择方案单片机芯片的选择方案12 2 3 3 显示模块的选择方案显示模块的选择方案12 2 3 4 时钟芯片的选择方案时钟芯片的选择方案12 2 4 系统设计的具体实现系统设计的具体实现 12 2 4 1 单片机主控制模块的设计单片机主控制模块的设计13 2 4 2 时钟电路模块的设计时钟电路模块的设计13 2 4 3 显示模块的设计显示模块的设计14 2 4 4 DS1302 电路原理及说明电路原理及说明 15 2 4 5 动态扫描芯片动态扫描芯片 ZLG7290 的工作原理的工作原理19 三 软件设计 22 3 1 程序流程框图程序流程框图 22 3 23 2 ZLG7290ZLG7290 如何与单片机进行通信如何与单片机进行通信 22 3 33 3 DS1302DS1302 如何与单片机进行通信如何与单片机进行通信 29 四 系统调试 32 4 14 1 硬件测试硬件测试 32 4 24 2 软件测试软件测试 32 4 34 3 测试结果分析与结论测试结果分析与结论 32 2 4 3 1 测试结果分析测试结果分析32 4 3 2 测试结论测试结论33 五 总结 35 六 致谢词36 七 参考文献 37 附录一 系统电路图 附录二 系统程序清单 3 一 引言 20 世纪末 电子技术获得了飞速的发展 在其推动下 现代电子产品几乎 渗透了社会的各个领域 有力地推动了社会生产力的发展和社会信息化程度的 提高 同时也使现代电子产品性能进一步提高 产品更新换代的节奏也越来越 快 时间对人们来说总是那么宝贵 工作的忙碌性和繁杂性容易使人忘记当前 的时间 忘记了要做的事情 当事情不是很重要的时候 这种遗忘无伤大雅 但是 一旦重要事情 一时的耽误可能酿成大祸 电子实时钟是采用数字电路实现对时 分 秒数字显示的计时装置 广泛 用于个人家庭 车站 码头办公室等公共场所 成为人们日常生活中不可少的 必需品 由于数字集成电路的发展和石英晶体振荡器的广泛应用 使得数字钟 的精度 远远超过老式钟表 钟表的数字化给人们生产生活带来了极大的方便 而且大大地扩展了钟表原先的报时功能 目前 单片机正朝着高性能和多品种方向发展趋势将是进一步向着 CMOS 化 低功耗 小体积 大容量 高性能 低价格和外围电路内装化等几个方面 发展 下面是单片机的主要发展趋势 单片机应用的重要意义还在于 它从根 本上改变了传统的控制系统设计思想和设计方法 从前必须由模拟电路或数字 电路实现的大部分功能 现在已能用单片机通过软件方法来实现了 这种软件 代替硬件的控制技术也称为微控制技术 是传统控制技术的一次革命 单片机模块中最常见的是电子实时钟 电子实时钟是一种用数字电路技术 实现时 分 秒计时的装置 与机械式时钟相比具有更高的准确性和直观性 且无机械装置 具有更长的使用寿命 因此得到了广泛的使用 诸如定时自动 报警 按时自动打铃 时间程序自动控制 定时广播 自动起闭路灯 定时开 关烘箱 通断动力设备 甚至各种定时电气的自动启用等 所有这些 都是以 钟表数字化为基础的 因此 研究电子实时钟及扩大其应用 有着非常现实的 意义 4 二 系统原理与器件选择 2 1 设计要求 1 画出电路设计原理图 2 综合运用 AT89S52 开发设计具有一定功能的单片机控制系统 进行软 硬件设计及调试 3 电子钟的格式为 时 分 秒 具有一定的计时功能 4 通过按键进行控制 具有闹钟 整点报时功能 2 2 设计背景条件 1 巩固 加深和扩大单片机应用的知识面 提高综合及灵活运用所学知识 2 培养针对课题需要 选择和查阅有关手册及文献资料的自学能力 提高 组成系统 编程 调试的动手能力 3 熟悉单片机系统开发 研制的过程 软硬件设计的方法 内容及步骤 4 熟悉时钟芯片 DS1302 动态扫描芯片 ZLG7290 与七段码显示译码器的 使用 2 3 系统基本方案的选择 2 3 1 电路设计框图 AT89S52 单片机 DS1302 时钟模块 LED 数码管动态 扫描显示模块 按键控制模块 5 2 3 2 单片机芯片的选择方案 采用 AT89S52 片内 ROM 全都采用 Flash ROM 能以 3V 的超低压工作 同时也与 MCS 51 系列单片机完全兼容 该芯片内部存储器为 8KB ROM 存储 空间 同样具有 89C51 的功能 且具有在线编程可擦除技术 当在对电路进行 调试时 由于程序的错误修改或对程序的新增功能需要烧入程序时 不需要对 芯片多次拔插 所以不会对芯片造成损坏 所以选择采用 AT89S52 作为主控制 系统 2 3 3 显示模块的选择方案 采用 LED 数码管动态扫描 LED 数码管价格适中 对于显示数字最合适 而 且采用动态扫描法与单片机连接时 占用的单片机口线少 所以采用了 LED 数 码管作为显示 I2C 串行接口 提供键盘中断信号 方便与处理器接口 可驱动 8 位共阴数码管或 64 只独立 LED 和 64 个按键 可控扫描位数 可控任一数码 管闪烁 8 个功能键 可检测任一键的连击次数 无需外接元件即直接驱 LED 可扩展驱动电流和驱动电压 2 3 4 时钟芯片的选择方案 采用 DS1302 时钟芯片实现时钟 DS1302 芯片是一种高性能的时钟芯片 可自动对秒 分 时 日 周 月 年以及闰年补偿的年进行计数 而且精度 高 位的 RAM 做为数据暂存区 工作电压 2 5V 5 5V 范围内 2 5V 时耗电小 于 300nA 2 4 系统设计的具体实现 本电路是由AT89S52单片机为控制核心 具有在线编程功能 低功耗 能 在3V超低压工作 时钟电路由DS1302提供 它是一种高性能 低功耗 带RAM 的实时时钟电路 它可以对年 月 日 周日 时 分 秒进行计时 具有闰 年补偿功能 工作电压为2 5V 5 5V 采用三线接口与CPU进行同步通信 并可 6 采用突发方式一次传送多个字节的时钟信号或RAM数据 DS1302内部有一个 31 8的用于临时性存放数据的RAM寄存器 可产生年 月 日 周日 时 分 秒 具有使用寿命长 精度高和低功耗等特点 同时具有掉电自动保存功能 在每个显示刷新周 ZLG7290 按照扫描位数寄存器 ScanNum 指定的显示位 数N 把显示缓存DpRam0 DpRamN的内容按先后循序送入LED驱动器实现动 态显示 减少N值可提高每位显示扫描时间的占空比 以提高LED亮度 显示 缓存中的内容不受影响 2 4 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 引脚为 电源端 如图 1 所示 7 V C C C 1 2 0PF C 2 2 0PF Y 1 1 1 05 9 2M H Z C 3 1 0u F K 0 R E SE T V C C R 1 1 K V C C A T 89 S 52 R 30 2 00 P10 T 1 P11 T 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8 P33 IN T 1 1 3 P32 IN T 0 1 2 P35 T 1 1 5 P34 T 0 1 4 E A V P 3 1 X 1 1 9 X 2 1 8 R E SE T 9 P37 R D 1 7 P36 W R 1 6 P00 3 9 P01 3 8 P02 3 7 P03 3 6 P04 3 5 P05 3 4 P06 3 3 P07 3 2 P20 2 1 P21 2 2 P22 2 3 P23 2 4 P24 2 5 P25 2 6 P26 2 7 P27 2 8 R X D P3 0 1 0 T X D P3 1 1 1 A L E P 3 0 PSE N 2 9 VCC 40 GND 20 M O S I M ISO S CK T 1 T 0 L S 图 1 最小系统原理 2 4 2 时钟电路模块的设计 图 2 示出 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 始终是输入端 8 R 13 1 0K R 14 1 0K R 15 1 0K V C C Y 2 3 2 76 8 KH Z V C C A T 89 S 52 1 V C C 2 2 X 1 3 X 2 4 G N D 8 V C C 1 7 S CL K 6 I O 5 R S T L S S PE A K E R P10 T 1 P11 T 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8 P33 IN T 1 1 3 P32 IN T 0 1 2 P35 T 1 1 5 P34 T 0 1 4 E A V P 3 1 X 1 1 9 X 2 1 8 R E SE T 9 P37 R D 1 7 P36 W R 1 6 P00 3 9 P01 3 8 P02 3 7 P03 3 6 P04 3 5 P05 3 4 P06 3 3 P07 3 2 P20 2 1 P21 2 2 P22 2 3 P23 2 4 P24 2 5 P25 2 6 P26 2 7 P27 2 8 R X D P3 0 1 0 T X D P3 1 1 1 A L E P 3 0 PSE N 2 9 VCC 40 GND 20 M O S I M ISO S CK T 1 T 0 L S 图 2 DS1302 的引脚图 2 4 3 显示模块的设计 图 3示出ZLG7290的引脚排列 Dig7 Dig0为输入 输出端 由LED显示位 驱动及键盘扫描线 SegH SegA为输入 输出端 由LED显示段驱动及键盘扫描 线 SDA为输入 输出端 是I2C总线接口数据 地址线 SCL为输入端 是I2C总 线接口时钟线 INT是中断输出端 低电平有效 RES是复位输入端 低电平有 效 OSC1 OSC2是连接晶体以产生内部时钟 11引脚为接地端 16引脚为电源 端 9 a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS2 AMBERCA a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS3 AMBERCA a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS4 AMBERCA a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS5 AMBERCA a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS6 AMBERCA a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS0 AMBERCA a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS1 AMBERCA a bf c g d e VCC 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 DS7 AMBERCA C31 22p C32 22p Y5 8MHZ R35 220 R36 220 R37 220 R39 220 R40 220 R38 220 R41 220 R42220 SEGH SEGG SEGF SEGE SEGD SEGC SEGB SEGA SEGH SEGG SEGF SEGE SEGD SEGC SEGB SEGA hd7290 scl hd7290 sda hd7290 int HD7290 RST VCC Dig7 13 Dig6 12 Dig5 21 Dig4 22 Dig3 3 Dig2 4 Dig1 5 Dig0 6 SDA 20 SCL 19 INT 14 GND 11 SegA 23 SegB 24 SegC 1 SegD 2 SegE 7 SegF 8 SegG 9 SegH 10 VCC 16 OSC2 18 OSC1 17 RES 15 ZLG7290 图 3 ZLG7290 的引脚图 2 4 4 DS1302 电路原理及说明 1 时钟芯片 DS1302 的工作原理 串行时钟芯片主要由寄存器 控制寄存器 振荡器 实时时钟以及 RAM 组成 为了对任何数据传送进行初始化 需要将 RST 置为高电平且将 8 位地 址和命令信息装入移位寄存器 数据在 SCLK 的上升沿串行输入 前 8 位指定 访问地址 命令字装入移位寄存器后 在之后的时钟周期 读操作时输出数据 写操作时输入数据 时钟脉冲的个数在单字节方式下为 8 加 8 8 位地址加 8 位数据 在多字节方式下为 8 加最多可达 248 的数据 2 DS1302 的控制命令字节与寄存器 a 控制命令字节 控制命令字节结构如下 RAM RD 1 CK A4 A3 A2 A1 A0 WR 表 1 控制字节的最高有效位 位 7 必须是逻辑 1 如果它为 0 则不能把数据 写入 DS1302 中 位 6 如果为 0 则表示存取日历时钟数据 为 1 表示存取 10 RAM 数据 位 5 至位 1 指示操作单元的地址 最低有效位 位 0 为 0 表示要 进行写操作 为 1 表示进行读操作 控制字节总是从最低位开始输出 b 日历 时钟寄存器 DS1302 共有 12 个寄存器 其中有 7 个寄存器与日历 时钟有关 存放的 数据位为 BCD 码形式 其日历 时间寄存器及控制字如以下表所示 寄存器的 选择根据命令字而定 其中日历 时钟各个寄存器与控制字对照表如表 2 所示 76543210 寄存器名称 1RAW CKA4A3A2A1A0RW W 秒寄存器 1000000 分寄存器 1000001 小时寄存器 1000010 日寄存器 1000011 月寄存器 1000100 星期寄存器 1000101 年寄存器 1000110 写保护寄存器 1000111 慢充电寄存器 1001000 时间突发寄存器 1011111 表 2 最后一位 RD W 为 0 表示要进行写操作 为 1 表示进行读操作 表 3 为主 要寄存器命令字 取值范围以及各位内容对照表 11 命令字各位内容 寄存器名 写 操 作 读 操 作取值范围 7654 3 0 秒寄存器 80H81H 00 59 CH10SECSEC 分寄存器 82H83H 00 59 010MINMIN 时寄存器 84H85H 01 12 或 00 23 12 240 10 A PHRHR 日寄存器 86H87H 01 28 29 30 31 0010DATEDATE 月寄存器 88H89H 01 12 00010MMONTH 周寄存器 8AH8BH 01 07 0000DAY 年寄存器 8CH8DH 01 99 10YEARYEAR 写保护寄存 器 8EH8FH WP0000 慢充电寄存 器 90H91H TCSTCSTCSTCSDSDSRSRS 时钟突发寄 存器 BEHBFH 表 3 其中有些特殊位需要特别指出 CH 时钟暂停位 当此位设置为 1 时 振荡器停止 DS1302 处于低功率 的备份方式 当此位变为 0 时 时钟开始启动 12 24 12 或 24 小时方式选择位 为 1 时选择 12 小时方式 在 12 小时方式下 位 5 是 AM PM 选择位 此位为 1 时表示 PM 在 24 小时方式下 位 5 是第 2 12 个小时位 20 23 时 WP 写保护位 写保护寄存器的开始 7 位 0 6 置为 0 在读操作时总是读 出 0 在对时钟或 RAM 进行写操作之前 位 7 WP 必须为 0 当它为高电平 时 写保护位防止对任何其他寄存器进行写操作 TCS 控制慢充电的选择 为了防止偶然因素始 DS1302 工作 只有 1010 模式 才能使慢速充电工作 DS 二极管选择位 如果 DS 为 01 那么选择一个二极管 如果 DS 为 10 则 选择两个二极管 如果 DS 为 11 或 00 那么充电器被禁止 与 TS 无关 RS 选择连接在 Vcc2 与 Vcc1 之间的电阻 如果 RS 为 00 那么充电器被禁止 与 TS 无关 选择的电阻如表 4 所示 RS 位电阻器典型值 00 无无 01R1 2k 欧 10R2 4k 欧 11R3 8k 欧 表 4 c RAM 寄存器 DS1302 与 RAM 相关的寄存器分为两类 一类是单个 RAM 单元 共 31 个 每个单元组态为一个 8 位的字节 其命令控制字位 C0H FDH 其中奇数为读操 作 偶数为写操作 另一类为突发方式下的 RAM 寄存器 此方式下可一次性 读写所有的 RAM 的 31 字节 命令控制字为 FEH 写 FFH 读 RAM 区 寄存器与控制字对照表如表 5 所示 76543210 寄存器名称 1RAM CKA4A3A2A1A0RD W RAM01100000 RAM11100001 RAM301111110 13 RAM 突发 1111111 表 5 3 复位和时钟控制 通过将 RST 输入驱动置高电平来启动所有的数据传送 RST 输入有两 种功能 首先 RST 接通控制逻辑 允许地址 命令序列送入移位寄存器 其 次 RST 提供了终止单字节或多字节数据的传送手段 当 RST 为高电平时 所有的数据传送被初始化 允许对 DS1302 进行操作 如果在传送过程中置 RST 为低电平 则会终止此次数据传送 并且 I O 引脚变为高阻态 上电运行 时 在 Vcc 大于等于 2 5V 之前 RST 必须保持低电平 只有在 SCLK 为低电 平时 才能将 RST 置为高电平 4 数据输入输出 I O 在控制指令字输入后的下一个 SCLK 时钟的上升沿时 数据被写入 DS1302 数据输入从低位即位 0 开始 同样 在紧跟 8 位的控制指令字后的下 一个 SCLK 脉冲的下降沿读出 DS1302 的数据 读出数据时从低位 0 位到高位 7 如下图 4 所示 图 4 DS1302 读 写时序图 2 4 5 动态扫描芯片 ZLG7290 的工作原理 1 键盘部分 ZLG7290可采样64个按键或传感器 可检测每个按键的连击次数 其基本 功能如下 14 a 键盘去抖动处理 当键被按下和放开时 可能会出现电平状态反复变化 称作键盘抖动 若 不作处理会引起按键盘命令错误 所以要进行去抖动处理 以读取稳定的键盘 状态为准 b 双键互锁处理 当有两个以上按键被同时按下时 ZLG7290只采样优先级高的按键 优先 顺序为S1 S2 S64 如同时按下S2和S18采样到S2 c 连击键处理 当某个按键按下时 输出一次键值后 如果该按键还未释放 该键值连续 有效 就像连续压按该键一样 这种功能称为连击 连击次数计数器 RepeatCnt 可区别出单击 某些功能不允许连击 如开 关 或连击 判断 连击次数可以检测被按时间 以防止某些功能误操作 如连续按5秒经入参数设 置状态 d 功能键处理 功能键能实现2个以上按键同时按下来扩展按键数目或实现特殊功能 如PC机 的 Shift Ctrl Alt 键 2 显示部分 ZLG7290提供两种控制方式 寄存器映象控制和命令解释控制 如上述对 显示部分的控制 寄存器映象控制是指直接访问底层寄存器 实现基本控制功 能 这些寄存器须字节操作 命令解释控制是指通过解释命令缓冲区 CmdBuf0 CmdBuf1 中的指令 间 接访问底层寄存器实现扩展控制功能 如实现寄存器的位操作 对显示缓存循 环 移位 对操作数译码等操作 3 寄存器详解 系统状态部分 系统寄存器 SystemReg 地址00H 复位值11110000B 系统寄存器保 存 ZLG7290系统状态 并可对系统运行状态进行配置 其功能分位描述如下 KeyAvi Systemeg 0 置1时表示有效的按键动作 普通键的单击 连击 和功 15 能键状态变化 INT引脚信号有效 变为低电平 清0表示无按键动作 INT引脚信号无效 变为高阻态 有效的按键动作消失后或读Key后 KeyAvi位自动清0 键盘部分 a 键值寄存器 Key 地址 01H 复位值00H Key表示被压按键的键值 当Key 0时 表示没有键被压按 b 连击次数计数器 RepeatCnt 地址02H 复位值00H RepeatCnt 0时 表 示单击键 RepeatCnt大于0时 表示键的连击次数 用于区别出单击键或连击 键 判断连击次数可以检测被按时间 c 功能键寄存器 FunctionKey 地址03H 复位值0FFH FunctionKey对应 位的值 0表示对应功能键被压按 FunctionKey 7 FunctionKey 0对应S64 S57 命令接口部分 命令缓冲区 CmdBuf0 CmdBuf1 地址07H 08H 复位值00H 00H 用于传输指令 显示部分 a 闪烁控制寄存器 FlashOnOff 地址0CH 复位值0111B 0111B 高4位表 示闪烁时亮的时间 低4位表示闪烁时灭的时间 改变其值同时也改变了闪烁 频率 也能改变亮和灭的占空比 FlashOnOff的1个单位相当于150 250ms 亮 和灭的时间范围为 1 16 0000B相当1个时间单位 所有象素的闪烁频率和 占空比相同 b 扫描位数寄存器 ScanNum 地址0DH 复位值7 用于控制最大的扫描 显示位数 有效范围为 0 7 对应的显示位数为 1 8 减少扫描位数可提 高每位显示扫描时间的占空比 以提高LED亮度 不扫描显示的显示缓存寄存 器则保持不变 如ScanNum 3时 只显示DpRam0 DpRam3的内容 c 显示缓存寄存器 DpRam0 DpRam7 地址10H 17H 复位值00H 00H 缓存中一位置1表示该像素亮 DpRam7 DpRam0的显示内容对应Dig7 Dig0引 脚 16 三 软件设计 3 1 程序流程框图 3 2 ZLG7290 如何与单片机进行通信 通过 I2C 总线进行通信 在数据传输期间 时钟 SCL 为高电平时 数 据 SDA 必须保持不变 在 SCL 为高电平时 数据 SDA 从高电平跳变到 低电平 为开始数据传输 START 的条件 开始数据传输条件后所有的命令 有效 SCL 为高电平时 数据 SDA 从低电平跳变到高电平 为停止数据传 输 STOP 的条件 停止数据传输条件后所有的操作结束 开始数据传输 START 后 停止数据传输 STOP 前 SCL 高电平期间 SDA 上为有效数据 字节写入时 每写完一个字节 送一个应答信号 ACK 直至 STOP 读出时 每读完一个字节 送一位应答信号 ACK 但 STOP 前一位结束时不送 ACK 信 17 号 对不带 I2C 接口的单片机用软件模拟 I2C 时序使用 I2C 器件 起动总线函数 void Start I2c SDA 1 发送起始条件的数据信号 Nop SCL 1 Nop 起始条件建立时间大于 4 7us 延时 Nop Nop Nop Nop SDA 0 发送起始信号 Nop 起始条件锁定时间大于 4 s Nop Nop Nop Nop SCL 0 钳住 I2C 总线 准备发送或接收数据 Nop Nop 结束总线函数 void Stop I2c SDA 0 发送结束条件的数据信号 Nop 发送结束条件的时钟信号 SCL 1 结束条件建立时间大于 4 s Nop 18 Nop Nop Nop Nop SDA 1 发送 I2C 总线结束信号 Nop Nop Nop Nop 字节数据传送函数 void SendByte uchar c uchar BitCnt for BitCnt 0 BitCnt 8 BitCnt 要传送的数据长度为 8 位 if c BitCnt 判断发送位 else SDA 0 Nop SCL 1 置时钟线为高 通知被控器开始接收数据位 Nop Nop 保证时钟高电平周期大于 4 s Nop Nop Nop SCL 0 Nop Nop 19 SDA 1 8 位发送完后释放数据线 准备接收应答位 Nop Nop SCL 1 Nop Nop Nop if SDA 1 ack 0 else ack 1 判断是否接收到应答信号 SCL 0 Nop Nop 字节数据传送函数 uchar RcvByte uchar retc uchar BitCnt retc 0 SDA 1 置数据线为输入方式 for BitCnt 0 BitCnt 8 BitCnt Nop SCL 0 置时钟线为低 准备接收数据位 Nop Nop 时钟低电平周期大于 4 7 s Nop Nop Nop 20 SCL 1 置时钟线为高使数据线上数据有效 Nop Nop retc retc 1 if SDA 1 retc retc 1 读数据位 接收的数据位放入 retc 中 Nop Nop SCL 0 Nop Nop return retc 应答子函数 void Ack I2c bit a if a 0 SDA 0 在此发出应答或非应答信号 else SDA 1 Nop Nop Nop SCL 1 Nop Nop 时钟低电平周期大于 4 s Nop Nop Nop SCL 0 清时钟线 钳住 I2C 总线以便继续接收 Nop 21 Nop 向无子地址器件发送字节数据函数 bit ISendByte uchar sla uchar c Start I2c 启动总线 SendByte sla 发送器件地址 if ack 0 return 0 SendByte c 发送数据 if ack 0 return 0 Stop I2c 结束总线 return 1 向有子地址器件发送多字节数据函数 bit ISendStr uchar sla uchar suba uchar s uchar no uchar i Start I2c 启动总线 SendByte sla 发送器件地址 if ack 0 return 0 SendByte suba 发送器件子地址 if ack 0 return 0 for i 0 i no i SendByte s 发送数据 if ack 0 return 0 s Stop I2c 结束总线 return 1 22 向无子地址器件读字节数据函数 bit IRcvByte uchar sla uchar c Start I2c 启动总线 SendByte sla 1 发送器件地址 if ack 0 return 0 c RcvByte 读取数据 Ack I2c 1 发送非就答位 Stop I2c 结束总线 return 1 向有子地址器件读取多字节数据函数 bit IRcvStr uchar sla uchar suba uchar s uchar no uchar i Start I2c 启动总线 SendByte sla 发送器件地址 if ack 0 return 0 SendByte suba 发送器件子地址 if ack 0 return 0 Start I2c SendByte sla 1 if ack 0 return 0 for i 0 i no 1 i s RcvByte 发送数据 Ack I2c 0 发送就答位 s 23 s RcvByte Ack I2c 1 发送非应位 Stop I2c 结束总线 return 1 3 3 DS1302 如何与单片机进行通信 通过 SPI 总线进行通信的 SPI 总线系统是一种同步串行外设接口 该接 口一般使用 4 条线 串行时钟线 SCK 主机输入 从机输出数据线 MISO 主 机输出 从机输入数据线 MOSI 和低电平有效的从机选择线 SS 有的 SPI 接口芯 片带有中断信号线 INT 有的 SPI 接口芯片没有主机输出 从机输入数据线 MOSI 对于不带 SPI 串行总线接口的单片机 可以使用软件来模拟 SPI 的操作 包括串行时钟 数据输入和数据输出 发送数据 void SPISendData unchar uiData unchar i CS 0 DelayUS 50 for i 0 i 8 i SCK 0 DelayUS 50 if uiData else SI 0 DelayUS 50 24 SCK 1 uiData 1 DelayUS 50 读取数据 unchar SPIRcvByte unchar i uint dat 0 CS 0 for i 0 i 9 i DelayUS 50 if SO 1 dat dat 0 x01 else dat dat dat dat 1 SCK 0 return unsigned char dat 25 读寄存器子程序 unchar Read unchar addr unchar M CS 1 DelayUS 50 SPISendData 0 x03 向 spi 总线写入读命令使其进入读状态 spi 的读指令 为 0 x03 SPISendData addr 向 spi 总线写入要读数据寄存器的首地址 M SPIRcvByte CS 1 return M 写寄存器子程序 void Write unchar addr unchar numb unchar buf unchar i M CS 1 DelayUS 50 SPISendData 0 x02 向 spi 总线写入写命令使其进入写状态 spi 的读指 令为 0 x02 SPISendData addr 向 spi 总线写入要写数据寄存器的首地址 for i 0 i numb i M buf SPISendData M buf DelayUS 50 26 CS 1 27 四 系统调试 4 1 硬件测试 电子实时钟的电路系统较大 对于焊接方面更是不可轻视 庞大的电路系 统中只要出于一处的错误 则会对检测造成很大的不便 而且电路的交线较多 对于各种锋利的引脚要注意处理 否则会刺破导线 则会对电路造成短路现象 在此电子实时钟的设计调试中遇到了很多的问题 回想这些问题只要认真 多思考都是可以避免的 以下为主要的问题 1 LED 数码管的断码错乱 原因出于没有认真看清 a b c 等引脚信 息 解决 用万用表进行检测 依次检测是哪段亮了 即可解决出现的断码或 乱码 2 对电子实时钟修改时间时 有时 LED 数码管被屏蔽掉 造成不亮现 象 解决 根据测试 发现电路的驱动能力不足 最后在 DS1302 时钟芯片的 CS SCLK RET 端接入 3 3K 的上拉电阻后 电路的驱动能力才能满足 即可 解决不亮现象 4 2 软件测试 电子实时钟功能很多 所以对于它的程序也较为复杂 所以在编写程序和调 试时出现了相对较多的问题 最后经过多次的模块子程序的修改 一步一步的 完成 最终解决了软件 在软件的调试过程中主要遇到的问题如下 烧入程序后 LED 数码管显示闪动 而且亮度不均匀 解决 对调用的延时进行逐渐修改 可以解决显示闪动问题 28 4 3 测试结果分析与结论 4 3 1 测试结果分析 1 在测试中遇到发光二极管 LED 数码管为不显示时 首先使用万用表 对电路进行测试 观察是否存在漏焊 虚焊 或者元件损坏 2 LED 数码管显示不正常 还有亮度不够 首先使用万用表对电路进 行测试 观察电路是否存在短路现象 查看烧写的程序是否正确无误 对程序进 行认真修改 再进行查看数码管的位选段选是否正确 4 3 2 测试结论 经过多次的反复测试与分析 可以对电路的原理及功能更加熟悉 同时提高 了设计能力与及时对电路的分析能力 同时在软件的编程方面得到更到的提高 对编程能力得到加强 同时对所学的知识得到很大的提高与巩固 29 五 总结 在整个设计过程中 自主学习 学到了许多没学到的知识 较好的完成了 作品 虽然没达到预期的目的 在最初的设计中 发挥 三个臭皮匠 顶个诸 葛亮 的作用 相互学习 相互讨论 研究 如果时间再宽松几天也许能达到 预期效果 在电路焊接时虽然没什么大问题 但从中也知道了焊接在整个作品 中的重要性 电路工程量大 不能心急 一个个慢慢来不能急于求成 反而达 到事半功倍的效果 对电路的设计 布局要先有一个好的构思 才显得电路板 美观 大方 程序编写中 由于思路不清晰 开始时遇到了很多的问题 经过 静下心来思考 和同组员的讨论 理清了思路 反而得心应手 在此次设计中 知道了做凡事要有一颗平常的心 不要想着走捷径 一步一脚印 也练就了我 们的耐心 做什么事都在有耐心 30 六 致谢词 感谢论文评阅组和答辩组的老师们 多谢你们这段时间的辛勤工作以及对本 论文的批评指导 谢谢 31 七 参考文献 1 赵亮 单片机 C 语言 人民邮电出版社 2003 2 彭为 单片机典型系统设计 电子工业出版社 2006 3 窦振中 基于单片机的嵌入式系统工程设计 中国电力出版社 2008 4 马忠梅 单片机的C语言应用程序设计 北京航空航天大学出版社 2007 32 附录一 系统电路图 V C C C 1 20PF C 2 20PF Y 1 11 0592M H Z C 3 10uF K 0 R ESET V C C R 1 1K K 4 K 3 K 2 K 1 1 2 J1 C O N 2 R 10 1K LED V C C R 12 100 Q 1 9014 P14 R 13 10K R 14 10K R 15 10K V C C Y 2 32 768KH Z V C C a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 2 A M B ERC A a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 3 A M B ERC A a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 4 A M B ERC A a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 5 A M B ERC A a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 6 A M B ERC A a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 0 A M B ERC A a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 1 A M B ERC A a bf c g d e V C C 1 2 3 4 5 6 7 a b c d e f g 8 dp dp 9 D S 7 A M B ERC A A T89S 52 C 31 22p C 32 22p Y 5 8M H Z R 35 220 R 36 220 R 37 220 R 39 220 R 40 220 R 38 220 R 41 220 R 42220 R 26 3 3k R 30 200 LS1 S PEA K ER V C C 1 V C C 2 2 X 1 3 X 2 4 G N D 8 V C C 1 7 S CLK 6 I O 5 R S T LS S PEA K ER S EG H S EG G S EG F S EG E S EG D S EG C S EG B S EG A S EG H S EG G S EG F S EG E S EG D S EG C S EG B S EG A M O S I M ISO S CK R 27 3 3k hd7290 scl hd7290 sda hd7290 scl hd7290 sda hd7290 int hd7290 int H D 7290 R S T V C C H D 7290 R S T V C C 2 4 6 8 10 1 S CK 3 M ISO 5 R ST 7 9 M O S I IS P C O N 10 D ig7 13 D ig6 12 D ig5 21 D ig4 22 D ig3 3 D ig2 4 D ig1 5 D ig0 6 S D A 20 S CL 19 IN T 14 G N D 11 S egA 23 S egB 24 S egC 1 S egD 2 S egE 7 S egF 8 S egG 9 S egH 10 V C C 16 O S C2 18 O S C1 17 R ES 15 ZLG 7290 P10 T 1 P11 T 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8 P33 IN T1 13 P32 IN T0 12 P35 T1 15 P34 T0 14 EA V P 31 X 1 19 X 2 18 R ESET 9 P37 R D 17 P36 W R 16 P00 39 P01 38 P02 37 P03 36 P04 35 P05 34 P06 33 P07 32 P20 21 P21 22 P22 23 P23 24 P24 25 P25 26 P26 27 P27 28 R X D P30 10 TX D P31 11 A LE P 30 PSEN 29 VCC 40 GND 20 M O S I M ISO S CK T1 T0 LS 默认模式为显示正常情况下的时间 按 K1 显示调整时间 K2 调时 K3 调分 K4 调秒 再按 K1 显示显示闹钟设置 并且结束上个操作 再按 K1 设置闹钟时间 K2 调时 K3 调分 K4 调秒 33 再按 K1 闹钟设置结束 K2 闹钟开 K3 闹钟关 附录二 系统程序清单 include REG52 h include include include VIIC C51 h include ZLG7290 h include ds1302 h sbit ZLG7290 INT P3 3 ZLG7290 中断引脚 sbit ZLG7290 RST P2 5 ZLG7290 复位引脚 sbit Speaker P1 4 蜂鸣器 sbit k1 P1 0 sbit k2 P1 1 sbit k3 P1 2 sbit k4 P1 3 uchar inittime 7 0 5 15 21 5 5 9 初始化后设置为 09 年 5 月 21 日星期 4 15 点 05 分 0 秒 uchar disp buf 8 0 0 0 0 0 0 0 0 显示缓冲区 uchar curr buf 6 0 0 0 0 0 0 现在时间显示缓冲区 uchar alarm buf 6 0 0 0 0 0 0 闹钟时间显示缓冲区 uchar TEST 3 12 13 14 闹钟时间显示缓冲区 uchar sec min hou 正常时间显示 时分秒 uchar alarm min uchar alarm hou 闹钟时分秒 uchar alarm sec uchar alarm flag 闹钟开关标志 uchar key1 0 key2 0 key3 0 key4 0 34 uchar k1 d 0 模式转换 unsigned char display unsigned char sd disp buf 0 disp buf 0 disp buf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年供用水信息化建设合同(GF-1999-0501)建设协议
- 2025年城市污水处理合同污水处理工艺改进协议
- 房地产中介服务协议范本解读
- 企业保密协议范文与执行指南
- 竞业限制协议实施细则及常见问题解答
- 地基SAR区域形变信息提取技术:原理、方法与实践
- 职工周转房住宿协议书9篇
- 油气管道并购策略-洞察及研究
- 智能路灯运维服务模式探讨-洞察及研究
- 神经形态计算在能源管理中的应用-洞察及研究
- 福利彩票数字化转型总结
- 护理心理学自我意识
- 餐饮企业税务管理制度
- 《中央管理企业负责人薪酬制度改革方案》
- 个人贷款管理办法(2024年第3号)
- 小学语文课程与教第二章:小学语文课程教材
- 苏教版一年级上册科学素材期末复习知识点总结
- 废铅酸电池中回收高纯度金属铅和α-PbO新工艺及其电化学性能研究
- 露天停车场施工方案
- 山东省青岛第三十九中学2023-2024学年九年级上学期月考数学试卷(10月份) (月考)
- GB/T 43063-2023集成电路CMOS图像传感器测试方法
评论
0/150
提交评论