欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    课程设计(论文)-单片机数字闹钟电子表设计报告.doc

    • 资源ID:3292548       资源大小:1.76MB        全文页数:36页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计(论文)-单片机数字闹钟电子表设计报告.doc

    单片机数字闹钟/电子表设计报告一、设计意义随着生活水平的提高,人们越来越追求人性化的事物,传统的时钟已不能满足人们的需求。现代的数字钟不仅需要模拟电子技术,而且需要数字电路技术和单片机技术,增加了数字显示等的功能。单片机电子钟表电路可以由单片机模块、实时时钟电路模块、人机接口模块、报警模块等部分组成,硬件电路简单稳定,并可以利用软件编程减小电磁干扰和其他环境干扰的影响,减小因元器件精度不够引起的误差等优点,与机械式时钟相比具有更高的准确性和直观性,电路简单,使用寿命长,应用范围广,被广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,数字钟表的精度远远超过老式机械钟表,给人们生产生活带来了极大的方便。另一方面,由于单片机技术的使用,大大扩展了钟表原先的功能,可以提供定时自动报警、按时自动打铃、时间程序自动控制及各种定时电气的自动启用功能等。因此,研究数字钟表及扩大其应用,有着非常现实的意义。二、本设计功能描述1、采用STC89C52单片机作为主控芯片,实现数字钟表主控功能。2、采用液晶屏显示当前年、月、日、时、分、秒,闹铃时间及状态等信息。3、采用六键键盘设定时间初始值,具体方法是按时间设定键依次进入年、月、日、时、分、秒设定状态,然后通过向上、向下键修改设定值。正在设定的变量以闪烁状态突出显示。4、采用六键键盘设定闹铃时间,具体方法是按闹铃设定键依次进入时、分设定状态,然后通过向上、向下键修改设定值。正在设定的变量以闪烁状态突出显示。5、采用DS1302实时时钟芯片完成后台计时功能,要求具有后备电源,即使主电源掉电时间仍然保持运行。6、可设定闹铃使能,具体方法是按闹铃使能键,按一次打开,再按一次关闭。闹铃使能关闭时不报警。7、当闹铃使能打开,且当前时间到达闹铃设置时间,则蜂鸣器和LED红灯同时报警,如不按取消键,报警时间为1分钟。报警状态可以通过按取消键退出。8、系统通过USB电源供电,单片机程序也可通过USB线串行下载。三、相关基础介绍1DS1302芯片(1) DS1302的性能特性l 实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;l 用于高速数据暂存的31×8位RAM;l 最少引脚的串行I/O;l 2.55.5V电压工作范围;l 2.5V时耗电小于300nA;l 用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;l 简单的3线接口;l 可选的慢速充电(至Vcc1)的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供电源,并提供低功率的电池备份;Vcc2在双电源系统中提供主电源,在这种运用方式中Vcc1连接到备份电,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由Vcc1或Vcc2中较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电;当Vcc2小于Vcc1时,DS1302由Vcc1供电。(2) DS1302数据操作原理 DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输出。无论是读周期还是写周期,开始8位指定40存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的始终周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字数。 如果在传送过程中置RST脚为低电平,则会中止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc 2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的引脚及内部结构图如图1所示。 图1 DS1302引脚图及内部结构DS1302的引脚功能如表1所示。表1 DS1302引脚功能引脚号引脚名称功能1Vcc2主电源2,3X1,X2震荡源,外接32.768kHz晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行数据输入端8Vcc1后备电源DS1302的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为0。则不能把数据写入到DS1302中。位6如果为0则表示存取日历时钟数据;为1表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。图2 DS1302的控制字DS1302的读写时序如图3所示。为了提高对32个地址的寻址能力(地址/命令位15 = 逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节,不管是否写了全部31字节,所写的每一字都将传送至RAM。图3 DS1302数据读/写时序DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表2,其中奇数为读操作,偶数为写操作。表2 内部寄存器地址和内容寄存器名命令字节取值范围寄存器内容写读76543210秒寄存器80H81H0059CH10sSEC分寄存器82H83H0059010minMIN小时寄存器84H85H0023或011212/24010A/PHRHR日期寄存器86H87H0128,29,30,310010DATEDATE月份寄存器88H89H011200010MMONTH周寄存器8AH8BH010700000DAY年寄存器8CH8DH009910YEARYEAR时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式。通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5是AM/PM位,此位是高电平时表示PM,低电平表示AM。在24小时方式下,位5为第二个10小时位(2023h)。 DS1302的晶振选用32.768kHz,电容推荐值为6pF,因为振荡频率较低,也可以不接电容,对记时精度影响不大。2STC89C52单片机(1) STC89C52 单片机概述STC89C52系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。(2) STC89C52 单片机特点l 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;l 工作电压: 5.5V - 3.5V(5V单片机);l 工作频率范围:040MHz,相当于普通8051的 080MHz;l 用户应用程序空间 4K/8K/16k/32K/64K字节;l 片上集成1280字节 RAM;l 通用I/O口(32/36个),复位后为准双向口/弱上拉(普通8051传统I/O口);l ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器。l 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA;l 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;l 有EEPROM功能;l 看门狗;l 内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);l 时钟源:外部高精度晶体/时钟,内部R/C振荡器;l 用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟;l 常温下内部R/C 振荡器频率为:5.0V 单片机为: 11MHz 17MHz;l 共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器;l 外部中断I/O口4路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒;l 通用全双工异步串行口(UART) ;l 工作温度范围:-40 +85(工业级) / 0 75(商业级) ;l 封装:PDIP-40, PLCC-44。 (3) STC89C52 单片机管脚及封装STC89C52 单片机有多种封装形式,本设计中选用40DIP封装,其管脚定义如图4所示。其最小应用系统如图5所示。图4 STC89C52 管脚图 图6 最小应用系统四、Portel硬件开发软件Protel是目前国内最流行的通用EDA软件,它是将电路原理图设计、PCB板图设计、电路仿真和PLD设计等多个实用工具软件组合后构成的EDA工作平台,是第一个将EDA软件设计成基于Windows的普及型产品。它集成了软件界面、仿真功能和PLD设计和信号完整性分析,在此基础上Protel 99SE又增加了一些新的功能,用户使用更加方便灵活。Protel的功能十分强大,在电子电路设计领域占有极其重要的地位。它以其强大功能和实用性,逐渐获得广大硬件设计人员的青睐,是目前众多EDA设计软件中用户最多的产品之一。1Protel软件组成Protel软件主要由电路原理图设计模块、印制电路板设计模块(PCB设计模块)、电路信号仿真模块和PLD逻辑器件设计模块等组成,各模块具有强大的功能,可以很好的实现电路设计与分析。(1) 原理图设计模块(Schematic模块)电路原理图是表示电气产品或电路工作原理的重要技术文件,电路原理图主要由代表各种电子器件的图形符号、线路和结点组成。图4.1所示为一张电路原理图。该原理图是由Schematic模块设计完成的。Schematic模块具有如下功能:丰富而灵活的编辑功能、在线库编辑及完善的库管理功能、强大的设计自动化功能、支持层次化设计功能等。 (2) 印制电路板设计模块(PCB设计模块)印制电路板(PCB)制板图是由电路原理图到制作电路板的桥梁。设计了电路原理图后,需要根据原理图生设计成印制电路板的制板图,然后在根据制板图制作具体的电路板。印制电路板设计模块具有如下主要功能和特点:可完成复杂印制电路板(PCB)的设计;方便而又灵活的编辑功能;强大的设计自动化功能;在线式库编辑及完善的库管理;完备的输出系统等。(3) 电路信号仿真模块电路信号仿真模块是一个功能强大的数字/模拟混合信号电路仿真器,能提供连续的模拟信号和离散的数字信号仿真。它运行在Protel的EDA/Client集成环境下,与Protel Advanced Schematic原理图输入程序协同工作,作为Advanced Schematic的扩展,为用户提供了一个完整的从设计到验证仿真设计环境。在Protel中进行仿真,只需从仿真用元器件库中放置所需的元器件,连接好原理图,加上激励源,然后单击防真按钮即可自动开始。2PCB板设计(1) 定元件的封装 打开网络表(可以利用一些编辑器辅助编辑),将所有封装浏览一遍,确保所有元件的封装都正确无误并且元件库中包含所有元件的封装,网络表中所有信息全部大写,一面载入出问题,或PCB BOM不连续。 标准元件全部采用公司统一元件库中的封装。 元件库中不存在的封装,应自己建立元器件库。(2) 建立PCB板框 根据PCB结构图,或相应的模板建立PCB文件,包括安装孔、禁布区等相关信息。 尺寸标注。在钻孔层中应标明PCB的精确结构,且不可以形成封闭尺寸标注。(3) 载入网络表 载入网表并排除所有载入问题,具体请看PROTEL技术大全。其他软件载入问题有很多相似之处,可以借鉴。 如果使用PROTEL,网表须载入两次以上(没有任何提示信息)才可以确认载入无误。(4) 布局 首先要确定参考点。一般参考点都设置在左边和底边的边框线的交点(或延长线的交点)上或印制板的插件的第一个焊盘。 一但参考点确定以后,元件布局、布线均以此参考点为准。布局推荐使用25MIL网格。 根据要求先将所有有定位要求的元件固定并锁定。 布局的基本原则 A. 遵循先难后易、先大后小的原则。B. 布局可以参考硬件工程师提供的原理图和大致的布局,根据信号流向规律放置主要原器件。C. 总的连线尽可能的短,关键信号线最短。D. 强信号、弱信号、高电压信号和弱电压信号要完全分开。E. 高频元件间隔要充分。F. 模拟信号、数字信号分开。 相同结构电路部分应尽可能采取对称布局。 按照均匀分布、重心平衡、版面美观的标准来优化布局。(5) PCB设计遵循的规则 地线回路规则:图7 地线回路规则环路最小规则,即信号线与其回路构成的环面积要尽可能小,环面积要尽可能小,环面积越小,对外的辐射越少,接收外界的干扰也越小。针对这一规则,在地平面分割时,要考虑到地平面与重要信号走线的分布,防止由于地平面开槽等带来的问题;在双层板设计中,在为电源留下足够空间的情况下,应该将留下的部分用参考地填充,且增加一些必要的过孔,将双面信号有效连接起来,对一些关键信号尽量采用地线隔离,对一些频率较高的设计,需特别考虑其地平面信号回路问题,建议采用多层板为宜。 窜扰控制窜扰(CrossTalk)是指PCB上不同网络之间因较长的平行布线引起的相互干扰,主要是由于平行线间的分布电容和分布电感的作用。克服窜扰的主要措施是:A.加大平行布线的间距,遵循3W规则。B.在平行线间插入接地的隔离线。C.减少布线层与地平面的距离 屏蔽保护图8 屏蔽保护对应地线回路规则,实际上也是为了尽量减小信号的回路面积,多用于一些比较重要的信号,如时钟信号,同步信号;对一些特别重要,频率特别高的信号,应该考虑采用铜轴电缆屏蔽结构设计,即将所布的线上下左右用地线隔离,而且还要考虑好如何有效的让屏蔽地与实际地平面有效结合。 走线方向控制规则相邻层的走线方向成正交结构,避免将不同的信号线在相邻层走成同一方向,以减少不必要的层间窜扰;当由于板结构限制(如某些背板)难以避免出现该情况,特别是信号速率较高时,应考虑用地平面隔离各布线层,用地信号线隔离各信号线。 电源与地线层的完整性规则对于导通孔密集的区域,要注意避免孔在电源和地层的挖空区域相互连接,形成对平面层的分割,从而破坏平面层的完整性,并进而导致信号线在地层 的回路面积增大。四、硬件电路设计单片机数字闹钟硬件框图如图9所示。图9 硬件框图其中DS1302完成计时功能,单片机主控芯片读取DS1302的时间数据,在液晶屏上显示出来。用户可以通过按键设定时间初始值、闹铃初始值等。主电源和备份电源给各芯片供电。1 单片机电路 如图10所示,单片机采用STC89C52芯片,电路采用11.0592MHz外部无源晶体,振荡电容采用20pF。复位电路采用10uF(C1)电容和10K(R2)组成的阻容复位电路。图10 单片机电路单片机管脚连接标号中,P00P07为液晶屏数据线,P25P27为液晶屏控制线。标号RxD和TxD是单片机的异步串行通信引脚,用于单片机程序的ISP下载。2 DS1302时钟电路DS1302时钟电路如图11所示,其中BT1是后备电池,以保证在主电源掉电时时钟依然运行。Y2是时钟晶振,因为频率较低,故可以不加电容。R10R12为上拉电阻。DS1302通过SCLK、I/O和RST管脚和单片机相连。图11 DS1302时钟电路3 液晶屏显示电路显示部分采用SMC 1602液晶屏进行数据显示,其主要技术参数为:表3 液晶屏技术指标接口信号说明如表4所示。表4 液晶屏接口信号说明与单片机接口电路如图12所示。图12 LCD与单片机接口电路4 按键电路U盘驱动芯片CH375不仅提供了与USB设备的硬件连接,还内置了文件系统底层程序,使得读、写U盘中的文件变得容易。图中CH375使用12MHz外部晶体,振荡电容为20pF。管脚连接标号D0D7是与单片机并口进行数据传输的数据线,CH375INT为单片机提供中断信号,CH375CS、CH375A0、CH375WR和CH375RD是控制信号线。CH375通过RU2和RU3两个电阻与U盘的UD+和UD-数据线连接,同时通过LU发光管输出U盘状态。3MP3编解码电路图12 VS1003编解码芯片电路VS1003是由荷兰VLSI公司出品的一款单芯片的MP3/WMA/MIDI音频解码和ADPCM编码芯片,其拥有一个高性能低功耗的DSP处理器核VS_DSP,5K的指令RAM,0.5K的数据RAM,串行的控制和数据输入接口, 4个通用IO口,一个UART口;同时片内带有一个可变采样率的ADC、一个立体声DAC以及音频耳机放大器。VS1003通过一个SPI串行接口与单片机连接。SI、SO、SCLK连接单片机硬件SPI模块。XRESET、DREQ、XDCS、XCS与单片机连接,用于片选、应答、使能和时序控制。单片机对于VS1003的编程非常简单,只需要通过SPI接口及时向VS1003数据缓冲区注入数据,就可以实现MP3、WMA等音乐文件播放,而无须关注文件解码工作。VS1003和外部音频设备接口电路如图13所示。图13 VS1003与外部音频设备接口VS1003通过J4与耳机连接,电路非常简单。除此之外,VS1003还可以连接麦克风输入,实现录音功能。也可以通过J5实现线路输入,功能非常强大。4键盘驱动电路键盘驱动电路如图14所示。图14 键盘驱动程序电路使用与单片机管脚直接相连的按键实现键盘。当按键按下时管脚为低电平,无按键时为高电平。单片机采用查询方式获取按键信息。5闹铃电路图15 闹铃电路 闹铃电路由单片机管脚驱动蜂鸣器和报警灯实现,当闹铃时间到时,蜂鸣器鸣响,红灯报警。6电源电路本设计采用USB接口供电,电源电压5V。同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。其电路原理如图所示。图16 供电及程序下载电路五、 软件设计1、软件流程图本设计软件流程如图17所示。 图17 软件流程图 2、时间调整程序设计调整时间用4个调整按纽,1个作为移位、控制用,另外2个作为加个减用,分别定义为时间设置按纽、加按纽、减按纽。在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。闪烁原理就是,让要调整的一位每隔一定时间熄灭一次,比如说50ms。利用定时器记时,当到达50ms溢出时,就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束。此时送正常显示值给该位,再进入下一位调整闪烁程序。时间调整程序流程图如图18所示。控制键有效,进入月调整程序控制键有效,进入年调整程序等待按键程序等待按键程序减键有效加键有效加键有效减键有效月减1年加1月加1年减1控制键有效,进入星期调整程序控制键有效,进入日调整程序等待按键程序等待按键程序减键有效加键有效加键有效减键有效星期减1日加1星期加1日减1控制键有效,进入分调整程序控制键有效,进入小时调整程序等待按键程序等待按键程序减键有效加键有效加键有效减键有效分减1小时加1分加1小时减1控制键有效,跳出时间调整程序,进入主循环程序图18 时间设定程序流程图 闹铃时间设定方法类似,不再赘述。3、主程序 下面介绍main.c主程序编写,其他程序略。(1) 头文件和一些宏定义#include <reg52.h>#include <math.h>#include "1602.h"#include "DS1302.h"#define AMHOURADDR 0xC0 /存闹铃时的地址#define AMMINUTEADDR 0xC2 /存闹铃分的地址#define AMENADDR 0xC4 /存闹钟使能标志的地址(2) 管脚、常量、变量定义/定义管脚sbit Led_Alarm=P21;/报警灯sbit Beep_Alarm=P20; /蜂鸣器sbit Key_TMSet = P32; /时间设置sbit Key_AMSet = P33;/闹铃设置sbit Key_Up = P34;/上调sbit Key_Down = P35;/下调sbit Key_AMEn = P36;/闹铃开关sbit Key_Review = P37;/查看/定义标识volatile bit FlagKeyPress = 0; /有键按下标志volatile bit FlagShow = 0; /显示标志volatile bit FlagTMSet = 0; /时间设置状态标志volatile bit FlagAMSet = 0; /闹铃设置状态标志volatile bit FlagAMEn = 0; /闹铃使能标志,0为闹铃不使能,1为闹铃使能volatile bit FlagAlarm = 0; /闹铃状态标志/按键响应用变量uchar keyvalue,keyTMSet,keyAMSet,keyUp,keyDown,keySet,keyAMEn,keyReview;/DS1302时钟用变量SYSTEMTIME CurrentTime;uchar year, month, day, hour, minute, second;uchar AMhour, AMminute,AMStart;/报警及存储用变量/char * pSave;/字符串显示用变量uchar str16 = "000000"uchar Date9="00-00-00", Time9="00:00:00"uchar hide, SetNum;uint Counter; (3) 函数声明/函数声明void int2str(int x, char* str);void Delay1ms(unsigned int count);void Data_Init();void Timer0_Init();void Timer0_ISR () ;void KeyProcess(uint num);(4) 各子程序/整型转字符串的函数,转换范围0-65536void int2str(int x, char* str) int i=1; int tmp=10; while(x/tmp!=0) i+; tmp*=10; tmp=x; stri='0' while(i>1) str-i='0'+(tmp%10); tmp/=10; str0=tmp+'0' void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);/数据初始化void Data_Init() Beep_Alarm = 1; Led_Alarm = 1; AMStart = 0; keyvalue = 0; keyTMSet = 1; keyAMSet = 1; keyUp = 1; keyDown = 1; keyAMEn = 1; keyReview = 1; hide = 0; Counter = 0; SetNum = 0;/定时器0初始化void Timer0_Init()ET0 = 1; /允许定时器0中断TMOD = 1; /定时器工作方式选择TL0 = 0x06; TH0 = 0xf8; /定时器赋予初值TR0 = 1; /启动定时器/定时器0中断void Timer0_ISR (void) interrupt 1 using 0TL0 = 0x06;TH0 = 0xf8; /定时器赋予初值/每1秒钟刷新显示一次时间值 Counter +; if (Counter >= 450) FlagShow = 1; Counter = 0; /设定闪烁标志 if (hide = 1) hide = 0; else hide = 1; void KeyProcess(uint num) switch (num) case 1: /TMSet键被按下。SetNum=0-管设置;1-年;2-月;3-日;4-时;5-分;6-秒,按一下SetNum加1。 if (FlagAMSet=1) /从闹铃时间设置进入当前时间设置 FlagAMSet = 0;FlagTMSet = 1;SetNum = 1; else if (FlagTMSet=0)/从正常状态进入当前时间设置 FlagTMSet = 1;SetNum = 1; else /已经在时间设置状态 SetNum +; if (SetNum >= 7) /已经设定完毕,则存盘退出 SetNum = 0;FlagTMSet = 0; break; case 2: /AMSet键被按下。SetNum=0-关设置;1-时;2-分,按一下SetNum加1。 if (FlagTMSet=1) /从当前时间设置进入闹铃时间设置 FlagTMSet = 0;FlagAMSet = 1;SetNum = 1; /清屏L1602_string(1,1," ");L1602_string(2,1," ");/读出当前闹铃时间并显示 int2str(AMhour,str1); L1602_string(2,1,str1);int2str(AMminute,str1); L1602_string(2,4,str1); else if (FlagAMSet=0)/从正常状态进入闹铃时间设置 FlagAMSet = 1;SetNum = 1; /清屏L1602_string(1,1," ");L1602_string(2,1," ");/读出当前闹铃时间并显示 int2str(AMhour,str1); L1602_string(2,1,str1);int2str(AMminute,str1); L1602_string(2,4,str1); else /已经在闹铃时间设置状态 SetNum +; if (SetNum >= 3) /已经设定完毕,则存盘退出并返回正常显示界面 /存入闹铃时间 Write1302(0x8e,0x00); /写入允许 Write1302(AMHOURADDR,AMhour);Delay1ms(500); Write1302(AMMINUTEADDR,AMminute);Delay1ms(500); Write1302(0x8e,0x80); /写入禁止AMhour=Read1302(AMHOURADDR);AMminute=Read1302(AMMINUTEADDR); SetNum = 0;FlagAMSet = 0; break; case 3: /Up键被按下 if (FlagTMSet = 1) /如果在当前时间设置状态 switch (SetNum) case 0: case 1: /年 if (year<99)year+; Write1302(0x8e,0x00); /写入允许 DS1302_SetTime(DS1302_YEAR,year); Write1302(0x8e,0x80); /禁止写入 break; case 2: /月 if (month<12) month+; Write1302(0x8e,0x00); /写入允许 DS1302_SetTime(DS1302_MONTH,month); Write1302(0x8e,0x80); /禁止写入 break; case 3: /日 if (day<31) day+; Write1302(0x8e,0x00); /写入允许 DS1302_SetTime(DS1302_DAY,day); Write1302(0x8e,0x80); /禁止写入 break; case 4: /时 if (hour<23) hour+; Write1302(0x8e,0x00); /写入允许 DS1302_SetTime(DS1302_HOUR,hour); Write1302(0x8e,0x80); /禁止写入 break; case 5: /分 if (minute<59) minute+; Write1302(0x8e,0x00); /写入允许 DS1302_SetTime(DS1302_MINUTE,minute); Write1302(0x8e,0x80); /禁止写入 break; case 6: /秒 if (second<59) second+; Write1302(0x8e,0x00); /写入允许 DS1302_SetTime(DS1302_SECOND,second); Write1302(0x8e,0x80); /禁止写入 break; if (FlagAMSet=1) /如果在闹铃设置状态 switch (SetNum) case 1: /时 if (AMhour<23) AMhour+; break; case 2: /时 if (AMminute<59) AMminute+; break; break; break; case 4:

    注意事项

    本文(课程设计(论文)-单片机数字闹钟电子表设计报告.doc)为本站会员(yyf)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开