1、 毕业设计论文 题 目 多功能数字 时 钟 系别: 专业: 年级: 学生姓名 : 同组成员 : 指导教师 : 完成日期 : 2 【摘要】 本设计是设计一个单片机控制的多功能时钟系统。 本设计的多功能时钟系统采用 AT89S52 单片机为中心器件,利用其定时器 /计数器定时和记数的原理,结合 液晶 显示电路、 时钟芯片 DS1302 电路、 电源电路以及按键电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现液晶显示,显示时间有年、月、日、时、分、秒以及星期 ,还可以设置闹钟和整点报时 以及断电保护 功能 可谓功能强大。其中软件系统采用 单片机 汇编语言编写程序,包括显示程序,闹钟数程序
2、,中断,延时程序,按键消抖程序等,并在keil 中调试运行,硬件系统利用 PROTEUS 强大的功能来实现,简单 且 易于观察,在仿真中就可以观察到实际的工作状态。 【关键词】 时钟芯片 DS1302、 单片机汇编语言 、 液晶显示电路 、 AT89S52芯片 3 目录 1 前言 .4 2 系统总体方案设计 及 硬件设计 .4 2.1 系统总体方案设计 . . .5 2.2 硬件电路设计与分析 . . .5 2.2.1 振荡器和时钟电路工作原理 .6 2.2.2 时钟芯片数据采集设计与分析 .6 2.2.3 液晶显示电路 . .6 2.2.4 输出控制电路 . .7 2.2.5 复位电路 .7
3、 2.2.6 电源电路和总电路布局 .7 3 软件设置及调试 . . . .8 3.1软件总体方案设计 . .8 3.2按键模块设计 . . .11 3.2.1 按键 1的说明 . .12 3.2.2 按键 2 的说明 . .13 3.2.3 其他按键的说明 . .13 3.2.4 报时功能的说明 . .13 3.2.5 闹钟功能的说明 . .14 3.2.6 加 1、移位功能的说明 . .14 3.3 时钟模块设计 . . .14 3.4 液晶显示模块设计 . .14 4 设计总结 . . .14 5 程序清单 . . .14 6 参考文献 . .18 4 1 前言 在当代繁忙的工作与生活中
4、,时间与我们每一个人都有着非常密切的关系,都受到时间的影响。为了更好的利用自己的时间,我们必须对时间有一定度量,因此产生了万年历和钟表。电子时钟的发展是非常迅速的,从刚开始 纯粹的日历发展到现在的年月日及分秒,即使现在的电子时钟千奇百怪,但是它们都只是完成一种功能 -计时功能。 虽然现在市场上已有现成的电子钟集成电路芯片出售,价格便宜、使用也方便,但是 人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示日期、农历 、以及星期等,给人们的生活带来了方便。另外数字钟还具闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。 本设计在设计过程中认真分析了各种软件的使
5、用利弊,摈弃了许多陈杂不合适的方法,在设计软件使用上选择了以往学过的 keil、 Proteus 和单 片机程序烧写软件。整个设计过程将理论与实践相结合,突出了实战性。 5 2、系统总体方案设计 及 硬件设计 2.1 系统总 体方案设计 电路原理设计是基于小系统 板 包括电源电路、复位电路、按键电路、 DS1302时钟电路、液晶显示驱动电路、输出控制电路。电源部分是用电池来提供的3v-5v,晶体振荡器采用的是 12MHz 的石英晶体振荡器。 整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。时钟芯片产生时钟信号, 利用单片机的 I/O 口
6、传 给单片机;并通过 I/O 口 实现 LCD 的显示。系统设有 4 个独立式按键可以对时间星期年月日进行调整,还可以设置闹钟。 具体如图 1所示: 图 1 系统整体框图 2.2 硬件设计 2.2.1 振荡器和时钟电路工作原理 AT89S2 单片机内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟,外部还需附加电路。 XTAL1 引脚为反相放大器和时钟发生电路的输入端, XTAL2 引脚为反相放大器的输出端。片内时钟发生器实质是个 2分频的触发其输入来自振荡器的 fosc,输出为 2 相时钟 信号,即节拍信号 P1、 P2,器频率为 fosc2。 2 个节拍为 1个状态时钟 S。状态时钟
7、再 3 分频后为 ALE 信号,其频率为 fosc6,状态时钟 6分频后为机器周期信号,器频率为 fosc12。特殊功能寄存器 PCON 的 PD 位可以控制振荡器的工作,当 PD=0 时,振荡器停止主 控 制 器 AT89S52系列单片机芯片 电源 复位电路 按键电路 时钟振荡电路 液晶显示 DS1302 时钟芯片电路 输出控制电路 6 工作,单片机进入低功耗工作状态,复位后, PD=0,振荡器正常工作。 2.2.2 时钟芯片数据采集设计与分析 ( 1) DS1302 是一种可编程的实时时钟芯片,具有计算 2100 年前的时间的能力,包括时钟 /日历寄存器和 31 字节( 8 位)的数据暂存
8、寄存器,数据通 信权通过一条串行输出口。时钟 /日历提供包括秒、分、时、日期、月份和年份信息。闰年可自行调整,以串行方式向单片机传送单字节或多字节的秒、分、时、日、月、年等实时时间数据;只通过三根线进行数据的控制和传递: RST、 I/O、 SCLK; 其在电路的功能是 还具有在 出现主电源断电时备用电源可继续保持时钟的连续运行。 图 2 时钟引脚 图 ( 2) DS1302 芯片内部寄存器读写地址及位定义格式如 表 1: 寄存器名 读写地址 取值范围 位定义 写操作 读操作 D7 D6 D5 D4 D3 D2 D1 D0 秒寄存器 80H 81H 00-59 CH 秒十位 秒个位 分寄存器
9、82H 83H 00-59 0 分时位 分个位 时寄存器 84H 85H 01-12 或00-23 12/24 0 AM/PM 十位 小时个位 日期寄存器 86H 87H 01-28-31 0 0 十位 日个位 星期寄存器 8AH 8BH 01-07 0 0 0 0 星期位 月寄存器 88H 89H 01-12 0 0 0 十位 月个位 年寄存器 8CH 8DH 00-99 年十位 年个位 控制寄存器 8EH 8FH WP 0 0 0 0 0 0 0 表 1 DS1302芯片内部寄存器读写地址及位定义 如果单片机要对 DS1302 内部寄存器进行读写操作,必须先将与寄存器对应的位操作地址传送给
10、 DS1302,然后再进行读写数据的操作。控制寄存器是用来决定能否对 DS1302 进行读写操作,当控制字的最高位 WP=0 时,允许进行读写操作;当 WP=1 时,禁止读写操作。所以单片机对 DS1302 进行读写操作时,必须先将控制字 00H 写入到 DS1302 的控制寄存器中。 2.2.3 液晶显示电路 LCD 显示器能显示数码管不能显示的其他字符、文字和图 形,是十分重要的显示终端, LCD1602 是字符点阵液晶显示模块。利用 LCD1602,所用的时间年、月、日、星期可同时可见,一目了然,采用双行显示,让电子钟能够更直观的显示。 其实图如图 3、引脚功能如表 2: 7 图 3 液
11、晶显示器实图 引脚号 引脚名称 引脚功能含义 1 Vss 地管脚( GND) 2 Vdd +5V 电源引脚( Vcc) 3 Vo 液晶显示驱动电源( 05V),可接电位器 4 RS 数据和指令选择控制端, RS=0:命令 /状态 RS=1:数据 5 R/W 读写控制线, R/W=0:写操作, R/W=1:读操作 6 E 数据读写操作控制位, E 线向 LCD 模块发送一个脉冲, LCD模块与单片机之间将进行一次数据转换 714 DB0DB7 数据线,可以用 8 位连接,也可以用高四位连接,节约资源 15 A 背光控制正电源 16 K 背光控制地 表 2 lcd 液晶显示器引脚功能 2.2.4
12、输出控制电路 在 P2.0 端口接一个 蜂鸣器 ,用于整点报时和响闹铃。 2.2.5 复位电路 本次设计采用按键电平复位,按键电平复位相当于按复位键后,复位端通过电阻与 Vcc 电源接通; 2.2.6 电源电路 和总电路布局 因 为该电路所需电压为 3-5v,可直接用电池供应或也可以用直流电源供应,但需经过变压才行。 下图图 4 为整个设计的总体布局图。 8 图 4 硬件电路设计总布局图 3 软件设计 及调试 3.1 软件总体设计方案 A 软件设计目标 : 软件部分总体上是模块化的设计思想,通过子程序调用设计方式 ,将所有的模块综合到一起,使程序可读性较高 。 B 总体架构说明 该时钟程序设计
13、思路如下: ( 1)、在程序头将设计中的一些固定空间进行分配并注释。 ( 2)、初始化程序,如设定时钟初始显示 “ 2010 年 3 月 20 日,星期四, 11:59 ” 以便一开始就能进入整点报时状态,显示该功能 ;设定使用定时器 1;将一些未到时钟设计功能的功能端口关闭等。 ( 3)开始主程序进行程序扫描,先扫描拆字子程序,将分配好的时分秒等高地位的数字调入到显示子程序中。 显示子程序通过分配的空间对应口将拆字子程序的内容在 液晶显示器 上显示相应的时分秒,再调用走时程序使时钟进行读秒等工作。 进入按键扫描,判断按键是否有变动,若有就根据设计程序对相应的按键按入次数而进行实现相应的功能。
14、如进入时间调整、闹钟设置、闹钟开启与否等。 进入闹钟的判断,在时分上与设置的闹铃时间 吻合的话就做相对应的判断,再依据是否有开启闹钟而进行响铃与否,如果有响铃则设置其一直响铃知道有人为按取消按键取消闹铃。 进入整点报时扫描,判断是否在时分上都进入了整点,如果是就报时,然后就退出整点报时,等到下一个整点的到来。 最后返回主程序头重新依次扫描。显示过程设有消隐,按键设有去斗。 ( 4) 子程序部分。在主程序的调用下依据不同的子程序工能而编写子程序,有多级嵌套。这些子程序包括拆字子程序、延时子程序、走时间子程序、整点报时9 子程序、按键处理子程序、调时间子程序、闹钟设置子程序、闹钟子程序、闹钟开启
15、子程序。 主 流程图如图 5 所示。 图 5 主程序流程图 ( 2) I/O 口分配表 名称 地址 功能 P_Lcd P0 lcd 数据端口 开始 各模块初始化 是否处于设置 拆字 闹钟是否开启 比较闹钟时间与当前时间 按键模块 执行报时 判断整时 是否执行报时 报时功能否开启 读时间 10 端口 pq p1 按键输入端口 lcdrs p2.5 lcdrs=1 选择数据寄存器, lcdrs=0 选择指令寄存器 lcdrw p2.6 lcdrw=1 进行读操作, lcdrw=0 进行写操作 lcde p2.7 lcdep 由 10 时,液晶模块执行命令 pf P2.0 闹钟蜂鸣器接口 dat P
16、2.4 DS18b20 数据端口 sclk p3.5 ds1302 时钟端口 io p3.6 ds1302 数据端口 rst p3.7 ds1302 复位端口 位标志 IsSheZhi 30h 设置判断位 BJ 31h 比较标示位 QH 32h 切换屏幕标示位 bs 33h 报时功能标示位 cxbs 34h 执行报时标志位 sec 50h 秒暂存地址 min 51h 分暂存地址 hour 52h 时暂存地址 day 53h 日暂存地址 month 54h 月暂存地址 week 55h 星期暂存地址 year 56h 年后两位暂存地址 KeyCode 57h 按键 1功能子程序序号暂存地址 ji
17、epai 58h 存放报时声音的节拍常数 chuzhi 59h 报时开始秒时间常数 shengshu 5ah 存放报时声数 DspBuf 60h 当前时间拆字后存参照地址 dspba 70h 闹钟时间首地址 表 3 I/O口分配表 ( 4)子程序详解表 子程序名称 功能 改变 Sub1 闹钟 pf Sub2 报时一声 Pf、 th1、 jiepai zhengshi 判断当前时间是否是整时 shengshu 、 cxbs baoshi 执行报时功能 Shengshu、 cxbs bijiao 判断是否到闹钟时间 TR0 opr00 设置当前时间状态 IsSheZhi、 r1、 KeyCode
18、opr01 进入设置闹钟时间状态 IsSheZhi、 r1、 KeyCode opr02 把所设置的时间作为当前时间 KeyCode、 sec、 min、 hour、 day、month、 IsSheZhi opr03 把所设置的时间作为闹钟时间 KeyCode、 IsSheZhi write DS18b20 写 DQ、 r4、 r7 read DS18b20 读 DQ、 r0、 r4、 r5、 r7 set1302 ds1302 初始化 Rst、 Sclk、 r0、 r1、 r6 get1302 读出秒 ,分 ,时 ,日 ,月 ,星期 ,年读出秒 ,分 ,时 ,日 ,月 ,星期 ,年 Rst、 Sclk、 r0、 r1、 r6 clockrd ds1302 读子程序 Sclk 、 r7 Ds1302R ds1302 写数据子程序 Sclk 、 r7 chaizi 时钟拆字 DspBuf、 b、 r0