电子时钟计时器的设计_第1页
电子时钟计时器的设计_第2页
电子时钟计时器的设计_第3页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、湖南人文科技学院课程设计报告课程名称:单片机原理及应用课程设计设计题目:电子时钟的设计系 别:通信与控制工程系专 业:通信工程班 级:09级通信二班学生姓名:袁琦 黄文付学 号:0941623009416227起止日期:2011年12月20日2011年12月30日指导教师:王善伟 姚毅 谢四莲指导教师评语:指导教师签名:年月日成绩 评 疋项目权重成绩袁琦黄文付1设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:主任签字:年月日时钟是人类日常生活必不可少的工具,本设计从日常生活中常见的事

2、物入手,通过 对电子时钟的设计,让我们认识到单片机已经深入到我们生活的每个领域,该设计不仅 可以锻炼我们的动手能力,而且可以加深我们对单片机的认识和激发我们对未知科学领 域的探索。本文利用单片机实现数字时钟计时功能的主要内容。它体积小,成本低、功能强、使用方便、可靠性高等一系列优点,广泛应用于智能产业和工业自动化上。本次设计采 用独立式按键进行时间调整,其中 STC89C52是核心元件,同时采用数码管 LED动态 显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为 24小时,显满刻度为“ 23时59分59秒”,另外利 用DS1302具有校

3、时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。该 系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。关键词:STC89C52 ; LED数码管;8255芯片;DS1302芯片;目录设计要求 11. 方案论证与对比 11.1方案一 11.2方案二 21.3方案对比 22. 系统硬件电路的设计 32.1单片机的选择及引脚功能介绍 32.2 8255A芯片的结构及引脚功能介绍 42.3 DS1302芯片的结构及引脚功能介绍 62.4显示电路设计 72.5电源电路设计 82.6键盘动态扫描电路设计 83. 控制系统的软件设计 103.1 主程序流程图 103.2显示子程序 113.3

4、闹钟时间设定功能程序 113.4键盘扫描程序 124. 系统功能调试与整体指标 134.1硬件调试与分析 134.2软件调试与分析 134.3性能分析 135. 详细仪器清单 146. 总结与思考及致谢 15参考文献 16附录一:程序(方案一) 17附录二:程序(方案二) 25电子时钟的设计设计要求利用单片机作为控制核心,完成一个时钟计时器。具体要求如下:采用6位LED数码显示时、分、秒。(2) 时制式为24小时制。(3) 使用按键开关可实现时、分调整。(4) 秒表/时钟功能转换。定时设定提醒的功能。(6) 整点提醒(蜂鸣)。(7) DS1302设时,对时,掉电记忆时间的功能。1. 方案论证与

5、对比1.1方案一此方案采用单片机内部定时器 T0进行计时,STC89S52实时控制。如图1所示:蜂鸣器STC89C52单片机定时器PA/L l6位LED数码管显示|PB18255PC/rJV矩阵键盘P0P2图1方案一系统方框图1.2方案二此方案采用专用时钟芯片 DS1302精确计时,单片机STC89C52实时读取时钟显 示至6位数码管。如图2所示:图2方案二系统方框图1.3方案对比以上方案中,方案一设计简洁,编程比较简单,计时精度不高,准确性不能完全 保证。虽硬件简洁、成本更低廉、便于实现,绿色环保,编程简单易写,不能达到提 高同学们编程的能力和对单片机及其扩展芯片的学习和深程度的去了解单片机

6、及其 更广泛的应用,故在此我们选择挑战,放弃对其选择。虽然我们对其进行了放弃,但 我们也把此方法的程序写好以便进行对比。方案二与方案一相比,编程比较复杂,计时精度较高,而且可以灵活运用,可扩 展性好,并能充分的利用单片机的有效资源。 还可让我们培养我们的自学能力,自己 去发掘单片机内部结构及其扩展功能,自己去学会怎样对其他芯片控制的学习方法, 使得课程设计具有一定的挑战性,正因如此,故我们选择方案二。2. 系统硬件电路的设计2.1单片机的选择及引脚功能介绍STC89C52具有如下特点:40个引脚(引脚图如图四所示),4k Bytes Flash片内 程序存储器,128 bytes的随机存取数据

