基于ds1302和单片机的时钟设计

合集下载

基于DS1302设计的数字钟原理图与PCB教程

基于DS1302设计的数字钟原理图与PCB教程

基于DS1302设计的数字钟任务一电路原理图的设计1、最小系统电路步骤一:新建设计。

双击桌面PROTEUS软件图标,打开软件,单击工具栏“File”,出现如下图所示下拉菜单。

单击“New Design”菜单,弹出如下对话框。

选择绘图模板,我们选择DEFAULT模板,单击DEFAULT图标,单击“OK”按钮。

进入原理图编辑界面,如下图所示。

步骤二:文件命名和保存。

在绘制电路原理图应当先对文件进行命名,然后保存。

单击保存图标,弹出对话框,选择文件存储路径。

如下图所示:我们把文件保存在桌面的“电路原理图”这个文件夹内。

单击“保存”按钮弹出对话框,在“文件名”编辑框中填写电路原理图名称,“基于DS1302设计的数字钟”。

如下图所示。

单击“保存”按钮,回到原理图编辑页面。

同时在文件夹“电路原理图”中出现电路原理图标,如下图所示。

步骤三:选择主控元器件。

在编辑框最左边的工具栏中选择图标,进入器件模式,然后单击图标,弹出“Pick Device”对话框,如下图所示:在Category下拉框中选择Microprocessor ICs,然后选择芯片AT89C51或AT89C51单片机,如下图所示:单击OK按钮,单片机芯片选择完成,这时在对象选择器和预览窗口中均出现了所选择的芯片AT89C52,在对象选择器单击芯片名称,如AT89C52,再把鼠标移至编辑窗口区(工作区),右击鼠标,主控芯片AT89C52就拖入了工作区。

单片机芯片选择完毕。

如下图所示:步骤四:时钟振荡电路的设计。

51单片机的18和19引脚外接2个皮法级的电容和晶振就可以构成时钟振荡电路。

按照上一步骤选择AT89C52芯片的方法一一从元器件库中选择2个30pf的电容、12M的晶振,还有一个地。

如下图所示:步骤五:复位电路设计。

单片机的9引脚外接复位电路,本系统中用按键k1、2个电阻R1、R2和电容组成,具体电路结构如下图所示:此外,还有电源电路,单片机的20引脚、40引脚分别接电源的地和电。

基于ds1302和单片机时钟设计

基于ds1302和单片机时钟设计

摘要:本次课程设计所设计的时钟模块是基于DS1302时钟芯片和AT89C52单片机的时钟设计,是以AT89C52单片机为核心,由DS1302时钟芯片、数码管做显示器及74LS08与门构成的24小时制单功能电子实时时钟。

这种单功能电子实时时钟不仅具有了一般数字时钟的基本的显示实时时间的功能,并且还能通过两个按钮实现时钟运行与停止功能。

如果需要设置时间的话,只需在软件程序上改变时钟芯片的初始化程序就能实现。

在电子产品盛行的今天,像这样的电子时钟设计可以给予它更大的发展空间与应用前景。

关键词:DS1302时钟芯片、AT89C52单片机、电子实时时钟目录第一章汽车运行安全无线监测系统总体方案设计............................ - 1 -1.1 总体方案设计................................................... - 1 -1.2 单片机的选择................................................... - 1 -1.3 超声波测距方案设计............................................. - 3 -1.4 测气压模块设计................................................. - 3 -1.5 无线发射与接收设计............................................. - 3 -1.6显示装置的设计.................................................. - 3 -1.7日历时钟模块.................................................... - 4 -1.8 键盘模块....................................................... - 4 - 第二章时钟模块设计方案................................................ - 5 -2.1系统功能框图.................................................... - 5 -2.2系统主要部分.................................................... - 5 -2.3方案选择........................................................ - 6 - 第三章硬件设计部分.................................................... - 8 -3.1单片机最小系统电路设计和元件的选择.............................. - 8 -3.2 DS1302时钟芯片电路设计......................................... - 8 -3.3数码管显示电路设计.............................................. - 9 -3.4按键电路设计.................................................... - 9 - 第四章软件设计部分................................................... - 10 -4.1主程序单元部分................................................. - 10 -4.2外部中断部分................................................... - 11 -4.3显示程序单元部分............................................... - 11 -4.4 DS1302时钟芯片判断时钟是否停止................................ - 12 - 第五章系统调试与仿真................................................ - 13 -5.1系统调试....................................................... - 13 -5.2仿真电路....................................................... - 14 - 源程序................................................................ - 15 - 设计总结及体会........................................................ - 22 - 参考文献.............................................................. - 22 -第一章 汽车运行安全无线监测系统总体方案设计1.1 总体方案设计整个系统要集测胎压,测距,时钟,无线发射接收和显示与一体,所以整体方案是通过胎压传感器来测胎压,通过无线发射接收模块把信息发送给单片机。

基于DS1302的数字钟设计_课程设计说明书

基于DS1302的数字钟设计_课程设计说明书

吉林化工学院课程设计说明书基于DS1302的数字钟设计Design of digital clock based on DS1302专业班级:电信1002起止日期:2013.4.1~2013.4.19吉林化工学院Jilin Institute of Chemical Technology信息与控制工程学院硬件课程设计说明书课程设计任务书一、设计题目:基于DS1302的数字钟设计二、设计目的1、掌握DS1302时钟芯片的硬件电路原理及软件编程方法,熟悉DS1302时钟芯片的性能指标和特点;2、熟悉STC12C5A60S2单片机的性能特点,并掌握STC12C5A60S2单片机控制DS1302读写时间、日期的硬件电路组成及软件编程方法;3、了解LED 显示及按键电路的组成原理,熟悉LED 动态显示原理及实现方法;4、了解7805构成直流稳压电源的电路组成及工作原理。

三、设计任务及要求(宋体,小四号字,加黑)设计并实现具有显示日期和时间的电子数字钟,数字钟具有以下基本功能:1、使用6位LED 显示时间、日期和星期,正常显示时、分、秒、星期,使用按键可切换显示年、月、日;2、具有时间、日期调整功能,通过键盘可进行时间、日期的调整;3、具有闹钟功能,使用键盘设定闹铃时间,由蜂鸣器产生闹铃;4、定时控制功能,使用小型继电器完成定时控制功能(发挥部分)。

四、设计时间及进度安排(宋体,小四号字,加黑)设计时间共三周(2013.4.1 – 2013.4.19),具体安排如下表: 周安排设 计 内 容 设计时间 第一周硬件电路设计 13.4.01 13.4.05 第二周硬件电路焊接与调试 13.4.08 13.4.12 第三周 编写课程设计说明书,课程设计答辩。

13.4.1513.4.19五、指导教师评语及学生成绩指导教师评语:成绩指导教师(签字):基于DS1302的数字钟设计摘要本系统采用STC89C52单片机和DS1302配合,实现LED数码管显示时间、日期和星期,正常显示时、分、秒、星期,使用按键可切换显示年、月、日。

基于单片机及时钟芯片DS1302的电子时钟设计

基于单片机及时钟芯片DS1302的电子时钟设计

基于单片机及时钟芯片DS1302的电子时钟设计一、概述二、电子时钟的基本原理电子时钟是一种以单片机为核心的智能电子产品,采用数字电路来显示时间。

电子时钟的核心部件是一个定时器,通过周期性的计数来确定时间,然后再将计数器的结果通过数码管等显示装置进行显示。

除此之外,电子时钟还需要一个能够准确计时的时钟芯片,如本文所使用的时钟芯片DS1302。

三、电子时钟的设计方法本文设计的电子时钟采用AT89C52单片机和时钟芯片DS1302,并通过外围的驱动电路和数码管来实现时间的显示。

