电子类毕业设计_第1页
电子类毕业设计_第2页
电子类毕业设计_第3页
电子类毕业设计_第4页
电子类毕业设计_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

绪论20世纪末,电子技术得到了极速的发展,毫无疑问,在其推进下,现代电子产品以及多种高科技产品几乎渗透到了社会的各个领域,这有力地推进了社会生产力的发展和社会信息化程度以及综合科技水平的提高,但产品更新换代的频率也越来越快。伴随科技的发展社会的进步和全球化竞争的日益剧烈,人们对数字钟的规定也越来越高,老式的时钟已不能满足人们的需求。多功能电子钟不管在性能还是在样式亦或是用途上都发生了重大的变化,许多电子钟都已具有电子闹钟、电子秒表、温度检测等功能。同步单片机在多功能数字钟中的应用已是非常普遍的[1]。多功能电子时钟除了具有时钟的功能外还可以包括对环境温度检测的功能。温度是一种最基本的环境参数。在各个行业生产及平常生活中,对温度的测量及控制一直占据着非常重要的地位。目前,经典的温度检测控制系统由模拟式温度传感器、A/D转换电路和多种单片机构成。由于模拟式温度传感器输出的模拟信号必须通过A/D转换环节转换为数字信号后才能与单片机等微处理器接口进行读写的操作,因此硬件电路会比较复杂,成本较高。而以DS18B20为代表的新型单线总线数字式温度传感器集温度测量和A/D转换于一体,此类传感器可以直接输出数字量,同步与单片机接口电路构造非常简朴,可以广泛用于距离远、节点分布多的场所,具有较强推广应用价值。[2]数字电子时钟是采用数字电路实现对时,分,秒数字显示的装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们平常生活中不可或缺的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,数字时钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的以便,并且大大地扩展了钟表原先的报时功能。例如定期自动报警、准时自动打铃、时间程序自动控制、定期广播、自动启闭路灯、定期开关烘箱、通断动力设备、甚至多种定期电器的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。计算机尤其是以微细加工技术支持的微型计算机技术飞速发展,其应用渗透到了各行各业。以单片机、嵌入式处理器、数字信号处理器(DSP)为关键的计算机系统,以其软硬件可裁剪、高度的实时性、高度的可靠性、功能齐全、低功耗、适应面广等诸多长处而得到极为广泛的应用。目前计算机硬件技术向巨型化、微型化和单片机化三个方向高速发展。自1975年美国德州仪器企业(TexasInstruments)第一块微型计算机芯片TMS-1000问世以来,在短短的间,单片机技术已发展成为计算机领域一种非常有前途的分子,它有自己的技术特性、规范和应用领域。单片机是自动控制系统的关键部件,重要用于工业控制、智能化仪器仪表、家用电器中。它具有体积小、性能突出可靠性高(某些方面的性能指标大大优于通用微机中央处理器)、价格低廉等一系列长处,应用领域不停扩大,除了工业控制、智能化仪表、通信和家用电器外,在智能化高档电子玩具产品中也大量采用单片机芯片作为关键控制部件,已经渗透到人们工作和生活的各个角落,有力地推进了各行业的技术改造和产品的更新换代,前景广阔。数字钟具有单片机最小系统的基本构成,对于我们理解单片机有很大的协助。本设计通过用对一种能实现可调的实时时钟显示功能的时间系统的设计学习,详细简介了51单片机应用中的数据转换显示,数码管显示原理,静态扫描显示原理,单片机的定期中断原理等,从而到达学习、理解单片机有关指令在各方面的应用。对于单片机学习者而言,这个程序基本上是一道门槛,掌握了电子时钟程序,基本上就可以说掌握了51单片机。1数字钟的功能实现与设计方案1.1数字钟的实现形式数字钟既可以通过纯硬件实现,也可以通过软硬件结合实现,根据电子时钟的关键部件——秒信号的产生原理,一般有三钟形式:(1)用NE555时基电路的形式采用NE555时基电路或其他震荡电路产生秒脉冲信号,作为秒加法电路的时钟信号或微处理器的外部中断输入信号,可构成电子时钟。由NE555构成的秒脉冲发生器电路如图1-1所示。输出的脉冲信号V0的频率F=1.443/(RA+2RB)×C,可通过调整这3个参数,使输V0的频率为精确的1Hz。图1-1基于555的秒脉冲发生器(2)采用石英钟专用芯片的实现形式采用石英钟专用计时芯片实现的电子钟,具有实现简朴、计时精度高的特点。石英计时芯片(简称“机芯”)比较多,常见的有STP5512F、SM5546A和D60400等。现基于5512F的2秒输出信号作为秒加法电路的计时脉冲,可实现电子时钟。5512F的引脚如图1-2所示。112348765V+SCAKSC1M0BPM1GND图1-25512F引脚图其中,引脚7、8为外接晶振及振荡电路,引脚1接电源正极,电源为1.5伏,引脚3、4原为指针用步进电机线圈的输出驱动端,这里可用3脚作为脉冲输出,频率决定于外接晶振的频率。(3)采用基于单片机的实现形式运用单片机的智能性,可以便的实现具有智能数字钟的设计。并且,微处理系统具有时钟振荡系统,运用系统时钟并借助微处理器的定期/计数器功能可以实现数字钟的功能。本设计采用AT89S51单片机设计。1.2方案确实定可以从如下几种方面来确定电子时钟的设计方案。1.2.1微处理器采用ATMEL的AT89S51微处理器,是基于如下几种原因:(1)内含Flash存储器,这在系统的开发过程中,可随意进行程序修改,既便错误编程之后仍可以重新编程,故不存在废品且大大缩短了程序的开发周期;同步在系统工作过程中能有效地保留数据信息。(2)采用静态时钟方式,节省电能,这对于减少便携式产品的功耗十分有利。(3)由于它是以8031核构成的,因此它与MCS251系列单片机是兼容的(4)AT89S51为51内核,仿真调试软硬件资源丰富;(5)性价比高,货源充足;(6)DIP-40封装,体积较大,但更以便编程及定义管脚;(7)为E2PROM程序存储介质,1000次以上擦/写周期,便于变成调试;(8)具有低功耗工作模式,便于进行低功耗设计;(9)工作电压范围较宽,便于交直流供电。1.2.2显示电路就时钟而言,一般可采用液晶显示或数码管显示。对于一般的段式液晶屏,需要专门的驱动电路,并且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行机接口,对于微处理器的接口规定较高,占用资源多。此外,89S51自身没有专门的液晶驱动接口,因此,本时钟设计采用了数码管显示方式。数码管作为一种积极显示屏件,具有亮度高、价格廉价等长处,并且市场上也有专门的时钟显示组合数码管。1.2.3按键电路考虑到对时钟以及在有限个数码管内实现两组显示数据的切换。本时钟系统设五个按键:(1)SET键,重要用于启动和关闭设定参数状态两个功能:①在复位后的时钟(或日期)显示状态下,用于启动设定期间(或日期)参数;②在设定对的状态后,用于结束设定参数状态。(2)+1键,在SET状态下,用于对目前设定位(编辑位)进行加1操作,根据正在编辑的目前位的含义(时位、分位、秒位或星期、月份、日期)自动进行数据的上限和下限判断。例如,对12小时制,当小时的两位显示为12时,再按此键,则自动变为显示为“01”。(3)-1键,在SET状态下,用于对目前设定位(编辑位)进行减1操作,根据正在编辑的目前位的含义(时位、分位、秒位或星期、月份、日期)自动进行数据的上限和下限判断。例如,对12小时制,当小时的两位显示为01时,再按此键,则自动变为显示为12.(4)左移键/显示状态切换键,在SET状态下,用于对目前设定位(编辑位)进行左移位操作,每次移动一种变量(即两个数码管);在待机状态下,用于显示(时、分、秒和星期、月、日)的转换。(5)右移键,用于对目前设定位(编辑位)进行右移位操作,每次移动一种变量(即两个数码管)。2数字钟的硬件系统设计数字时钟硬件部分的设计应包括秒信号发生器、时间显示电路、按键电路、供电电路等几部分。2.1数字时钟的硬件系统框架电子时钟的系统框架入图2-1所示。CPUCPU按键电路复位等辅助电路电源系统数码管显示电路校时电路图2-1数字钟的系统框架2.2数字时钟的主机电路设计数字时钟的主电路指的是图1中框内部分,重要波及到微处理器电路和按键、按钮电路。主机的设计详细地说有:1、系统控制芯片的选择2、系统时钟电路设计;3、系统复位电路设计;4、按键与按钮电路设计。2.2.1系统控制芯片CPU(AT89S51)的选择AT89C系列单片机是Atmel企业1993年开始研制生产的,优越的性能价格比使其成为颇受欢迎的8位单片机。AT89C系列与MCS-51系列单片机相比有两大优势:第一,片内程序存储器采用闪速存储器,使程序的写入愈加以便;第二,功能愈加强大,使其在应用中更广泛[6]。(1)AT89S51重要性能:AT89S51是Atmel企业生产的带4KB闪速可编程可擦除只读存储器的8位单片机,它具有如下重要特性:eq\o\ac(○,1)AT89S51为51内核;eq\o\ac(○,2)内部带4KB可编程闪速存储器(E2PROM),寿命为1000次擦/写循环,数据保留时间为;eq\o\ac(○,3)DIP40封装,I/O口较多eq\o\ac(○,4)工作电压范围为4.5~5.5V;eq\o\ac(○,5)全静态工作频率为0Hz~33MHz;eq\o\ac(○,6)三极程序存储器保密锁定;eq\o\ac(○,7)128bytes内部RAM;eq\o\ac(○,8)32个外部双向输入/输出可编程I/O线;、eq\o\ac(○,9)2个16位定期器/计数器;eq\o\ac(○,10)6个中断源;eq\o\ac(○,11)两个全又工串行通信口;eq\o\ac(○,12)看门狗(WDT电路);eq\o\ac(○,13)可编程串行通道;eq\o\ac(○,14)片内振荡器和时钟电路;eq\o\ac(○,15)低功耗的闲置和掉电模式;(2)AT89S51内部构造及引脚描述AT89S51单片机的内部与8051单片机的内部构造完全一致,区别只是将存储器改为Flash存储。其引脚配置如图2-2所示。 图2-2AT89S51引脚配置它是一种有40个引脚排列直插式的芯片,其引脚描述如下:VCC:供电电压。GND:接地。P0口:P0口为一种8位漏级开路双向I/O口,每脚可吸取8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0可以用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一种内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接受输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接受。P2口:P2口为一种内部上拉电阻的8位双向I/O口,P2口缓冲器可接受,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它运用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接受高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接受输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口除了作为一般I/O口,尚有第二功能:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同步为闪烁编程和编程校验接受某些控制信号。I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,通过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都是准双向口。除了P1口外P0、P2、P3口都尚有其他的功能。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存容许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定期目的。然而要注意的是:每当用作外部数据存储器时,将跳过一种ALE脉冲。如想严禁ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。此外,该引脚被略微拉高。假如微处理器在外部执行状态ALE严禁,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管与否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。从上述引脚阐明看出,AT89S51提供了外部扩展存储器与I/O设备所需的地址、数据、控制信号,因此运用AT89S51构成的单片及应用系统可以在AT89S51之外扩展存储器或I/O设备,不过其自身所具有的的各项功能及模块也阐明,AT89S51自身也构成了最小的单片机系统。(3)振荡器振荡器特性:XTAL1和XTAL2分别构成片内振荡器的反相放大器的输入和输出端,如图2-3所示。可采用石英晶体或陶瓷振荡器构成振荡器。要从外部时钟源驱动AT89S51,则XTAL2应悬空,而XTAL1的驱动如图2-4所示。由于输入到内部时钟电路通过一种二分频触发器,故不需要对外部时钟信号的工作周期提出特殊规定,但它必须遵守最小和最大电压高下电平的时间规范。图2-3振荡的外部连接措施图2-4外部时钟驱动构造(4)特殊功能寄存器SFR与8051单片机特殊功能寄存器相对应,AT89S51片内设置了19个特殊功能寄存器,统称为特殊功能寄存器块SFR,它们的地址散布在80H~0F0H区域内。(5)低功耗工作模式AT89S51优良中低功耗工作模式:待机方式与掉电方式。eq\o\ac(○,1)待机方式(休眠方式)当运用软件使待机方式位ADL(PCON.0)=0时,单片机进入空闲方式。此时,CPU处在休眠状态,而片内所有其他外围设备都保持工作状态,片内RAM和所有特殊功能寄存器内容保持不变。在待机方式下,当晶振fosc=12MHz,电源电压VCC=6V时,电源电流ICC从20Ma降至5Ma;而VCC由5.5mA降至1mA。中断或硬件复位可以终止待机方式。当待机方式由硬件复为终止时,CPU要从休眠处恢复程序的执行,执行2的周期后,内部复位电路才起作用。此时,硬件严禁访问内部RAM,但容许访问端口引脚。为了防止休眠被复位终止时对端口以外写入的也许性,在生成待机方式的指令后不应紧跟对端口引脚的写指令。假如不采用外部上拉,P1.0和P1.1应置“1”。eq\o\ac(○,2)掉电方式掉电方式由掉电方式位PD(PCON.1)=1设置。此时振荡器停止工作,设置掉电方式的指令成为最终执行的一条指令,片内RAM和特殊功能寄存器内容保持不变。在掉电模式下,VCcmin=2V。当VCC=6V时,ICCmax=100μA;当VCC=3时,ICcmax=20μA。退出掉电方式的唯一方式是硬件复位。硬件复位将重新定义特殊功能寄存器,但不影响片内RAM。复位的保持时间应足够长,以便振荡器能重新开始工作并稳定下来。在VCC没有恢复得到正常工作电压之前,不应进行复位。假如不采用外部上拉,P1.0和P1.1应置“0”,否则置“1”。(6)闪速存储器的编程AT89S51单片机内部有4KB的闪速存储器阵列,一片新的AT89S51,其存储阵列处在擦除状态(FFH),此时可对其编程,存储阵列一次编程1字节,若编程任何非空字节时,需对整个存储阵列进行片擦除[7]。编程时,AT89S51运用内部存储器地址计数器提供寻址存储器的地址信号,RST上升沿将该地址计数器复位至000H,引脚XTAL1所施加的正向脉冲使地址计数器不停加1。[8]RST上出现12V(编程电源VPP)高压时,预示着1字节的编程操作开始,这时P3口提供编程所需的控制与状态信号,P1口为数据通道。(7)在线编程AT89S51编程时需要运用RST、XTAL1、P1口、P2口、P3口提供控制信号与加载编程数据,而这一规定又常与顾客系统对这些引脚的规定或操作冲突。因此,在线编程不能直接在顾客工作电路中进行,而要通过特殊电路处理才能实现。例如图2-5所示为在线编程的示例,其采用2选1的措施实现连接线路的切换,达到在线编程的目的。运用微动开关SW来选择XTAL1的加载,产生选择控制信号Select,其他线路的切换用2选1器件74LS157与三态缓冲器74LS244实现。当AT89S51正常工作时,选择控制信号(Selecg=0)控制所有的74LS157输入A端与输出Y接通,且74LS244-1输出有效,74LS244-2三态输出,使得AT89S51可以对顾客电路进行控制操作;当AT89S51需要编程时,选择控制信号(Select=1)控制所有的74LS157输入B端与输出Y端接通,且74LS244-1三态输出,74LS244-2输出有效,使得AT89S51可以接受编程电路的控制,实现编程操作。图2-5在线编程示图2.2.2时钟芯片DS1302DS1302是DALLAS企业推出的涓流充电时钟芯片,内具有一种实时时钟/日历和31字节静态RAM,通过简朴的串行接口与单片机进行通信实时时钟/日历电路。提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式。DS1302与单片机之间能简朴地采用同步串行的方式进行通信,仅需用到三个口线:①RES复位;②I/O数据线;③SCLK串行时钟.时钟/RAM的读/写数据以一种字节或多达31个字节的字符组方式通信.DS1302工作时功耗很低,保持数据和时钟信息时功率不不小于1mW。DS1302是由DS1202改善而来,增长了如下的特性.双电源管脚用于主电源和备份电源供应Vcc1,为可编程涓流充电电源附加七个字节存储器。它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域。(1)重要的性能指标:eq\o\ac(○,1)实时时钟具有能计算2100年之前的秒、分、时、日、月、星期、年的能力,尚有闰年调整的能力;eq\o\ac(○,2)318位暂存数据存储RAM;eq\o\ac(○,3)串行I/O口方式使得管脚数量至少;eq\o\ac(○,4)宽范围工作电压2.0V---5.5V;eq\o\ac(○,5)工作电流2.0V时,不不小于300nA;eq\o\ac(○,6)读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送字符组方式;eq\o\ac(○,7)8脚DIP封装或可选的8脚SOIC封装根据表面装配;eq\o\ac(○,8)简朴3线接口;eq\o\ac(○,9)与TTL兼容Vcc=5V;eq\o\ac(○,10)可选工业级温度范围-40+85;eq\o\ac(○,11)与DS1202兼容;eq\o\ac(○,12)在DS1202基础上增长的特性;eq\o\ac(○,13)对Vcc1有可选的涓流充电能力;eq\o\ac(○,14)双电源管用于主电源和备份电源供应;eq\o\ac(○,15)备份电源管脚可由电池或大容量电容输入;(2)DS1302的基本构成和工作原理DS1302的引脚功能排列及描述如图2-6所示.图2-6DS1302引脚图管脚描述:

X1X232.768KHz晶振管脚

GND地

RST复位脚

I/O数据输入/输出引脚

SCLK串行时钟

Vcc1,Vcc2电源供电管脚

DS1302串行时钟芯片8脚DIP

DS1302S串行时钟芯片8脚SOIC200mil

DS1302Z串行时钟芯片8脚SOIC150mil(3)DS1302内部寄存器CH:时钟停止位

存器2的第7位12/24小时标志

CH=0振荡器工作容许

bit7=1,12小时模式

CH=1振荡器停止

bit7=0,24小时模式WP:写保护位

寄存器2的第5位:AM/PM定义

WP=0寄存器数据可以写入

AP=1下午模式

WP=1寄存器数据不能写入

AP=0上午模式TCS:涓流充电选择

DS:二极管选择位

TCS=1010使能涓流充电

DS=01选择一种二极管

TCS=其他严禁涓流充电

DS=10选择两个二极管

DS=00或11,虽然TCS=1010,充电功能也被严禁2.2.3系统时钟电路设计系统运用晶体振荡器作为时钟电路,根据晶振的不一样使用规定及特点,一般分为如下几类:一般晶振、温补晶振、压控晶振、温控晶振等。安装晶振时,应根据其引脚功能标识与应用电路应连接,防止电源引线与输出引脚相接输出。在测试和使用时所供直流电源应没有足以影响其精确度的纹波含量,交流电压应无瞬变过程[9]。测试仪器应有足够的精度,连线合理布置,将测试及外围电路对晶振指标的影响降至最低。(1)一般晶振(PXO):是一种没有采用温度赔偿措施的晶体振荡器,在整个温度范围内,晶振的频率稳定度取决于其内部所用晶体的性能,频率稳定度在10-5量级,一般用于一般场所作为本振源或中间信号,是晶振中最廉价的产品。(2)温补晶振(TCXO):是在晶振内部采用了对晶体频率温度特性进行赔偿,以到达在宽温温度范围内满足稳定度规定的晶体振荡器。(3)恒温晶振(OCXO):采用精密控温,使电路元件及晶体工作在晶体的零温度系数点的温度上。中精度产品频率稳定度为10-7~10-8,高精度产品频率稳定度在10-9量级以上。重要用作频率源或原则信号。(4)压控晶振(VCXO):是一种可通过调整外加电压使晶振输出频率随之变化的晶体振荡器,重要用于锁相环路或频率微调。压控晶振的频率控制范围及线性度重要取决于电路所用变容二极管及晶体参数两者的组合。晶体振荡器选择参照原则:(1)总频差:在规定的时间内,由于规定的工作和非工作参数所有组合而引起的晶体振荡器频率与给定标称频率的最大频差。(2)温度稳定度:在标称电源和负载下,工作在规定温度范围内的不带隐含基准温度或带隐含基准温度的最大容许频偏。(3)频率稳定预热时间:以晶体振荡器稳定输出频率为基准,从加电到输出频率不不小于规定频率允差所需要的时间。(4)频率老化率:在恒定的环境条件下测量振荡器频率时,振荡器频率和时间之间的关系。这种长期频率漂移是由晶体元件和振荡器电路元件的缓慢变化导致的,可用规定期限后的最大变化率(如±10ppb/天,加电72小时后),或规定的时限内最大的总频率变化(如:±1ppm/(第一年)和±5ppm/(十年))来表达。(5)频率压控范围:将频率控制电压从基准电压调到规定的终点电压,晶体振荡器频率的最小峰值变化量。(6)频率压控线性:与理想(直线)函数相比的输出频率-输入控制电压传播特性的一种量度,它以百分数表达整个范围频偏的可容许非线性度。本系统时钟电路的设计如图2-7。对于实践规定不是很高的系统,图中电路设计就能使系统可靠起振并稳定运行。但由于途中的C1、C2电容起着系统时钟频率微调和稳定的作用,它对时钟的正负走时误差有很大影响。因此,在本系统的实际应用中尤其注意了电容参数的选择(),并尽量保证电路的对称性(尽量匹配),选用正派厂家生产的瓷片或云母电容,条件容许的话温度系数要尽量低。图2-7振荡电路2.2.4系统复位电路设计智能系统一般应有手动或上电复位电路。复位电路的实现一般有两种形式:即专用µp监控电路和RC复位电路。前者电路实现简朴,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠反复复位。对于复位规定高,并对电源电压进行监视的场所,大多采用这种方式。(1)专用µP监控电路专用µP监控电路有称为电源监视电路,具有上电时可靠产生复位信号和电源电压跌落到“门槛值”时可靠产生复位信号等功能[9]。准时效电平分,有高电平输出、低电平输出两种;按功能分,有简朴的电源监视复位电路、带看门狗定期器(WATCHDOGTimer,WDT)的监控电路和WDT+E2PROM的监控电路等多种类型。(2)RC复位电路本系统采用的是RC复位方式。RC复位电路的实质是一阶充放电电路,如图2-8:图2-8RC复位电路系统上电时该电路提供有效的复位信号RST(高电平)直至系统电源稳定后撤销复位信号(低电平)。从理论上说,51系列单片机复位引脚只要外两个机器周期的有效信号即可复位,即只要保证t=RC>2M(机器周期)便可。但在实际设计中,一般C1取值为10µF以上,R1一般取值10ΚΩ左右。实践发现,R1假如取值太小,例如1ΚΩ,则会导致RST信号驱动能力变差而无法使系统可靠复位。此外,从图2-9所示的复位信号波形图可以明显看出,续流二极管对于改善复位性能,起到了重要作用。它的作用是在电源电压瞬间下降时使电容迅速放电,因此一定宽度的电源毛刺(如波形中A点)也可令系统可靠复位。图2-9加二极管前后的复位信号特性对比2.2.5按键与按钮电路设计按键与按钮电路的设计参见系统原理图中的S1、S2和S3对应部分。按键与按钮电路设计中关键要考虑的就是按键去抖动问题(简称“去抖”),一般由硬件去抖和软件去抖两种方式。硬件去抖可以采用分立元件或触发器实现,目前市场上也有硬件去抖专用接口芯片,例如:MAXIM企业MAX6816~6818,均为单电源供电,电压为2.7~5.5V,分别为单输入、双输入和八输入,输出端具有欠压锁定功能。考虑到系统的硬件简化和控制成本问题,本次设计采用软件去抖方式。2.2.6数字钟的显示电路设计(1)LED的选择单片机I/O的应用最经典的是通过I/O口与7段LED数码管构成显示电路,7段LED数码管,在一定形状的绝缘材料上,运用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮对应的点划来显示出0-9的数字。LED数码管根据LED的接法不一样分为共阴和共阳两类,理解LED的这些特性,对编程是很重要的,由于不一样类型的数码管,除了它们的硬件电路有差异外,编程措施也是不一样的。下图2-10为共阴和共阳极数码管的内部电路,它们的发光原理是同样的,只是它们的电源极性不一样而已。图2-10数码管电路将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极接地,在对应段的阳极接上正电源,该段即会发光。当然,LED的电流一般较小,一般均需在回路中接上限流电阻。假如我们将"b"和"c"段接上正电源,其他端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其他引脚悬空,此时数码管将显示“2”。其他字符的显示原理类同。本设计采用的是共阳极数码管。用单片机驱动LED数码管有诸多措施,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再控制LED,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间;动态显示需要CPU时刻对显示屏件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊:动态显示虽然有闪烁感,占用的CPU时间较多,不过用的硬件少,能节省线路板的空间。动态扫描显示接口是单片机种应用最广泛的一种显示方式。其接口电路是把所有的LED显示屏的8个笔画段A~G、DP的同名端连在一起,而每一种数码管的公共端COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示屏接受到相似的字形码,但究竟是哪个显示屏亮,则取决于COM端,而这一端由I/O控制的,可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的措施,轮番控制各个显示屏的COM端,使各个显示屏轮番点亮。在轮番点亮扫描过程中,每位显示屏的点亮时间是极为短暂的,约1ms左右,不过由于人的视觉暂留现象及发光余晖效应,尽管实际上各位显示屏并非同步点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多,不过编程相对于动态显示比较简朴,本设计采用的是静态显示方案。(2)LED的驱动和显示单片机对LED数码管的驱动措施可以分为串行和并行两种,分别合用于不一样的使用场所,两者的硬件电路和程序区别也很大。并行驱动:在一般状况下,单片机使用并行驱动的方式进行LED的显示。并行驱动的构造较简朴,并且非常合用于阐明地址和数据总线复用的状况。LED并行驱动的电路原理图如图2-11所示。图2-11LED并行驱动的电路原理图中显示的是使用8155与LED显示屏的接口,8155的PB0~PB7作为段选码口,通过7407驱动与LED的段相连;8155的PA0~PA5作为位选码口,通过7406驱动与LED的位相连。图中的P2.7反相后作为8155的片选信号,P2.6接8155的IO端。这样确定8155片内的4个端口地址。(7407:驱动门电路,提供数码管显示的驱动电流)本设计采用的是串行驱动方式,详细措施如下:在某些状况下,可供使用的单片机并行I/O口局限性8根,数据的并行输出已不也许此时可以考虑串行输出措施,图2-12本设计采用的串行口扩展的四位LED显示电路。图2-12本设计采用的串行口扩展的六位LED显示电路该显示电路只使用单片机的两个端口P3.0、P3.1,并配以六片串入并出移位寄存器74LS164(LED驱动)。并配四个二级管来调整LED亮度。其中74LS164的引脚Q0~Q7为8位并行输出端;引脚A、B为串行输入端;引脚CLK为时钟脉冲输入端,在CLK脉冲的上升沿作用下实现移位,在CLK=0、清除端MR=1时,74LS164保持本来数据状态;MR=0时,74LS164输出清零。其工作过程如下:①89S51的串行口设定在方式0移位寄存器状态下,串行数据由P3.0发送,移位时钟由P3.1送出②在移位时钟的作用下,串行口发送缓冲器的数据一位一位地移入74LS164中。③6片74LS164串级扩展为6个8位并行输出口,分别连接到6个LED显示屏的段选端作静态显示。显示采用共阳数码管,其目的是为了简化限流电路的设计和实现亮度可调的规定。从图中可以看出,该显示电路采用了与一般的段电流电阻限流方式不一样的显示方式,由此减少了48个限流电阻,简化了硬件系统。每笔画段二极管正常发光时的电流一般为10mA左右(电流大小还取决于数码管是普亮、高亮还是超高亮类型的不一样),其两端压降约为2.0V,也就是说,只要数码管的公共端(COM)加+2.0以上电压,即可满足每笔画段发光二极管的发光规定,并且合适调整此电压值即可变化发光二极管的电流,从而到达调整亮度的目的。此电压采用的是由4个硅二极管串联,运用硅二级管两端电压降为0.7V,4个二级管产生的电压降效果为4*0.7=2.8(V),输入电压为+5V,由此抵达每个数码段上的电压为2.2V左右,以保证发光段的正常亮度。移位寄存器74LS164仅有串入左右没有译码作用,因此,在编写显示驱动程序之前,首先需要计算列写出与本程序电路对应的LED段选码[3],然后由2051的P3.0口送入74LS164的串行输入端,再并行输出到LED的段选端。需要指出的是,本电路采用SM110501K型号的共阳极LED数码管。这种稳定的静态显示方式也省去了CPU的动态扫描过程,此为本电路的又一特点。2.3校时电路设计目前,世界上应用的校时系统有诸多种。有运用电话网络进行校时,尚有运用电视信号的校时系统、卫星校时系统、低频(长波)导航、授时信号系统、高频(短波)时号广播系统、运用互联网络校时系统等等方式进行自动校时[12]。本设计采用的是手动校时,即由人根据目前时刻和日期进行校时,从而使时间到达较精确的措施。手动校时重要运用软件进行,从而减少了在硬件上的多出以及对电路板空间的更大规定。此措施虽然在时间的精确性上较差,不过其成本最低,也是本设计运用至少材料做出最强功能的初衷。2.4电源设计单片机的供电方式有诸多种,可以采用电池供电,也可以采用外围其他的电源电路进行供电,多种供电方式也均有各自的优缺陷。电池供电:可以节省很大的PCB空间,供电也为直流,不含任何交流成分,不过此供电方式也许会由于电路比较费电而需要常常得更换电池,这样也变向得提高了本设计的成本,因此本设计不采用此供电方式。外围供电电路:此措施可认为电路提供源源不停强劲的电源,不必为电路供电所紧张;不过此供电方式的电压纯度需要根据外围电路的设计程度而定,并且假如将此电路设计到PCB上,也会占用很大的空间,违反了本设计简朴的原则。综合上面两种供电方式的优缺陷,本设计采用的是运用电脑USB接口进行供电,电脑USB接口供电的最大电流为500mA,并且为稳压输出,足够本设计的需求,并且也不会占用PCB的空间,是一种非常不错的选择,同步也是本设计的长处。本设计在电源上的另一种长处是考虑到断电和状况,从设计总思绪上讲,规定断电后数码管可以不显示,不过时间必须照常进行。考虑到这一点,配合时钟芯片DS1302的双电源防断电的特点,将时钟芯片的另一种电源端用5V的纽扣电池进行供电,这样时间就不会由于断电而重新初始化了。3程序设计软件设计的重点在于秒信号的产生以及CPU与时钟芯片之间的通信,显示的实现及按键的处理等方面。基于软件的秒脉冲信号一般有延时法和定期中断法。延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的产生,因此秒脉冲的精度不高。中断法的原理是运用单片机内部的定期器溢出中断来实现。例如,设定某定期器每100ms中断1次,这10次的周期为1s,这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。[7]本系统即采用这种方式,实现的关键是定期器的工作方式的选择和定期参数的计算确定。此外就是借助时钟芯片,对于调时后的数据送给时钟芯片并且及时从其中读出更新后的数据,然后送显示。详细内容将在原程序中给于阐明。本系统设计中使用的晶振频率为12MHz。3.1主控模块设计NYCPU系统初始化开始切换显示周月日显示刷新显示切换?启动走时主模块是系统软件的主框架。构造化程序设计一般有“自上而下”和“自下而上”NYCPU系统初始化开始切换显示周月日显示刷新显示切换?启动走时图3-1主模块的程序框图3.2基本现实模块设计基本现实模块设计的重点是有显示代码获得对应的段码,显示段码数据的串行发送,其程序流程如图3-2所示。其中,时个位、分个位、秒个位的段码必须加上小数点,即带小数点显示时各位、分个位、秒个位,目的是以小数点符号替代时间分割符“:”,(一般的数码管无法显示字符“:”)。关显示,以免显示抖动通过串口将时十位段码送入对应的74LS164将十个位段码送入对应的74LS164(以小数点替代:)将分十位和个位段码送入对应的74LS164将百分秒十位和个位段码送入对应的74LS164打开显示图3-2基本显示模块的程序流程图开始3.3目前编辑位闪烁功能的实现关显示,以免显示抖动通过串口将时十位段码送入对应的74LS164将十个位段码送入对应的74LS164(以小数点替代:)将分十位和个位段码送入对应的74LS164将百分秒十位和个位段码送入对应的74LS164打开显示图3-2基本显示模块的程序流程图开始闪烁标志为真将显示全灭段码送显示缓冲区闪烁标志为真将显示全灭段码送显示缓冲区将目前设定的时间参数送显示调用基本显示程序模块图3-3目前编辑位闪烁功能实现的程序流程图3.4时间设定模块设计时间设定模块的设计要点是按键的去抖处理。软件发去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态与否还保持着,假如是,则作为按键处理,否则,视为抖动,不予理会。去抖的延时时间一般应不小于20ms,否则会导致按一次键做多次处理,影响程序正常执行。YYYYNYN设置模块初始化将在编参数送显示缓冲区将目前位的显示代码置暗代码调基本显示模块刷新显示目前编辑位左(右)移一位结束设定根据目前位的性质分别进行+1/-1/处理(含上下限判断)NYN返回N图3-4时间设定模块流程图闪烁标志为真?吗?+1/-1键吗?设置键?目前的编辑是时(周)个位吗设置键3.5CPU与时钟芯片的通信在系统刚刚通电后,CPU将片内初始的数据送给时钟芯片即2月11日周六11点59分40秒,给时钟芯片一种初始状态,然后时钟芯片按照初始状态开始进行,再把数据送给CPU然后进行显示。当调整时间后,CPU将调整后的时刻数据数给时钟芯片以再次将时钟芯片初始化,然后时钟芯片再将从此时刻开始进行计时,并把数据送给CPU进行送显示。其流程图如图3-5CPUCPUDS1302系统复位送初值调整后送值读取数据DS1302图3-5CPU与时钟芯片通信3.6系统调试方式3.6.1系统调试环境本系统所有的电路都设计在一块电路板上,整个电路板构造紧凑、分布合理,便于加工和调试,并且减少了互相间以及监控器与其他仪器间的干扰。电路焊接好过后进行简朴的调试、定标过后,系统便能对的、可靠的运行。3.6.2软件调试 本设计的软件部分,所有采用C语言编写,软件模块较多,程序代码较长,因此采用分块调试的措施来调试程序。首先用单片机汇编程序编译器(keiluVision2)调试,无误后,再通过编程器烧到单片机用装置试验调试,采用了自下到上的调试措施,即先单独调试好每一项功能,然后再连接成一种完整的系统调试。根据试验成果和指标对照,若有不符,再修改,直到程序完全对的为止。这样保证了软件编写的对的性和可行性。3.6.3硬件调试将程序烧入AT89S51中,并将其安装在硬件电路中,然后通电。先调整看按键工作与否正常,数码管与否能正常显示。在正常待机显示状态下,按动显示状态切换键,看能否进行(时、分、秒和周、月、日之间的)切换,并在两种显示示状态下擦去SET键,看能否启动和关闭校时状态,最佳在校时状态按动左移、右移、加键和减键,验证其功能与否完善。在调试过程中碰到了诸多的问题:(1)LED不显示。由于没有买到PCB板中那种封装的LED,因此在焊接的时候采用此外一种封装的LED来替代,采用将从PCB板上的每个管脚连线出来与此外一块板子上的LED管脚对应相连,由于连线过多,有某些线连错或者虚焊,在检查出错误后改正。(2)按下按键无动作。检查后发目前焊接过程中轻触按键的内部构造被破坏,不能正常的起到左右,后将其换掉。3.6.4调试成果基本实现了设计的规定,长时间运行轻易有误差,在稳定性方面尚有待改善。