7、存储器(RAM),32个外部双向输入/输出(I/O) 口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通 信口,看门狗(WDT)电路,片内时钟振荡器。此外,STC89C52RC设计和配置了振荡频率可为 0Hz并可通过软件设置省电模 式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续 工作,掉电模式冻结振荡器而保存 RAM的数据,停止芯片其它功能直至外中断激活 或硬件复位。同时该芯片还具有 PDIP、TQFP和PLCC等三种封装形式,以适应不 同产品的需求。VCCPll 2Pl? 3PI3 4PI4 5P15 6PI6 7PI7 8RXDO

8、TXIliP3212P13T3P3414I/O 15P3S16P3717XT加2hPI0 1PJ0*T2VCCPI.1/T2EXPO.O/ADOF1.2PO.KADlPi.3P0.2ZAD2F1.4P0.3/AD3P1.5/M0SIP0.VAD4pi.cmisoP0.5ZAD5PI 7/SCKPO.SADiitSTP0.7ZAD7P10/KXD/EAAfFFP3.1/TXDALE/PR.OGP3.2/INII/PSENP3.3HMT1P2.7/AJ5P3.4froP2.S/AHP3.smP2.5/ABP3.6AVR.P2.A/A.2P3.7/RDP2.3/AI1XTAL2P2 2/A10XTA

9、L1P2.WGNDF2.0/ASSTCS9C5239383C3433323029232726丿252-12322 -2140P24P23P- >27P26D0DI-D2D3D6D7EA图4 STC89C52芯片引脚图引脚功能介绍:VCC( 40): + 5V;GND (20):接地;P0口(39- 32): P0口为8位漏极开路双向I/O 口,每引脚可吸收8个TTL门电流;P1 口( 1 8): P1 口是从内部提供上拉电阻器的8位双向I/O 口,P1 口缓冲器能接 收和输出4个TTL门电流;P2口(21 28): P2口为内部上拉电阻器的8位双向I/O 口,P2口缓冲器可接收和 输出4