该电子时钟具有以下特点:1.可进行24小时制和12小时制的切换:电子时钟可以通过按键实现24小时制和12小时制的切换,可按需选择。

2.自动夏令时判断:电子时钟可自动识别夏令时,并根据设定值进行切换,方便易用。

3.温度显示:电子时钟的DS1302时钟芯片自带温度探测器,可实现温度的实时显示。

本文所设计的电子时钟的硬件设计方案如下:1.主控芯片:采用AT89C52单片机2.显示装置:采用数码管进行时分秒的显示,共4位数码管。

3.时钟芯片:采用DS1302时钟芯片,保证时间的准确性。

5.电源:采用开关电源或锂电池供电。

锂电池供电时,电子时钟可实现断电后不重置的功能。

1.初始化:在电子时钟启动时,需要对各个模块进行初始化,如DS1302时钟芯片的读写口、数码管和按键都需要进行初始化。

2.频率切换:按下切换按键后,电子时钟的频率从24小时制切换到12小时制。

3.设定夏令时:按下设定按键后,可以进行夏令时设定。

设定值以秒为单位存储,在夏季过渡期改变时,只需修改设定值即可。

5.时间的显示:通过程序将DS1302时钟芯片中的时间读出并在数码管上显示,实现实时显示的功能。

五、总结本文设计的基于单片机及时钟芯片DS1302的电子时钟,可通过按键实现24小时制和12小时制的切换、自动夏令时判断、温度显示等多种功能,实现了电子时钟的多种要求和需求。

该设计方案具有简单实用、成本低廉、易于维护等优点,可广泛应用于各个领域。

基于DS1302时钟芯片数字钟报告

基于DS1302时钟芯片数字钟报告

课程设计报告题目:基于DS1302的数字钟报告学院:专业:电子信息工程班级:学号:指导教师:2010 年 7 月 7日摘要 (4)ABSTRACT (4)前言 (5)第一章数字钟设计的意义及任务 (6)1.1数字钟设计的意义 (6)1.2设计任务 (6)第二章系统的硬件设计和方案对比选择 (7)2.1系统设计结构图 (7)2.2系统设计方案对比选择 (7)2.2.1 MCU微处理控制器的方案对比选择 (7)2.2.2 LCD液晶显示模块的方案对比选择 (8)2.2.3 实时时钟电路的方案对比选择 (9)第三章系统的硬件设计电路及元件说明 (10)3.1MCU微控制器电路 (10)3.2LCD液晶显示电路 (12)3.3实时时钟电路 (16)3.4复位电路 (17)3.5晶振电路 (17)第四章系统的软件设计。

(18)4.1主程序 (18)第五章程序的调试 (19)5.1PROTEUS仿真 (19)5.2利用学习板进行调试 (20)5.3调试过程中出现的问题 (21)设计总结 (21)参考文献 (22)附录一系统程序: (23)附录二基于DS1302数字钟设计的原理图 (33)附录三基于DS1302数字钟设计的PCB图 (34)附录四基于DS1302数字钟设计的元件清单 . 错误!未定义书签。

基于DS1302的数字钟设计报告摘要根据AT89C52的特点和数字钟的特点,本文提出一种用单片控制DS1302利用LCD1602显示的数字钟的设计方法,同时给出软硬件电路的设计方法。

设计报告硬件电路设计和软件编程两个方面。

本系统通过AT89C52做为CPU进行总控制,利用AT89C52对DS1302进行控制,DS1302可以对年、月、日、周、日、时、分、秒进行计时,最后利用LCD1602液晶显示进行显示。

该设计实用简便能够对年、月、日、周、日、时、分、秒进行有效准确的计时及显示。

关键词:单片机 DS1302 LCD1602 数字钟Based on the design of the digital clock DS1302 reportAbstractAccording to the characteristics and the digital clock AT89C52 characteristics, this paper presents a DS1302 control by using single chip LCD1602 digital clock shows the design method and design method of software and hardware circuit is given. Design report hardware and software programming. The system through the AT89C52 as CPU for total control and utilization of DS1302 AT89C52 control, DS1302 to year, month, day, week, day, when, minutes and seconds on the clock LCD1602 LCD display show.Keywords: SCM DS1302 LCD1602 digital clock前言自古就有:“一寸光阴,一寸金”的说法。

基于DS1302数字时钟电路的设计

基于DS1302数字时钟电路的设计

1 引言从古代的滴漏更鼓到近代的机械钟,从电子表到目前的数字时钟,为了准确的测量和记录时间,人们一直在努力改进着计时工具。

钟表的数字化,大力推动了计时的精确性和可靠性。

在单片机构成的装置中,实时时钟是必不可少的部件。

目前常用的实时时钟,很多采用单片机的中断服务来实现,这种方式一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许;有的则使用并行接口的时钟芯片,如MC146818、DS12887等,它们虽然能满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂,占用地址、数据总线多,芯片体积大,占用空间多,给其它设计带来诸多不便。

本设计选取串行接口时钟芯片DS1302与单片机同步通信构成数字时钟电路。

其简单的三线接口能为单片机节省大量资源,DS1302的后背电源与对后背电源进行涓细电流充电的能力保证电路断电后仍能保存时间和数据信息等。

这些优点解决了目前常用的实时时钟所无法解决的问题。

该时钟电路强大的功能和优越的性能,在很多领域的应用中,尤其是某些自动化控制、长时间无人看守的测控系统等对时钟精确性和可靠性有较高要求的场合,具有很高的使用价值。

2 核心芯片简介2.1 DS1302简介DS1302[1]是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。

时钟可工作在24小时格式或12小时〔AM/PM〕格式。

DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。

可采用一次传送一个字节或突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

单片机应用课程设计基于DS1302电子时钟的设计报告参考模板教材

单片机应用课程设计基于DS1302电子时钟的设计报告参考模板教材

单片机应用课程设计报告(2012~2013学年第2学期)设计题目:基于DS1302电子时钟的设计班别:2010级自动化1班姓名:李永兴贺孝言王永伟指导教师:***时间:2013年5月目录1 设计任务 (3)2 系统总体方案设计 (3)2.1各个模块方案论证 (3)2.1.1 时钟芯片的选择 (3)2.1.2 显示器的选择 (3)2.2总体方案设计 (4)3 硬件电路设计 (4)3.1单片机最小系统 (4)3.21302时钟电路 (5)3.3按键调时电路 (6)4 系统软件设计 (7)4.1主程序流程图 (7)4.2子程序流程图 (8)4.2.1 DS1302子程序流程图 (8)4.2.2 1602子程序流程图 (9)4.3按键校正调时程序 (9)5 实物调试 (10)5.1实物性能分析 (10)5.2总结 (13)附录1 (15)(1)系统总电路图 (15)(2)系统仿真图 (15)附录2 (17)部分程序清单 (17)1 设计任务基本要求:采用DS1302时钟芯片与单片机STC89C52相结合设计电子时钟,能够显示出实时年、月、日、时、分、秒等时间,并且可以通过按键进行时间调整。

2 系统总体方案设计2.1 各个模块方案论证2.1.1 时钟芯片的选择由于设计的是电子时钟,而单片机STC89C52自带计时功能,利用单片机实现数据的显示和调整是可行的,采用单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。

这样可以直接用单片机的内部定时/计数器来完成电子万年历的设计。

用单片机内部的定时/计数器来制作电子万年历,虽然无须外接其他芯片,充分利用了单片机的资源,但是计时精度不够高,误差较大,掉电后所有数据将被丢失,且软件编程较为复杂。

在以单片机为核心构成的装置中,经常需要一个实时的时钟和日历,以便对一些实时发生事件记录时给予时标。

基于单片机及DS1302的LED电子钟设计——软件部分

