基于STC89C52的可调电子钟设计

上传人:仙*** 文档编号:36367119 上传时间:2021-10-30 格式:DOC 页数:30 大小:612.50KB
返回 下载 相关 举报
基于STC89C52的可调电子钟设计_第1页
第1页 / 共30页
基于STC89C52的可调电子钟设计_第2页
第2页 / 共30页
基于STC89C52的可调电子钟设计_第3页
第3页 / 共30页
点击查看更多>>
资源描述
滨江学院毕业论文(设计) 题 目 学生姓名 学 号 院 系 专 业 指导教师 职 称 目 录第一章 概述31.1 背景31.2 研究目的3第二章 设计要求与方案论证42.1 设计要求42.2 系统基本方案选择与论证42.2.1 单片机芯片的选择与论证42.2.2 显示模块选择和论证42.2.3 时钟芯片的选择和论证52.3 电路实际最终方案决定5第三章 主要原件介绍53.1 STC89C52介绍53.1.1 STC89C52主要功能53.1.2 STC89C52引脚介绍53.1.3 STC89C52的PDIP封装图63.2DS1302时钟芯片介绍73.2.1DS1302 简介:73.2.2 DS1302引脚介绍73.2.3 DS1302读写时序说明73.3 MT05643DR数码管介绍83.4 语音芯片介绍8第四章 系统硬件设计94.1 电路设计框架94.2 STC89C52最小系统104.3 按键控制电路104.4 DS1302时钟模块104.5 电路仿真图11第五章 系统的软件设计125.1 系统软件设计流程图125.3 对DS1302读写操作函数135.6 按键函数21设计总结21参考文献21致 谢22Abstract23附录24附录一源程序代码25附录二原件清单31基于STC89C52的可调电子钟设计摘要:随着单片机技术飞速发展,它有力的推动了现代电子产品性能的增加。时间就是金钱,时间就是生命,时间就是胜利,准确掌握时间并且分配时间对人们来说十分重要,时钟是我们生活中必不可少的工具之一。本设计则是利用了STC89C52单片机对 DS1302时钟芯片进行读写操作,并通过时钟数码管来显示时钟信息,这样便构成了一个单片机电子时钟。关键词:单片机,电子时钟,STC89C52第一章 概述1.1 背景近年来伴随着计算机在社会上的应用以及大规模集成电路应用的发展,单片机的应用正不断的深入,由于单片机具有、体积小、功能强、价格便宜、功耗低、使用方便等特点,所以特别适合与控制有关的系统,越来越广泛的自动控制,智能化的仪器,仪表,数据采集,军工产品和家用电气的各个领域。单片机往往是作为一个核心部件来使用的,再根据其具体硬件结构以及针对具体应用对象特点的软件结合,加以完善。时间对于人们来说是非常宝贵的,准备掌握和分配时间对人们来说更是至关重要。随着时代推进和科学技术的不断发展,人们对时间计量的精确度越来越高,时间计量的应用也越来越广泛,这就促使了人们不断的设计和研发出新时钟。时钟电路在计算机系统中起着至关重要的作用,它是保证系统正常工作的基础。在单片机的应用系统中,时钟有两个方面的含义:一是指为保证系统正常工作的基准振荡定时信号,主要是由晶振以及外围电路组成,晶振频率大小决定了单片机系统工作速度的快慢;二是指系统标准定时时钟,即定时时间,它通常具有两种实现方法:一种是利用软件实现,即利用单片机内部可编程定时器或者计数器来实现;另一种是用专门的时钟芯片来实现。1.2 研究目的本设计通过利用STC89C52单片机,DS1302芯片,外围按键和时钟数码管等部件,设计一个基于单片机的可调电子时钟。设计的电子钟通过数码管现实,能通过按键对时间进行设置,并且有报时的功能。第二章 设计要求与方案论证2.1 设计要求具有时、分、秒的显示功能具备时、分、秒的校准功能具有语音报时功能2.2 系统基本方案选择与论证2.2.1 单片机芯片的选择与论证方案一 :采用STC89C52芯片作为硬件核心。STC89C52的内部具有8KB ROM存储空间,512字节数据存储空间,带有2K字节EEPROM存储空间,可与MCS-51系列的单片机完全兼容,并且它可以通过串口下载。方案二:采用AT89S52芯片。AT89S52的内部具有8K字节程序存储空间,256字节的数据存储空间,其没有EEPROM存储空间,也可与MCS-51系列单片机完全兼容,具有在线编程可擦除技术。两种单片机都能够完全满足设计的需要,但是STC89C52抗干扰能力强,并且价格相对比较便宜。因此选择STC89C52芯片。2.2.2 显示模块选择和论证方案一 :采用点阵式数码管来现实。点阵式数码管是由八行八列的发光二极管组成,可用来显示数据。方案二:采用MT05643DR 四位数码管显示。 两种显示模块都能满足设计需要,但是点阵式数码管体积比较大,并且价格也相对较高,从便携实用以及成本因素考虑,采用MT05643D数码管显示。2.2.3 时钟芯片的选择和论证方案一:采用单片机定时计数器提供秒信号,试用程序实现时、分、秒的计数。采用这种方案虽然能减少芯片的使用,能够节约成本,但是实现的时间误差会较大。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能时钟芯片,可自动对时分秒来进行计算,并且其精确度高。因此选择DS1302时钟芯片实现时钟。2.3 电路实际最终方案决定 采用STC89C52单片机作为主控制系统,采用DS1302作为时钟芯片;采用MT05643DR数码管作为显示器件。第三章 主要原件介绍3.1 STC89C52介绍3.1.1 STC89C52主要功能STC89C52是一种带8K字节 闪烁可编程 可檫除 只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件是采用ATMEL高密度非易失存储器的制造技术制造,其与工业标准的MCS-51指令集和输出管脚相兼容。STC89C5的内部具有一个用来构成振荡器的高增益反相放大器,其引脚RXD和TXD分别是该放大器输入端以及输出端。时钟可以通过内部方式或者外部方式产生。内部方式产生的时钟电路在RXD和TXD引脚外接定时元件时,内部振荡器就会产生自激振荡。定时元件常采用石英晶体及由电容组成的并联谐振回路。晶体振荡的频率可在1.212MHz之间选择,电容值可以在530pF间选择,电容值大小可以对频率起微调作用。外部方式产生的时钟电路RXD接地,而TXD则接外部振荡器。对 外部振荡信号没有特殊要求,仅仅要求保证脉冲的宽度,通常采用其频率低于12MHz的方波信号。片内时钟发生器可把振荡频率两分频,产生一个两相时钟P1和P2,供给单片机使用。STC89C52主要功能如表3.1所示表3.1 STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能3.1.2 STC89C52的引脚介绍(1) 主电源引脚(2根)VCC (Pin40):电源的输入,接5V电源;GND (Pin20):接地线;(2)外接晶振引脚(2根)XTAL1 (Pin19):片内振荡电路输入端;XTAL2 (Pin20):片内振荡电路输出端;(3)控制引脚(4根)RST/VPP (Pin9):复位引脚。引脚上,出现2个机器周期高电平将使单片机复位;ALE/PROG (Pin30):地址锁存允许信号;PSEN (Pin29):外部存储器读选通信号;EA/VPP (Pin31):程序存储器的内外部选通,接低电平从外部程序的存储器读指令,如果接高电平则是从内部程序的存储器读指令。(4)可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,其分别位P0、P1、P2、P3口,每个口有8位(8根引脚),一共32根。PO口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7;P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 ;P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 ;P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.7;3.1.3 STC89C52的PDIP封装图STC89C52的PDIP封装图如图3.1:图3.1 STC89C52的PDIP封装图3.2 DS1302时钟芯片介绍3.2.1 DS1302 简介: DS1302是由美国的DALLAS公司推出的一种高性能低功耗的实时时钟芯片,附加31字节静态RAM,采用了SPI三线接口和CPU进行同步通信,并且可采用突发方式 一次传送多个字节时钟信号以及RAM数据。实时时钟可以提供时分秒年月日以及星期,一个月小于31天可以自动进行调整,并且具有闰年的补偿功能。工作电压则宽达2.55.5V。其采用双电源的供电(主电源和备用电源),可以设置备用电源的充电方式,提供对后背电源进行涓细电流充电的能力。 DS1302用于数据的记录,尤其是对某些具有特殊意义的数据点的记录,能实现数据与出现此数据的时间同时记录,因此广泛的应用于测量系统中。DS1302 时钟芯片存在时钟精度不高,易受环境影响,出现时钟混乱等一些缺点。DS1302可以用于数据的记录,特别是对具有特殊意义数据点的记录,能够实现数据和出现此数据时间同时的记录。这种记录对长时间连续测控系统结果的分析和对异常数据出现原因的查找具有重要的意义。传统数据记录方式分别是隔时采样或是定时采样,没有具体的时间记录,因此,只能记录数据却不能准确的记录出现的时间。如果采用单片机计时,一方面需要采用计数器,占用了硬件资源,而另一方面则需要设置中断、查询等,同样耗费了单片机资源。并且某些测控系统会不允许。但如果在系统中采用时钟芯片DS1302,则可以很好地解决这个问题。 DS1302的工作原理:DS1302工作时为了能对任何数据传送进行初始化,需要将复位脚(RST)置为高电平并且将8位地址以及命令信息装入移位的寄存器。数据在时钟(SCLK)上升沿串行输入,前8位指定访问地址,命令字装入移位的寄存器后,在之后的时钟周期中,读写操作时分别输入数据和输出数据。时钟脉冲的个数在单字节的方式下是8+8(8位地址+8位数据),在多字节的方式下是8加最多可达248的数据。DS1302寄存器以及控制命令:对 DS1302的操作就是对它内部寄存器的操作,DS1302内部一共具有12个寄存器,其中有七个寄存器与日历和时钟相关,存放的数据位是BCD码形式。另外,DS1302还有年份寄存器、充电寄存器、控制寄存器、时钟突发寄存器以及与 RAM 相关的寄存器等。时钟突发寄存器可以一次性顺序读写除充电寄存器以外的寄存器。3.2.2 DS1302引脚介绍DS1302外部引脚分配如图3.3图3.3 DSI302外部引脚分配各个引脚的功能为: Vcc1:是备用电源;Vcc2是主电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 Vcc1时,则是由Vcc1向DS1302供电。SCLK:串行时钟输入; I/O:三线接口时双向数据线;CE:输入信号,在读、写数据时,必须为高。此引脚具有两个功能:一CE开始控制字访问移位寄存器的控制逻辑;其次CE提供结束单字节或者多字节数据传输的方法。3.2.3 DS1302读写时序说明 DS1302是SPI总线的驱动方式。它不仅需要向寄存器写入控制字还需要读取相应寄的存器的数据。 要与DS1302通信,需要了解DS1302的控制字。DS1302的控制字如图3.4。图3.4DS1302的控制字控制字最高有效位(位7)必须是逻辑1,如果为0,就不能把数据写入到DS1302中。位6:如果为0,表示存取日历时钟的数据,为1表示存取RAM数据;位5至位1(A4A0):指示操作单元地址;位0(最低有效位):如为0,表示进行写操作,为1表示进行读操作。控制字总是从最低位开始输出的。在控制字指令输入后下一个SCLK时钟的上升沿时,数据写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图3.5。图3.5数据读写时序3.3 MT05643DR数码管介绍MT05643DR是一个四位共阳极数码管,四位数码管是半导体的发光器件,它的基本单元为发光二极管,能显示4个数码管叫四位数码管。数码管按段数可分为七段数码管以及八段数码管,八段数码管则比七段数码管多了一个发光二极管的单元(多一个小数点显示)。按照发光二极管单元的连接方式分为共阳极和共阴极数码管。共阳极数码管指将所有的发光二极管阳极接到一起形成公共阳极(COM)数码管。共阳极数码管应用时则是将公共极COM接到+5V,当某一字段的发光二极管阴极为低电平时,相应字段则点亮。当某一字段阴极为高电平时,相应字段则不亮。共阴极数码管是指将所有的发光二极管的阴极接到一起从而形成公共阴极(COM)的数码管。共阴极数码管在应用时应将公共极COM接到地线GND上,当某一字段的发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段则不亮。数码管的动态显示接口是单片机中应用最为广泛的显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,d,p的同名端连在一起,另外为每个数码管公共极COM增加位选通控制电路,位选通是由各自独立的I/O线控制。当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪一个数码管会显示出字形,取决于单片机所对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就能显示出字形,没有选通的数码管就不会亮。通过时分轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示的过程中,每位数码管点亮时间为1-2ms,由于人的视觉暂留现象以及发光二极管的余辉效应,尽管实际上各位数码管并不是同时点亮,但是只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能节省大量的I/O端口,并且功耗更低。MT05643DR数码管电路图如下图图3.3数码管示意图图3.4数码管内部结构3.4 语音芯片介绍语音芯片是将语音信号通过采样转化为数字,存储在IC的ROM中,并且再通过电路将ROM中的数字还原成语音信号。根据语音芯片的输出方式可分为两大类,一类是PWM输出方式,一类是DAC输出方式。PWM输出音量不能连续可调,不能接普通功放;而DAC经内部EQ放大,该语音芯片声音能连续可调,可以数字控制调节,可外接功放。普通语音芯片放音功能实质上是一个DAC过程,而ADC过程资料则是由电脑完成,其中包括了对语音信号的采样、压缩、EQ等处理。录音芯片则包括ADC和DAC两个过程,都是由芯片本身来完成的,包括了语音数据的采集、分析、压缩、存储、播放等步骤。音质的优劣则是取决于ADC和DAC位数的多少。例如:20秒到 340秒,最低从10秒到340秒.语音芯片直观地从名称上看,就是与语音有关的芯片,语音就是存储电子声音,凡是能发出声音的芯片就是语音芯片,俗称声音芯片;英文准确些来说应该是Voice IC。 在语音芯片中,根据声音类型的不同可分为(Speech IC)和(Music IC)两种。单片语音录放电路是由语音存储单元、增益控制电路、输出放大器所组成的。一个最小的语音系统仅由一个喇叭、一个电源、少数电阻电容组成。利用它语音和音频信号被直接存储,在相应预设定的时间段里可以实现报时功能。本设计采用的语音芯片的控制原理图,如图3.4.1。任何时候需要播放的那一段都是先发送一个RET信号,再发送相对应的段码就可以了,任何时候发送一个RET信号(不接着发送段落选择脉冲)都会使芯片停止工作,同时播放指针则指向第一段。图3.4.1控制原理图第四章 系统硬件设计4.1 电路设计框架显示模块主控模块复位模块时钟模块按键模块语音模块图4.1电路设计框架4.2 STC89C52最小系统最小系统指能进行正常工作的最简单的电路。STC89C52的最小应用系统电路如图3.2所示。它包含了五个电路部分:电源电路,时钟电路,复位电路,片内外程序存储选择电路以及输入/输出接口电路。其中电源电路、时钟电路和复位电路是保证单片机系统能正常工作的最基本的三部分电路。电源电路:其芯片引脚VCC一般接上直流稳压电源+5V;引脚GND接电源+5V负极,电源的电压范围在4-5.5之间,可保证单片机系统的正常工作。为了提高电路的抗干扰性,通常在引脚Vcc与GND间街上10uF的电解电容和一个0.1uF的陶片电容,这样可以抑制杂波的干扰,进而有效的保证电路的稳定性能。时钟电路:单片机的引脚18,19外接晶振以及电容,STC89C52芯片工作频率则是在2-33MHz范围之间选择,单片机工作频率由晶振XT频率所取决的。复位电路:一般在引脚RST上保持24个工作的主频周期高电平,单片机则可以完成复位,但是为了保证系统的可靠复位,复位电路应该使用引脚RST保持10ms以上的高电平。如图4.2为STC89C52的最小系统。图4.2最小系统4.3 按键控制电路本设计需要校对时间,所以用三个按键来实现。通过按K1实现时分秒的切换,在任意数码管闪烁是按K2,K3分别是对该闪烁值增1和减1,在任意调节状态按K1,正常显示时间。K4则是对当时时间的报时。下图4.3为按键控制电路:图4.3按键控制电路图4.4 DS1302时钟模块DS1302时钟模块的电路图 如图4.4图4.4 DS1302时钟模块4.5 电路仿真图如图4.5第五章 系统的软件设计系统的软件设计也是对工具系统功能的设计。单片机软件设计主要包括执行软件(完成各种实质性功能)的设计以及监控软件的设计。单片机软件设计通常要考虑以下几个方面的问题:(1)根据软件功能的要求,将系统软件划分为若干个相对独立的部分,从而设计出合理的总体结构,使软件开发清晰简洁和流程合理;(2)需要培养良好的编程风格,比如考虑结构化程序的设计、实行模块化、子程序化。不进便于调试、链接,而且便于移植和修改;(3)建立正确的数学模型,通过仿真提高系统性能,并且选择合适的参数;(4)绘制程序流程图;(5)合理的分配系统资源;(6)为程序加入注释,提高程序的可读性,实施软件工程;(7)注意软件的抗干扰性的设计,提高系统可靠性。5.1 系统软件设计流程图 主程序是先开始,然后初始化地址参数,定时器启动后进行按键检测,检测完之后就可以显示时间。DS1302时钟芯片具有通电自动计算时间的功能,采用DS13O2时钟芯片单片机时钟,实质上就是读取时钟芯片里的时钟信息并显示出来。只要时间初值正确,时钟就能够一直准确的走下去。如图5.1开始初始化地址参数是否有键按下调用子函数修改时间是 否读取时间 将时间转换为字符型显示图5.1主函数流程图5.2 对DS1302读写操作函数在对DS1302时钟芯片操作前,应对其操作时序有所了解,参看前文对DS1302的介绍。DS1302是采用串行方式与单片机进行通信,一个机器周期只能读写一个字节的一位,因此在单片机与DS1302芯片间传输一字节(8位)数据,要分8次进行,并且先从低位开始传输。如图5.2.1,5.2.2为写DS1302流程图,读DS1302流程图。开始开始复位端变高启动一次数据传送工作复位端变高启动一次数据传送工作写命令字节一位 Y N Y N写命令字节一位SCLK发脉冲SCLK发脉冲够八次吗够八次吗 N N读数据字节一位写数据字节一位 Y Y SCLK发脉冲SCLK发脉冲够八次吗够八次吗复位端变低复位端变低结束结束5.3 按键函数此电子时钟共有4个按键,K1、K2、K3与调试有关,按键K4为报时按键K1 功能键:在24小时显示模式下,该键被第一次按下后进入秒调整,数码管显示器上的时间停止走动。模式,再次按下后进入分调整模式,接着是时调整模式K当第四次按下该键后退出。K2 调整键:在调整模式下,该键每按下一次,相应时间K加1K3 确定键:在调整模式下,该键被按下后,退出调整模式,并将调整后的时间写入DS1302K4 为报时按键,按下则由语音芯片报出对应的时间。每按下K1键,状态改变一次,标记状态从1改变到3如图5.3.1为按键状态处理工程设置时间:秒状态1设置时间:分状态2设置时间:时状态3图5.3.1按键状态处理每按一次键,相应的时间加1,但是时间是以BCD码的形式存放在DS1302时钟芯片上的,如果直接对其进行操作,如秒、假如秒的初试时间是00,它在DS1302芯片中存放的值为00000000,它的后4位则代表秒的个位,在时钟芯片自动计时的时侯,10秒后它的后四位为10时,它能自动进位变为00010000。但是在调秒的状态下按10次S2键,我们希望秒变成00010000,实际上其值变为00001010,因此我们引入参数分别代表秒的十位和个位。设计总结通过本次论文的设计,使我加深了对单片机知识的认识,并且熟悉了单片机系统的设计流程。本次设计功能上基本达标:时钟的显示,调时功能,语音报时功能。技术在不断进步,机械式的时钟已经被淘汰,取而代之的是具有高度准确性、直观性、无机械装置并且具有更长的使用寿命等有点的电子时钟。电子时钟更加具有人性化,更能提高人们的生活质量,更受人们的欢迎。机械时代已经远去,电子时代已经到来,作为新时代的我们,应该提高自身能力,适应新时代的发展。从这次的论文设计中,我真正的体会到知识的重要性,特别是要理论联系实际,把我们所学的理论和知识运用到实际生活中。参考文献1 杨家国单片机原理与应用及C51程序设计清华大学出版社2009-72 周向红51单片机课程设计M 华中科技大学出版社2011-13 阎石数字电子线路M 高等教育出版社2009-74 周兴华. 手把手教你学单片机C语言程序设计M.北京:北京航空航天大学出版社,2007年5 张义和.例说51单片机M.北京:人民邮电出版社,2010年6 孙涵芳.单片机原理及应用M.北京航空航天大学出版社,19967 黄正谨.综合电子设计与实践M.东南大学出版社,20038 谢嘉奎.电子线路M.高等教育出版社,20039 Lee Jri.High-Speed Circuit Designs for Transmittersin Broad-band Data Links. IEEE Journal of Solid-State CircuitsJ. 2006 10 Lim Kyoohyun,Park Chanhong,Kim Dalsoo,et al.A low-noise phase-locked loop design by loop bandwidth optimization. IEEE Journal of SolidState Circuits. 2000 11 George Lee,Karina Ng,Edmond Kwang.Design of ring oscillator based voltage controlled oscillator. Project Final ReportR. 2005Adjustable electric clock Based on the STC89C52Chen PengNanjing University of Information Science & Technology, Binjiang college, Information Engineering Specialty , Nanjing 210044AbstractWith the rapid development of microcomputer technology in its promotion ,it further improve the performance of modern electronic products. Time is money, time is life, time is victory. Accurate grapes of time and allocation of time is crucial to people. The clock is necessary in our life tools. In this paper, through the use of STC89C52 microcontroller by DS1302 clock chips for reading and writing operation so that forming a single chip electronic clock.Key Words: Microcontroller, STC89C52, Electronic clock.附录附录一:程序源代码#include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件 #define uchar unsigned char #define uint unsigned int sbit SCLK=P11; /位定义1302芯片的接口,时钟输出端口定义在P1.0引脚sbit DATA=P10; /位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit RST=P12; /位定义1302芯片的接口,复位端口定义在P1.2引脚 sbit key1=P16; /调时 sbit key2=P17; /调分 启动sbit key3=P30;sbit key4=P31; sbit busy=P13;/判忙端接8脚sbit SDA=P14;/信号端接7脚sbit RST2=P15;/触发端接6脚 void baoshi(unsigned char z);void yuyin(); uchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp; unsigned char m,n,p,t; unsigned char min,hour; /开始走秒 uchar code duan_code= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/共阳数码管段码表 uchar display_code= 0x00,0x00,0xbf,0x00,0x00,0xbf,0x00,0x00;/显示格式,中间两个横杠 uchar bit_code= 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f ;/数码管位选 uchar current_time7; /所读取的日期和时间 /调节标志 /*函数功能:延时若干微秒入口参数:n*/ void delaynus(unsigned char n) unsigned char i; for(i=0;in;i+); void delayms(uint x) /延时函数ms级 uchar i; while(x-) for(i=0;i+;i120); /*函数功能:向1302写一个字节数据入口参数:x*/ void Write1302(unsigned char dat) unsigned char i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,准备写入下一个数据位 /*函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据*/ void WriteSet1302(unsigned char Cmd,unsigned char dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 delaynus(2); /稍微等待,使硬件做好准备 Write1302(Cmd); /写入命令字 Write1302(dat); /写数据 SCLK=1; /将时钟电平置于高电平状态 RST=0; /禁止数据传递 /*函数功能:从1302读一个字节数据入口参数:x*/ unsigned char Read1302(void) unsigned char i,dat;delaynus(2); /稍微等待,使硬件做好准备for(i=0;i=1; if(DATA=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 SCLK=1; /将SCLK置于高电平,为下降沿读出 delaynus(2); /稍微等待 SCLK=0; /拉低SCLK,形成脉冲下降沿 delaynus(2); /稍微等待 return dat; /将读出的数据返回 /*函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd*/ unsigned char ReadSet1302(unsigned char Cmd) unsigned char dat; RST=0; /拉低RST SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 dat=Read1302(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回/*函数功能: 1302进行初始化设置*/ void Init_DS1302(void) WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x82,(miao/104)|(miao%10); /根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x84,(fen/104)|(fen%10); /根据写分寄存器命令字,写入分的初始值WriteSet1302(0x80,(fen/104|(fen%10); WriteSet1302(0x8E,0x80); /根据写状态寄存器命令字,写入保护指令 displaymiao() display_code0=duan_codemiao/10;/小时为的十位 display_code1=duan_codemiao%10;/小时位的个位 P2=bit_code0; P0=display_code0; P2=bit_code1; P0=display_code1; displayfen() display_code3=duan_codefen/10;/分钟位的十位 display_code4=duan_codefen%10; P2=bit_code3; P0=display_code3; delayms(5); /分钟为的个位 /按动3次,shi /write_1602com(0x0f); P2=bit_code4; P0=display_code4; delayms(5); displayshi() display_code6=duan_codeshi/10;/秒位的十位 display_code7=duan_codeshi%10; P2=bit_code6; P0=display_code6; delayms(5); P2=bit_code7; P0=display_code7; delayms(5); void keyscan() if(key1=0)/-key1为功能键(设置键)- delayms(9);/延时,用于消抖动 if(key1=0)/延时后再次确认按键按下 delayms(20); while(!key1); key1n+; if(key1n=4) key1n=1;/设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环 switch(key1n) case 1: TR0=0;/关闭定时器 /TR1=0; temp=(miao)/10*16+(miao)%10;/秒数据写入DS1302 WriteSet1302(0x8e,0x00); WriteSet1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break; case 2: display_code0=duan_codemiao/10;/小时为的十位 display_code1=duan_codemiao%10;/小时位的个位 P2=bit_code0; P0=display_code0; P2=bit_code1; P0=display_code1; delayms(5); /write_1602com(0x0f); break; case 3: display_code3=duan_codefen/10;/分钟位的十位 display_code4=duan_codefen%10; P2=bit_code3; P0=display_code3; delayms(5); /分钟为的个位 /按动3次,shi /write_1602com(0x0f); P2=bit_code4; P0=display_code4; delayms(5); break; case 4: display_code6=duan_codeshi/10;/秒位的十位 display_code7=duan_codeshi%10; P2=bit_code6; P0=display_code6; delayms(5); P2=bit_code7; P0=display_code7; delayms(5); /秒位的个位 break; case 5: TR0=1;/打开定时器 temp=(miao)/10*16+(miao)%10; WriteSet1302(0x8e,0x00); WriteSet1302(0x80,0x00|temp);/miao数据写入DS1302 WriteSet1302(0x8e,0x80); break; /-加键key2- if(key1n!=0)/当key1按下以下。再按以下键才有效(按键次数不等于零) if(key2=0) /上调键 delayms(10); if(key2=0) /buzzer=0;/蜂鸣器短响一次 delayms(20); /buzzer=1; while(!key2); switch(key1n) case 1:miao+;/设置键按动1次,调秒 if(miao=60) miao=0;/秒超过59,再加1,就归零 displaymiao(); temp=(miao)/10*16+(miao)%10;/十进制转换成DS1302要求的DCB码 WriteSet1302(0x8e,0x00); /允许写,禁止写保护 WriteSet1302(0x80,temp); /向DS1302内写秒寄存器80H写入调整后的秒数据 WriteSet1302(0x8e,0x80); /打开写保护 break; case 2:fen+; if(fen=60) fen=0; displayfen(); temp=(fen)/10*16+(fen)%10;/十进制转换成DS1302要求的DCB码 WriteSet1302(0x8e,0x00);/允许写,禁止写保护 WriteSet1302(0x82,temp);/向DS1302内写分寄存器82H写入调整后的分数据WriteSet1302(0x8e,0x80);/打开写保护 break; case 3:shi+; if(shi=24) shi=0; displayshi(); temp=(shi)/10*16+(shi)%10;/十进制转换成DS1302要求的DCB码 WriteSet1302(0x8e,0x00);/允许写,禁止写保护 WriteSet1302(0x84,temp);/向DS1302内写小时寄存器84H写入调整后的小时数 WriteSet1302(0x8e,0x80);/打开写保护 break; /-减键key3,各句功能参照加键注释- if(key3=0) delayms(10);/调延时,消抖动 if(key3=0) delayms(20); while(!key3); switch(key1n) case 1:miao-; if(miao=-1) miao=59;/秒数据减到-1时自动变成59 displaymiao(); temp=(miao)/10*16+(miao)%10;/十进制转换成DS1302要求的DCB码 WriteSet1302(0x8e,0x00); /允许写,禁止写保护 WriteSet1302(0x80,temp); /向DS1302内写秒寄存器80H写入调整后的秒数据WriteSet1302(0x8e,0x80); /打开写保护 break; case 2:fen-; if(fen=-1) fen=59; displayfen(); temp=(fen)/10*16+(fen)%10;/十进制转换成DS1302要求的DCB码 WriteSet1302(0x8e,0x00);/允许写,禁止写保护 write_1302(0x82,temp);/向DS1302内写分寄存器82H写入调整后的分数据 WriteSet1302(0x8e,0x80);/打开写保护 break; case 3:shi-; if(shi=-1) shi=23; displayshi(); temp=(shi)/10*16+(
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!