结论/展望我在这一次数字电子钟的设计过程中,很是受益匪浅。通过对自己在大学三年时间里所学的知识的回忆,并充足发挥对所学知识的理解和对毕业设计的思索及书面体现能力,最终完毕了。这为自己此后深入深化学习,积累了一定宝贵的经验。撰写论文的过程也是专业知识的学习过程,它使我运用已经有的专业基础知识,对其进行设计,分析和处理一种理论问题或实际问题,把知识转化为能力的实际训练。培养了我运用所学知识处理实际问题的能力。通过这次课程设计我发现,只有理论水平提高了;才可以将书本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个试验十分故意义我获得很深刻的经验。通过这次课程设计,我们懂得了理论和实际的距离,也懂得了理论和实际想结合的重要性,,也从中得知了诸多书本上无法得知的知识。我们的学习不仅要立足于书本,以处理理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,处理问题即课程研究,学生自己就是一种专家,通过自己的手来处理问题比用脑子处理问题愈加深刻。学习就应当采用理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完毕理论知识的巩固,又有助于带动实践,处理实际问题,加强我们的动手能力和处理问题的能力。在试验过程中,也许会出现这样或那样的错误,但只要戒躁,安下心来,一步一步检查电路,多仿真,多尝试,必要时和同学多讨论,所有问题都会得到处理。尤其是在自己尝试、检查了多遍,但编译还错误时,更要静下心来,否则只会使状况愈加糟糕。只有冷静的心情,睿智的头脑才能使自己无坚不摧,完美完毕试验。本次试验让我学到了诸多,不仅在知识上,同步也在人格上,使我自身的综合素质得到了提高。认识到,光有聪颖的头脑是不够的,更为重要的是要具有坚韧的毅力和勇于思索问题的品质,同步,团体合作能力、创新精神也是不可或缺的。但愿能有机会多做这样的试验,提高自己的综合素质,加强自己的实践能力,丰富自己的头脑,为后来的学习、工作打下结实的基础。