基于单片机及DS1302的LED电子钟设计——软件部分

基于单片机及DS1302的LED电子钟设计——软件部分摘要现代社会的快节奏生活要求人们对时间的掌握越来越精确,随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在逐步地深入,电子钟也逐渐取代传统钟表被广泛应用于生活和工作中。

电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点。

本设计以AT89C52芯片作为核心,8位LED数码管显示和DS1302时钟芯片主要组成来实现电子钟的基本功能,并分析了相应软件的设计要点,包括软件设计流程、仿真与调试。

关键词电子钟;单片机;DS1302ABSTRACT Nowadays people need more accurate time to keep up with the high pace of life. With computers in the infiltration and the development of large-scale integrated circuits,SCM application is steadily deepening, while electronic clock is widely used in our life and work taking place of traditional one. the electronic clock mainly uses the electronic technology to make the clock computerized and digitized, with features of accurate time、small size、a friendly user interface and strong expansibility.This design mainly consists of the core chip of AT89S52, 8 light emitting diodes and the clock chip DS1302 to achieve the basic function of the electronic clock, and also analyses the key designing of the corresponding software including software design flow, emulation and debuggingKEY WORDS Electronic clock; Single Chip Microcomputer; DS1302目录1.前言 (1)2.系统核心芯片介绍 (2)2.1 单片机AT89S2简介 (2)2.1.1 芯片主要性能 (2)2.1.2 芯片引脚功能 (2)2.2 时钟芯片DS1302简介 (5)2.2.1 主要功能 (5)2.2.2 内部结构及引脚功能 (5)2.2.3 工作原理 (6)2.2.4 控制字节及寄存器 (7)2.2.5 数据的传送 (8)3.电子钟软件设计 (9)3.1 系统结构图及总流程图 (9)3.2 主程序模块 (10)3.2.1 初始化模块 (10)3.2.2 DS1302读写模块 (12)3.2.3 显示模块 (14)3.2.4 蜂鸣模块 (15)3.2.5 主程序流程图 (16)3.3 中断调整模块 (17)3.3.1 时间中断模块 (17)3.3.2 闹钟调整模块 (20)4.调试结果分析及解决方案 (21)5.总结 ................................................................................................. 错误!未定义书签。

利用单片机及DS1302制作电子时钟

利用单片机及DS1302制作电子时钟

单片机原理及应用——基于Proteus和Keil C实习报告课程名:利用单片机及DS1302制作电子时钟指导教师:朱华贵老师专业:应用电子技术年级: 10级评定:组员:邱凌芳、杨侨、陈佳佳设计时间: 2012年5月18日江西财经大学职业技术学院摘要为了进一步熟悉51单片机的编程以及学习电子时钟的相关设计方法,在老师的指导下我们进行了本次电子时钟的设计。

我们在实习期间基于51单片机——AT89C51和时钟芯片DS1302设计并实现了电子时钟显示。

在PCB板制作完成并且调试成功之际,为了进一步提高自己的动手能力和编程能力,对这次电子时钟的设计和制作的过程中遇到的问题及设计思路做一次总结。

本电子时钟是一种利用时钟芯片DS1302及51单片机来显示时、分、秒和年、月的装置。

默认显示为时间,由四个按键分别控制定时设置、时间调整、分钟调整、日期显示;设计电路工作电源为5V;由4位LED数码管显示时间,格式为时时分分,中间点每隔1S亮暗;有备用电池,掉电后再上电能正常显示时间。

电子时钟大体可以分为三大模块,数码管的显示模块、DS1302时钟芯片与单片机的时钟模块和按键与单片机的模块。

单片机在5V电压下,各个模块正常工作。

单片机从DS1302芯片中读出一组时间日期数据,同时单片机通过按键设置当前要求显示的信息给单片机。

单片机接收到各个数据时,把各个数据显示出来。

目录一、总体设计-------------------------------------------------41.1 设计目的---------------------------------------------41.2 硬件功能描述-----------------------------------------41.3 设计方案选择-----------------------------------------41.4 设计任务及要求---------------------------------------4二、电子时钟软件和硬件设计-----------------------------------52.1 硬件电路设计-----------------------------------------52.1.1 工作原理----------------------------------------52.1.2 单元模块电路------------------------------------52.1.3 元器件清单--------------------------------------72.2 软件设计---------------------------------------------72.2.1 程序设计流程------------------------------------72.2.2 主控程序----------------------------------------8三、电路调试-------------------------------------------------9四、总结----------------------------------------------------10五、参考文献------------------------------------------------11附录Ⅰ:DS1302时钟芯片的工作原理和使用方法------------------12 附录Ⅱ: 程序清单--------------------------------------------13附录Ⅲ: 原理图、PCB图及实物图------------------------------20一、总体设计此电子时钟利用AT89C51单片机和时钟芯片DS1302 设计完成。

基于DS1302实时时钟系统的设计论文

基于DS1302实时时钟系统的设计论文

学士学位论文(设计)Bachelor’s Thesis论文题目基于DS1302实时时钟系统的设计目录1.绪论 (1)2.方案对比与选择分析介绍 (2)2.1单片机控制器的选择与对比 (2)2.2实时时钟芯片的选择与对比 (3)2.3显示器件的选择与对比 (3)3.系统设计概述 (4)3.1设计内容及要求 (4)3.2系统框架及说明 (4)4.硬件电路设计分析 (5)4.1STC89C52单片机简介 (5)4.2STC89C52单片机内部结构 (6)4.3MCU控制电路设计分析 (7)4.4数码管显示设计分析 (8)4.5DS1302时钟电路设计分析 (10)4.6蜂鸣器报警电路设计分析 (15)4.7电源部分设计分析 (15)5.系统软件设计分析 (16)5.1DS1302模块程序设计 (16)5.2定时器模块程序设计 (16)5.3按键模块程序设计 (17)5.4数码管显示模块程序设计 (19)5.5蜂鸣器报警模块程序设计 (20)5.6主程序设计 (20)6.总结 (21)7.参考文献 (22)8.致谢 (1)附录...................................................... 错误!未定义书签。

附录1作品(设计)原理图................................ 错误!未定义书签。

附录2作品(设计)实物图................................ 错误!未定义书签。

基于DS1302实时时钟系统的设计摘要: 本论文(设计)采用STC89C52单片机和DS1302实时时钟芯片为主要器件设计的实时时钟系统。

能够准确的显示实时时间、日期、星期。

通过8位低功耗数码管将时间信息显示出来,数码管由单片机直接驱动,无需其他驱动芯片,通过按键切换显示时间、日期、星期、闹钟等信息。

系统设计有闹钟报警功能,当实时时间到达闹钟设计时间时,闹钟就会蜂鸣器报警,报警时间可通过按键自行设定。

基于DS1302的电子时钟设计报告

基于DS1302的电子时钟设计报告

常熟理工学院电气与自动化工程学院《微机原理与接口技术》课程设计题目:基于DS1302的电子钟设计姓名:祝朝贺学号:160512231班级:测控122班指导教师:陈景波起止日期:2015年7月目录摘要.................................................................................. - 1 -一、《微机原理与接口技术》课程设计任务书 ................................. - 2 -二、总体设计方案 (2)2.1 设计框图................................................................... - 2 -2.2 模块说明................................................................... - 3 -2.2.1 DS1302模块 (3)三、硬件电路设计 (4)3.1 单片机最小系统 .......................................................... - 5 -3.1.1 系统结构 (4)3.1.2 系统特点......................................................................... - 5 -3.2 时钟电路设计 ............................................................. - 5 -3.3 数码管显示设计 (5)3.4 键盘电路 (5)四、软件设计....................................................................... - 7 -4.1 主程序流程................................................................ - 7 -4.2 时钟电路设计 (8)五、程序调试与运行结果 ........................................ 错误!未定义书签。