10、个TTL门电流;卩3口( 1017): P3口是8个带内部上拉电阻器的双向I/O 口,可接收和输出4个 TTL门电流,P3口也可作为AT89C51的特殊功能口;RST (9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;ALE/PROG (30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地 址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲;PSEN( 29):外部程序存储器的选

11、通信号。在由外部程序存储器取指期间,每个 机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不 出现;EA/VPP (31):当EA保持低电平时,外部程序存储器地址为(0000H FFFFH) 不管是否有内部程序存储器。FLASH编程期间,此引脚也用于施加12V编程电源(VPP);XTAL1 (19):反向振荡器放大器的输入及内部时钟工作电路的输入;XTAL2 (18):来自反向振荡器的输出。2.2 8255A芯片的结构及引脚功能介绍8255A芯片是In tel公司生产的通用可编程并行接口电路,广泛应用于单片机扩 展并行I/O 口。它具有8个位并行口 PA、PB和P

12、C。8255A芯片的内部结构及引脚 如图5所示。(1) . 8255A的内部结构8255A的内部结构有以下几部分组成:a并行I/O端口 A、B、C 8255A的内部有3个8位并行I/O 口: A 口、B 口、C口。3个I/O 口都可以通过编程选择为输入口或输出口,但在结构和功能上有所不同。A 口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器。B 口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。C 口:含有一个8位数据输出锁存/缓冲器和一个8位输入锁存器(不锁存)。当数据传送不需要联络信号时,这 3个端口都可以用作输入口或输出口。当A口 B 口需要有联络信号时,C 口

13、可以作为A 口和B 口的联络信号线。b. 工作方式控制电路:8255A的三个端口在使用使可分为 A、B两组。A组包括A 口 8位和C 口高4位:B组包括B 口 8位和C 口低4位。两组的控制电路中分别 有控制寄存器,根据写入的控制字决定两组的工作方式,也可对C 口每一位置“ T或清“ 0”。c. 数据总线缓冲器:数据总线缓冲器是三态双向的8位缓冲器,是8255A与单片 机数据总线的接口, 8255A的D0D7可以和AT89C51单片机的P0.0P0.7直接相 连。数据的输入输出、控制字和状态信息的传递,均可通过数据总线缓冲器进行。d. 读/写控制逻辑:8255A读/写控制逻辑的作用是从CPU的

14、地址和控制总线上接 受有关信号,转变成各种控制命令送到数据缓冲器及 A组和B组的控制电路,控制 A、B、C3个端口的操作。其引脚图如图5所示:PA3 1PA2 2PAI 37o AL JL-启i 9= PC71DPC611PC413PCD14PC115PC31'7PB01BPB119PB22HPAD s/R./cId%GAAPDI: E E B pppA4QAp0 12 3 D D D D4 5 6 7D D D D5 4I B E B Cl p40 PA439 PA53S PAC37 PA7 亍孑 P坯35 RESET340込 DI32 D231 D330429 D52-12 一 2

15、2S272?图5 8255引脚图引脚功能介绍:8255A共有40个引脚,一般为双列直插 DIP封装,40个引脚可分为与CPU连接的数据线、地址和控制信号以及与外围设备连接的三个端口线。DOD7:双向三态数据总线。RESET:复位信号,输入,高电平有效。复位后,控制寄存器清 0, A 口、B 口、 C 口被置为输入方式。CS:片选信号,输入,低电平有效。RD.:读信号,输入,低电平有效。有效时,允许 CPU通过8255A D0D7读取 数据或状态信息。WR.:写信号,输入,低电平有效。有效时,允许A1A0 :端口控制信号,输入。2位可构成四种状态,分别寻址 A 口、B 口、C 口和控制寄存器PA

16、0PA7: A 口数据线,双向。PBOPB7: B 口数据线,双向。PC0PC7: C 口数据/信号线,双向。当8255A工作于方式0时,PC0PC7分 为两组(每组4位)并行I/O数据线;当8255A工作于方式1或方式2时,PC0PC7 为A 口、B 口提供联络信号。2.3 DS1302芯片的结构及引脚功能介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工 作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次 传送多个字节的时钟信号或 RAM数据。DS1302内

17、部有一个31X8的用于临时性存 放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了 主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。(1). DS1302的引脚功能及结构DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的 情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当 Vcc2 大于 Vcc1 + 0.2V 时,Vcc2 给 DS1302供电。当 Vcc2 小于 Vcc1 时,DS1302 由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复

18、位/片选线,通过 把RST输入驱动置高电平来启动所有的数据传送。 RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或 多字节数据的传送手段。当 RST为高电平时,所有的数据传送被初始化,允许对 DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电运行时,在 Vcc>2.5V之前,RST必须保持低电平。只有在 SCLK为低电平时,才能将 RST置为高电平。I/O为串行数据输入输出端(双向),后 面有详细说明。SCLK始终是输入端。DS1302的引脚功能以及单片机的连接图如图6R

19、32K图6 DS1302引脚及其与单片机连接的原理图2.4显示电路设计单片机中通常用七段LED构成字型“8,另外,还有一个小数点发光二极管以显 示小数位!这种显示器有共阴和共阳两种!发光二极管的阳极连在一起的(公共端) 称为共阳极显示器,阴极连在一起的称为共阴极显示器。一位显示器由8个发光二极 管组成,其中,7个发光二极管构成字型“8的各个笔划(段),a_g另一个小数点为 dp发光二极管。当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不 加电压则暗。为了保护各段 LED不被损坏,需外加限流电阻。由于共阴极连接需加 驱动,故在这里我采用的是共阳阳极连接。以共阳极LED为例,各LED公共

20、阳极K0接高电平,若向各控制端a,b, g,dp 顺次送入00011110言号,则该显示器显示 7”字型。共阴极7段LED显示数字0 F、文字、符号及小数点的编码(a段为最地位,dp点为最高位),如图7图7数码管的驱动显示电路设计F -4= PSIR27 : TE : 恵-2.5电源电路设计在各种电子设备中,直流稳压电源是必不可少的组成部分, 它是电子设备唯一能 量来源,它的设计思路是根据我们以前学过的模电电子技术,要想得到我们所要的 +6V输出电压,就需将交流220V的电压经过变压器、整流电路、滤波电路和稳压电 路四个部分。2.6键盘动态扫描电路设计在单片机系统中按键数量较多时,为了减少I/

21、O 口的占用,常常将按钮排列成矩 阵式键盘中,每条水平线和直线在交叉处不直接连通,而是通过一个按钮加以连接。 这样,一个端口(如P1 口)就能组成4*4=16个按钮,比之直接将端口线用于键盘 多出了一倍,而且线数越多,区别越明显,比如再多加一条就能组成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是最合理的矩阵式键盘的按钮识别办法确定矩阵式键盘上何键被按下简绍一种“行扫描 法”行扫描法又称为逐行(或列)扫描查询法,是一种最常用的,按钮识别办法, 如下图示键盘,介绍过程如下。判断键盘中有无键盘按下将全部行线置低电平,然后检测列的电平为低,则

22、表 示键盘中有键被按下,而且闭合的键位位于低电平线与 4根行线相交叉的4个按钮之 中。若所有列线均为高电平,则键盘中无键按下。判断闭合键所在的位置:在确认有键按下后,即可置某根行线为低电平时,其 他线为高电平。在确定某根位置为低电平后,再逐行检测各列线的电平状态。 若某列 为低,则该列与置为低电平的行线交叉处的按钮就是闭合的按钮。将程序通过串口下载到单片机中,在键盘上按任意键时,将会在数码管上显示对应的字符。为了驱动键盘,同上以8255_PC第四位作为输入,8255PC高四位作为列扫描 输出,以此来实现动态扫描显示法。如图 8所示:图8键盘动态扫描电路设计3. 控制系统的软件设计3.1主程序流

23、程图本设计中主程序主要实现显示的初始化和调用各子程序工作的功能,读取时间的子程序主要实现初始化,时间信息的采集和显示段码的码的存取。 分别对各个器件的 功能进行编程设计,根据主程序流程图(如下)进行全面的分析。设计中计时主要以 定时器TO中断完成,定点闹铃使用峰鸣器来完成。当端口有开关按下时,转入相应 的功能程序。其主程序执行流程图如下图 9:开始图9主程序流程图3.2显示子程序时间显示子程序显示时钟芯片 3个内存单元(小时、分钟、秒钟)的 BCD码数 据,8255的PA 口送数码管的位选编码。8255的PB 口送段选编码,位选段选编码存 放在ROM表中。显示时,先取出位选编码数据,然后送至

24、PA 口输出,接着取出段选编码数据送 至PB 口输出,剩下的数码管以同样地方法送数据直到将3个内存单元的数据分成6个位全部送去数码管显示。数码管显示子程序流程图如图9所示:开始;. 结束图10 数码管显示子程序流程图3.3闹钟时间设定功能程序在时钟状态下,触发外中断1时,进入闹钟时间设定模式,且不影响 T0计时器 的功能状态,在键盘上输入对应的数字进行时间设定。当分别按下调节时钟、分钟和 秒钟的个位时,时间自动确定,闹钟时间只精确到分钟。闹钟时间设定流程图如图11所示:开始_,3达到预设时间一1<J-丄_ 二?YFN一一一一 闹铃C返回丿图11闹钟时间设定流程图3.4键盘扫描程序本设计采

25、用动态扫描法,动态扫描法不仅扫描键阵,也可以实现显示,是目前应 用十分广泛的一种方法。动态扫描法是采用输出“移动”信号,轮流对各行按键进行 检测来实现的。设置行线为输出,列线为输入,当无按键按下时,列输入全为“1” .设计时,将某一行输出为“ 0”,读取列线值,若其中某一位为“ 0”,则表明行、列交 叉处的按键按下,否则,无按键按下;继续扫描下一行(将下一行输出为“0”),直至全扫描完为止。键盘扫描程序流程图如 12图所示:开始返回图12键盘扫描程序流程图4. 系统功能调试与整体指标4.1硬件调试与分析(1) 时间准确性调试硬件调试时可先检查印制版及焊接的质量情况,将电子时钟通电后,显示00:

26、00: 00。触发INTO中断开始计时,每过一秒时间就显示变化一次。计时准确,显示 稳定。(2) 闹铃功能调试将时钟调到11点59分58秒,2秒后,时钟开始定点闹铃,铃声为“嘀-嘀-嘀- 嘀”声,持续1分钟报时声自动停止也可以触发功能键来中止闹铃。设计的电子时钟计时精确度较高,并可应用于日常生活中。能够通过键盘对电子时钟进行调整,且调整过程简单方便,易于操作,有较强的人性化设计。并且可通过键盘实现闹铃与时间模式的切换,使电子时钟的功能更加强大。能够进行定时闹铃,计时较准确,基本能实现测试目标。4.2软件调试与分析软件调时在KEIL C51编译器下进行,源程序编译及仿真调试应分段或以子程序 为单

27、位逐个进行,最后可结合硬件实时调试。4.3性能分析按照设计程序分析,LED显示器动态扫描的频率为167HZ,实际使用观察时完 全没有闪烁。由于计时中断程序中加了中断延时误差处理, 所以实际计时精度非常高, 可满足多种场合的应用需要。5. 详细仪器清单表格1仪器清单仪器名称仪器名称STC89C52STC89C528255A8255A3位数码管3位数码管2个DS1302DS130211.0592k 晶振11.0592k 晶振32.768k 晶振32.768k 晶振矩阵键盘4X4矩阵30PF电容30PF电容100PF电容100PF电容1K电阻1K电阻蜂鸣器蜂鸣器6. 总结与思考及致谢在老师的指导和同

28、学的帮助之下,我完成了此次单片机课程设计。从开始接到课 题要求到时钟的实现,再到论文的完成,每走一步对我来说都是新的尝试与挑战。 在 这次的课程设计中不仅检验了我所学习的知识, 也培养了我如何去把握一件事情,如 何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们 相互探讨,相互学习,相互监督。课程设计是我们专业课程知识综合应用的实践训练, 着是我们迈向社会,从事职业工作前一个必不少的过程。这次时钟计时器设计的经历也会使我终身受益,我感受到做设计是要用心去做的 一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力, 没有自己的研究,就不会有所突破。通

29、过设计,我在老师的精心指导和严格要求下, 获得了丰富的理论知识,极大地提高了实践能力。最后,再一次感谢我的老师.,老师严谨细致、一丝不苟的作风一直是我学习的 榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次时钟计时器设计的每个环节,都离不开老师您的细心指导。我懂得了学习的重要性,了解到理论知 识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工 作做出了最好的榜样。参考文献1 余锡存单片机原理及接口技术M.西安:西安电子科技大学出版社,20002 贾好来.MCS-51单片机原理及应用M.北京:机械工业出版社,20063 楼然苗,李光飞单片机课程设计指导M.北

30、京:北京航空航天大学出版社,20074 夏路易,石宗义电路原理图与电路板设计教程北京希望电子工业出版2002朱定华,戴汝平单片微机原理与应用.(M)北京:清华大学出版社,2003附录一:程序(方案一)#in clude<reg52.h>#in clude<absacc.h>#defi ne uint un sig ned int#defi ne uchar un sig ned char#defi ne PAXBYTE0xD1FF#defi ne PBXBYTE0xD2FF#defi ne PCXBYTE0xD5FF#defi ne PCON XBYTE0xD7FF s

31、bit buzzer=P3A3;/ 蜂鸣器端口数码管0-9的段选编码uchar code tabledu=0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28;数码管各位选编码uchar code tablewe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/全局变量定义un sig ned long nu ml, nu m2;uchar shi0,shi1,fe n0,fen 1,m0,m1, num,nu m3,aa,bb,cc,co un t,temp,co un t,S,flag,flag1;char hour,m in,

32、sec on d,h0,h1,mi0,mi1,s0,s1;void init();初始化函数声明void display(uchar,uchar,uchar,uchar,uchar,uchar );/ 显示函数声明void delay(uint);带参数延时函数声明1毫秒void keysca n();键盘扫描函数void mai n()PCON=0x80;in it();while(1)主体循环keysca n();/时钟分离部分m仁 aa%10;m0=aa/10;fen 1=bb%10;fen 0=bb/10;shi仁 cc%10;shi0=cc/10;/clock分离部分s仁seco n

33、d%10;sO=seco nd/10;mi仁mi n%10;mi0=mi n/10;h1=hour%10;h0=hour/10;/时钟显示和clock显示部分if(nu m3>=1 &&nu m3<=4|cou nt=O) display(shi0,shi1,fe nO,fe n1,m0,m1);elsedisplay(h0,h1,mi0,mi1,s0,s1);/*整点报时*/if(aa=0&&bb=O)TR 1=1;flag=1;/报时10秒开启定时器1控制整点报时计数 num1+/*闹钟报时 *if(aa=sec ond&&bb=

34、min&&cc=hour)/闹时一分钟TR1=1;开启定时器1flag1=1;/控制闹钟计数 num2+/*初始化函数*/void in it() /* 定时器 0, 1 初始化 */TMOD=Ox11;EA=1;ET0=1;ET1=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-1000)/256;TL1=(65536-1000)%256;TR0=1;void time0() interrupt 1/定时0时钟函数(控制数码时钟)TH0=(65536-50000)/256;TL0=(65536-50000)%2

35、56;nu m+;if(n um=20) num=O;aa+;if(aa=60) aa=0;bb+;if(bb=60)bb=0;cc+;if(cc=24)cc=0;void time1() in terrupt 3 定时1时钟函数(控制整点报时时间)TH1=(65536-1000)/256;TL1=(65536-1000)%256;if(flag=1)nu m1+;if(flag 仁=1)nu m2+;buzzer=buzzer;if(n um 1=10000| num2=60000) nu m1=0;nu m2=0;buzzer=1;TR1=0;flag=0;flag 仁0; void di

36、splay(uchar shi0,uchar shi1,uchar fen0 ,uchar fen 1,uchar m0,uchar m1) /*数码管显示函数*/PA=tablewe0;PB=tabledushi0;delay(1);PB=OXFF; PA=tablewe1; PB=tabledushi1; delay(1);PA=0XFF;PB=0XFF; PA=tablewe2; PB=tabledufe nO; delay(1);PA=0XFF;PB=0XFF;PA=tablewe3;PB=tabledufe n1; delay(1);PA=0XFF;PB=0XFF;PA=tablew

37、e4; PB=tabledum0; delay(1);PA=0XFF;PB=0XFF;PA=tablewe5; PB=tabledum1; delay(1);PA=0XFF;PB=0XFF;/*毫秒函数*/void delay( uint z)uint x,y;for(x=z;x>0;x-)for(y=124;y>0;y-)*键盘函数函数 *void keysca n()PC=0xfe; temp=PC;temp=temp&0xf0; if(temp!=0xf0) delay(5);temp=PC; temp=temp&OxfO; if(temp!=OxfO) te

38、mp=PC;switch(temp)II秒钟加一按键分钟加一按键II时钟加一按键II清零按键II松手检测case 0xee:nu m3=1; break;case 0xde:nu m3=2; break;case 0xbe:nu m3=3; break;case 0x7e:nu m3=4; break;while(temp!=OxfO)temp=PC; temp=temp&OxfO;display(shiO,shi1,fe n0,fe n1,mO,m1); switch( nu m3)case 1:aa+;if(aa>59)aa=0; break;case 2:bb+;if(bb

39、>59)bb=0; break;case 3:cc+;if(cc>23)cc=0; break;case 4:aa=0,bb=0,cc=0; break;乙乙:9 aseo4=03 丄:0=lun(x)(t7=junoo)j!+; unoo:0=0d 丄:g aseoiunu )qo;iMSgs'os' uiuQiu' Moi|)AE|ds!p!O4xodiua;=diua; !Od=diuej(O4xo=idiua;)a|!i|M冷 eaiq'劃蜃兽府四3尧wnu:pzxoesEO冷 eaiq瞻纵府激府'岳'矽阴 和OQ冨視2尧山n