致谢大学生涯行将结束,不过在那之前我们都必须得完毕毕业设计的工作,快乐的是我在今天完毕了这项工作,目前,我要对老师,同学,学校,家人体现最真诚的谢意。首先要提到的是我的毕业设计指导老师杨其锋老师,这是我大学期间接触最多的老师,他有着热情活泼的教学方式并对学生体谅负责对工作认真严谨。尽管杨老师平时自己也有教学上的任务,但他对我的毕业设计一点也没有省心同学的协助也是不能忽视的。我是一种比较擅长进行团体工作的人,而毕业设计这样的任务其实对我来说是很大的考验,庆幸在我完毕毕业设计的过程中,无论是硬件还是软件上,本组其他同学和班级同学对我提供了很大的协助,我的能力相对较差,没有他们耐心的协助我确实没有措施完毕设计任务。最终则要感谢母校四年来提供应我的优质的教学服务和生活,所有任课老师的认真教学,是你们让我的专业知识得到丰富,父母亲对我学习生活上的关怀,你们是我永远的后盾。

参照文献[1]沈红卫基于单片机的智能系统设计与实现[M].北京.电子工业出版社,.(70-85)[2]楼然苗51系列单片机设计实例[M].北京.北京航空航天大学出版社,.(23-45)[3]董传岱数字电子技术[M].石油大学出版社,.(45-63)[4]吴秀清微机原理与接口技术[M].中国科技大学出版社,.(20-35)[5]何立民单片机应用系统设计[M].北京:北京航空航天大学出版社,1995.(55-67)[6]李华.MCS-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1990.(46-56)[7]刘飞等两种数字钟电路设计比较[J]湖北师范学院学报,2(23)(40-43)[8]胥筱门单片机系统的试验及应用[J]电子制作1999(6)(20-30)[9]郑惠芳单片机报时时钟控制系统的一种设计措施[J]福建广播电视大学学报(6)(63-67)[10]张柱涛等基于单片机的多功能智能钟的设计[A]山东大学学报,5(23)(20-24)[11]AdelS.sedra&KennetchCSmithMicroelectronicCircuits.CBCCollegeOxfordUniversityPress,1998.(122-126)[12]JacobMillman&ArvinGrabel,Microelectronics.McGraw-HillBookCompany;NewYork,.(231-241)[13]DavidA.HodgsandHoraceGjackson.AnalysisendandDesignofDigitalIntegratedCircuits,NewYork,McGraw-Hill,1999.(1123-1133)