基于DS1302和DS18B20设计的多功能电子实时时钟

基于DS1302和DS18B20设计的多功能电子实时时钟

基于DS1302和DS18B20设计的多功能电子实时时钟摘要随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

尤其是单片机技术的应用产品已经走进了千家万户。

电子日历的出现给人们的生活带来的诸多方便。

本设计介绍了一种在数码管屏幕上显示当前日期时间和温度的51单片机控制系统。

首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。

本设计以数字集成电路技术为基础,单片机技术为核心。

本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。

本系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。

系统通过8位数码管为载体显示数据,所以具有人性化的操作和美观的效果。

可以自动显示年月日、星期、温度等。

设计中处理器选取内核为C51的STC89C52单片机;数字温度传感器DS18B20,作为单片机外部信号源,实时显示温度;时钟芯片DS1302提供当前日期和时间数据;实时的日期和时间及温度数据在数码管上显示。

在显示部分,利用3/8译码芯片74HC138控制8位数码管的位选,利用串入并出的芯片74HC164来驱动8位数码管的段码,节省了主控芯片的I/O口。

这种实时时钟不仅具有一般时钟的显示时分秒功能,还能显示月日周,而且能显示当前的实时温度,另外仅使用三个按键调时,简单方便易于使用。

实践证明该系统稳定性高,显示数据准确。

关键词:89C52单片机,DS1302,DS18B20,电子时钟目录前言 (1)第一章方案选择 (2)§1.1 时钟方案 (2)§1.2 温度采集方案 (2)§1.3 显示方案 (3)第二章硬件部分设计 (4)§2.1硬件系统原理 (4)§2.2最小系统 (4)§2.3 显示部分 (5)§2.4 测温部分 (6)§2.5 时钟部分 (7)§2.6 按键部分 (8)第三章软件部分设计 (9)§3.1 系统各部分软件设计综述 (9)§3.2 DS1302时钟部分 (9)§3.3 测温部分 (10)§3.4 显示部分 (11)§3.5 按键部分 (11)§3.6 系统主要流程图 (13)第四章调试与分析 (15)§4.1 软件调试 (15)§4.2 硬件调试 (17)§4.3 发现的问题和分析及解决办法 (18)结束语 (19)参考文献 (20)致谢 (21)附录 (22)前言时间和温度是人类生活必不可少的重要元素也是一个永恒的话题,如果没有时间的概念,社会将不会有所发展和进步,如果没有温度人们将无法及时得知温情冷暖的变化。

基于ds1302的单片机时钟设计

基于ds1302的单片机时钟设计

单片机课程设计报告题目:基于DS1302电子实时时钟姓名:XXX同组人:XXX班级学号:XX指导老师:XXXXX日期:2011-12-22目录摘要第一部分:题目要求 (4)第二部分:方案论证与选择 (4)第三部分:电路设计与参数选择 (7)第四部分:系统软件设计 (10)第五部分:系统调试与仪器使用 (12)第六部分:测试数据与结果分析 (18)第七部分:使用说明书 (19)总结 (19)摘要本作品是以89C52单片机为核心,DS1302时钟芯片、数码管做显示器及74LS08与门构成的24小时制单功能电子实时时钟。

这种单功能电子实时时钟不仅具有了一般数字钟的基本功能,并且通过两个按钮实现时钟运行与停止功能。

如果我们要设置时间,只需在软件程序上改变时钟芯片的初始化程序。

在电子产品盛行的今天,像这样的设计我们可以给它更大的发展空间。

第一部分题目要求我们设计的这种24小时制功能钟,可以在数码管上显示时、分、秒,并且我们可以通过按钮来控制时钟的运行及停止(按钮KEY1控制时钟停止运行,按钮KEY2控制时钟运行)并采用220V交流电源供电。

第二部分方案论证与选择一、系统功能框图在现今的这个社会,每天的时间都很紧迫,有些人怕误了时间做自己重要的事,尤其是对现在的学生而言,他们早上要早起,上课要准时,这样都少不了有一个时钟;早上干早班的人,在外出行的人,工厂里某些要严格按时间标准来控制的产品等等一些我们身边无时无刻都有的,而在这个关键的部分就要用到我们本次设计的时钟来计时了。

下面我们就介绍一下本次设计的基本设计框图。

二、系统主要部分有:1:中央处理器电路:采用单片机芯片机外围电路构成最小系统。

2:时钟信号产生电路:时钟芯片3:人机接口电路:按键电路、数码管显示电路。

三、方案论证及选择1.时钟电路部分方案一:利用单片机内部的定时功能来实现时钟的走时,通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。

基于ds1302闹钟课程设计

基于ds1302闹钟课程设计

基于ds1302闹钟课程设计一、教学目标本课程旨在让学生了解和掌握DS1302闹钟的工作原理和基本使用方法。

通过本课程的学习,学生将能够:1.知识目标:了解DS1302闹钟的内部结构、工作原理和接口定义;掌握DS1302闹钟的基本编程和使用方法。

2.技能目标:能够使用DS1302闹钟进行时间设定和闹钟设置;能够编写简单的程序实现DS1302闹钟的功能。

3.情感态度价值观目标:培养学生对电子技术的兴趣和好奇心,提高学生动手实践的能力,培养学生团队合作的精神。

二、教学内容本课程的教学内容主要包括以下几个部分:1.DS1302闹钟的内部结构和工作原理;2.DS1302闹钟的接口定义和编程方法;3.DS1302闹钟的使用方法和操作步骤;4.DS1302闹钟的实验操作和程序编写。

三、教学方法为了更好地实现教学目标,本课程将采用以下几种教学方法:1.讲授法:用于讲解DS1302闹钟的内部结构、工作原理和接口定义;2.讨论法:用于探讨DS1302闹钟的编程方法和使用步骤;3.实验法:用于实践DS1302闹钟的操作和程序编写;4.案例分析法:通过分析具体的DS1302闹钟应用案例,加深学生对DS1302闹钟的理解和应用能力。

四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:DS1302闹钟的使用手册和编程指南;2.参考书:关于DS1302闹钟的内部结构和工作原理的书籍;3.多媒体资料:关于DS1302闹钟的内部结构和工作原理的PPT、视频等资料;4.实验设备:DS1302闹钟实验套件,用于学生的实验操作和程序编写。

五、教学评估为了全面、客观地评估学生在DS1302闹钟课程中的学习成果,我们将采用以下评估方式:1.平时表现:通过学生在课堂上的参与度、提问回答、小组讨论等表现来评估其学习态度和理解程度;2.作业:布置与课程内容相关的编程和实践作业,评估学生对DS1302闹钟知识的掌握和应用能力;3.考试:安排一次课程结束考试,测试学生对DS1302闹钟内部结构、工作原理、编程方法等知识的掌握程度;4.实验报告:评估学生在实验操作中的表现和实验报告的撰写能力,检验其对DS1302闹钟的实际操作和问题解决能力。

基于DS1302的单片机数字时钟

基于DS1302的单片机数字时钟

