1、单片机原理及应用基于 Proteus和 Keil C实 习 报 告课程名:利用单片机及 DS1302制作电子时钟摘 要为了进一步熟悉51单片机的编程以及学习电子时钟的相关设计方法,在老师的指导下我们进行了本次电子时钟的设计。我们在实习期间基于51单片机AT89C51和时钟芯片DS1302设计并实现了电子时钟显示。在PCB板制作完成并且调试成功之际,为了进一步提高自己的动手能力和编程能力,对这次电子时钟的设计和制作的过程中遇到的问题及设计思路做一次总结。本电子时钟是一种利用时钟芯片DS1302及51单片机来显示时、分、秒和年、月的装置。默认显示为时间,由四个按键分别控制定时设置、时间调整、分钟调
2、整、日期显示;设计电路工作电源为5V;由4位LED数码管显示时间,格式为时时分分,中间点每隔1S亮暗;有备用电池,掉电后再上电能正常显示时间。电子时钟大体可以分为三大模块,数码管的显示模块、DS1302 时钟芯片与单片机的时钟模块和按键与单片机的模块。单片机在 5V 电压下,各个模块正常工作。单片机从 DS1302 芯片中读出一组时间日期数据,同时单片机通过按键设置当前要求显示的信息给单片机。单片机接收到各个数据时,把各个数据显示出来。目录一、总体设计 .41.1 设计目的 .41.2 硬件功能描述 .41.3 设计方案选择 .41.4 设计任务及要求 .4二、电子时钟软件和硬件设计 .52.
3、1 硬件电路设计 .52.1.1 工作原理 .52.1.2 单元模块电路 .52.1.3 元器件清单 .62.2 软件设计 .72.2.1 程序设计流程 .7三、电路调试 .7四、心得体会 .8五、参考文献 .10附录: .12附录:程序清单 .13附录: .21一、总体设计此电子时钟利用 AT89C51 单片机和时钟芯片 DS1302 设计完成。1.1 设计目的1、通过对电子时钟的设计,进一步熟练掌握单片机编程方法及思想。2、通过对电子时钟的设计,掌握实时时钟芯片 DS1302 的使用方法。3、通过对电子时钟的设计,进一步掌握独立式键盘的编程控制并认识独立式键盘在实际中的运用。4、通过对电子
4、时钟的设计,增强对单片机的兴趣及动手能力。并在此过程中学会对程序的逐步调试。 1.2 硬件功能描述数字钟能够完成24 小时制计时,计时初始化值为00:00:00,用户可以通过按键调整时钟的初值实现校时功能,并且可以通过按键设定一个24 小时以内任意时刻的闹铃,用户可以手动选择闹铃的开或者关两种状态。1.3 设计方案选择计时方案:方 案 1: 采 用 实 时 时 钟 芯 片现 在 市 场 上 有 许 多 实 时 时 钟 集 成 电 路 , 如 :DS1287、 DS2887、 DS1302等 。 这 些 实 时 时 钟 芯 片 具 备 年 、 月 、 日 、 时 、 分 、 秒 计 时 功 能
5、和 多 点 定 时功 能 , 计 时 数 据 的 更 新 每 秒 自 动 进 行 一 次 , 不 需 要 程 序 干 预 。 因 此 , 在 工业 实 时 测 控 系 统 中 多 采 用 这 这 一 类 专 用 芯 片 来 实 现 实 时 时 钟 功 能 。方 案 2: 是 用 单 片 机 内 的 可 编 程 定 时 器 。利 用 单 片 机 内 部 的 定 时 计 数 器 进 行 中 断 定 时 , 配 合 软 件 延 时 实 现 时 分秒 的 计 时 。 该 方 案 节 省 硬 件 成 本 , 但 程 序 设 计 较 复 杂 。显 示 方 案 :一个良好的显示模块对一个系统非常重要,所有操
6、作结果和计时结果,都要通过显示模块来显示出来。同时显示模块提供了良好的人机交互平台。常用的显示模式有LED 7段数码管显示、点阵显示和液晶显示。液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶其成本偏高。在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片。鉴于LED 7段数码管成本低,也比较容易实现的特点,最终确定使用共阳极数码管来显示。1.4 设计任务及要求任务:设计一个可调时及日期显示的电子时钟要求:1、用 DS1302 来实现对时间的计算2、用 7 段 LED 来显示时间3、加独
7、立式键盘来进行调时二、电子时钟软件和硬件设计2.1 硬件电路设计2.1.1 工作原理此电子时钟可显示的时间范围为:2000 年 1 月 1 日 0 点至 2100 年 12月 31 日 23 时 59 分。此时钟在正常计时模式下具有自动调整每月的天数的变化,并用内接电池对时间保持。时间为 24 小时至。接通电源对时间进行调整,按定时设置键确定被修改位的值。用时钟芯片记忆当前时间并保持,待下次接通电源无须调整能正确显示当前时间。定时设置:菜单按键,松开按键时有效此按键实现闹铃功能,设定一个时间,此时四位数码管第四位的小数点亮起,表示有闹铃设置;当闹铃是可按此键结束闹铃。时、分调整: 加一键,松开
8、按键有效当定时设置键选中要修改的位时,如分(分闪烁时) ,按此键可以使分的值从当前值开始加一,加至 60 时变为 00(59 过后即显示 00,不显示 60) ;而时则在加至 24 时变为 00(23 过后即显示 0,不显示 24) ;日在加至 32 时变为 00(即 31 过后即显示 0,不显示 32);月在加至 13 时变为 00(即 12 过后即显示 0,不显示 13) ;年在至 2100 时变为 2000(即2099 过后即显示 2000,不显示 2100)日期显示: 年、月显示键,松开按键有效按下此键松开后,显示为日期,5 秒后自动返回时间显示。2.1.2 单元模块电路1 独立按键模
9、块XTAL218XTAL119ALE30EA31PSEN29RST9P0./AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD63P0.7/AD732P1.01P1.2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD1P3.2/INT012P3./INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A92P2./A1023P2.3/A124P2.4/A1225P2.5/A1326P2.6/A14
10、27U1AT89C51RST5SCLK7I/O6X12X23VC18VC21U2DS1302R910kR1010kR110kR1210kB13.6V 定 时 设 置时 调 整分 调 整日 期 显 示系统有四个独立按键,分别接至单片机P1.4、P1.5、P1.6、P1.7口。2 显示模块234567891RP14.7KR42KR52kR62KR72KQ1850 Q2850 Q3850 Q4850本系统显示模块电路由四个PNP三极管和一个四位一体7段LED数码管组成。PNP三极管用来驱动数码管。3 复位电路模块 RST 5SCLK 7I/O 6X12X23VCC1 8V 2 1U2DS1302R3
11、10kR810kC110uF/16V复位电路主要的功能是使整个系统初始化,在每次上电时系统自动初始化。 使CPU及其他功能部件处于一个确定的初始状态,并从这个状态开始工作,单片机应用程序必须以此作为设计的前提。4 时钟芯片模块RST 5SCLK 7I/O 6X12X23VCC1 8VCC2 1U2DS1302X132.768K B13.6VDS1302时钟芯片是本系统实现高精度计时的关键。利用DS1302 时钟芯片独立于单片机来计时,在提高计时进度的同时也提高了整个系统的抗干扰能力。DS1302通过SCLK、I/O、RES端口和单片机AT89C51 进行通信。SCLK接至单片机P1.1口,在读
12、写操作时给DS1302提供相应的时钟脉冲;I/O接至P1.2用来传送所有的数据;RES接至单片机P1.3上用来控制单片机与时钟芯片间的数据传送的开始与结束。DS1302 的工作原理及使用方法见附录。5 主控模块 XTAL218XTAL119ALE30E1PSN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P1.01 .2P1.23 .34P1.45 .56P1.67 .78P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15P2.7/A1528P2.
13、0/A821.1/9P2./A023.3/1 4P2.4/A225.5/136.6/47U1AT89C51R810kC110uF/16VC230PFC330PF X212MHz主控模块的核心组成部分是单片机AT89C51, 承担着所有操作任务的调控与分派工作。6 闹钟模块闹铃模块由蜂鸣器和蜂鸣器的驱动组成。在有闹铃发生的时候,蜂鸣器的驱动电路驱动蜂鸣器发声,产生闹铃的效果。2.1.3 元器件清单元件名称 规格型号 数量(个)单片机 AT89S51 1时钟芯片 DS1302 14 位一体的共阳 LED显示器7SEG-MPX4-CA-BLUE 1按键 BUTTON 3电阻 2K 4排阻 4.7K
14、1三极管 PNP 4电阻 10K 102.2 软件设计2.2.1 程序设计流程 YNN YY N NYN三、电路调试各程序模块具有一定的独立性,因此可以先调试模块,在模块开始主程序 定时器 T1 初始化Ds1302 读取数值与设定数值是否相同 掉电后重启初始化 ds1302Flag=1&flag_time=1?显示调节时的值Set_flag=1 显示闹钟值显示走时判断闹钟是否发生 响闹钟返回功能都能实现的前提下,再调试总程序,这样能快捷地检查判断硬件或软件上的问题。调试结果及解决办法如下:1测试 DS 读写模块时,从 LED 显示能正确写入与读取当前时间,但 DS1302 的工作情况不太理想,
15、主要表现在实时时间稍微偏快。DS1302 时钟的产生基于外接的晶体振荡器,振荡器的频率为32768HZ,该晶振通过引脚 X1、X2 直接连接至 DS1302,即 DS1302是依靠外部晶振与其内部的电容配合来产生时钟脉冲,由于 DS1302 在芯片本身已经集成了 5pF 的电容。所以,为了获得稳定的可靠的时钟,必须选用具有 5pF 负载电容的晶振。然而,许多人在选用晶振时仅仅注意了晶振的额定频率值,而忽视了晶振的负载电容大小,甚至连许多经销商也不能提供所售晶振的负载电容,所以即使在使用中选用了符合 32768Hz 的晶振,但如果该晶振的负载电容与DS1302 提供的 5pF 不一致时,就会影响
16、晶振的起振或导致振荡频率的偏移。2测试显示模块时,数码显示管全亮显示“8.8.8.8.”而不是预设”的初值。利用 Proteus 软件仿真,发现仿真显示正常,再检查硬件,发现段码位选线与 P0 口接线错误。按原理图重新焊接后能正常显示。3测试蜂鸣模块时,没有时间显示一直保持蜂鸣,不能返回主程序。重新检查程序再次赋值给 DS1302 和闹钟时实物正常工作,证明现有程序语法和逻辑上没有错误。从赋值过的数字中找规律,发现当 DS初值的“分”个位为 9 而闹钟的“分”为 0 时,蜂鸣出现错误。查阅 DS 的显示有关资料,由于 DS 的数据是 BCD 码形式读取,因此“X9”的数据加 1 后为“*0”
17、;但程序所用为十六进制, “X9”加 1 后为“*A” ,所以当 DS 刚到达闹钟时间准备蜂鸣时,程序中用INC 指令对“分”加 1 后只达到“*A” ,与 DS 一分钟后读取到的“*0”一直不相等,程序无法向下执行,也就是无法同步显示当前时间以及关闭蜂鸣。解决办法:进入蜂鸣状态时,先对比是否是个位为 9 的数据,是则按照 BCD 码形式直接赋值为“*0”到暂存区,再加 1;否则直接用 INC 指令加 1。不断读取 DS“分”的数据与暂存区数据比较,相等则表示满一分钟,关闭蜂鸣。修改程序后该模块运行正常。4测试调整模块,进入中断时,按键后有时出现显示错乱,按键失灵,出现连续加减的情况。有了蜂鸣
18、模块的前例,增加了数据个位为 9 时的处理程序;分析出现连续加减可能是因为消抖延时不够,造成程序误判断为按键连击,因此增大延时时间。修改程序后该模块正常运作。5综合总程序测试,各部分功能运作正常,但是实际硬件与软件结合后没有达到达到任务要求,此次设计失败。四、心得体会五、参考文献【1】51单片机应用从零开始 杨欣 编著 清华大学出版社 2008【2】单片机原理及接口技术(第三版) 李朝青 编著 北京航空航天大学出版社 2008【3】51单片机C语言教程 郭天祥 编著 电子工业出版社 2009附录:DS1302 时钟芯片的工作原理和使用方法1、DS1302的基本组成和工作原理DS1302的管脚排
19、列及描述如下图及表所示:2、DS1302内部寄存器CH:时钟停止位 bit7=1,12 小时模式CH=0 振荡器工作允许 bit7=0,24 小时模式CH=1 振荡器停止 寄存器2 的第5 位:AM/PM 定义WP: 写保护位 AP=1 下午模式WP=0 寄存器数据能够写入 AP=0 上午模式 WP=1 寄存器数据不能写入 DS: 二极管选择位TCS: 涓流充电选择 DS=01 选择一个二极管TCS=1010 使能涓流充电 DS=10 选择两个二极管TCS=其它 禁止涓流充电寄存 DS=00或11,即使TCS=1010,充电器2的第7位12/24小时标志 功能也被禁3、DS1302使用说明及注意的问题DS1302的控制字如表1所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示要进行写操作;为1 表示进行读操作。控制字节总是从最低位开始输入/输出。表1 DS1302 控制字时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写