




免费预览已结束,剩余63页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 毕 业 论 文 题题 目目 基于基于 AVR 的可调电子钟设计的可调电子钟设计 院系名称 院系名称 计算机科学与技术计算机科学与技术 专业班级 专业班级 1111 专升本专升本 学生姓名 学生姓名 学学 号 号 指导教师 指导教师 2 目录目录 摘摘 要要 4 4 第一章第一章 引言引言 5 5 1 11 1 设计任务设计任务 5 1 21 2 设计要求设计要求 5 第二章第二章 总体方案论证与设计总体方案论证与设计总体方案论证与设计总体方案论证与设计 6 6 第三章第三章 系统硬件设置系统硬件设置 7 7 3 13 1 ATmega16ATmega16 单片机简介单片机简介 7 3 23 2 ATmega16ATmega16 单片机的工作原理单片机的工作原理 7 3 2 13 2 1 I OI O 端口的工作原理端口的工作原理 7 3 2 23 2 2 定时定时 计数器计数器 8 3 2 33 2 3 中断系统中断系统 8 3 2 43 2 4 振荡器振荡器 9 3 33 3 时钟模块设计时钟模块设计 10 3 3 13 3 1 DS1302DS1302 特性介绍特性介绍 10 3 3 23 3 2 DS1302DS1302 引脚介绍引脚介绍 11 3 3 33 3 3 DS1302DS1302 有关日历 时间的寄存器有关日历 时间的寄存器 12 3 3 43 3 4 DS1302DS1302 与单片机接口电路与单片机接口电路 12 3 43 4 显示模块设计显示模块设计 13 3 4 13 4 1 LCD1602LCD1602 的特性介绍的特性介绍 14 3 4 23 4 2 LCD1602LCD1602 引脚介绍引脚介绍 15 3 4 33 4 3 16021602 内部功能器件及相关功能内部功能器件及相关功能 16 3 4 43 4 4 16021602 液晶与单片机接口电路液晶与单片机接口电路 18 3 53 5 设置模块设置模块 20 3 63 6 振荡电路振荡电路 21 3 73 7 复位电路复位电路 22 第四章第四章 系统软件设计系统软件设计 2323 4 14 1 时钟函数模块时钟函数模块 25 4 1 14 1 1 实现功能实现功能 25 3 4 1 24 1 2 函数设计函数设计 25 4 24 2 显示函数模块显示函数模块 30 4 2 14 2 1 实现功能实现功能 30 4 2 24 2 2 函数设计函数设计 30 4 2 34 2 3 小结小结 31 4 34 3 按键函数模块按键函数模块 32 4 3 14 3 1 实现功能实现功能 32 4 3 24 3 2 函数设计函数设计 32 4 3 34 3 3 小结小结 32 4 44 4 主函数模块主函数模块 32 第五章第五章 心得体会心得体会 3333 第六章第六章 致谢致谢 3333 附录附录 1 1 元器件表元器件表 3434 附录附录 2 2 仿真图仿真图 3535 附录附录 3 3 源码源码 3636 附录附录 4 4 参考文献参考文献 6868 4 摘摘 要要 单片机就是微控制器 是面向应用对象设计 突出控制功能的芯片 单片机 接上晶振 复位电路和相应的接口电路 装载软件后就可以构成单片机应用系统 本设计就是应用单片机强大的控制功能制作而成的指针式电子钟 该指针式电子 钟实现如下功能 液晶屏模拟表盘与时分秒指针显示当前时钟 K1 键用于选择 调节对象 K2 键用于调整时分秒 在按下 K4 键时确定调节值 时钟继续运行 本设计采用的是 AVR 单片机 AVR 系列的单片机不仅具有良好的集成性能 而且都具备在线编程接口 其中的 Mega 系列还具备 JTAG 仿真和下载功能 含有 片内看门狗电路 片内程序 Flash 同步串行接口 SPI 多数 AVR 单片机还内嵌 了 A D 转换器 EEPROM 模拟比较器 PWM 定时计数器等多种功能 AVR 单片机 的 I O 接口具有很强的驱动能力 灌入电流可直接驱动继电器 LCD 等元件 芯片采用 DALLAS 公司的涓细充电时钟芯片 DS1302 该芯片通过简单的串行通 信与单片机进行通信 时钟 日历电路能够实时提供年 月 日 时分 秒信息 采用双电源供电 当外部电源掉电时能够利用后备电池准确计时 显示器件采用 LCD1602 液晶 通过相应的按键调整相应的值 通过此次设 计能够更加牢固的掌握单片机的应用技术 增强动手能力 硬件设计能力以及软 件设计能力 关键词关键词 AVR 单片机 时钟芯片 DS1302 LCD1602 液晶 5 第一章第一章 引言引言 本例采用 LCD1602 液晶作为显示元件 液晶屏显示当前时钟 该电子钟实 现如下功能 液晶屏模拟表盘与时分秒指针显示当前时钟 K1 键用于选择调节 对象 K2 键用于调整时分秒 在按下 K3 键时确定调节值 时钟继续运行 本例 程序包含控制模块 显示模块 实时时间计算模块 设置模块 时间设置模块 1 11 1 设计任务设计任务 利用 AVR 单片机等实现一个简单的基于 AVR 的可调电子钟 1 21 2 设计要求设计要求 a 实现年月日时分秒指针式显示功能 b 用三个按键来实现调整时分秒的功能 6 第二章第二章 总体方案论证与设计总体方案论证与设计总体方案论证与设计总体方案论证与设计 组成框图中包含显示模块 控制器 时间模块 设置模块 显示模块有 LCD1602 来控制显示 整个代码实现主要由控制器来实现 时间模块有 DS1302 来实现 可以显示系统时间 也可自行调整 设置模块为按键处理 具体模块分 析在相关的软硬件设计中详细介绍 本设计中的可调电子钟拟采用 AVR 系列单片机 ATMEGA16 作为主控制器 以 DS1302 时钟芯片和 16M 的外置晶振提供准确时间标准 以期实现对 时 分 秒 的数字显示和校准时间的计时装置 可调电子钟不但可以显示当前时间 而 且可以显示年 月 日等 给人们的生活带来方便 另外可调电子钟还具备日期 时间的调节与写入功能 本设计将以 AVR 单片机为控制核心 通过与 DS1302 信获取实时时间 并将得到的数据通过 LCD1602 液晶显示出来 同时通过相应 的按键调整相应的值 因此本设计可分为以下模块 控制模块 显示模块 实时 时间计算模块 设置模块 时间设置模块 7 第三章第三章 系统硬件设置系统硬件设置 3 13 1 ATmega16 单片机简介单片机简介 ATmega16 单片机是 ATmega 系列 AVR 单片机中内容接口丰富 功能齐全 性 能价格比较高的产品 它具有高性能 低功耗的 8 位 AVR 微处理器 先进的 RISC 结构 非易失性程序和数据存储器等 ATmega16 单片机的中央处理器由 32 个 8 位通用寄存器 1 个算术运算单元及状态和控制逻辑单元组成 AVR 采用了 哈弗结构 具有独立的程序总线和数据总线 程序存储器里的指令通过一级流水 线运行 它的存储器分为独立寻址的 flash 程序存储器 片内 SRAM 数据存储器 和 EEPROM 3 部分 均采用线性编址 图 3 1 3 23 2 ATmega16ATmega16 单片机的工作原理单片机的工作原理 3 2 13 2 1 I OI O 端口的工作原理端口的工作原理 8 ATmeage16 单片机具有 32 个通用 I O 口 分为 PA PB PC PD 每组都是八位 这些 I O 都是可以通过各自的端口寄存器设置为输入或置成输出 有些 I O 口还 具有第二功能 所有的端口引脚都具有内部上拉电阻 可以通过寄存器独立选择是否连接 复位时所有的引脚都为高阻态 ATmega16 单片机的每个端口都有三个 I O 寄存 器地址 数据寄存器 PORTx x A B C D 下同 方向寄存器 DDRx 和输入引脚 PINx 3 2 23 2 2 定时定时 计数器计数器 ATmega16 单片机有三个定时 计数器 T C0 T C1 T C2 其中 T C0 T C2 是两个八位的定时 计数器 而 T C1 是 16 位的定时 计数器 T Cx 0 1 2 是一个通用的带有输出比较匹配和 PWM 波形发生器的单通道 8 位定时 计数器模块 T Cx 可以选择通过预分频器由系统时钟驱动 或通过 T0 引脚的外部时钟驱动 时钟逻辑模块控制使用哪个时钟源及哪个边沿来进行加或 者减计数 T Cx 0 1 2 的时钟分频器对系统分频后作为 T Cx 0 1 2 的驱动时 钟 T Cx 0 1 2 的时钟可以是系统时钟或者系统时钟的 8 分频 64 分频 256 分频及 1024 分频 通过控制寄存器 TCCRx 0 1 2 T Cx 双缓冲结构的八位输出比较寄存器 OCRx 0 1 2 一直与 T Cx 0 1 2 的计数值 TCNTx 0 1 2 进行比较 一旦 TCNTx 0 1 2 等于 OCRx 0 1 2 比较器就给出匹配信号 有 4 种工作模式 普通模式 CTC 模式 快速 PWM 模式 相位修正 PWM 模式 3 2 33 2 3 中断系统中断系统 ATmega16 单片机有 21 个中断源 每一个中断源都有一个独立的中断向量作 为中断服务程序的入口地址 而且所有的中断源都有自己的独立的使能位 如果 全局中断 I 和相应使能位都置位 则在中断标志位置位时将执行中断服务程序 9 一个中断产生后 全局中断使能位 I 将被清零 后续中断被屏蔽 中断相关的寄存器 MCU 控制寄存器 MCUCR MCU 控制和状态寄存器 MCUCSR 通用中断控制寄存器 GICR 通用中断状态寄存器 GIFR 3 2 43 2 4 振荡器振荡器 XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入 XTAL2 来自反向振荡器的输出 振荡器特性 XTAL1 和 XTAL2 分别为反向放大器的输入和输出 该反向放大 器可以配置为片内振荡器 石晶振荡和陶瓷振荡均可采用 如采用外部时钟源驱 动器件 XTAL2 应不接 有余输入至内部时钟信号要通过一个二分频触发器 因 此对外部时钟信号的脉宽无任何要求 但必须保证脉冲的高低电平要求的宽度 10 3 33 3 时钟模块设计时钟模块设计 实时时间计算模块 方案 1 AVR 单片机内部带有定时 计数功能 此定时功能是通过对外部 晶振的脉冲进行计数 从而达到计时功能 只要使用 11 0592 的晶振就能实现零 误差的计时 因此可以利用此功能实现计时 但因为只有单一的计时功能要实现 万年历 的功能需要较复杂的程序 而且如果单片机掉电无法继续进行计时 所以使用不便 方案 2 DS1302 是美国 DALLAS 公司推出的一种高性能 低功耗的实 时时钟芯片 附加 31 字节静态 RAM 采用 SPI 三线接口与 CPU 进行通信 并 可采用突发方式一次传送多个字节的时钟信号和 RAM 数据 实时时钟可提供秒 分 时 日 星期 月和年 一个月小与 31 天时可以自动调整 且具有闰年补 偿功能 工作电压宽达 2 5 5 5V 采用双电源供电 主电源和备用电源 可设 置备用电源充电方式 提供了对后备电源进行涓细电流充电的能力 利用单片机 强大的控制功能就可实现实时计时的功能 而且消耗的系统资源少 程序简单 综合上述两种方案 宜采用方案 2 实现实时计时功能 3 3 13 3 1 DS1302DS1302 特性介绍特性介绍 DS1302 是美国 DALLAS 公司推出的一种高性能 低功耗的实时时钟芯片 附加 31 字节静态 RAM 采用 SPI 三线接口与 CPU 进行通信 并可采用突发方 式一次传送多个字节的时钟信号和 RAM 数据 实时时钟可提供秒 分 时 日 星期 月和年 一个月小与 31 天时可以自动调整 且具有闰年补偿功能 工作 电压宽达 2 5 5 5V 采用双电源供电 主电源和备用电源 可设置备用电源充 电方式 提供了对后备电源进行涓细电流充电的能力 利用单片机强大的控制功 能就可实现实时计时的功能 而且消耗的系统资源少 程序简单 11 DS1302 可以对年 月 日 星期 时 分 秒进行计时 且具有闰年补偿 等多种功能 DS1302 有 12 个寄存器 其中有 7 个寄存器与日历 时钟相关 存 放的数据位为 BCD 码形式 采用单片机计时 一方面需要采用计数器 占用硬 件资源 另一方面需要设置中断 查询等 同样耗费单片机的资源 而采用时钟 芯片 DS1302 3 3 23 3 2 DS1302DS1302 引脚介绍引脚介绍 图 3 2 8 Vcc1 备用电池端 1 Vcc2 5V 电源 当 Vcc2 Vcc1 0 2V 时 由 Vcc2 向 DS1302 供电 当 Vcc2 Vcc1 时 由 Vcc1 向 DS1302 供电 7 SCLK 串行时钟 输入 6 I O 数据输入输出口 5 CE RST 复位脚 2 3 X1 X2 是外接晶振脚 32 768KHZ 的晶振 4 地 GND 12 3 3 33 3 3 DS1302DS1302 有关日历 时间的寄存器有关日历 时间的寄存器 表 3 1 3 3 43 3 4 DS1302DS1302 与单片机接口电路与单片机接口电路 图 3 3 由于 DS1302 是依靠外部晶振与其内部的电容配合来产生时钟脉冲 因为 DS1302 在芯片本身已经集成了 6pF 电容 所以 为了获得稳定的可靠的时钟 必须选用具有 6pF 负载电容的晶振 当它工作于所要求的负载电容时 所以要选 用 32768HZ 的晶振 石英晶振用 12M 因为一个机器周期为 1 12 时钟周期 所以这样用 12M 的 话 一个时钟周期为 12us 那么定时器计一次数就是 1us 了 电容范围是在 20 40pf 之间的都行 13 表 3 2 引脚号DS1302AT89C51 1I OP1 0 2SCLKP1 1 3RSTP1 2 3 43 4 显示模块设计显示模块设计 液晶显示模块 方案 1 数码管是利用发光二极管的特性组合而成数字显示器件 通过 控制相应的二极管的状态显示相应的数字 要使数码管正常显示就得有驱动电路 驱动相应的段码 数码管的现实方式可分为静态显示和动态显示 静态显示方式 只适合显示单个的数字 因此本设计应采用动态显示方式 由于动态显示方式利 用的是人眼视觉暂留的特性 扫描的时间应不大于 20 毫秒 占用系统资源大 而且显示的个数和字型有限 在本设计中不易采用 方案 2 LCD1602 是一种图形点阵液晶显示器 它主要由行驱动器 列驱 动器及点阵液晶显示器组成 可完成字符显示 也可以显示 16 2 字 该类液晶 显示模块 即 KS0108B 及其兼容控制驱动器 的指令系统比较简单 总共只有 七种 关于行列和页的解释 从上向下共 2 行 每一行为 16 字 汉字占 32B 分 左右两半 各占 16B 根据在 LCD 上开始显示的行列号及每行的列数可以找到 显示 RAM 对应的地址 设立光标 送上要显示的汉字的第一个字节 光标位置 加一 送第二个字节 换行按列对齐 综合比较上述两种方案 应采用 LCD1602 液晶组成本设计的显示模块 14 3 4 13 4 1 LCD1602LCD1602 的特性介绍的特性介绍 PG12864LCD 是像素可寻址的图形液晶显示屏模块 芯片特性 1 工作电压为 4 5 5 5V 可自带驱动 LCD 所需的负电压 2 全屏幕点阵 点阵数为 16 2 的字符的显示 3 与 CPU 接口采用 5 条位控制总线和 8 位并行数据总线输入输出 4 内部有显示数据锁存器 自带 EL 驱动 5 简单的操作指令 显示开关设置 显示起始行设置 地址指针设置和数据 读 写等指令 15 3 4 23 4 2 LCD1602LCD1602 引脚介绍引脚介绍 表 3 3 管脚 号 管脚名称 LEVER 管脚功能描述 1VSS0 电源地 2VDD 5 0V 电源电压 3VL 液晶显示偏压 4 RSH L RS H 表示选择数据寄存器 RS L 表示选择指令寄存器 5R WH L R W H E H 数据被读到 DB7 DB0R W L E H L 数据被写 到 IR 或 DR 6EH L R W L E 信号下降沿锁存 DB7 DB0R W H E H DDRAM 数据读 到 DB7 DB0 7D0H L 数据线 8D1H L 数据线 9D2H L 数据线 10D3H L 数据线 11D4H L 数据线 12D5H L 数据线 13D6H L 数据线 14D7H L 数据线 16 3 4 33 4 3 16021602 内部功能器件及相关功能内部功能器件及相关功能 1 指令寄存器 IR 指令寄存器负责存放单片机写给 HD144780 的指令 对 IR 的操作如下 当 RS 0 R W E 引脚由 1 变为 0 就会把 D0 到 D7 引脚的数据送入指令寄 存器 IR 2 数据寄存器 DR DR 负责存放单片机写给 CGRAM 与 DDRAM 的数据或从 CGRAM 与 DDRAM 的数据 对 DR 的操作如下 当 RS 1 R W 1 E 1 HD44780 就会把数据送到 D0 到 D7 引脚上 供单片机读 取 当 RS 1 R W 0 E 引脚信号由 1 变为 0 HD44780 就会把 D0 到 D7 引脚上的 数据存入 DR 中 3 忙标志 BF BF 标志提供内部工作情况 BF 1 表示模块在内部操作 此时模块不接受外 部指令和数据 BF 0 时 模块为准备状态 随时可接受外部指令和数据 4 显示数据 RAM DDRAM DDRAM 是用来存放 LCD 要显示的数据 只要将点阵字符图形的代码送入 DDRAM 内部的控制电路就会自动将数据传送到 LCD 显示屏上 如果想在第一行 的第一个位置显示字符 0 那么只要把字符 0 的代码送达 DDRAM 的 0X80 地址中 在显示屏就会出现一个字符 0 5 字符发生器 CGROM HD47780 芯片内含一个 CGROM 存储了 160 个不同的点阵字符图形 如数字 字母 中文等 CGROM 用来存储设计者自行设计个性化字符造型代码的 RAM 共有 512bit 一个 5 7 的字符体占用 8 8bit 因此 CGRAM 最多只能存放 8 个自定义 字符 17 6 地址寄存器 AC AC 是负责计算送 DDRAM CGRAM 读出的地址 或者计算写到 CGRAM DDRAM 数 据的地址 当单片机对 CGRAM DDRAM 进行操作时 AC 会依照单片机对 HD47780 的操作自动修改地址的计数值 LCD1602 内嵌芯片 HD47780 的控制功能 表 3 4 RSR WED7 D0 说明 011 数据输出读 BF 与 AC 的值 10 下降沿数据输入写数据 00 下降沿数据输入写指令代码 111 数据输出读数据 18 3 4 43 4 4 16021602 液晶与单片机接口电路液晶与单片机接口电路 图 3 4 表 3 5 引脚号1602 引脚ATMEGA16 引脚 1数据线 DB0 DB7PB0 PB7 2寄存器选择 RSPC0 3写 RWPC1 4使能端 EPC2 19 排阻的计算公式 上拉电源 硬件额定电流 单片机输出电流 一 最大值的计算原则 要保证上拉电阻明显小于负载的阻抗 以使高电平 时输出有效 例如 负载阻抗是 10K 供电电压是 5V 如果要求高电平不小于 4 5V 那 么 上拉电阻最大值 R 大 5 4 5 10 5 R 大 1K 也就是最大值 1k 如果超过了 1k 输出的高电平就小于 4 5V 了 二 最小值的计算原则 保证不超过管子的额定电流 如果不是场效应管而 是三极管也可依照饱和电流来计算 例 管子的额定电流 150mA 放大倍数 100 基极限流电阻 10k 工作在 5v 的系统中 那么 算法如下 Ib U R 5 0 7 10 0 47 mA Ic 100 0 47 47mA 小于额定的 150 所以可以按饱和法来算最小值 上拉电阻最小值 R 小 5v 47mA 106 欧姆 如果小于这个电阻 管子就会过饱和而没有意 义了 如果大于这个值 管子的导体电阻就会变大一些 所以太高也不利于低电 平的输出 20 3 53 5 设置模块设置模块 设置模块采用四个按键与 PD 连接 按键与单片机的接口电路 图 3 5 按键的断开与闭合式由机械触点的动作实现 由于机械的弹性作用在按键的 断开与闭合过程中会产生抖动 此抖动的脉冲会给单片机带来误判断 所以必须 消除 消除抖动可以从软件和硬件两方面入手 本设计采用软件消除抖动 从按 键断开到稳定闭合 此抖动的时间一般为 5ms 到 10ms 所以当单片机检测到有 按键被按下时候 就延时一段时间 单片机与键盘的连接方式可分为独立式 编码式 串口扩展式和矩阵式 其 中较为常用的有独立式和矩阵式 本设计采用独立式按键 也就是每一个按键都 与端口独立连接 每一个按键独立占一根输入线 一根输入线的工作状态不会影 响其他按键 独立式按键通过检测电平的状态可以很容易判断出有没有按键被按 下 独立式的电路配置灵活 软件算法简单 21 3 63 6 振荡电路振荡电路 本设计芯片选用内部振荡器方式 由于本设计的时间由内部定时器中断与软 件计数相结合产生的 所以从计算方便以及系统的效率上考虑 本设计选用 12MHz 频率的晶振 电路原理图如下 图 3 6 atmage16 的振荡电路 经厂家推荐稳定电路的电容 C1 C2 22uf C3 为 10uf 22 3 73 7 复位电路复位电路 Atmega16 有 5 个复位源 上电复位 外部复位 看门狗复位 掉电检测复 位及 JTAG 复位 复位时所有的 I O 寄存器都被设置为初始值 程序从复位向量 开始执行 本设计使用上电复位电路 单片机晶振为 12MHz 起振时间将近 1ms 单片机 2 个机器周期的时间为 2us 单片机每次上电复位所需的最短延时应该不小于 treset 这里 treset 等 于上电延时与起振延时之和 从实际上讲 延迟一个 treset 往往还不够 不能 够保障单片机有一个良好的工作开端 复位电路把单片机锁定在复位状态上并且维持一个延时 记作 TRST 以便 给予电源电压从上升到稳定的一个等待时间 在电源电压稳定之后 再插入一个 延时 给予时钟振荡器从起振到稳定的一个等待时间 在单片机开始进入运行状 态之前 还要至少推迟 2 个机器周期的延时间 单片机是高电平的时候复位 一 般是用电阻和电容组成的 电容充电的时 RST 复位端为高电平 此时单片机开始 复位 电容充电完成 此时单片机复位完成 由此电容值可取 10uf 电阻值取 10K 详细见附录文件 电容充电时间的 计算方法 pdf 图 3 7 Atmage 上电复位电路 23 第四章第四章 系统软件设计系统软件设计 软件设计是本设计的关键 软件程序编写的好坏直接影响着系统运行情况的 良好 因本程序涉及的模块较多 所以程序编写也采用模块化设计 C 语言具有 编写灵活 移植方便 便于模块化设计的特点 所以本系统的软件采用 Atmage16 编写 程序框图如下 初始化初始化 显示界面显示界面 从从 DS1302 读取信读取信 息息 1602 液晶显示相关信息液晶显示相关信息 判断是否有判断是否有 按键按下按键按下 时间 日时间 日 期设置模期设置模 块块 初始化初始化 显示界面显示界面 从从 DS1302 读取信读取信 息息 1602 液晶显示相关信息液晶显示相关信息 判断是否有判断是否有 按键按下按键按下 没有按键按下没有按键按下 24 25 4 14 1 时钟函数模块时钟函数模块 具体实现含有向DS1302串行写入一字节即DS1302writeByte 从DS1302读取 一字节即DS1302OreadByte 从DS1302指定位置读数据Read1302 向DS1302某地 址写入数据Write1302 设置时间set clock 从DS1302获取时间 读取当前时间 get time利用这些函数来实现时间 最终显示在液晶屏上 可以自行调整 你可以显示系统时间 也可以显示调整时间 具体实现是设置时间函数 4 1 14 1 1 实现功能实现功能 能够显示年月日时分秒和星期 完成了 24 小时和 12 小时之间的切换 并设 有闹钟 闹钟存放于 EEPROM 中 时间和星期以及闹钟均可调 其中闹钟掉电数 据不会丢失 4 1 24 1 2 函数设计函数设计 1 void DS1302writeByte uchar data 1 功能 向 DS1302 中写入一字节数据 2 依据 DS1302 时序图 详见 SD1302 技术资料 可知 在启动 DS1302 时每产生一 个下降沿可向 DS1302 中写入一位数据 3 右图为流程图 2 uchar DS1302OreadByte void 1 功能 从 DS1302 中读取一字节数据 2 依据 DS1302 时序图 详见 SD1302 技术资料 可知 在启动 DS1302 时每产生一 个上升沿可向 DS1302 中 读取一位数据 3 右图为流程图 3 uchar Read1302 uchar ucAddr 1 功能 从指定的地址中读取一字节数据 2 依据 DS1302 时序图 详见 SD1302 技术资料 可知 在启动 DS1302 时每产生一 个下降沿可向 DS1302 中写入一位数据 在启动 DS1302 时每产生一个上升沿可向 DS1302 中读取一位数据 27 3 下图为流程图 4 void Write1302 uchar ucAddr uchar ucDa 1 功能 向 DS1302 指定地址中写入一字节数据 2 依据 DS1302 时序图 详见 SD1302 技术资料 可知 在启动 DS1302 时每产生一 个下降沿可向 DS1302 中写入一位数据 在启动 DS1302 时每产生一个上升 沿可向 DS1302 中读取一位数据 3 右图为流程图 5 void affirm data void 1 功能 输入数据入转换函数 将十进制转换成 BCD 码 2 依据 转换公式 3 下图为流程图 6 void get time uchar time 1 功能 读取当前时间 并判断当前是 12 小时显示还是 24 小时显示 2 依据 通过对标志位的判断来确定当前为 12 小时制还是 24 小时制 如果为 12 小 时时要将 DS1302 寄存器内相应位置 1 3 右图为流程图 7 void set clock void 功能 向 DS1302 中写入初始时间 启动 DS1302 振荡器 判断上下午 1 依据 DS1302 时序图 详见 SD1302 技术资料 8 void format datetime uchar d uchar a 1 功能 将数字转换成字符 2 依据 ASII 码表 9 void init 1302 void 功能 启动 DS1302 振荡器 1 依据 由 DS1302 的技术资料知 DS1302 的秒寄存器的最高位为振荡器控制位 向 该位置一即可启动振荡器 30 4 24 2 显示函数模块显示函数模块 检测 LCD 是否忙 rd bf 向 LCD 发送命令 wr dictate 向 lcd 发送数据 wr data 初始化 1602 显示 init lcd 初 始化 1602 显示屏 show function 通用显示函数 显示字符和汉字的字模是用相应的软件导出的 根据液晶显 示屏的要求对时钟进行调整 4 2 14 2 1 实现功能实现功能 通过 1602 显示电子时钟 4 2 24 2 2 函数设计函数设计 1 void rd bf void 1 功能 检测 LCD 是否忙碌 2 依据 通过判断 HD47780 内部是否处于空闲状态等待单片机进行读写操 作 2 void wr dictate uchar dictate 1 功能 写指令函数 dictate 是要写入的指令 2 依据 31 通过判断 LCD 是否忙碌 是读 写指令 3 void wr data uchar dat 1 功能 写入数据 2 依据 通过判断状态位rd bf 是指令还是数据寄存器 4 void init lcd void 1 功能 初始化 lcd 2 依据 通过写wr dictate 0 x38 来完成文本显示区首地址 写单参数函 数实现光标形状 和显示方式设置 3 流程图 4 2 34 2 3 小结小结 32 通过 LCD 想显示 LCD 是很有用的 要牢牢掌握才行 4 34 3 按键函数模块按键函数模块 按键实现通过中断来进行调整 键盘中断 INT1 T1 INT 定时器 1 每秒刷新 LCD 显示 T0 INT 中断时 系统会调用一段 特定的函数 即我们设置的中断函数 一般称为中断服务函数 一般的函数的调用在程序中是固定的 二中断服务函数的执行完 全是随机的 4 3 14 3 1 实现功能实现功能 通过按键调整 4 3 24 3 2 函数设计函数设计 键盘中断 INT1 4 3 34 3 3 小结小结 通过对电子时钟调整函数的编写 是我认识到 不管做 什么 都要有明确的思路 对于本函数来说 大部分的内容都是 相同的不同的只是标志位的赋值不同唯一 此时变成人员就要有 高度清晰的思路 只要有一个赋值不对 整个函数都会受到影响 而且这种错误是非常不易检查的 同样在作别的编程的时候也是 一样 只有有了高度清晰的思路 我们在变成过程中才不会被绊 倒 4 44 4 主函数模块主函数模块 通过初始化 对各个端口进行设置初值 如按键输入端口 PD 数据输入输出端口 控制端口等 对 1302 的初始化 lcd 的 初始化等完成主控制器的应用 33 第五章第五章 心得体会心得体会 单片机的学习已即将结束 我对自己的专业有了更深的体会 非常感谢老师们的辛勤教导 以企业的要求对我们进行培训 开拓 我们的思维 改变我们的思维方式 让我们自主发挥 让我们在以后 工作中少走很多弯路 并在此过程中让我们自己找到了自身的种种 缺点 让我们受益非浅 也许现阶段的学习还存在诸多不足 在以 后的工作中 会勤于总结 认真学好自己的一切课程 第六章第六章 致谢致谢 感谢吴老师的批阅和帮助 希望能达到你的要求 在你的帮 助下我们的论文会愈来愈好的 34 附录附录 1 元器件表元器件表 序号代号名称型号 规格数量备注 1U1 单片机 Amega161 2 Kx 1 2 3 4 按钮 XDJT1102S 4 3C1 C2 电容 0805 30pF2 贴片 4X2 晶振 PTVC 75114 12MHz1 5 液晶显示器 LCD 016M002L1 6R1 电阻 RJ47 10k 0 5W1 7R2 电位器 WX2 27 15k 1W1 8 RP1 排阻 A09 103J 2 4k 8 1w 1 贴片 9 电源 5V1 35 附录附录 2 仿真图仿真图 注 代码暂时还不能与 protuse 连接 36 附录附录 3 3 源码源码 dianzizhong c Created 2013 3 15 9 21 25 Author Administrator include 单片机寄存器的头文件 include include include a 为要操作的寄存器 b 为要操作的位数 define SET 1 a b a 1 b define CLE 0 a b a i if data else DIO CLE 0 SCLK SET 1 时钟信号 delay us 2 SCLK CLE 0 data 1 移位 准备好下次要写的数据 43 向 DS1302 读取一个字节 uchar DS1302OreadByte void uchar i uchar d data 0 CLE 0 DDRD PD5 for i 8 i 0 i d data 1 移位 以便下次存放读出的数据 if PIND SCLK SET 1 delay us 2 SCLK CLE 0 SET 1 DDRD PD5 return d data 返回读到的数据 44 写 ds1302 寄存器 void Write1302 uchar ucAddr uchar ucDa RST CLE 0 SCLK CLE 0 RST SET 1 DS1302writeByte ucAddr 地址 DS1302writeByte ucDa 写 1byte 数据 SCLK SET 1 RST CLE 0 读 ds1302 的寄存器 uchar Read1302 uchar ucAddr uchar ucData RST CLE 0 SCLK CLE 0 RST SET 1 45 DS1302writeByte ucAddr 0X01 地址 命令 ucData DS1302OreadByte SCLK SET 1 RST CLE 0 return ucData void get time uchar time time 5 Read1302 READ SECOND time 4 Read1302 READ MINUTE time 3 Read1302 READ HOUR time 2 Read1302 READ DAY time 1 Read1302 READ MONTH time 0 Read1302 READ YEAR void Initial void Write1302 WRITE PROTECT 0 x00 Write1302 WRITE SECOND 0 x45 46 Write1302 WRITE MINUTE 0 x24 Write1302 WRITE HOUR 0 x09 Write1302 WRITE DAY 0 x13 Write1302 WRITE MONTH 0 x04 Write1302 WRITE PROTECT 0 x80 void adopt data uchar n uchar show data show data n 4 show data 1 n void T1 int void TCCR1B 0 x00 控制寄存器 停止定时 TIMSK 0 x04 中断屏蔽寄存器 中断允许 TCNT1 0 xcf2c 100ms 溢出一次 TCCR1B 0 x02 sei 使能全局中断 47 void init 1302 void Write1302 WRITE PROTECT 0 x00 禁止写保护 Write1302 WRITE SECOND time 4 秒位初始化 Write1302 WRITE MINUTE time 3 分钟 Write1302 WRITE HOUR time 2 小时 Write1302 WRITE DAY time 1 日 Write1302 WRITE MONTH time 0 月 Write1302 WRITE PROTECT 0 x80 允许写保护 按键函数 uchar get key void uchar i 0 PORTD 0 x0f DDRD 0 xf0 设置为输出 NOP NOP if PIND 消除抖动 switch PINDbreak 选择键 case 0 x0d i 3 break 减值键 case 0 x0b i 2 break 增值键 case 0 x07 i 1 break 确定键 while PIND 等待按键松开 else i 0 没有按键被按下 DDRD 0 xff 设置为输出 return i 返回按键值 转换为 lcd 要显示的数据 49 void adopt data uchar i j 0 for i 0 i 4 lcd show j 1 time i j 2 转换为 ds1302 的时间 void affirm data void uchar i j 0 for i 0 i 6 i time i lcd show j 4 lcd show j 1 j 2 50 增值函数 n 为要增值的位数 而 max 是要增值的数的最大值 限幅 void add d uchar n uchar max if lcd show n max lcd show n else if lcd show n max lcd show n 0 else lcd show n 0 value lcd show n void dec d uchar n uchar max if lcd show n 0 lcd show n else if lcd show n max lcd show n 0 51 else lcd show n max value lcd show n 功能显示函数 void show function void uchar i uchar function 2 5 0 x43 0 x4c 0 x4f 0 x43 0 x4b 0 x41 0 x4c 0 x41 0 x52 0 x4d wr dictate 0 x01 display lcd 0 x84 0 x7e for i 0 i 6 i display lcd 0 x85 i function 0 i 显示时间 display lcd 0 xc5 i function 1 i 设置时间 52 void set clock void uchar cursor 0 光标 uchar i j wr dictate 0 x01 清屏 Write1302 WRITE PROTECT 0 x00 Write1302 WRITE SECOND time 4 0 x80 暂时停止时钟的 运行 Write1302 WRITE PROTECT 0 x80 display lcd 0 x82 0 x00 显示年 display lcd 0 x85 0 x01 月 display lcd 0 x88 0 x02 日 display lcd 0 xc2 0 x03 时 display lcd 0 xc5 0 x03 分 display lcd 0 xc8 0 x03 秒 for i 0 j 0 i 10 i 2 display lcd 0 x80 j number lcd show i display lcd 0 x80 j 1 number lcd show i 1 53 j j 3 wr dictate 0 x02 wr dictate 0 x0e j 0 while 1 NOP switch get key case 1 确认 cursor j if cursor 2 0 j wr dictate 0 x14 wr dictate 0 x14 54 else wr dictate 0 x14 if cursor 10 j 0 cursor 0 wr dictate 0 x02 光标归位 place 0 x80 j break case 2 加 switch cursor 一下的 case 成功选择项为光标对应的调 55 整位数 case 0 add d cursor 1 break case 1 if lcd show 0 1 add d cursor 2 else add d cursor 9 break case 2 add d cursor 3 break case 3 if lcd show 2 3 add d cursor 0 else add d cursor 9 break 56 case 4 add d cursor 2 break case 5 if lcd show 4 2 add d cursor 3 else add d cursor 9 break case 6 add d cursor 5 break case 7 add d cursor 9 break case 8 add d cursor 5 break case 9 add d cursor 9 break display lcd place number value 显示在 液晶屏的相应的位置 wr dictate 0 x10 break 57 case 3 减 switch cursor 一下的 case 成功选择项为光标对应的调 整位数 case 0 dec d cursor 1 break case 1 if lcd show 0 1 dec d cursor 2 else dec d cursor 9 break case 2 dec d cursor 3 break case 3 if lcd show 2 3 58 dec d cursor 0 else dec d cursor 9 break case 4 add d cursor 2 break case 5 if lcd show 4 2 dec d cursor 3 else dec d cursor 9 break case 6 dec d cursor 5 break case 7 dec d cursor 9 break case 8 dec d cursor 5 break case 9 dec d cursor 9 break 59 display lcd place number value 显示在 液晶屏的相应的位置 wr dictate 0 x10 break case 4 退格 affirm data init 1302 T1 OPEN goto OUT default break OUT NOP 补充显示 void allowance void 60 uchar i j display lcd 0 x82 0 x00 显示月 display lcd 0 x85 0 x01 日 display lcd 0 x88 0 x02 时 display lcd 0 x8b 0 x03 分 get time time adopt data for i 0 j 0 i 10 i 2 display lcd 0 x80 j number lcd show i display lcd 0 x80 j 1 number lcd show i 1 j j 3 int main void uchar chinese 5 8 61 0 x08 0 x0f 0 x12 0 x0f 0 x0a 0 x1f 0 x02 0 x02 0 x0f 0 x09 0 x0f 0 x0 0 x0f 0 x09 0 x13 0 x00 0 x1f 0 x11 0 x11 0 x1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家具厂销售价格管控规定
- 医院建设施工环保措施计划
- 神经递质信号整合-洞察及研究
- 停车棚合同(标准版)
- 高三生物分组讨论教学计划
- 初中科学教研组教学反馈跟踪计划
- 苏教版小学科学1年级上册学生发展计划
- 2025年营养学膳食指导方案设计答案及解析
- 2025年老年医学综合评估与护理策略模拟考试答案及解析
- 2025年心血管内科心绞痛急救适用药物考核答案及解析
- 初中七年级数学备课组科研合作计划
- 《人工智能应用基础》 完整课件(共十个模块-上)
- 职业技术学院旅游管理专业《旅行社经营与管理》课程标准
- 奶茶店股份合作合同协议
- 2025-2030中国空气粒子计数器行业市场发展趋势与前景展望战略研究报告
- 立杆方法分类普通电杆的组立系列课件
- 四年级音标试卷及答案
- 学校食堂运营管理职责与分工
- 2025云南师范大学辅导员考试题库
- BEC商务英语(中级)阅读模拟试卷11(共405题)
- 语文课堂教学目标设计“四出发”
评论
0/150
提交评论