40、u:pqxoesEO 冷 eaiq'岳'伽I和0Q冨視炉£山nu:ppxo aS冷 eaiq和OQ冨視Y率尖'劃嗟器/©尧wnu:poxoosEo(diua;)qo;!MS!Od=diuej xo=jduj印) !O4xodiua;=diua;!Od=diuej !(9)Ae|ep (Ojxomdw 励!O4xodiua;=diua; 6=diu 巩AjxOOdcase 7:case 8:if(coun t=1)second+;if(sec on d=60) second=0;elseif(co un t=2)mi n+;if(mi n=60)mi

41、n=0;elseif(co un t=3)hour+;if(hour=24) hour=0;break;if(coun t=1)sec on d-;if(sec on d=-1) second=59;elseif(co un t=2)min-;if(mi n=-1) min=59;elseif(co un t=3)hour-;if(hour=-1) hour=23;break;S+; if(S%2=1) TRO=O;else TR0=1;if(S=2) S=0;break;附录二:程序(方案二)#in clude<reg52.h>#in clude<absacc.h>

42、#defi ne uchar un sig ned char#defi ne uint un sig ned int#defi ne uchar un sig ned char#defi ne PAXBYTE0xD1FF#defi ne PBXBYTE0xD2FF#defi ne PCXBYTE0xD5FF#defi ne PCON XBYTE0xD7FF uchar nu m,temp,hour,m inu te,sec on d,hour1,hour2 ,minu te1, minu te2,secon d1,sec ond2;uchar aa,aa1,aa2,bb,bb1,bb2,cc,

