基于单片机的简易灯光时钟毕业设计.doc_第1页
基于单片机的简易灯光时钟毕业设计.doc_第2页
基于单片机的简易灯光时钟毕业设计.doc_第3页
基于单片机的简易灯光时钟毕业设计.doc_第4页
基于单片机的简易灯光时钟毕业设计.doc_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

宜宾学院本科毕业设计 论文 0 基于单片机的简易灯光时钟毕业设计基于单片机的简易灯光时钟毕业设计 目录目录 摘要摘要 I I ABSTRACTABSTRACT IIII 第一章第一章 绪论绪论 1 1 1 1 目的和意义 1 1 2 本系统实现的主要功能 1 第二章第二章 总体方案论证与设计总体方案论证与设计 2 2 2 1 主控模块的选型和论证 2 2 2 显示模块的选型和论证 2 2 3 时钟芯片的选型和论证 2 2 4 温度检测模块的选型和论证 3 2 5 整点报时模块的选型和论证 3 2 6 电源模块 3 2 7 系统整体设计概述 3 第三章第三章 系统硬件电路设计系统硬件电路设计 5 5 3 1 主控模块 5 3 1 1 单片机的最小系统设计 5 3 2 LCD 液晶显示器简介 6 3 2 1 液晶原理介绍 6 3 2 2 液晶模块简介 6 3 2 3 液晶显示部分与 STC89C52 的接口 6 3 3 键盘模块设计 7 3 4 蜂鸣器模块设计 8 3 5 时钟模块的设计 8 3 6 温度检测模块设计 10 3 6 1 温度传感器工作原理 10 3 6 2 DS18B20 硬件电路设计 11 3 7 语音模块设计 11 第四章第四章 系统软件设计系统软件设计 1212 4 1 系统软件总体设计 12 4 2 程序设计原理 16 5 5 系统调试系统调试 1818 5 1 硬件调试 18 5 2 软件调试 18 宜宾学院本科毕业设计 论文 1 参考文献参考文献 2020 致谢致谢 2121 附录附录 2222 系统整体原理图系统整体原理图 2222 系统系统 PCBPCB 图图 2222 元件清单元件清单 2424 系统源程序系统源程序 2525 宜宾学院本科毕业设计 论文 2 第一章 绪论 1 1 目的和意义 现代社会已经迈上了信息化的步伐 微电子技术的发展也越来越快 单片 机的运用也日渐广泛 无论是通信业的学生 老师或者是研发人员 对于单片 机的运用均青睐有加 因此单片机已成为研发人员必须掌握的能力之一 而且 单片机也会发展成为一个高薪行业 而时钟作为电子类的一个小设计 不仅深受人们的喜爱 也是单片机实验 中一个非常常见的题目 由于单片机给人有很大的发挥空间 是以会对制作人 以高要求对待 并且在掌握设计的同时程序要以简洁为主 功能上要能满足人 们需求 显示界面要大胆创新 标新立异 LCD 显示的数字时钟清晰直观的显 示准确时间 而且精度很是高 并且有夜视功能 还扩展出多种与人方便功能 本设计中的简易灯光时钟既是一个时间控制系统 又包含温度检测系统 既能准确无误的显示出正确的高精度的时间又能检测当前的温度 本文提出了以 STC51 系列单片机为核心 采用 DS1302 作为电子时钟的核 心芯片的设计方案 与温度传感器 DS18B20 LED 显示 时钟芯片 DS1302 按键等模块组成硬件的电子电路系统 显示采用 LCD 以实现显示年 月 日 时 分钟 秒 星期 温度 设计过程中使用 Keilc51 软件 采用 C 语言编程 此外 还要从多方面保障系统的稳定性 提高系统的性能指标 本设计可以对时间进行实时的校准 读取时间方便 能直观显示实时时间 功能方面体现多样话 简单明了的电路 低廉的成本都是该设计的优点 满足 未来电子设计的发展要求 市场前景好 1 2 本系统实现的主要功能 本系统设计制作一个基于单片机的简易灯光时钟 能实现以下几种功能 1 键盘扫描 设计按键扫描程序下载到单片机 每个按键赋予一个功能 单片机通过扫描程序检测用户按键 确定后实现功能 2 通过单片机的 ds1302 的数据采集 并实时显示年 月 日 时 分 秒 和星期在液晶屏上 并且可以设置时间 系统不供电的情况时钟芯片依然 可以由后备纽扣电池供电 使其掉电时间保存 3 用户可以设定闹钟时间 当时间到了之后 系统自动驱动蜂鸣器发响 4 系统附带有整点报时功能 以及任何时候通过按键报时功能 5 系统还带有测温功能 单片机可以实时读取 DS18B20 的温度数据并在 液晶上显示 宜宾学院本科毕业设计 论文 3 第二章 总体方案论证与设计 本系统可以由主控 显示 时钟 温度检测 电源等模块组成 以下是讨 论这几个模块的选型和论证 2 1 主控模块的选型和论证 方案一 采用 MSP430F149 MSP430F169 系列单片机 该单片机是 TI 公司 1996 年 开始推向市场的一种 16 位超低功耗的混合信号处理器 其内部集成了很多模拟 电路 数字电路和微处理器 提供 12 位 ADC 具有采样 保持 自动扫描 有 2 个 16 位计数器等强大的功能 但芯片价格昂贵 不适合一般的设计和开发 方案二 采用 52 系列的单片机 该单片机具有可靠性高 价格成本低 解密难 高 性能的特点 32 个 IO 口 且 STC 系列的单片机可以在线编程 调试 因此选用方案二中的 52 系列单片机作为主控芯片 2 2 显示模块的选型和论证 方案一 用点阵式数码管显示 它是由发光二极管八行和八列显示文本 更适合用 于显示文字 如进行数字显示使用就太浪费了 而且价格比较高 所以不用此 种作为显示 方案二 使用 LED 数码管动态扫描 LED 数码管虽然价格适中 最适合数字显示 采用动态扫描的方法与单片机连接 单片机口线占用得少 但是由于数码管动 态扫描需要借助 74LS164 移位寄存器 74LS164 在调试的时候 电路方面常出 故障 所以不采用 LED 数码管作为显示 方案三 选用 LCD 液晶显示屏 它可以清晰可见的显示文字 图像 功能很是强大 关于本设计的要求 我们使用一个 LCD1602 即能满足要求 成本低 虽然接口 线有点多 但是调试会很方便 所以本设计中方案三中的 LCD1602 液显示屏作为显示模块 2 3 时钟芯片的选型和论证 方案一 用程序控制单片机实现时间计数 采取该方案虽然能够缩小时钟芯片的使 用量 节省成本开支 但是 误差会非常大 方案二 采用 DS1302 时钟芯片实现时钟 DS1302 是美国 DALLAS 公司推出的一 种性能比较高 性价比高 功耗较低 带 RAM 的实时时钟电路 它可以对年 宜宾学院本科毕业设计 论文 4 月 日 时钟 分钟 秒以及星期进行计时 还能进行闰年补偿 工作电压为 2 5V 5 5V DS1302 里面含有一个 8 31 的 RAM 存储器 用于临时存放数据 DS1302 主要特点是采用串行数据传输 具有可编程充电和掉电保护功能 采用 普通 32 768KHz 晶振作为标准时钟 因此本设计中采用方案二中的 DS1302 作为时钟模块 2 4 温度检测模块的选型和论证 方案一 AD590 感温电流源的输出电流与绝对温度成比例 电源电压在 4 V 30 V 范围内 AD590 可充当一个高阻抗 调节系数为 1 A K 为恒流调节器 通过激 光调整的片内薄膜电阻 用于校准装置 使该器件在 25 C 时有 298 2 A 的输 出电流 由于该芯片输出为模拟量还同时需要 AD 转换器对其进行采集 因此不 适用于本设计 方案二 DS18B20 数字温度传感器耐磨耐碰 体积小 主要根据应用场合的不同而 外观不同 DS18B20 用途广泛 如电缆沟测温 机房测温 弹药库测温 农业 大棚测温 高炉水循环测温 锅炉测温 洁净室测温等场合 使用场合广 价 格低 实用性强 因此本设计采用方案二中的 DS18B20 芯片进行温度采集 2 5 整点报时模块的选型和论证 整点报时模块集成的语音芯片 NY3P035 NY3P035 是一款具有 PWM 输出 的 OTP 语音标准芯片 该芯片内部集成了 0 9 以及一些常用单位的录音 使用 时只要根据录音存放的位置依次读出就能播报出当前的重量和价格 2 6 电源模块 方案一 选用以下两块芯片 LM337 和 LM317 自制一个可调的电源模块 LM317 和 LM337 分别是三端可调式输出正电压稳压器和三端可调式输出负电压稳压器 通过这 2 块芯片 我们可以很容易的得到正负 5V 正负 12V 和正 3V 电压 但 由于本设计需求各模块体积小 而自制电源体积较大 故不采用此方案 方案二 采用 USB 接口供电 既能够下载程序 也能供电 一举两得 故采用此方 案 2 7 系统整体设计概述 宜宾学院本科毕业设计 论文 5 语音芯片扬声器 蜂鸣器模块 主控模块 单片机 液晶显示模块 LCD1602 温度测量模块 DS18B20 时钟模块 DS1302 按键模块 图 2 7 系统结构框图 本系统是以 STC89C52 单片机为核心 首先要对系统进行初始化 然后单 片机对键盘 DS18B20 等模块进行扫描 实现对键盘的响应 实时显示分钟 秒等 对 1602 液晶显示 闹钟 温度测量等功能 其中 单片机起到控制和协 调各功能模块的工作 系统的结构框图见图 2 7 宜宾学院本科毕业设计 论文 6 第三章 系统硬件电路设计 3 1 主控模块 单片机在全部设计中起到了统领全局 承前启后的作用 在该设计中单片 机需要完成的任务主要有对键盘扫描 对 DS18B20 进行及时的检测 驱动蜂鸣 器 驱动液晶显示需要显示的内容 所以 在本设计中我们选用 52 系列的单片 机作为系统的总控制模块 如图 3 1 所示为 STC89C52 单片机的结构框图 时钟电路 ROM EPROM Flash 4KB RAM128B SFR 21个 定时个 计数器2 CPU 总线控制 中断系统 5个中断源 2个优先级 串行口 全双工1个 4个并行口 XTAL2XTAL1 RST EA ALE PSEN P0P1P2P3 Vss Vcc 图 3 1 STC89C52 单片机结构框图 3 1 1 单片机的最小系统设计 宜宾学院本科毕业设计 论文 7 P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 MOSI 6 P1 6 MISO 7 P1 7 SCK 8 RESET 9 P3 0 10 P3 1 11 P3 2 12 P3 3 13 P3 4 14 P3 5 15 P3 6 16 P3 7 17 XTAL2 18 XTAL1 19 VSS 20 P2 0 21 P2 1 22 P2 2 23 P2 3 24 P2 4 25 P2 5 26 P2 6 27 P2 7 28 PSEN 29 ALE 30 EA 31 P0 7 32 P0 6 33 P0 5 34 P0 4 35 P0 3 36 P0 2 37 P0 1 38 P0 0 39 VCC 40 U1 供供供 5V 12 Y2 12MHZ 30pFC3 30pFC4 1 2 3 4 5 6 7 8 9 P110K供供 5V S1 SW PB 10K R3 10uF C2 5V 图 3 1 1 单片机最小系统电路图 图 3 1 1 所示的电路图是单片机在本设计中的最小系统 时钟电路选用 12M 的晶振 作用是为单片机提供一个时钟基准 其执行一条指令需要一个机 械周期 单片机的复位电路是让单片机的状态回到刚上电的状态 因为 P0 口是 一个漏极准双向的 I O 口 所以需要上拉电阻才能正常工作 3 2 LCD 液晶显示器简介 由于本设计中要求显示界面显示一些参数 因此这里选用了 LCD1602 作为 界面显示 可以把一些相关的参数进行显示 3 2 1 液晶原理介绍 显示部分选用 LCD1602 字符型液晶 辅以必要的外接电路组成显示模块 单片机控制带字符的 LCD1602 查找其字符库 从中选出要显示的字符 设置光 标 将之前查找到的字符在此对应即可 3 2 2 液晶模块简介 LCD1602 液晶模块的引脚图如图 3 2 2 所示 图 3 2 2 LCD1602 引脚图 宜宾学院本科毕业设计 论文 8 液晶寄存器选择控制如表 1 表 1 寄存器选择控制 RSR W操作说明 00写入指令寄存器 清除屏幕内容显示等 01读位地址计数器 DB0 DB6 和 busy flag DB7 10写入数据寄存器 显示各字型等 11从数据寄存器读取数据 3 2 3 液晶显示部分与 STC89C52 的接口 如图 3 2 3 所示 用 STC89C52 的 P0 口作为数据线 用 P1 2 P1 1 P1 0 分别作为 LCD 的 EN R W RS 其中 EN 作为片选信号 在出现下降沿的时 候触发 RS 是寄存器选择信号 R W 是读写信号 在整个显示模块中 我们 主要设计步骤如下 首先进行清屏 显示模块初始化 然后将接口数据位设置 为 8 位 显示行数设置为 2 行 设定字型为 5 7 点阵 然后取消光标和字体闪 烁 显示设置为整体显示 最后设置为正向增量方式且不移位 将要显示的字 符送到对应的数组中 最后进行统一显示 P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 MOSI 6 P1 6 MISO 7 P1 7 SCK 8 RESET 9 P3 0 10 P3 1 11 P3 2 12 P3 3 13 P3 4 14 P3 5 15 P3 6 16 P3 7 17 XTAL2 18 XTAL1 19 VSS 20 P2 0 21 P2 1 22 P2 2 23 P2 3 24 P2 4 25 P2 5 26 P2 6 27 P2 7 28 PSEN 29 ALE 30 EA 31 P0 7 32 P0 6 33 P0 5 34 P0 4 35 P0 3 36 P0 2 37 P0 1 38 P0 0 39 VCC 40 U1 供供供 5V 12 Y2 12MHZ 30pFC3 30pFC4 1 2 3 4 5 6 7 8 9 P110K供供 VSS 1 VCC 2 VEE 3 RS 4 RW 5 EN 6 DB0 7 DB1 8 DB2 9 DB3 10 DB4 11 DB5 12 DB6 13 DB7 14 A 15 K 16 LCD1 lcd1602 5V 10K R1 5V 5V 5V S1 SW PB 10K R3 10uF C2 5V 图 3 2 3 LCD1602 与 STC89C52 的接口 3 3 键盘模块设计 本按键模块按键一端接单片机的 I O 口 另一端接地 由于单片机的 I O 宜宾学院本科毕业设计 论文 9 口内部都有上拉电阻 所以在没有按键按下的时候 我们会检测到高电平 当 按键被按下 I O 口与地面等电势 此时为低电平 因此通过 I O 端口的状态变 化检测即可知道按下了哪个按键 4 个按键分别代表以下功能 第一为功能选 择按键 可以切换不同参数设置界面 第二个为切换按键 可以切换时 分 秒等参数进行设置 第三个为增加按键 第四个为减少按键 其中按键还可以 设置闹钟 重置时间等功能 键盘模块电路图如图 3 3 所示 P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 MOSI 6 P1 6 MISO 7 P1 7 SCK 8 RESET 9 P3 0 10 P3 1 11 P3 2 12 P3 3 13 P3 4 14 P3 5 15 P3 6 16 P3 7 17 XTAL2 18 XTAL1 19 VSS 20 P2 0 21 P2 1 22 P2 2 23 P2 3 24 P2 4 25 P2 5 26 P2 6 27 P2 7 28 PSEN 29 ALE 30 EA 31 P0 7 32 P0 6 33 P0 5 34 P0 4 35 P0 3 36 P0 2 37 P0 1 38 P0 0 39 VCC 40 U1 供供供 5V S2 SW PB S3 SW PB S4 SW PB S5 SW PB 图 3 3 键盘模块电路图 3 4 蜂鸣器模块设计 本设计还带有闹钟功能 用户可以通过按键设定好闹钟 当当前时间跟闹 钟时间一致的时候 单片机就可以驱动蜂鸣器发声 通过试验 发现单片机的 I O 口无法直接驱动蜂鸣器 是因为蜂鸣器的工 作电流一般比较大 所以我们利用三极管开关电路来提供足够大的驱动电流 本处选用的是 8550 三极管 它是一个 PNP 型的三极管 当基极给低电平的时候 三极管导通 这时候蜂鸣器发声 当给高电平的时候 三极管关闭 蜂鸣器不 发声 蜂鸣器模块的电路图如图 3 4 所示 1K R4 5V P3 2 LS1 供供供 Q1 8550 图 3 4 蜂鸣器驱动电路电路图 3 5 时钟模块的设计 在本设计中 时钟模块的设计 我们把 DS1302 这块串行日历时钟芯片作为 核心 因为 DS1302 具有与单片机的连线很少 节省单片机的系统资源的有点 单片机通过 I O 读取 DS1302 上的数据可以得到实时时间 由于采用单片机作为计时模块会占用硬件资源 而且采用中断 查询等方 式也要耗费单片机的资源 可能会造成很大的浪费 而采用 DS1302 却可以很好 宜宾学院本科毕业设计 论文 10 的解决这类问题 DS1302 是美国 DALLAS 公司推出的一种带 RAM 高性能 能对年 月 日 星期 时 分 秒进行计时 并且低功耗 可以进行闰年补偿的时钟电路 工 作电压为 2 5V 5 5V 采用 24 小时或是 12 小时的格式 此外 DS1302 采用双 电源供电 主电源和备用电源 VCC1 作为备用电源 在模块整体供电中提供电 压相对低的电压 而 VCC2 作为主电源 VCC1 和 VCC2 的供电模式决定如下 VCC2 VCC1 0 2 时 由 VCC2 供电 VCC2 VCC1 时 由 VCC1 供电 图 3 5 1 DS1302 引脚示意图 如图 3 5 1 为 DS1302 的引脚图 X1 和 X2 是震荡源 外接 32 76KHz 的晶 振 GND 为接地端 RST 为复位端 低电平有效 图 3 5 2 为 DS1302 的引脚功 能图 引脚号引脚名称功能 1VCC2主电源 2 3X1 X2振荡源 外接 32768HZ 晶振 4GND地线 5RST复位 片选线 6I O串行数据输入 输出端 双向 7SCLK串行数据输入端 8VCC1后备电源 图 3 5 2 DS1302 引脚功能表 在 3 5 3 中 最高位控制字 第七位 必须是一个合乎逻辑的 即必须为 逻辑 1 第六位控制字为 0 是日历时钟对数据的访问 第六位是 1 表示存取 RAM 数据 第五位地址到第一位 A4 A0 表示指针指向操作单元地址 电平 1 或 0 分别表示写操作是读操作 宜宾学院本科毕业设计 论文 11 图 3 5 3 DS1302 控制字 DS1302 共有 12 个寄存器 其中有 7 个寄存器与日历 时钟相关 存放的 数据位为 BCD 码形式 其日历 时间寄存器及其控制字见表 2 其中奇数为读 操作 偶数为写操作 总共有 12 个寄存器 DS1302 与日历 时钟相关寄存器共 7 个 都存储为 BCD 格式 日历 时钟寄存器和相关联的控制字的数据位如表 2 所示 其特征 在于所述奇数读操作 写操作是偶数 表 2 DS1302 的日历 时钟寄存器及其控制字 命令字各位内容寄存器名 写操作读操作 取值 范围76543210 秒寄存器80H81H00 59CH10 秒秒 分钟寄存器82H83H00 59010 分分 10 小时寄存器 84H85H 01 12 或 00 23 12 24 0 AM PM 时时 日期寄存器86H87H1 31010 日日 月份寄存器88H89H01 1200010月 周日寄存器8AH8BH01 0700000周日 年份寄存器8CH8DH00 9910 年年 从表 2 我们可以发现 小时寄存器的第七位为 1 是 12 小时计时模式 在 12 小时计时模式下 第五位为高电平表示 AM 低电平表示 PM 第七位为 0 是 24 小时模式 这是位 5 为第二个十小时位标志 暂停位位于秒寄存器的第七位 当该位被设置为 1 时 时钟振荡器停止工 作 然后 DS1302 工作在低功率模式 该位为 0 时 时钟正常运行 控制寄存器地址是 8FH 8EH 其第七位是写保护位 其余七位均要置 0 在对时钟进行的任何写操作时 写保护位 WP 必须是 0 否则 写保护位禁止任 何一个寄存器进行写操作 3 6 温度检测模块设计 本设计还带有一个温度检测的功能 系统可以通过读取 DS18B20 的温度数 据并在 LCD1602 上显示 使整个时钟的功能更加丰富 3 6 1 温度传感器工作原理 温度传感器 DS18B20 测温在 55 至 125 摄氏度范围内 具有 12 位的精度 它有 0 0625 摄氏度的测温分辨率 可设置存储在 EEPROM 中 用户自定义的报 警温度在掉电后仍然可以保存 另外 多个温度传感器可以并联连接 但只需 宜宾学院本科毕业设计 论文 12 要使用 CPU 上的一个端口就可以与温度传感器电路进行通信 这样微控制器端 口占用最少 它可以节省大量的端口和逻辑电路就能构成温度测量系统 图 3 6 1 是 DS18B20 的引脚图 图 3 6 1 DS18B20 引脚图 我在实验中发现 当使用 DS18B20 VCC 电压应保持在 5V 否则 如果电 压太低 降低了温度传感器的精度 而且 温度传感器从测量温度结束后 将 温度传出到转换到数字量的时候 需要一定的延时时间 否则会导致转换错误 总是显示一个时间不动 3 6 2 DS18B20 硬件电路设计 GND 1 DQ 2 VCC 3 U3 DS18B20 5V 10k R5 5V 图 3 6 2 DS18B20 温度检测电路图 如图 3 6 2 所示的是 DS18B20 的硬件设计 DQ 作为温度传感器 DS18B20 数 据输出端口 单片机通过检测可以实时输出温度值的数据 由于该温度传感器 是单线通信 所以当发送数据时为低电平有效 接收数据是为高电平有效 即 输出逻辑 1 但是 在接收状态下 必须外接上拉电阻将其拉为高电平 才能 正常输出逻辑 1 3 7 语音模块设计 语音模块设计采用 NY3P035 芯片 该芯片内部含有一个 ROM 表 单片机通 过对该芯片发送序列的脉冲信号来查找该 ROM 的地址 以此来发出声音 图 3 7 1 语音芯片引脚图 宜宾学院本科毕业设计 论文 13 单片机控制原理是 先发送一个复位脉冲到 RST Rest 脚 接着发送 10 个脉冲到 DATA 脚 芯片即刻工作 播放第十段的声音 如果需要播放第五段 的声音 则是 先发送一个复位脉冲到 REST 脚 接着发送 5 个脉冲到 DATA 脚 芯片即刻工作 播放第 5 段的声音 第四章 系统软件设计 4 1 系统软件总体设计 宜宾学院本科毕业设计 论文 14 开始 系统初始化 系统显示相关 时间温度信息 是否按下按键 按键扫描子程序 否 是 读取时钟芯片 的相关时间信息 读取温度参数 是否和设定 的闹钟时 间一致 驱动闹钟发声 是 否 图 4 1 1 主程序流程图 主程序流程图如图 4 1 1 所示 首先系统经过初始化 清除系统中原有的 一些冗余信息后 读取时钟芯片 DS1302 的内部相关信息 例如 年 月 日等 时间参数 紧接着判断当前信息是不是和设定的闹钟信息一致 如果是的话 单片机就发出驱动信号驱动蜂鸣器发出声音 如果不是 则单片机将读取温度 传感器 DS18B20 的相关信息 然后将读取的时间信息和温度信息传入 LCD1602 进行显示 单片机在每个循环时都会检测是否有用户按键 如果有按键的话 将自动跳转到相应的子程序 宜宾学院本科毕业设计 论文 15 开始 复位端变高启动一 次数据传送工作 写命令字节一位 SCLK发脉冲 够8次吗 写数据字节一位 SCLK发脉冲 够8次吗 复位端变低 结束 否 是 否 是 图 4 1 2 时钟模块子函数程序流程图 时钟模块的流程图如图 4 1 2 所示 首先先让时钟芯片的复位引脚置高 然 后开始数据传输 然后写一个指令字节 然后发送串行时钟脉冲信号 一直循 环 直到发送了 8 个命令字节为止 当发送完 8 个命令字节时 写数据进时钟 芯片 首先写入一位数据字节 然后给 SCLK 引脚发送脉冲 一直循环写入 8 次 这样数据写入完成 最后将复位引脚拉为低电平 这样就可以完成时钟芯 片的一次操作 宜宾学院本科毕业设计 论文 16 按键1是否 按下 按键2是否 按下 按键3是否 按下 时间设定闹铃设定 切换对应菜 单 增加相应值 Y N N Y YY N Y 按键扫描子 函数 松手检测 松手检测 闹铃标志位 清零 Y gFunctionco unt 0 按键4是否 按下 Y gFunctionc ount 2 gFunctionco unt 3 NN gFunctionco unt 1 N gFunctioncount 0 初始化液晶 void Display1 void 显示正常界面 时间的函数 DS1302 read time 读取 DS1302 时间 LCDDispNum 1 1 Nian 4 在液晶上显示年的十位 LCDDispNum 2 1 Nian 在液晶上显示年的个位 LCDDispChar 3 1 在液晶上显示字符 LCDDispNum 4 1 Yue 4 在液晶上显示月的十位 LCDDispNum 5 1 Yue 在液晶上显示月的个位 LCDDispChar 6 1 在液晶上显示字符 LCDDispNum 7 1 Ri 4 在液晶上显示日的十位 LCDDispNum 8 1 Ri 在液晶上显示日的个位 LCDDispNum 1 2 Shi 4 在液晶上显示十的十位 LCDDispNum 2 2 Shi 在液晶上显示十的个位 LCDDispChar 3 2 在液晶上显示显示字符 LCDDispNum 4 2 Fen 4 在液晶上显示分的十位 LCDDispNum 5 2 Fen 在液晶上显示分的个位 LCDDispChar 6 2 在液晶上显示显示字符 LCDDispNum 7 2 Miao 4 在液晶上显示秒的十位 LCDDispNum 8 2 Miao 在液晶上显示秒的个位 XingQi XingQi 星期 if XingQi 1 判断并显示星期的字符 宜宾学院本科毕业设计 论文 28 LCDDispString 12 1 Mon 如果星期等于 1 则显示 Mon else if XingQi 2 LCDDispString 12 1 Tues 如果星期等于 2 则显示 Tues else if XingQi 3 LCDDispString 12 1 Wed 如果星期等于 3 则显示 Wed else if XingQi 4 LCDDispString 12 1 Thu 如果星期等于 4 则显示 Thu else if XingQi 5 LCDDispString 12 1 Fri 如果星期等于 5 则显示 Fri else if XingQi 6 LCDDispString 12 1 Sat 如果星期等于 6 则显示 Sat else if XingQi 7 LCDDispString 12 1 Sun 如果星期等于 7 则显示 Sun FenA Fen 把分的 BCD 码转成 10 进制 ShiA Shi 把时的 BCD 码转成 10 进制 闹铃 判断是否有闹铃 如果时间到 则蜂鸣器响 否则不响 if AlarmFlag 0 1 else BEEP 1 转点时的闹钟标志位要清零 if Shi 0 if Fen 0 if Shi 4 0 if Shi 4 1 Music L shi else Music Shi 4 1 Music L shi if Shi else Music Shi Music L dian Music L zheng 读取温度的值 ReadTemperature 显示温度的值 LCDDispString 12 2 temperatureDate void main void 初始化操作 DisplayInit Music L 1 while 1 死循环 if gFunctionCount 0 判断是否为正常显示界面 Display1 显示子函数 1 KeyScan 按键扫描子函数 include include lcd1602 h Function void DelayN40us unsigned int n Description 延时函数 延时 40us 的整数倍 传入值 n 代表延时 时间到 n 40us 不能实现准确延时 只能实现大 概时间的延时 利用的是指令实现延时功能 Calls 没有调用其它函数 Called By void LCDWriteCommand unsigned char dat void LCDWriteData unsigned char dat Input unsigned int n 用于延时时间的确定 取值 为 1 65535 Output 无 Return 无 宜宾学院本科毕业设计 论文 30 void DelayN40us unsigned int n unsigned int i unsigned char j for i n i 0 i for j 0 j 2 j Function void LCDInit void Description 液晶初始化函数 对 LCD1602 进行初始化操作 在每一次实用液晶前必须用到的 外部可调用 函数 Calls void LCDWriteCommand unsigned char dat DelayN40us unsigned int n Called By main 或其他 Input 无 Output 无 Return 无 void LCDInit void LCDWriteCommand 0 x38 设置 8 位格式 2 行 5x7 LCDWriteCommand 0 x38 设置 8 位格式 2 行 5x7 LCDWriteCommand 0 x38 设置 8 位格式 2 行 5x7 有的液晶做的不好 写三遍保险 LCDWriteCommand 0 x0c 整体显示 关光标 不闪烁 LCDWriteCommand 0 x06 设定输入方式 增量不移位 LCDWriteCommand 0 x01 清除屏幕显示 DelayN40us 100 清屏延时 Function void LCDWriteCommand unsigned char dat Description 写命令函数 对 LCD1602 内部寄存器进行操作 Calls DelayN40us unsigned int n Called By void LCDInit void void LCDDispChar unsigned char x unsigned char y unsigned char dat void LCDDispNum unsigned char x unsigned char y unsigned char dat Input unsigned char dat 写入的命令 Output 无 Return 无 void LCDWriteCommand unsigned char dat 宜宾学院本科毕业设计 论文 31 LCD DB dat LCD RS 0 选择写指令 LCD RW 0 写入指令值 LCD E 1 使能 LCD1602 LCD E 0 DelayN40us 1 写命令延时 Function void LCDWriteData unsigned char dat Description 写数据函数 将数据写入 LCD1602 中 Calls DelayN40us unsigned int n Called By void LCDInit void void LCDDispChar unsigned char x unsigned char y unsigned char dat void LCDDispNum unsigned char x unsigned char y unsigned char dat Input unsigned char dat 写入的数据 Output 无 Return 无 void LCDWriteData unsigned char dat 写数据函数 LCD DB dat LCD RS 1 选择写数据 LCD RW 0 写入数据值 LCD E 1 使能 LCD1602 LCD E 0 DelayN40us 1 写数据延时 Function void LCDDispChar unsigned char x unsigned char y unsigned char dat Description 在某个屏幕位置上 x y 位置显示一个字符 可外部调用 Calls LCDWriteCommand unsigned char dat void LCDWriteData unsigned char dat Called By main 及其他 Input X 0 15 y 1 2 dat 为显示字符 a 形式 Output 无 Return 无 void LCDDispChar unsigned char x unsigned char y unsigned char dat unsigned char address 宜宾学院本科毕业设计 论文 32 if y 1 address 0 x80 x 显示在第一排的时候的 x 的地址 else address 0 xc0 x 显示在第二排的时候的 x 的地址 LCDWriteCommand address 输入地址 LCDWriteData dat 输入数据 Function void LCDDispNum unsigned char x unsigned char y unsigned char dat Description 在某个屏幕位置上 x y 位置显示一个数字 可外部调用 Calls LCDWriteCommand unsigned char dat void LCDWriteData unsigned char dat Called By main 及其他 Input X 0 15 y 1 2 dat 0 9 Output 无 Return 无 void LCDDispNum unsigned char x unsigned char y unsigned char dat unsigned char address if y 1 address 0 x80 x 显示在第一排的时候的 x 的地址 else address 0 xc0 x 显示在第二排的时候的 x 的地址 LCDWriteCommand address 输入地址 LCDWriteData dat 48 输入数据 Function void LCDDispString unsigned char x unsigned char y unsigned char string Description 在屏幕上显示一串字符 考虑到我的数值均存储于数组中 为方便而作 允许外部调用 Calls void LCDDispChar unsigned char x unsigned char y unsigned char dat Called By main 及其他 Input X 0 15 y 1 2 string 为任意字符串 但是必须以 0 结尾 Output 无 Return 无 void LCDDispString unsigned char x unsigned char y unsigned char string while string 0 没有检测到字符串结尾时 宜宾学院本科毕业设计 论文 33 LCDDispChar x y string 逐个显示字符串 x 行地址加 1 Function void LCDDispNumInt unsigned char x unsigned char y unsigned int dat Description 在某个屏幕位置上 x y 位置显示一个无符号整形数字 可外 部调用 Calls LCDDispNum unsigned char x unsigned char y unsigned char dat Called By main 及其他 Input X 0 15 y 1 2 dat 0 65536 Output 无 Return 无 void LCDDispNumInt unsigned char x unsigned char y unsigned int dat unsigned char temp 5 i 0 j 0 分离万千百十个各个位临时存储 temp 0 dat 10000 10 temp 1 dat 1000 10 temp 2 dat 100 10 temp 3 dat 10 10 temp 4 dat 10 while temp i 0 for j 0 j 0 x for y 110 y 0 y void Music z unsigned char i SHUJU 0 RST 1 for i 0 i 220 i delay 2ms RST 0 for i 0 i0 SHUJU 1 for i 0 i 110 i delay 1ms SHUJU 0 for i 0 i 4 10 把分的 BCD 码转成 10 进 制 Shi Shi 把时的 BCD 码转成 10 进 制 if AlarmFlag 0 1 取消闹铃标志位 else gFunctionCount 小菜单计数加一 进入下一个设置的参 数界面 gTimeCount 0 每次都从秒开始设定 if gFunctionCount 1 读取时钟芯片的时间 Miao Miao 把秒的 BCD 码转成 10 进制 Fen Fen 把分的 BCD 码转成 10 进制 Shi Shi 把时的 BCD 码转成 10 进制 Ri Ri 把日的 BCD 码转成 10 进制 Yue Yue 把月的 BCD 码转成 10 进制 Nian Nian 把年的 BCD 码转成 10 进制 XingQi XingQi 把星期的 BCD 码转成 10 进制 LCDDispNum 7 2 Miao 10 写的是显示光标的前一个字符 LCDCursor 显示光标 宜宾学院本科毕业设计 论文 36 else if gFunctionCount 2 闹钟 1 设定 DS1302 set time 把增加的时间写入 1302 LCDWriteCommand 0 x01 清除屏幕显示 Scan10MsDelay Scan10MsDelay Scan10MsDelay Scan10MsDelay 延时 等到清屏 LCDDispString 2 1 Alarm Clock 显示字符串 LCDDispNum 2 2 AlarmClock 0 0 10 显示闹钟值 LCDDispNum 3 2 AlarmClock 0 0 10 显示闹钟值 LCDDispChar 4 2 显示字符 LCDDispNum 5 2 AlarmClock 0 1 10 显示闹钟值 LCDDispNum 6 2 AlarmClock 0 1 10 显示闹钟值 LCDDispChar 7 2 显示字符 LCDDispNum 8 2 AlarmClock 0 2 10 显示闹钟值 LCDDispNum 9 2 AlarmClock 0 2 10 显示闹钟值 if AlarmFlag 0 判断是否设定了闹钟 如果设定了闹钟 显示 ON LCDDispChar 12 2 LCDDispChar 14 2 N LCDDispChar 13 2 O else 否则显示 OFF LCDDispChar 12 2 O LCDDispChar 14 2 F LCDDispChar 13 2 F else if gFunctionCount 3 此级菜单显示时钟是否需要复位 LCDNotCursor 取消光标显示 LCDWriteCommand 0 x01 清除屏幕显示 Scan10MsDelay Scan10MsDelay Scan10MsDelay Scan10MsDelay LCDDispString 3 1 Reset Clock 显示字符串 else if gFunctionCount 4 回主菜单 gFunctionCount 0 菜单计数清零 LCDWriteCommand 0 x01 清除屏幕显示 Scan10MsDelay Scan10MsDelay Scan10MsDelay Scan10MsDelay 宜宾学院本科毕业设计 论文 37 while Key1 未松手时 不跳出循环 避免误检测 if Key2 0 同上 判断第二个按键情况 功能键 Scan10MsDelay 延时消抖 if Key2 0 gTimeCount 小菜单计数增加 if gFunctionCount 1 else if gFunctionCount 1 else if gFunctionCount 1 else if gFunctionCount 1 else if gFunctionCount 1 else if gFunctionCount 1 else if XingQi 2 LCDDispString 14 1 e else if XingQi 3 LCDDispString 14 1 d else if XingQi 4 LCDDispString 14 1 u else if XingQi 5 LCDDispString 14 1 i else if XingQi 6 LCDDispString 14 1 t else if XingQi 7 LCDDispString 14 1 n else if gFunctionCount 1 LCDDispNum 7 2 Miao 10 else if gFunctionCount 2 DoneFlag 0 1 LCDDispString 12 2 ON LCDDispNum 8 2 AlarmClock 0 2 10 else if gFunctionCount 2 else if gFunctionCount 2 else if gFunctionCount 2 DoneFlag 0 0 LCDDispChar 12 2 O LCDDispChar 14 2 F LCDDispChar 13 2 F gTimeCount 0 else if gFunctionCount 3 重设时间 LCDDispString 4 2 reset ok Miao 0 设定时间的值 Fen 0 Shi 0 Ri 15 Yue 4 XingQi 1 Nian 12 DS1302 set time 将设定值写入芯片 while Key2 松手检测 if Key3 0 同上 判断第三个按键情况 增加键 Scan10MsDel

温馨提示

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

评论

0/150

提交评论