源程序如下:#include <at89x52.h>#include <DS1302.h>//定义共阳极字型码0123456789-//unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned char time[]={0,0,0,0,0,0,0,0};//用来储存时间unsigned char date[]={0,0,0,0,0,0,0,0};//用来储存日期SYSTEMTIME time1; //在ds1302.h文件中已经定义了一个名字为SYSTEMTIME的结构体,在这里我们定义一个变量名//为time的SYSTEMTIME结构体void delay(unsigned char i) //延时子程序{unsigned char j;while((i--)!=0){for(j=123;j>0;j--);}}unsigned char button_time(n,x,y) //时钟调整子程序unsigned char n,x,y;{if(P1_7==0){delay(50);if(P1_7==0){n++;if(n==x)n=0;while(P1_7==0);}}if(P1_5==0){delay(50);if(P1_5==0){if(n==0)n=y;elsen--;while(P1_5==0);}return n;}unsigned char button_date(n,x,y) //日期调整子程序unsigned char n,x,y;{if(P1_7==0){delay(50);if(P1_7==0){n++;if(n==x)n=1;while(P1_7==0);}}if(P1_5==0){delay(50);if(P1_5==0){if(n==1)n=y;elsen--;while(P1_5==0);}}return n;}void display(second10,second1,minute10,minute1,hour10,hour1) //显示子程序unsigned char second10,second1,minute10,minute1,hour10,hour1;{P2=0xfe;P0=dispcode[second10];//显示秒的十位delay(1);P2=0xfd;P0=dispcode[second1]; //显示秒的个位P2=0xfb;P0=dispcode[10]; //显示"-"delay(1);P2=0xf7;P0=dispcode[minute10];//显示分的十位delay(1);P2=0xef;P0=dispcode[minute1]; //显示分的个位delay(1);P2=0xdf;P0=dispcode[10]; //显示"-"delay(1);P2=0xbf;P0=dispcode[hour10]; //显示时的十位delay(1);P2=0x7f;P0=dispcode[hour1]; //显示时的个位delay(1);}void main(){unsigned char flag;Initial_DS1302(); //初始化DS1302这个时钟芯片, while(1){DS1302_GetTime(&time1); //读取时间参数time[5]=(time1.Second)%10; //把秒的个位数据存入time[5]time[4]=(time1.Second)/10; //把秒的十位数据存入time[4]time[3]=(time1.Minute)%10; //把分的个位数据存入time[3]time[2]=(time1.Minute)/10; //把分的十位数据存入time[2]time[1]=(time1.Hour)%10; //把时的个位数据存入time[1]time[0]=(time1.Hour)/10; //把时的十位数据存入time[0] date[5]=(time1.Day)%10;date[4]=(time1.Day)/10;date[3]=(time1.Month)%10;date[2]=(time1.Month)/10;date[1]=(time1.Year)%10;date[0]=(time1.Year)/10;if(P1_4==0) //如果按下Time Start键一下,时钟开始正常显示时间,再按一下,显示日期{delay(50);if(P1_4==0){flag++;if(flag>1){flag=0;}}while(P1_4==0);}if(P1_6==0) //如果按下Time Set键一下,开始显示日期,再按一下进入日期跟时钟的调节模式{delay(50);if(P1_6==0){flag++;if(flag>7){flag=0;}}while(P1_6==0);}switch(flag){case 0:display(time[0],time[1],time[2],time[3],time[4],time[5]); //调用子函数display,把存入数组time的数据给显示出来break;case 1:display(date[0],date[1],date[2],date[3],date[4],date[5]); //调用子函数display,把存入数组date的数据给显示出来break;case 2:time1.Year=button_date(time1.Year,100,99); //调整年DS1302_SetTime(0x8c,time1.Year);display(date[0],date[1],10,10,10,10);break;case 3:time1.Month=button_date(time1.Month,13,12); //调整月DS1302_SetTime(0x88,time1.Month);display(10,10,date[2],date[3],10,10);break;case 4:time1.Day=button_date(time1.Day,32,31); //调整日DS1302_SetTime(0x86,time1.Day);display(10,10,10,10,date[4],date[5]);break;case 5:time1.Hour=button_time(time1.Hour,24,23); //调整时DS1302_SetTime(0x84,time1.Hour);display(time[0],time[1],10,10,10,10);break;case 6:time1.Minute=button_time(time1.Minute,60,59); //调整分DS1302_SetTime(0x82,time1.Minute);display(10,10,time[2],time[3],10,10);break;case 7:time1.Second=button_time(time1.Second,60,59); //调整秒DS1302_SetTime(0x80,time1.Second);display(10,10,10,10,time[4],time[5]);break;}}}头文件ds1302.h程序如下:#ifndef _REAL_TIMER_DS1302_2003_7_21_#define _REAL_TIMER_DS1302_2003_7_21_#include <at89x52.h>sbit DS1302_CLK = P1^0; //实时时钟时钟线引脚sbit DS1302_IO = P1^1; //实时时钟数据线引脚sbit DS1302_RST = P1^2; //实时时钟复位线引脚sbit ACC0 = ACC^0;sbit ACC7 = ACC^7;typedefstruct __SYSTEMTIME__{unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString[9];unsigned char TimeString[9];}SYSTEMTIME; //定义的时间类型#define AM(X) X#define PM(X) (X+12) // 转成24小时制#define DS1302_SECOND 0x80 //秒寄存器#define DS1302_MINUTE 0x82 //分寄存器#define DS1302_HOUR 0x84#define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8C#define DS1302_RAM(X)(0xC0+(X)*2) //用于计算DS1302_RAM 地址的宏void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) {unsigned char i;ACC = d;for(i=8; i>0; i--){DS1302_IO = ACC0; //相当于汇编中的RRCDS1302_CLK = 1;DS1302_CLK = 0; //发一个高跳变到低的脉冲ACC = ACC >> 1;}}unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) {unsigned char i;for(i=8; i>0; i--){ACC = ACC >>1; //相当于汇编中的RRCACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0; //发一个高跳变到低的脉冲}return(ACC);}void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据{DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); // 地址,命令DS1302InputByte(ucDa); // 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0; //RST 0->1->0,CLK 0->1}unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据{unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1; //enableDS1302InputByte(ucAddr|0x01); // 地址,命令ucData = DS1302OutputByte(); // 读1Byte数据DS1302_CLK = 1; //RST 0->1->0,CLK 0->1DS1302_RST = 0;return(ucData);}void DS1302_SetProtect(bit flag) //是否写保护{if(flag)Write1302(0x8E,0x10); //WP=1,不能写入elseWrite1302(0x8E,0x00);//WP=0,可以写入}void DS1302_SetTime(unsigned char Address, unsigned char Value) // 设置时间函数{DS1302_SetProtect(0);Write1302(Address, ((Value/10)<<4 | (Value%10))); //高4位为十位,低4位为个位}void DS1302_GetTime(SYSTEMTIME *Time){unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);//转换成10进制的秒ReadValue = Read1302(DS1302_MINUTE);Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = ((ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F);}/*voidDateToStr(SYSTEMTIME *Time){Time->DateString[0] = Time->Year/10 + '0'; //数字类型转化为字符类型Time->DateString[1] = Time->Year%10 + '0';Time->DateString[2] = '-';Time->DateString[3] = Time->Month/10 + '0';Time->DateString[4] = Time->Month%10 + '0';Time->DateString[5] = '-';Time->DateString[6] = Time->Day/10 + '0';Time->DateString[7] = Time->Day%10 + '0';Time->DateString[8] = '\0';}voidTimeToStr(SYSTEMTIME *Time){Time->TimeString[0] = Time->Hour/10 + '0'; //数字类型转化为字符类型Time->TimeString[1] = Time->Hour%10 + '0';Time->TimeString[2] = ':';Time->TimeString[3] = Time->Minute/10 + '0';Time->TimeString[4] = Time->Minute%10 + '0';Time->TimeString[5] = ':';Time->TimeString[6] = Time->Second/10 + '0';Time->TimeString[7] = Time->Second%10 + '0';Time->DateString[8] = '\0';}*/void Initial_DS1302(void){unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) //如果第七为1(表明没有启动), 则启动时钟DS1302_SetTime(DS1302_SECOND,0);}/****************************************************************************** **void BurstWrite1302(unsigned char *pWClock) //往DS1302写入时钟数据(多字节方式) {unsigned char i;Write1302(0x8e,0x00); // 控制命令,WP=0,写操作?DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(0xbe); // 0xbe:时钟多字节写命令for (i = 8; i>0; i--) //8Byte = 7Byte 时钟数据+ 1Byte 控制{DS1302InputByte(*pWClock); // 写1Byte数据pWClock++;}DS1302_CLK = 1;DS1302_RST = 0;}void BurstRead1302(unsigned char *pRClock) //读取DS1302时钟数据(时钟多字节方式) {unsigned char i;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(0xbf); // 0xbf:时钟多字节读命令for (i=8; i>0; i--){*pRClock = DS1302OutputByte(); // 读1Byte数据pRClock++;}DS1302_CLK = 1;DS1302_RST = 0;}void DS1302_TimeStop(bit flag) // 是否将时钟停止{unsigned char Data;Data=Read1302(DS1302_SECOND);DS1302_SetProtect(0);if(flag)Write1302(DS1302_SECOND, Data|0x80);//停止elseWrite1302(DS1302_SECOND, Data&0x7F);不停止}******************************************************************************* */#endif。