43、cc1,cc2;sbit buzzer=P3A3;/ 蜂鸣器sbit D0=P1A0;/用来指示闹钟开启关闭的LEDbit flag;/闹钟开启关闭的标志位uint a0;uchar code tabledu=0xA0,0xBB,0x62,0x2A, 0x39,0x2C,0x24,0xBA,0x20,0x28;/数码管0123456789的段选编码 uchar code tablewe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/ 数码管的位选编码 sbit SCLK=P3A2;sbit RST=P2A6;sbit IO=P3A5;/*毫秒延时程序*/void delay(

44、uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-)/*微秒延时程序* void delay_us(uchar n)uchar i;for(i=0;i <n ;i+)/*1302 做好准备 *void readynit1302()RST=0;SCLK=0;RST=1;/*1302 单字节数据写入 */void write1302(uchar dat)uchar i;SCLK=0;delay_us(2);for(i=0;i<8;i+)IO=dat&0 x01;delay_us(2);SCLK=1;delay_us(2);

45、SCLK=0;dat>>=1;/*1302双字节数据写入(寄存器地址和数据)*/void write_set1302(uchar cmd,uchar dat)ready_i nit1302();delay_us(2);write1302(cmd);write1302(dat);SCLK=1;RST=0;/*1302单字节数据读出*/uchar read1302()uchar i,dat;dat=0;delay_us(2);for(i=0;i<8;i+)dat>>=1;if(1=IO)dat=dat|0x80;SCLK=1;delay_us(2);SCLK=0;de