附录附录A数字钟系统设计原理图附图A数字钟系统原理图附录B系统设计程序#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitACC0=ACC^0;sbitACC7=ACC^7;sbitjiak=P2^3;sbityouyik=P2^2;sbitzuoyik=P2^1;sbitjiank=P2^0;sbitint1k=P3^3;sbitCLK=P3^5;//1302时钟信号线sbitIO=P3^6;//1302的I/O数据线sbitRST=P3^7;//1302的RST复位线bitflagb=1,xshi=1;//校准,显示切换标志位voidInputByte(uchar);//输入1ByteucharOutputByte(uchar);//输出1BytevoidW1302(uchar,uchar);ucharR1302(uchar);uchartab[6],tabb[6],tabbb[6];voidkey();voiddisplay();voidinit();voiddisplay1();voidinit1();uchara,c,i,b;//c表达中断次数a表达数码管移位次数uinttemp;ucharmiao,fen,shi;ucharri,yue,week;uchartab1[7]={0x40,0x59,0x11,0x11,0x02,0x06,0x06};uchartabb1[7]={0x01,0x01,0x01,0x01,0x01,0x01,0x01};ucharcodetab2[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90};ucharcodetabb2[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90};sbitzy=P2^1;ucharflag,zyflag,yyflag;//延时1msvoiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}//往1302写入1Byted为写入的数据入口参数voidInputByte(uchardate){ uchari; ACC=date; for(i=8;i>0;i--) { IO=ACC0; CLK=1; CLK=0; ACC=ACC>>1; }}//从1302读取1Byte数据返回值ACCucharOutputByte(void){ uchari; for(i=8;i>0;i--) { ACC=ACC>>1; ACC7=IO; CLK=1; CLK=0; } return(ACC);}//往1302写入数据先写地址后写数据ucADDucDA是入口参数voidW1302(ucharaddr,uchardate){ RST=0; CLK=0; RST=1; InputByte(addr);//写地址 InputByte(date);//写1Byte数据 CLK=1; RST=0;}//读取1302某地址的数据先写地址后读数据ucAddr入口地址ucDa是返回值ucharR1302(ucharaddr){ uchardate; RST=0; CLK=0; RST=1; InputByte(addr);//写地址 date=OutputByte();//读1Byte数据 CLK=1; RST=0; return(date);}//初始化设置初始值voidinit(){ uchari1; ucharaddr=0x80; W1302(0x8e,0x00);//控制命令字节WP=0写操作 for(i1=0;i1<7;i1++) { W1302(addr,tab1[i1]);//秒分时日月星期年 addr+=2; } W1302(0x90,0xa6); W1302(0x8e,0x80);//控制命令字节WP=1写保?}voidinit1(){ uchari1; ucharaddrb=0x86; W1302(0x8e,0x00);//控制命令字节WP=0写操作 for(i1=0;i1<7;i1++) { W1302(addrb,tabb1[i1]);//秒分时日月星期年 addrb+=2; } W1302(0x90,0xa6); W1302(0x8e,0x80);//控制命令字节WP=1写保?}voiddisplay(){ ucharCurtime[7]; uchari,i2; ucharaddr=0x81; for(i2=0;i2<7;i2++) { Curtime[i2]=R1302(addr);//格式秒分时日月星期年 addr+=2; } miao=Curtime[0]; fen=Curtime[1]; shi=Curtime[2]; tab[5]=miao%16; tab[4]=miao/16; tab[3]=fen%16; tab[2]=fen/16; tab[1]=shi%16; tab[0]=shi/16; for(i=0;i<6;i++) { SBUF=tab2[tab[i]]; while(!TI); TI=0; } delay(20);}voiddisplay1(){ ucharCurtime[7]; uchari,i2; ucharaddrb=0x87; for(i2=0;i2<7;i2++) { Curtime[i2]=R1302(addrb);//格式秒分时日月星期年 addrb+=2; } ri=Curtime[0]; yue=Curtime[1]; week=Curtime[2]; tabb[5]=ri%16; tabb[4]=ri/16; tabb[3]=yue%16; tabb[2]=yue/16; tabb[1]=week%16; tabb[0]=week/16; for(i=0;i<6;i++) { SBUF=tabb2[tabb[i]]; while(!TI); TI=0; } delay(20);}//主函数voidmain(){ zyflag=1; display(); if(shi==0x00&&fen==0x00&&miao==0x80)init(); if(week==0x00&&yue==0x00&&ri==0x80)init1(); EA=1; EX1=1; IT1=1; while(1) { if(zuoyik==0){while(!zuoyik);xshi=~xshi;flagb=~flagb;} if(xshi==1) { if(c!=1)display();//时分秒 } else { if(c!=1)display1();//星期月日 } }}voidint1()interrupt2{ while(1) { if(int1k==0) //扫描p3 { delay(20); if(int1k==0) { while(!int1k); W1302(0x8e,0x00); a=1; c++; if(c==2)c=0; } } if(c==1) { if(youyik==0)//扫描键盘 { delay(20); if(youyik==0) { while(!youyik); a+=2; if(a==7)a=1; } } if(zuoyik==0) { delay(20); if(zuoyik==0) { while(!zuoyik); if(a==1) a=7; a-=2; } } if(flagb==1) for(i=0;i<6;i++) {tabbb[i]=tab[i]; } else for(i=0;i<6;i++){tabbb[i]=tabb[i]; }; for(i=0;i<6;i++) { if(a==i) { b=a; SBUF=0xff; } elseSBUF=tab2[tabbb[i]]; while(!TI); TI=0; } delay(100); if(b==a) { if(jiak==0) { delay(20); if(jiak==0) { while(!jiak); switch(b) { case1: if(flagb==1) {tab[1]++; if(tab[1]==10) { tab[1]=0; tab[0]++; } if(tab[0]==2&&tab[1]==4) { tab[0]=0; tab[1]=0; } shi=tab[0]*10+tab[1]; W1302(0x84,(shi/10)*16+shi%10); break; } else {tabb[1]++; if(tabb[1]==8) { tabb[1]=1; tabb[0]=0; } if(tabb[0]==0&&tabb[1]==8) { tabb[0]=0; tabb[1]=0; } week=tabb[0]*10+tabb[1]; W1302(0x8a,(week/10)*16+week%10); break; } case3: if(flagb==1) {tab[3]++; if(tab[3]==10) { tab[3]=0; tab[2]++; } if(tab[2]==6&&tab[3]==0) { tab[2]=0; tab[3]=0; } fen=tab[2]*10+tab[3]; W1302(0x82,(fen/10)*16+fen%10); break; } else {tabb[3]++; if(tabb[3]==10) { tabb[3]=0; tabb[2]++; } if(tabb[2]==1&&tabb[3]==3) { tabb[2]=0; tabb[3]=1; } yue=tabb[2]*10+tabb[3]; W1302(0x88,(yue/10)*16+yue%10); break; } case5: if(flagb==1) {tab[5]++; if(tab[5]==10) {

温馨提示

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

评论

0/150

提交评论