基于ds1302数字时钟电路的设计

基于ds1302数字时钟电路的设计

1 引言从古代的滴漏更鼓到近代的机械钟,从电子表到目前的数字时钟,为了准确的测量和记录时间,人们一直在努力改进着计时工具。

钟表的数字化,大力推动了计时的精确性和可靠性。

在单片机构成的装置中,实时时钟是必不可少的部件。

目前常用的实时时钟,很多采用单片机的中断服务来实现,这种方式一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许;有的则使用并行接口的时钟芯片,如MC146818、DS12887等,它们虽然能满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂,占用地址、数据总线多,芯片体积大,占用空间多,给其它设计带来诸多不便。

本设计选取串行接口时钟芯片DS1302与单片机同步通信构成数字时钟电路。

其简单的三线接口能为单片机节省大量资源,DS1302的后背电源及对后背电源进行涓细电流充电的能力保证电路断电后仍能保存时间和数据信息等。

这些优点解决了目前常用的实时时钟所无法解决的问题。

该时钟电路强大的功能和优越的性能,在很多领域的应用中,尤其是某些自动化控制、长时间无人看守的测控系统等对时钟精确性和可靠性有较高要求的场合,具有很高的使用价值。

1.1 多功能数字钟的起源1350年6月6日意大利人乔万尼•德•党笛制造了世界上第一台结构简单的机械打点多功能数字钟。

1657年,荷兰人惠更斯首先把重力摆引入机械钟,从而创立了摆钟。

到了20世纪,随着电子工业的迅速发展,电池驱动钟、交流电钟、电机械表、指针式石英电子钟表、数字显示式石英钟表相继问世,多功能数字钟的日差已小于0.5秒。

特别是原子钟的出现,它是原子的振动来控制,是目前世界上最精确的钟,即使经过100万年,其偏差也不会超过1秒钟。

多功能数字钟最早起源于欧洲中世纪的教堂,是完全机械式结构,动力使用重锤,打点钟声完全使用人工撞击铸钟,因此当时一个多功能数字钟工程在建筑和机械结构方面是相当复杂的。

基于单片机和DS1302的LCD时钟

基于单片机和DS1302的LCD时钟

摘要从古至今,人们的生活和工作都离不开时间,而且随着人们生活工作的节奏逐步的加快,时间对人们的重要性也越来越深;因此,拥有一个不错的时钟,将对人们的生活带来很大的方便。

单片机控制的LCD时钟的技术也越来越成熟,但是人们对时钟的要求也越来越高,所以LCD时钟的研发是不可滞停的。

本文是以单片机作为控制核心的LCD时钟,利用DS1302芯片提供稳定的定时脉冲,使用DS18B20采集实时温度信息,用独立键盘实现日期、时间的校准和闹钟的设置与开关等,使用LCD液晶作为显示器,蜂鸣器用作闹钟。

该液晶时钟可以应用于一般的生活和工作之中,也可以通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。

关键词单片机,时钟,LCD,DS1302,DS18B20ABSTRACTSince ancient times,people's life and work are inseparable from time and gradually accelerated,with the rhythm of people's lives more and more time on the importance of people's deep;therefore,have a good clock, will the people the lives of a great deal of convenience.Microprocessor controlled LCD clock technology becomes more mature, but people are increasingly high requirements on the clock,LCD clock,R & D is not stagnation.This article is based on the MCU as the core of the LCD clock, using the DS1302 chip to provide a stable timing pulse,the DS18B20collection of real-time temperature information,with a separate keyboard date,time calibration and alarm settings and switch,use the LCD as a monitor,buzzer as an alarm clock.The LCD clock can be applied to general life and work can also be modified,to improve performance,add new features to bring more convenience to people's lives and work.Key words MCU,Clock,LCD,DS1302,DS18B20目录摘要 (I)ABSTRACT (II)1 绪论 (1)1.1 课题介绍 (1)1.1.1 课题的背景和意义 (1)1.1.2 现状与发展趋势 (1)1.2 课题设计要求 (2)1.2.1 主要工作 (2)1.2.2 基本要求 (2)2 方案设计与论证 (3)2.1 时钟系统设计思路 (3)2.2 系统方案论证 (3)2.2.1 单片机选择 (3)2.2.2 时钟计时方案选择 (3)2.2.3 实时环境温度采集模块选择 (3)2.2.4 显示方式选择 (4)2.2.5 闹钟方案选择 (4)2.2.6 按键选择 (4)3 单片机介绍 (5)3.1 单片机基本结构 (5)3.2 AT89S52简介 (5)3.3 AT89S52引脚说明 (6)4 系统硬件设计 (8)4.1 单片机模块 (8)4.1.1 复位电路 (8)4.1.2 晶振电路 (9)4.2 液晶显示模块 (10)4.2.1 液晶显示原理 (10)4.2.2 LCD1602简介 (11)4.2.3 LCD1602特性 (11)4.2.4 LCD1602管脚功能 (11)4.3 时钟芯片模块 (12)4.3.1 DS1302简介 (12)4.3.2 DS1302引脚功能及结构 (12)4.4 温度检测模块 (13)4.4.1 DS18B20简介 (13)4.4.2 DS18B20性能描述 (14)4.4.3 DS18B20引脚说明 (14)4.5 蜂鸣器与按键模块 (15)4.5.1 蜂鸣器模块 (15)4.5.2 按键模块 (15)5 系统软件设计 (16)5.1 主程序 (16)5.1.1 主界面 (16)5.1.2 温度设置界面 (17)5.1.3 闹钟设置界面 (18)5.2 液晶显示程序 (18)5.2.1 LCD1602地址 (18)5.2.2 LCD1602指令 (19)5.2.3 LCD1602字符集 (20)5.2.4 LCD1602部分程序 (20)5.3 时钟芯片程序 (21)5.3.1 DS1302控制命令字节 (21)5.3.2 DS1302的寄存器 (22)5.3.3 DS1302数据传输 (22)5.3.4 DS1302部分程序 (23)5.4 实时温度程序 (24)5.4.1 DS18B20设置命令 (24)5.4.2 DS18B20时序 (24)5.4.3 DS18B20操作步骤 (26)5.4.4 DS18B20部分程序 (26)6 调试 (28)6.1 软件调试 (28)6.1.1 Keil软件介绍 (28)6.1.2 程序调试 (29)6.2 硬件调试 (30)结论 (31)参考文献 (32)附录A:LCD1602的ASCII码表 (33)附录B:系统原理图 (34)附录C:实物图 (35)附录D:源程序 (36)致谢 (44)1 绪论1.1 课题介绍随着科技的发展,以及电子信息科学系的迅速崛起,单片机在数字时钟领域中的使用已经是非常普遍的了,现在人们对数字时钟的功能以及工作顺序都非常的熟悉了;但是却很少人知道它的内部结构和工作原理。