46、lay_us(2);return dat;/*1302单字节数据读出(读指定寄存器值)*/uchar read_set1302(uchar cmd)uchar dat;ready_i nit1302();write1302(cmd);dat=read1302();SCLK=1;RST=0;return dat;/*1302初始化(设置初始时间) */void ini t1302()write_set1302(0x8e,0x00);write_set1302(0x80,(0/10)<<4|(0%10);write_set1302(0x82,(27/10)<<4|(27%1

47、0);write_set1302(0x84,(10/10)<<4|(10%10);write_set1302(0x90,0xa5);以2K电阻方式给备用电源充电 write_set1302(0x8e,0x80);/*1302数据读出(读已经设置好的时间)*/void readtime()uchar temp;temp=read_set1302(0x81);seco nd=(temp&0x70)»4)*10+(temp&0x0F);temp=read_set1302(0x83);min ute=(temp&0x70)»4)*10+(temp

48、&OxOF);temp=read_set1302(0x85);hour=(temp&0x70)»4)*10+(temp&OxOF);/*数码管显示函数(入口参数为每个数码管的段选序号)*/void dispaly(uchar duO,uchar du1,uchar du2,uchar du3,uchar du4,uchar du5) PA=tableweO;PB=tableduduO;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe1;PB=tabledudu1;delay(2);PA=0xff;PB=0xff;dela

