DS1302的实时数字钟设计.doc_第1页
DS1302的实时数字钟设计.doc_第2页
DS1302的实时数字钟设计.doc_第3页
DS1302的实时数字钟设计.doc_第4页
DS1302的实时数字钟设计.doc_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

基于DS1302的多功能实时数字钟控制摘要:本系统采用STC89C52 单片机和DS1302 配合,实现实时时间日期和星期的保存和显示。系统中还有一块1602显示屏,用以显示系统中所需的符号和时间日期。另外系统中还装有4个独立式键盘,用于系统操作与控制。并接一个直流蜂呜器和一个交流蜂呜器,用以进行音响提示。DS1302可以实现对系统是的时、分、秒,日期和星期等信息的保存,使系统在掉电的情况下仍然能够准确的保存并运行时间信息。利用单片机的定时器,实现了倒计时和秒表功能的设计。关键字:单片机;DS1302;数字钟Based on DS1302 control of multi-purpose real-time digital clockAbstract:The system uses the microcontroller and the DS1302 with STC89C52, real-time time date and week of preservation and display. There is also a 1602 display system to display the system date and time required for the symbol. Another system is also equipped with 4 separate keyboard for the system operation and control. And then a DC and an AC buzzer buzzer, used for audio prompts. DS1302 can be achieved on the system is the hours, minutes, seconds, date, and save information such as a week, the system in case of power-down will still be able to save and run-time and accurate information. Use of microcomputer timer, countdown and stopwatch functions to achieve the design.Key words:Single Chip Microcomputer; DS1302; digital clock目录1 绪论12 系统方案选择和论证12.1 设计要求12.2 各模块方案选择和论证22.2.1 主控模块的选择说明22.2.2 时钟芯片的选择和说明32.2.3 显示模块的选择和说明52.3 最终选择方案73 系统硬件设计及实现73.1 单片机外围电路设计73.2 DS1302与单片机的接口设计83.3 LCD1602与单片机的接口设计83.4 按键电路设计93.5 闹铃电路设计93.6 电源设计104 软件设计114.1 主程序设计114.2 DS1302子程序的设计114.4 键盘扫描子程序的设计144.5 闹钟子程序的设计145 系统调试145.1 软件调试155.2 硬件调试155.2.1 显示电路调试165.2.2 DS1302电路调试165.2.3 按键电路的调试166 总结16致谢18参考文献19附录20附录一:电路板实物图20附录二:设计总电路图22附录三:仿真图23基于DS1302的多功能实时数字钟控制基于DS1302的多功能实时数字钟控制*班 *指导教师 *1 绪论 在实时监控系统的设计中,要对各个控制信号进行实时监控,更重要的是在发生事故的情况下准确记录下故障数据,以便准确分析排除错误。此外,在单片机的应用系统中,常常需要记录实时时间信息并长期保存。比如在采集数据时,对某些重要的信息不仅需要记录其内容,还需要记录下该事件发生的准确时间;又比如,在车站的显示屏上,不仅要显示班车信息,还要显示实时的时间信息,其中包括年、月、日、星期、时间等,此外当系统停电的情况下,时间数据不会丢失。 为了达到上述目的,必不可少的就需要实时时钟的 参与和配合。然而,通常用的单片机没有实时时钟部件,如果需要此功能就得使用定时器来实现,而一旦系统掉电时钟就不能运行,这在需要实时时钟的系统中是不允许的,即使使用备用电池,通用单片机系统的较大功耗也坚持不了多久。而采用独立运行的实时时钟,就可避免不少麻烦,同时配合相关软件就可以有效地完成所要达到的目的。2 系统方案选择和论证2.1 设计要求 电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。当今市场上的电子时钟品类繁多,外形小巧别致。也有体型较大的,诸如公共场所的大型电子报时器等。电子时钟首先是数字化了的时间显示或报时器,在此基础上,人们可以根据不同场合的要求,在时钟上加置其他功能,比如定时闹铃,万年历,环境温度、湿度检测,环境空气质量检测,USB扩展口功能等。 . 根据设计要求和结合实际情况,希望达到下面的功能要求:(1)准确显示时、分、秒、年、月、日、星期等信息,并能断电保存。(2)液晶显示实时时间信息。(3)键盘设置时间信息。(4)多组闹钟设置,并有闹钟提示。(5)倒计时功能。(6)秒表。(7)采用直流供电电源,外部直流供电为主,电池为后备辅助电源,并能自动切换。2.2 各模块方案选择和论证2.2.1 主控模块的选择说明 目前在单片机系统中,应用比较广泛的微处理器芯片主要为8XC5X系列单片机。该系列单片机均采用标准MCS-51内核,硬件资源相互兼容,品类齐全,功能完善,性能稳定,体积小,价格低廉,货源充足,调试和编程方便,所以应用极为广泛。 例如比较常用的AT89C2051单片机,带有2KB Flash可编程、可擦除只读存储器(E2PROM)的低压、高性能8位CMOS微型计算机。拥有15条可编程I/O引脚,2个16位定时器/计数器,6个中断源,可编程串行UART通道,并能直接驱动LED输出。 仅仅是为了完成时钟设计,应用AT89C2051单片机完全可以实现。但是本设计中需要更多的I/O引脚,故本设计采用具有32根I/O引脚的STC89C52单片机。 STC89C52单片机是一款低功耗,低电压,高性能CMOS 8位单片机,片内含8KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器,器件采用CMOS工艺和高密度、非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-51兼容。片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储器编程器来编程。因此,STC89C52是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域1。工作电压: 3.6V - 2.4V, 可低至2.4V - 1.9VI/O 口: P0,P1,P2,P3 口可以承受5V 输入。P0 口不要接到5V 系统,只能接3.3V 系统,如果接5V系统要接上拉电阻。A/D 转换在P1 口, P1.0 - P1.7 八路。图1 STC89C52管脚图2.2.2 时钟芯片的选择和说明 在电子时钟设计中,常用的实时时钟芯片有DS12887、DS1216、DS1643、DS1302。每种芯片的主要时钟功能基本相同,只是在引脚数量、备用电池的安装方式、计时精度和扩展功能等方面略有不同。DS12887与DS1216芯片都有内嵌式锂电池作为备用电池; X1203引脚少,没有嵌入式锂电池,跟DS1302芯片功能相似,只是相比较之下,X1203与STC89C52搭配使用时占用I/O口较多。DS1643为带有全功能实时时钟的8K8非易失性SRAM,集成了非易失性SRAM、实时时钟、晶振、电源掉电控制电路和锂电池电源,BCD码表示的年、月、日、星期、时、分、秒,带闰年补偿。同样,DS1643拥有28只管脚,硬件连接起来占用微处理器I/O口较多,不方便系统功能拓展和维护。故而从性价比和货源上考虑,本设计采用实时时钟日历芯片DS1302。2.2.2.1 DS1302简介 DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。有主电源和备份电源双引脚,而且备份电源可由大容量电容(1F)来替代。需要强调的是,DS1302需要使用32.768KHz的晶振2。2.2.2.2 DS1302管脚说明图2 DS1302芯片引脚图表1 DS1302引脚功能说明引脚号名称功能1VCC1备份电源输入2X132.768KHz晶振输入3X232.768KHz晶振输出4GND地5RST控制移位寄存器/复位6I/O数据输入/输出7SCLK串行时钟8VCC2主电源输入2.2.2.3 DS1302读写和控制说明 DS1302的数据读写方式有两种,一种是单字节操作方式,一种是多字节操作方式。每次仅写入或读出一个字节数据称为单字节操作,每次对时钟/日历的8字节或31字节RAM进行全体写入或读出的操作,称其为多字节操作方式。当以多字节方式写时钟寄存器时,必须按数据传送的次序依次写入8个寄存器。但是,当以多字节方式写RAM时,不必写所有31字节。不管是否写了全部31字节,所写的每一个字节都将传送至RAM。 为了启动数据的传输,CE引脚信号应由低变高,当把CE驱动至逻辑1的状态时,SCLK必须为逻辑0,数据在SCLK的上升沿串行输入。无论是读周期还是写周期,也无论送方式是单字节传送还是多字节传送,都要通过控制字指定40字节中的哪个将被访问。在开始8个时钟周期把命令字(具有地址和控制信息的8位数据)装入移位寄存器之后,另外的时钟在读操作时输出数据,在写操作时输入数据,所有的数据在时钟的下降沿变化。所有写入或读出操作都是先向芯片发送一个命令字节。对于单字节操作,包括命令字节在内,每次为2个字节,需要16个时钟;对于时钟/日历多字节模式操作,每次为7个字节,需要72个时钟;而对于RAM多字节模式操作,每次则为32字节,需要多达256个时钟3。2.2.3 显示模块的选择和说明本实验中要显示的信息比较多,选择数码管显示的话需要的数码管数量将会很多,将是线路复杂,PCB布线混乱,因此选择LCD1602作为显示模块。2.2.3.1 LCD1602引脚定义表2 LCD1602引脚功能引脚编号引脚符号功能规格1VSS(输入)接地,0V2Vdd(输入)接电源,5V5%3V0(输入) 反视度调整,使用可变电阻调节,可改变对比度4RS(输入)寄存器选择。1:选择资料寄存器,0:选择指令寄存器5(输入)读写选择,1:读;0:写6E(输入)使能选择。1:LCD可读写。0:LCD不可读写7DB0数据端口的第0位8DB1数据端口的第1位9DB2数据端口的第2位10DB3数据端口的第3位11DB4数据端口的第4位12DB5数据端口的第5位13DB6数据端口的第6位14DB7数据端口的第7位15Vdd(输入)背光电源正极,5V5%16VSS(输入)背光电源负极,0V2.2.3.2 指令表表3 LCD1602指令表指令RSRWD7D6D5D4D3D2D1D01清屏00000000012光标返回000000001*3输入模式00000001I/DS4显示控制0000001DCB5光标/字符移位000001S/CR/L*6功能00001DLNF*7置字符发生器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志和地址01BF计数器地址10写数据到指令7.8所设地址10要写的数据11从指令7.8所设的地址读数据11读出的数据指令1:清显示,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。R/L,高向左,低向右。指令6:功能设置命令 DL:高电平时为8位总线,低电平时为4位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。(有些模块是 DL:高电平时为8位总线,低电平时为4位总线)指令7:字符发生器RAM地址设置,地址:字符地址*8+字符行数。(将一个字符分成5*8点阵,一次写入一行,8行就组成一个字符)指令8:置显示地址,第一行为:80H8FH,第二行为:C0HCFH。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。42.3 最终选择方案经过方案比较和论证,选择STC89C52作为主控芯片,时钟芯片选择DS1302,显示模块用LCD1602,用四个独立式键盘。最后选择的方案如下图所示:图3 系统框图3 系统硬件设计及实现该设计的硬件电路由主控部分(单片机STC89C52)、计时部分(实时时钟芯片DS1302)、显示部分(LCE1602)、按键部分(独立式键盘)、音响部分(直流蜂鸣器)5个部分组成。各部分之间相互协作,构成一个统一的有机整体,实现数字时钟的功能。各部分的硬件电路设计如下:3.1 单片机外围电路设计 单片机STC89C52作为主控芯片,控制整个电路的运行。单片机外围需要一个复位电路,复位电路的功能是:系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。该设计采用含有二极管的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降(电池电压不足)等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。复位电路的设计图如图4示:RST图4 复位电路设计图3.2 DS1302与单片机的接口设计 时钟芯片DS1302与单片机STC89C52的接口是由3条线来完成的,单片机STC89C52的P1.6与时钟芯片的数据传输端相连,P1.5用来作为DS1302输入时钟SCLK控制端,P1.7控制DS1302的复位输入端。DS1302的第8管脚与一个独立电池连接,2、3管脚接标准32.768KHz石英晶振。DS1302与单片机的接口电路如图5所示:图5 DS1302与单片机的连接3.3 LCD1602与单片机的接口设计液晶显示器LCD1602与单片机STC89C52的接口由一组8位数据传输线和3跟控制线完成。LCD1602的RS、RW、E分别由单片机的P1.2、P1.1、P1.0来控制,数据输入口DB0DB7由P0.0P0.7传输数据,因为是接在P0口,所以要接上拉电阻。LCD1602与单片机的接口电路如图6所示:图6 LCD1602与单片机的连接3.4 按键电路设计本设计中使用的按键不多,只用到四个按键即可完成所需要的功能,因此用四个独立式按键来完成。S4、S3、S2、S1分别与P2.0、P2.1、P2.2、P2.3连接,具体功能有:S4主功能选择;S3光标移位/开闹钟;S2数值加/关闹钟;S1秒表/倒计时。具体电路图如图7所示:图7 按键电路3.5 闹铃电路设计 闹铃音乐可以直接采用蜂鸣器闹铃,如当前时刻与闹铃时间相同,单片机向蜂鸣器送出高电平,蜂鸣器发声。采用蜂鸣器闹铃结构简单,控制方便,但是发出的闹铃声音单一。闹铃的音乐不是本设计中的重点,故采用最简单的方法,占用单片机一根I/O口P1.3,中间用PNP型三极管S9012连接P1.3和蜂鸣器。当P1.3引脚为低电平时,S9012的发射极和集电极导通,使蜂鸣器发声。当响铃标志位为“1”时,P2.0送一定频率脉冲,使蜂鸣器发出声音5。如图8所示:图8 闹铃电路3.6 电源设计 时钟芯片DS1302有很宽的工作电压范围,其工作电压为2.55.5V。单片机STC89C52的工作电压范围相对较窄,为4.05.5V,所以本设计中,利用USB给电路提供+5V电压,由于USB供电可能不稳定,所以加一个滤波稳压电容,使电路的工作保持很高的可靠性。在电路中接入一个发光二极管作为指示灯,可以很方便地指示电源与电路是否接通。该设计的电源部分如图9所示:图9 电源电路4 软件设计4.1 主程序设计 第一次上电,系统先进行初始化,单片机依次开始调用键盘扫描子程序、DS1302子程序、闹铃子程序,经过延时,返回程序开头循环运行。图10 主程序流程图4.2 DS1302子程序的设计 单片机STC89C52对时钟芯片DS1302的控制需要通过程序驱动来实现,程序主要完成两个方面的任务:利用单片机实现对DS1302寄存器的地址定义和控制字的写入,实现对DS1302的数据读取。 初始化DS1302要求为低电平,SCLK为低电平。 被设置为高电平就启动了一个数据传送的过程。SCLK的16个方波完成一次数据传送,前8个方波用于输入命令字节,后8个方波用于数据的输出或数据的输入。在SCLK的上升沿,I/O线上的数据被送入DS1302;在SCLK的下降沿,DS1302输出数据在I/O线上。写和读各需要一个程序,写DS1302程序流程图如图11.1所示,读DS1302程序流程图6如图11.2所示。启动写数据字节一位复位端变高启动一次数据传送工作结束SCLK发脉冲复位端变低SCLK发脉冲写命令字节一位够8次吗?够8次吗?NYYN启动读数据字节一位复位端变高启动一次数据传送工作结束SCLK发脉冲复位端变低SCLK发脉冲写命令字节一位够8次吗?够8次吗?NYYN 图11.1 写DS1302流程图 图11.2 读DS1302流程图 程序主要实现对DS1302写保护、充电,对年、月、日、时、分、秒等寄存器的读写操作。在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用I/O口软件模拟串行时钟脉冲,所以在通信过程中最好保证传输的连续性,不要允许中断。其流程图如图12。图12 实时时钟日历子程序流程图 DS1302每次上电时自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。如果DS1302一直没有掉电,则不存在此问题。 在进行写操作时,需要先解除写保护寄存器的“禁止”状态。当用多字节模式进行操作时,必须写够8字节7。4.3 LCD显示子程序的设计程序主要实现对信息的显示,包括年、月、日、星期和时间等信息,在这里要注意它的读写控制指令。其流程图如图13所示。图13 显示子程序流程图4.4 键盘扫描子程序的设计 单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。 在随机扫描方式中,CPU完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。在执行键盘按键规定的功能中不理睬键盘输入。 定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键被按下,键盘反应速度较快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。 前两种扫描方式均会占用CPU大量时间。不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的8。由于本设计中STC89C52单片机在系统中的主要任务是接受DS1302的数据并送出显示,完成时钟/日历校对和日期显示控制。单片机完全有能力完成以上工作,所以采用随机扫描键盘方式,系统也能够正常运行。 单片机扫描完键盘,得到键值,并根据键值转入执行对应任务,以实现按键功能。如果没有按键按下,则程序扫描到Key=FFH,将键值Key清零,返回主程序。4.5 闹钟子程序的设计闹铃子程序最主要的任务是不断用时钟分(min)与时(hour)同设定的闹铃分(clk_min)与闹铃时(clk_hour)比较,只要满足min等于clk_min、hour等于clk_hour,响铃启动1分钟。5 系统调试 调试工作分硬件调试和软件调试两部分,调试方法介绍如下: 首先,硬件调试主要是先搭建硬件平台,然后利用万用表等工具对电路检查,最后应用程序进行功能调试。硬件调试比较费时,需要细心和耐心,也需要熟练掌握电路原理。 然后,可以直接应用一些编辑或仿真软件进行软件调试,比如单片机C51编辑软件Keil。该软件提供了一个集成开发环境uVision,它包括C编辑器、宏编辑器、连接器、库管理和一个功能强大的仿真调试器。通过编译、运行,可以检查程序错误。但应用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。在软件调试过程中要仔细耐心,即便是多写或少些一两个字符,都无法编译成功。而有时往往在Keil中编译、运行无错,但烧录到单片机中运行起来就会出错,很可能是编程时管脚或时序编辑得不对。 还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试。如果电路出错,可以在计算机上方便的修改电路,程序出错可以重新编辑程序,这种方法节时、省力,经济、方便。笔者应用的仿真软件为Proteus。总之,调试过程是一个软硬件相结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键9。5.1 软件调试 软件调试相对比较简单,但是要掌握仿真软件的用法,首先在仿真软件(Proteus)上建立仿真模型(电路图),然后用Keil C编程序和Proteus进行联机仿真调试,分别对显示、按键、时钟等各个部分进行调试,检测电路原理图的正确与否。5.2 硬件调试 单片机基础电路包括电源、单片机、外部时钟震荡电路、复位电路和外部接口电路。调试过程需要注意以下几点: (1). 检查电源是否完好。 (2). 单片机电源要连接正确,并且保证AT89C51的31号引脚接高电平。AT89C51的31号引脚是外部程序存储器选择信号端,当该引脚为高电平时,单片机会一直从片内程序存储器内取指令。 (3). 如果使用P0口做I/O口,要接上拉电阻。 (4). 使用万用表排查电路中是否存在断路或者短路情况。笔者在制作外部接口电路时使用的是排针,焊接时容易出现管脚之间短路,所以在上电以前必须先排查电路。 (5). 编辑一个简单程序,上电运行,检查单片机是否正常工作,复位电路是否正确。5.2.1 显示电路调试 由于显示电路中连线比较多,所以应该先使用万用表排除电路中是否存在断路或者短路情况,可别是插针部分,此外特别注意LCD1602的三个控制管脚P1.0、P1.1、P1.2是否与单片机连接上了。然后编写简单的显示程序运行,检查电路是否正常。5.2.2 DS1302电路调试 该电路包含DS1302芯片、主电源、备用电源、晶振等部分。在与单片机连接的过程中需要注意以下几点: (1) 清楚DS1302与单片机连接的管脚。本设计定义为:DS1302的SCLK连接P1.5,I/O连接P1.6,RST连接P1.7。 (2) 注意电源正负极连接。 (3) DS1302接32.768KHz的晶振。该晶振体型比较小,在焊接时要小心,注意不要将晶振引脚弄断。同时也要尽量使晶振离DS1302的X1、X2引脚近距离焊接。(4) 编写DS1302的时钟/日历程序,只要求能够正确显示时间。烧录进单片机,检查电路电源正负极连接是否正确,检查无误后可以上电检查10。5.2.3 按键电路的调试按键电路比较简单,故调试起来也很容易。如果确保按键焊接正确的情况下,编写一个简单的按键程序和显示程序一起就可以检测其正确性了。6 总结 过去人们应用时钟仅仅是为了明确当前时间。随着生产力的发展,社会的进步,生产生活对时钟的需求越来越大,对时钟的体型、功能的要求也各有不同。所以多功能电子时钟在今后的应用也会越来越广泛。 基于单片机实现电子时钟,仅仅是众多方法之一。并且市场上的实时时钟日历芯片品类繁多,IC化的传感器各种各样,显示方式也愈趋于人性化。所以多功能电子时钟有多种实现方案,能够实现的功能也很多,笔者已经通过仿真和调试,实现了时间日历显示和校对、闹铃等功能。本文采用51单片机C语言进行编程,当然也可以应用汇编语言编程。由于本人能力有限,提供的程序还可以进一步优化,并且还可以根据需求为电子时钟增设新功能。第 17 页致谢致谢 本设计是在*和*老师的悉心指导下顺利的完成。从设计的选题,相关资料的查寻,到论文的撰写这一整个过程中,两位老师以其广博的知识、丰富的经验 、清晰的思路,自始至终给我以指导,使我能够顺利完成设计,他严谨的治学态度,精益求精的工作作风和孜孜不倦的求学精神令我受益匪浅。在此设计完成之际,对*老师和*老师表示衷心的感谢!第 18 页参考文献参考文献1李及. 赵利民.MCS-51系列单片机原理与应用M.长春:吉林科学技术社,1995.23-25.2万胜前. 基于KeilC51软件的电子钟设计与制作J,鄂州大学学报,2007年第2期.3蒋敏. 单片微机万年历设计D,职大学报,2000年第2期.4林敏等. 计算机控制技术及工程应用M,国防工业出版社,2009.8.90-935何书森等. 用电子线路设计速成M,福州:福建科学技术出版社,2005.10.12-136黄明强. DS1302在单片机系统中的应用J.保定师范专科学校学报,2004,17(2)7蒋敏. 单片微机万年历设计J,职大学报,2000年第2期8林敏等. 计算机控制技术及工程应用M,国防工业出版社,2009.8.66-699戴佳,戴卫恒. 51单片机C语言应用程序设计实例精讲M,北京:电子工业出版社,2006.4.192-19310沈红卫. 基于单片机的智能系统设计与实现D,北京:电子工业出版社,2005.第 19 页附录附录二:设计总电路图附录:源程序#include#include/*/#define uchar unsigned char #define uint unsigned int#define TIME (0X10000-50000)#define FLAG 0XEF /闹钟标志/*/引脚连接图sbit CLK=P12;sbit RST=P14;sbit DAT=P13;sbit RS=P15;sbit RW=P16;sbit E=P17;sbit P32=P32;sbit KEY1 = P27;sbit KEY2 = P26;sbit KEY3 = P25;sbit KEY4 = P24;sbit ACC_7=ACC7;/*/全局变量及常量定义uchar i=20,j;uchar DataBuf16 = ;/日期uchar TimeBuf16 = ;/时间 uchar alarm2,time3;uchar code Day=31,28,31,30,31,30,31,31,30,31,30,31;/12个月的最大日期(非闰年) /闰年月星期表 const unsigned char WeekTab = (3 5) + 31,/1月 (6 5) + 29,/2月 (0 5) + 31,/3月 (3 5) + 30,/4月 (5 5) + 31,/5月 (1 5) + 30,/6月 (3 5) + 31,/7月 (6 5) + 31,/8月 (1 5) + 30,/9月 (4 5) + 31,/10月 (0 5) + 30,/11月 (2 5) + 31 /12月 ; /音律表uint code table1=64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217;/发声部分的延时时间uchar code table2=0x82,1,0x81,0xf4,0xd4,0xb4,0xa4,0x94,0xe2,1,0xe1,0xd4,0xb4,0xc4,0xb4,4,0;/闹钟中用的全局变量uchar th1,tl1;/*/延时1ms函数delay1ms(uchar time) uchar i,j; for(i=0;itime;i+) for(j=0;j250;j+); /*/LCD控制函数Enable() RS=0; RW=0; E=0; delay1ms(3); E=1;/*/LCD1602写入字符函数LCD1602_WriteSChr(uchar i) P0=i; RS=1; RW=0; E=0; delay1ms(2); E=1;/*/LCD1602写入字符串函数/入口函数/uchar data *address : 写入数据首地址/ucharm:写入字节数LCD1602_WriteStr(uchar *address,uchar m) uchar i,j; for(i=0;im;i+,address+) j=*address; LCD1602_WriteSChr(j); /*/LCD显示void LCDShow(void) P0=0XC; /显示器开、光标关 Enable(); /P0=0x80; /写入显示起始地址 /Enable(); /LCD1602_WriteStr(DataBuf,16); /写入日期显示缓存 P0=0xc1; /写入显示起始地址 Enable(); LCD1602_WriteStr(TimeBuf,16); /写入时间显示缓存/*/DS1302写入子程序void DS1302_Write(uchar temp) uchar i; CLK=0; /将DS1320时钟脉冲拉低 _nop_();/延时一指令周期 RST=1; /RST置高电平 _nop_();/延时一指令周期 for(i=0;i=1; /右移一位 CLK=0; /拉低时钟脉冲 /*/DS1302读取子程序uchar DS1302_Read() uchar i,j=0; for(i=0;i=1; /右移一位 _nop_(); /延时一指令周期 CLK=0; /拉低时钟脉冲 _nop_(); /延时一指令周期 if(DAT) /判断接收该位数据是否为1 j|=0x80;/该位置1 _nop_(); /延时一指令周期 CLK=1; /拉高时钟脉冲 return(j); /返回数值/*/部分显示数据初始化TimeStart() TimeBuf0=TimeBuf8=TimeBuf9=TimeBuf10=0x20; /不显示字符 TimeBuf2=TimeBuf5=:; /时间分隔显示 DS1302_Write(0xc1); alarm0=DS1302_Read(); RST=0; DS1302_Write(0xc3); alarm1=DS1302_Read(); RST=0; DS1302_Write(0xc5); DataBuf0=DS1302_Read(); RST=0;/*/读取时间ReadTime() uchar i,m,n; for(m=0,i=0,n=0x85;i7;i+=3,n-=2,m+) /连续读取时,分,秒 DS1302_Write(n); /写入读取寄存器指令 timem=DS1302_Read(); /读取数据 RST=0; /将RST电平拉低,停止传输 TimeBufi=timem/16+0x30; /将两位数据的十位转为字符格式 TimeBufi+1=timem%16+0x30;/将两位数据的个位转为字符格式 /*/功能选择超时定时器time0() interrupt 1 using 1 i-; if(i=0) if(j!=0) j-; i=20; TH0=TIME/256,TL0=TIME%256; /*/产生闹铃音调intime1() interrupt 3 TH1=th1,TL1=tl1; P32=!P32;/*/闹钟显示V oid AlarmShow(void) uchar i,j,a,b,n; ET1=

温馨提示

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

评论

0/150

提交评论