基于单片机及DS1302的LED电子钟设计硬件部分

基于单片机及DS1302的LED电子钟设计硬件部分

摘要近年来,随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在逐步地深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此越来越广泛地应用于各个领域。

本文的电子钟系统是以单片机(AT89S52)为核心,时钟芯片DS1302、数码管等元器件组成。

具体介绍应用Protel软件进行单片机系统的电子钟设计的实现方法。

该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。

关键词单片机;DS1302;电子钟ABSTRACT In recent years, with computers in the infiltration and the development of large-scale integrated circuits. SCM application is steadily deepening, because of strong function, small size, low power dissipation, low prices, reliable, easy to use features, it is increasingly widely used in various fields.This article describes an electronic bell system which consists of the core of single chip microcomputer (AT89S52) , the clock chip DS1302, LED components.Describes the application of Protel software of the electronic single chip system clock to achieve the design in details.The method can not only test the property of the system precisely,but also improve development efficiency and reduce development cost,which values in popularity.KEY WORDS Single Chip Microcomputer; DS1302; electronic clock目录1.前言 (2)2.系统核心芯片简介 (2)2.1 时钟芯片DS1302简介 (2)2.1.1 内部结构 (3)2.1.2 工作原理 (4)2.1.3 寄存器和控制命令 (5)2.1.4 数据传送时序 (7)2.2 单片机AT89S52简介 (7)2.2.1芯片引脚及特点 (8)2.2.2 主要性能 (10)3.硬件电路设计 (11)3.1 电路框图 (11)3.2 PROTEL电路图设计 (11)3.2.1 复位电路 (11)3.2.2 时钟电路 (12)3.2.3 显示电路 (13)3.2.4 按键电路 (14)3.2.5 闹铃电路及系统原理图 (15)4.电路调试 (17)4.1 实验结果 (17)4.2 存在的问题 (18)4.3 解决的方案 (19)5.总结 (21)致谢 (22)参考文献 (22)附录一 (23)附录二 (24)1.前言日常生活生产中有许多地方需要电子时钟和日历,比如家庭,办公室,以及一些智能化仪表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计报告题目:基于DS1302电子实时时钟姓名:XXX同组人:XXX班级学号:XX指导老师:XXXXX日期:2011-12-22目录摘要第一部分:题目要求 (4)第二部分:方案论证与选择 (4)第三部分:电路设计与参数选择 (7)第四部分:系统软件设计 (10)第五部分:系统调试与仪器使用 (12)第六部分:测试数据与结果分析 (18)第七部分:使用说明书 (19)总结 (19)摘要本作品是以89C52单片机为核心,DS1302时钟芯片、数码管做显示器及74LS08与门构成的24小时制单功能电子实时时钟。

这种单功能电子实时时钟不仅具有了一般数字钟的基本功能,并且通过两个按钮实现时钟运行与停止功能。

如果我们要设置时间,只需在软件程序上改变时钟芯片的初始化程序。

在电子产品盛行的今天,像这样的设计我们可以给它更大的发展空间。

第一部分题目要求我们设计的这种24小时制功能钟,可以在数码管上显示时、分、秒,并且我们可以通过按钮来控制时钟的运行及停止(按钮KEY1控制时钟停止运行,按钮KEY2控制时钟运行)并采用220V交流电源供电。

第二部分方案论证与选择一、系统功能框图在现今的这个社会,每天的时间都很紧迫,有些人怕误了时间做自己重要的事,尤其是对现在的学生而言,他们早上要早起,上课要准时,这样都少不了有一个时钟;早上干早班的人,在外出行的人,工厂里某些要严格按时间标准来控制的产品等等一些我们身边无时无刻都有的,而在这个关键的部分就要用到我们本次设计的时钟来计时了。

下面我们就介绍一下本次设计的基本设计框图。

二、系统主要部分有:1:中央处理器电路:采用单片机芯片机外围电路构成最小系统。

2:时钟信号产生电路:时钟芯片3:人机接口电路:按键电路、数码管显示电路。

三、方案论证及选择1.时钟电路部分方案一:利用单片机内部的定时功能来实现时钟的走时,通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。

由于这种方式在断电的情况下将停止走时,且通电后必须再初始化,而且需要调表,故不用此方法。

方案二:我们选用DS1302时钟芯片,该芯片是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

工作电压宽达2.5~5.5V。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。

DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

外部引脚分配各引脚的功能为:Vcc1:备用电源;Vcc2:主电源。

当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。

SCLK:串行时钟,输入;I/O:三线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。

该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。

DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式。

所以,最后本设计采用DS1302时钟芯片。

2、显示部分本设计中,显示部分我们可以采用1602液晶显示器或多个LED数码管显示器,下面我们就对这两个显示进行比较,看看那个显示器更加的适合该设计。

比较一:采用LCD1602液晶显示器。

在我们的日常生活中,我们对LCD1602液晶显示器并不陌生,在计算器、万用表、电子表及很多家用电子产品中都可以用到它显示的主要是数字、专用符号和图形。

特别是在单片机的人机交流界面中用它作为输出器件有显示质量高、采用数字式接口、体积小、重量轻。

功耗低等优点。

通常按显示方式咳咳分为段式、字符式、点阵式等。

但是在用它做显示器的时候,我们要对它进行编程,比如我们要显示一个字符,那么这个时候就复杂了,因为一个字符由6x8或8x8点阵组成,我们这时候既要找到和显示屏幕上某几个位置对应的显示RAM区8字节,还要使每个字节的不同位为“1”,其他的为“0”,为“1”的点亮,为“0”的不亮。

这样一来在显示简单的数字上就大大的加大了我们设计的难度,所以,对于一些简单的数字,我们不应采用LCD1602液晶显示来显示。

比较二:使用多个LED数码管显示。

LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。

这些段分别由字母a,b,c,d,e,f,g,dp 来表示。

当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。

如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f 不亮c不亮dp不亮。

LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。

小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。

发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。

常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

再一个,数码管相对于LCD1602液晶显示器来说具有亮度大、接口设计比较容易,价格相对较便宜等优点。

且在本次设计中恰好能把我们要显示的数字显示出来。

所以,本次设计采用多个LED数码管显示器来显示数字。

3、按键部分方案一:并口输入式的按键控制。

它的优点是电路设计简单,但每一管脚对应一个按键,虽然说单片机有多个外部引脚,但本系统采用多个LED数码管显示、时钟芯片等外围电路,他们占用外部接口线较多,要是此时要在单片机上再添加几个按键的话,那么这样单片机的外部引脚就有点供应不了,所以在占用如此多管脚的情况下,该方案是不可取的。

方案二:我们可以采用芯片74LS08与门来扩展接口,虽然在该设计中我们只用到二个按钮,但用这个芯片就足可以了。

我们采用这种方式只占用1个口线,另外按键去抖动较方便,是一种明智的选择。

第三部分电路设计与参数选择一、单片机最小系统电路设计和元件的选择根据设计要求和计算简便的原则,我们选择12M的石英晶振、30PF的陶瓷电容、22uF的瓷片电容、10k电阻、+5V电源,最小系统图如下:二、数码管显示电路设计电路如下图:我们这里采用8个数码管来显示时分秒,在单片机的P0引脚上外接上10k的上拉电阻。

P0口输出段码,P2口输出位码。