49、y(2);PA=tablewe2;PB=tabledudu2;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe3;PB=tabledudu3;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe4;PB=tabledudu4;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe5;PB=tabledudu5;delay(2);PA=0xff;PB=0xff;delay(2);/*秒钟加一调整(供键盘设置秒钟)*/void sec ond_inc()second+;if(seco nd

50、>=60)sec on d=0;write_set1302(0x8e,0x00);write_set1302(0x80,(seco nd)/10)<<4|(seco nd)%10);write_set1302(0x8e,0x80);/*分钟加一调整(供键盘设置分钟)*/void mi nu te_i nc()minu te+;if(mi nute>=60)minu te=0;write_set1302(0x8e,0x00);write_set1302(0x82,(mi nute)/10)<<4|(mi nute)%10);write_set1302(0x8e

51、,0x80);/*小时加一调整(供键盘设置小时)*/void hour_i nc()hour+;if(hour>=24)hour=0;write_set1302(0x8e,0x00);write_set1302(0x84,(hour)/10)<<4|(hour)%10);write_set1302(0x8e,0x80);/*矩阵键盘检测*/void keyboard。PCON=0x80;PA=0xff;PB=0xff;PC=0xfe;扫描倒数第一列temp=PC;temp=temp&0xf0;if(temp!=OxfO)delay(10);temp=PC;temp=temp&0 xf0;if(temp!=OxfO)switch(temp)case 0xe0:num=0;break;case 0xd0:num=1;break;

温馨提示

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

评论

0/150

提交评论