三、DS1302时钟芯片电路设计部分电路图如下:在这里我们采用32.768kMZ的晶振接在DS1302的X1和X2之间,DS1302的5、6、7引脚分别接在单片机的P1.2、P1.1、P1.0三个引脚上,VCC2接上+5V电源,VCC1可以外接电源。

四、按键电路设计部分电路图如下:这里我们采用74LS08与门芯片来扩展接口,同时,我们在编程时用外部中断0来设计程序,以便更好的实现效果。

在按键与单片机13和14引脚之间接上一10k的上拉电阻,电阻上接+5V电源。

第四部分软件设计部分一、主程序单元部分。

主程序流程图如上所示在主程序中调用时分秒显示子程序,通过按键来判断DS1302时钟芯片运行还是停止。

二、外部中断部分用外部中断0来是秒停止或开始计数。

三、显示程序单元部分。

此系统的显示部分采用的是多个LED数码管显示,主要显示时分秒,内的数据通过输出端口一次输出到显示器上。

时、分、秒显示流程图如下:注释:该显示大概流程图是这样,但在该程序设计中是把时、分、秒的显示程序分别提出来单独做一个子程序。

四、DS1302时钟芯片判断时钟是否停止流程图第五部分系统调试与仪器使用一、系统调试调试工作分硬件调试和软件调试两部分,调试方法介绍如下:首先,硬件调试主要是先搭建硬件平台,然后利用万用表等工具对电路检测,最后用程序进行功能调试,硬件调试比较费时,需要细心和耐心也需要熟练掌握电路原理。

然后,可以直接应用编辑或仿真软件进行调试,比如单片机C51编辑软件Keil.该软件提供了一个集成开发环境uVision,它包括C编辑、宏编辑、连接器、库管理和一个功能强大的仿真调试器。

通过编译。

运行,可以检查程序错误。

但使用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。

软件调试过程中要仔细耐心,即便是要多写一两个字符,都无法编译成功。

而有时往往在Keil中编译。

运行无错,但烧录到单片机中运行出错,很有可能是编程时管脚或时序编辑得不对。

还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试,如果电路出错,可以在计算机上方便的修改电路,程序出错可以重新编辑程序,这种方法节时、省力、经济、方便。

我们这里应用的是Protuse7.5.总之,调试过程是一个软硬件结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键。

1、时钟显示:我们首先进行时钟信号测试、多个LED数码管显示的的调试,以实现基本功能,看看在把程序导进去是否有线路没有接通或虚焊的现象出现。

在这个过程中,我们主要让数码管上有数字显示出来,具体是什么数这就不用关了。

2、DS1302的调试该电路含DS1302芯片、主电源、备用电源、晶振等部分。

在与单片机连接的过程中需要注意以下几点:1)、清楚DS1302与单片机连接的管脚。

本设计定义为:DS1302的SCLK连接P1.0,I/O口连接P1.1,RST口连接P1.2.2)、注意电源正负极连接。

3)、DS1302连接32.768KHz的晶振。

该晶振体形比较小,在焊接是要小心的,注意不要将晶振引脚弄断。

同时也要尽量使晶振离DS1302的X1、X2引脚近距离焊接。

4)、编写DS1302的时钟/日历程序,只要能够正确显示时间。

烧录进单片机,检查电路电源正负极连接是否正确。

检查无误后再上电检查。

3、按键电路调试按键电路比较简单,故而调试起来也比较容易,只需要保证按键焊接正确,没有虚焊或忘焊的现象出现一般不会出很大的问题。

二、程序导入所用仪器采用51单片机开发板软件和PZISP软件把程序导入89C51单片机中。

三、源程序#include<reg51.h>//头文件#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit DATA=P1^1; //位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit RST=P1^2; //位定义1302芯片的接口,复位端口定义在P1.1引脚sbit SCLK=P1^0; //位定义1302芯片的接口,时钟输出端口定义在P1.1引脚sbit key1=P3^3;sbit key2=P3^4;uchar code displaytable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar second,minute,hour;void delaynus(uchar n){uchar i;for(i=0;i<n;i++) ;}void delayms(uchar n){uchar i;while(n--)for(i=0;i<120;i++);}void write1302(uchar dat){uchar i;SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备delaynus(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续写8个二进制位数据{DATA=dat&0x01; //取出dat的第0位数据写入1302delaynus(2); //稍微等待,使硬件做好准备SCLK=1; //上升沿写入数据delaynus(2); //稍微等待,使硬件做好准备SCLK=0; //重新拉低SCLK,形成脉冲dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位}}void writeset1302(uchar Cmd,uchar dat){RST=0; //禁止数据传递SCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输delaynus(2); //稍微等待,使硬件做好准备write1302(Cmd); //写入命令字write1302(dat); //写数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递}unsigned char read1302(void){uchar i,dat;delaynus(2); //稍微等待,使硬件做好准备for(i=0;i<8;i++) //连续读8个二进制位数据{dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位 if(DATA==1) //如果读出的数据是1dat|=0x80; //将1取出,写在dat的最高位SCLK=1; //将SCLK置于高电平,为下降沿读出delaynus(2); //稍微等待SCLK=0; //拉低SCLK,形成脉冲下降沿delaynus(2); //稍微等待}return dat; //将读出的数据返回}uchar readset1302(uchar Cmd){unsigned char dat;RST=0; //拉低RST 178 / 192SCLK=0; //确保写数居前SCLK被拉低RST=1; //启动数据传输write1302(Cmd); //写入命令字dat=read1302(); //读出数据SCLK=1; //将时钟电平置于已知状态RST=0; //禁止数据传递return dat; //将读出的数据返回}void setprotect(bit flag)//设置保护{if(flag)writeset1302(0x8e,0x80);//写入保护指令elsewriteset1302(0x8e,0x00);//写入不保护指令}void stoptime(bit flag) // 是否将时钟停止{uchar dat;dat=readset1302(0x81);setprotect(0);if(flag)writeset1302(0x80, dat|0x80);elsewriteset1302(0x80, dat&0x7f);}void init_ds1302(void){setprotect(0); //根据写状态寄存器命令字,写入不保护指令writeset1302(0x80,((0/10)<<4|(0%10))); //根据写秒寄存器命令字,写入秒的初始值writeset1302(0x82,((0/10)<<4|(0%10))); //根据写分寄存器命令字,写入分的初始值writeset1302(0x84,((12/10)<<4|(12%10))); //根据写小时寄存器命令字,写入小时的初始值}void displayhour(uchar h)//显示小时{P2=0xfe;P0=displaytable[h/10];delayms(1);P2=0xfd;P0=displaytable[h%10];delayms(1);P2=0xfb;P0=0x40;delayms(1);}void displayminute(uchar m) //显示分钟{P2=0xf7;P0=displaytable[m/10];delayms(1);P2=0xef;P0=displaytable[m%10];delayms(1);P2=0xdf;P0=0x40;delayms(1);}void displaysecond(uchar s) //显示秒{P2=0xbf;P0=displaytable[s/10];delayms(1);P2=0x7f;P0=displaytable[s%10];delayms(1);}void main(){uchar ReadValue; //缓冲数据用的init_ds1302(); //ds1302初始化IT0=1; //外部中断0EX0=1;EA=1;while(1){ReadValue = readset1302(0x81); //从秒寄存器读数据second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);//将读出数据转化displaysecond(second); //显示秒ReadValue = readset1302(0x83); //从分寄存器读minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化displayminute(minute); //显示分ReadValue = readset1302(0x85); //从分寄存器读hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化displayhour(hour); //显示小时}}void int0() interrupt 0 //外部中断0{if(key1==0){stoptime(1);}else if(key2==0){stoptime(0);}}第六部分测试数据与结果分析我们利用一只走时准确的电子表进行时钟比对,证明本作品走时准确,按键是否会实现效果。

相关文档
最新文档