基于单片机的智能电子钟课程设计完整版

合集下载

基于单片机的电子时钟课程设计报告

基于单片机的电子时钟课程设计报告

目录一、引言········二、设计课题·········三、系统总体方案·········四、系统硬件设计······1.硬件电路原理图2.元件清单五、系统软件设计·········1.软件流程图2.程序清单六、系统实物图········七、课程设计体会········八、参考文献及网站·········九、附录·········一.引言单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。

基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。

数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。

数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。

基于单片机电子时钟课程设计

基于单片机电子时钟课程设计

单片机课程设计目录摘要 31 设计课题任务、基本原理及方案4 1.1 设计课题任务 4 1.2 软时钟的基本原理 41.3 设计课题总体方案42 设计课题硬件系统的设计5 2.1设计课题硬件系统各主要器件简要介绍 5 2.2设计课题硬件系统各模块功能简要介绍7硬件电路连接图102.3 设计课题元器件清单113 设计课题软件系统的设计113.1 设计课题使用单片机资源的情况113.2 设计课题软件系统个模块功能简要介绍113.3 设计课题软件系统程序流程框图123.4 课程设计各部分程序介绍144 课程设计结论、误差分析、心得体会194.1设计课题的设计结论19 4.2设计课题的误差分析194.3设计体会205 参考文献20摘要单片机即单片微型计算机,由RAM、ROM、CPU构成,定时、计数和多种接口于一体的微控制器。

它体积小、成本低、功能强,广泛应用于智能产业和工业自动化上。

这次课程设计通过对它的学习、设计、开发软、硬的能力。

1957年,Ventura发明了世界上的第一个电子表,从而奠定的电子时钟的基础,电子时钟开始迅速发展起来。

现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒进一分,满六十分进一小时,满二十四小时自动清零,从而达到计时的功能。

电子时钟是人民生活中不可缺少的工具。

通常通过用单片机设计电子时钟有两种方法:一是通过单片机内部的定时器/计数器,采用软件编程的方法实现时钟计时,一般称为软时钟。

这种方法硬件电路简单,系统的功能一般与软件的设计有关;二是采用时钟芯片,它的功能强大,功能部件集成在芯片的内部,自动产生时钟等相关的功能。

这种方案硬件成本相对较高,软件编程简单,通常用在对时钟精度要求较高的场合。

本次课程设计采用深圳宏晶公司的STC 89C52RC单片机为核心,使用12MHz 晶振与单片机STC 89C52RC相连接,通过软件编程的方法实现以24小时为一个周期的计时功能,并通过8位7段LED数码管显示当前的时间,显示的格式为:时—分—秒(如12-25-09)。

基于单片机的数字电子钟设计(含完整程序+PCB图)--课程设计

基于单片机的数字电子钟设计(含完整程序+PCB图)--课程设计

基于单⽚机的数字电⼦钟设计(含完整程序+PCB图)--课程设计基于单⽚机的数字电⼦钟设计(含完整程序+PCB图)--课程设计1 课题设计任务、功能要求及总体⽅案1.1 课题设计任务本课程设计选题⽬为:数字电⼦钟。

设计⼀个具有特定功能的电⼦钟。

1.2 功能要求设计的数字电⼦钟上电或按键复位后能⾃动显⽰系统提⽰符“P.”,进⼊时钟准备状态;第⼀次按数字电⼦钟启动/调整键,数字电⼦钟从0时0分0秒开始运⾏,进⼊时钟运⾏状态;再次按数字电⼦钟启动/调整键,则数字电⼦钟进⼊时钟调整状态,并且时间停⽌不动,此时可分别利⽤各调整键调整时、分、秒,调整结束后可按启动/调整键再次进⼊时钟运⾏状态。

1.3 设计总体⽅案介绍及⼯作原理说明本课程设计采⽤AT89S52单⽚机设计⼀个数字电⼦钟,通过两个4位LED数码管显⽰时、分、秒,并设有9个按键。

其中⼀个⽤于单⽚机的复位;⼀个为启动/调整键;两个分别为加,减键;其他键本课题暂不⽤。

电路分为5部分,分别为复位电路、键盘电路、时钟电路、显⽰电路和控制电路。

复位电路采⽤按键复位⽅式。

键盘电路采⽤独⽴式键盘。

时钟电路⽤12MHz的晶振产⽣时钟信号。

显⽰电路采⽤8个三极管驱动两个4位LED显⽰。

控制电路采⽤8位的AT89S52单⽚机作为CPU;原理是:时钟⽤T0为时钟秒加1中断,时间常数位50MS,每20次加1S,T0⽤为时间加1中断,时间常数为50MS,中断20次时间加1。

其设计框图如图1.1所⽰:复位电路AT89S52 显⽰时钟电路键盘电路下载电路图1.1 设计⽅案框图42 数字电⼦钟硬件系统的设计2.1 硬件系统各模块功能简要介绍2.1.1 复位电路复位是单⽚机的硬件初始化操作。

经复位操作后,单⽚机系统才能开始正常⼯作。

单⽚机上有复位引脚RST,⽤于外接复位电路,这⾥复位电路采⽤按键电平复位。

2.1.2 时钟电路单⽚机⼯作所需的同步时钟信号由以下两种⽅法获得:由单⽚机⽚内时钟电路结合外部晶振、电容产⽣和直接从单⽚机外部引⼊脉冲信号。

单片机电子时钟课程设计设计报告

单片机电子时钟课程设计设计报告

单片机电子时钟设计一、作品功能介绍该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控,6位LED数码显示,分别显示“小时:分钟:秒”。

该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。

功能介绍:(1)上电以后自动进入计时状态,起始于00:00:00。

(2)设计键盘调整时间,完成时间设计,并设置闹钟。

(3)定时时间为1/100秒,可采用定时器实现。

(4)采用LED数码管显示,时、分,秒采用数字显示。

(5)采用24小时制,具有方便的时间调校功能。

(6)具有时钟和秒表的切换功能。

使用方法:开机后时钟在00:00:00起开始计时。

(1)长按进入调分状态:分单元闪烁,按加1,按减1.再长按进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。

(2)(2)按进入设定闹时状态: 12:00: ,可进行分设定,按分加1,再按为时调整,按时加1,按调闹钟结束.在闹铃时可按停闹,不按闹铃1分钟。

(3)按下进入秒表状态:再按秒表又启动,按暂停,再按秒表清零,按退出秒表回到时钟状态。

二、电路原理图如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块、电源模块、晶振模块、按键模块等组成。

电子时钟原理图各个模块设计1.单片机系统 AT89S52 AT89S52概述:是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。

AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

基于单片机智能电子数字钟的课程设计

基于单片机智能电子数字钟的课程设计

课程设计报告课程名称:题目名称:学院:专业:班级:学号:学生姓名:指导教师:职称:成绩:年月日摘要 (1)一、系统总体方案设计 (1)1.1方案列举 (1)1.2方案分析及比较 (1)二、系统硬件设计 (2)2.1总控制器AT89C51 (2)2.1.1各引脚功能 (2)2.1.2引脚图 (4)2.2显示电路设计 (4)2.3晶振电路 (5)2.4复位电路 (6)2.5报时电路 (6)三、系统软件设计 (6)3.1总程序 (6)3.2中断程序 (8)四、总结 (9)参考文献 (9)附录 (9)近年来随着计算机技术在社会各个领域的渗透和大规模集成电路的发展,单片机的应用正不断地深入,它具有功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等特点。

本文是基于AT89C51单片机智能电子数字钟的设计,阐述了数字时钟的设计思路,详细叙述了系统硬软件设计的具体过程。

此设计过程在硬件与软件方面进行同步设计,硬件部分主要由AT89C51单片机,七位LED显示驱动加键盘控制电路,晶振电路,复位电路,整点报时电路。

采用AT89C51作为主控制器,用单片机内部定时器实现时钟功能,用CH451为专用LED显示驱动芯片。

可以显示星期、时、分、秒,并且各位可以通过外接键盘调整,还具有整点报时的功能。

关键词:AT89C51、CH451、智能数字时钟一、系统总体方案设计1.1方案列举采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。

方案一:使用AT89C51内部定时器,通过中断方式进行溢出次数的累计。

方案二:采用时钟芯片DS1302,DS1302是具有涓细电流充电能力的低功耗实时时钟芯片,接口简单、价格低廉、使用方便,被广泛地采用。

显示方案一:专用LED驱动芯片,可以使用MAX7219、HD7279、CH451。

显示方案二:采用74LS164串口扩展并口。

基于单片机的LED数码管数字电子钟智能仪表课程设计

基于单片机的LED数码管数字电子钟智能仪表课程设计

内蒙古科技大学智能仪表综合训练设计说明书题目:基于单片机的LED数字电子钟摘要数字电子钟是采用电子电路实现对年、月、日、时、分、秒数字显示的计时装置,由于数字集成电路的发展和石英晶体震荡器的广泛应用,使得数字电子钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,成为人们日常生活中不可缺少的必需品。

本次课程设计的是基于AT89C52单片机和实时时钟芯片DS1302在数码管上进行时钟显示,并能通过按键对其进行调时和校准,并且可以设置闹钟,且具有秒表功能。

通过按键可以切换时钟和秒表功能,同时可以对闹钟进行设置。

采用AT89C52单片机和DS1302实时时钟芯片,使用5V电源供电。

DS1302是一种高性能、低功耗、带RAM 的实时时钟芯片,它能够对时,分,秒进行精确计时,它与单片机的接口使用同步串行通信,仅用3条线与之相连接,就可以实现MCS-51单片机对其进行读写操作,把读出的时间数据送到数码管上显示。

程序运行时,数码管将从当前时间开始显示,通过调节按键可以分别对小时和分钟进行调整,调整后,时钟以新的时间为起点继续刷新显示。

这种实现方法的优点是电路简单,性能可靠,实时性好,时间和日期精度高,操作简单,编程容易。

关键词:AT89C52单片机;DS1302;LED数码管;闹钟;秒表目录目录 ............................................................... - 1 - 第1章前言 ........................................................ - 2 -1.1课题研究的现实性意义........................................ - 2 -1.2国内外研究现状.............................................. - 2 -1.3课题基本概况................................................ - 3 - 第2章总体方案设计 ................................................ - 4 -2.1方案原理.................................................... - 4 -2.2 硬件选择.................................................... - 4 -2.2.1 DS1302简介 ........................................... - 4 -2.2.2单片机 ................................................ - 5 -2.2.3显示方案 .............................................. - 6 - 第3章硬件设计 .................................................... - 8 -3.1显示模块.................................................... - 9 -3.2独立按键模块................................................ - 9 -3.3实时时钟芯片DS1302 ......................................... - 10 - 第4章软件设计 ................................................... - 11 -4.1 程序流程图................................................. - 11 -4.2 按键子程序................................................. - 12 -4.3 功能键按键程序流程图....................................... - 12 -4.4 时间调整程序............................................... - 13 - 第5章总结 ....................................................... - 14 - 附录A:硬件原理图................................................. - 15 - 附录B:C语言源程序 . (1)参考文献 (8)第1章前言1.1课题研究的现实性意义20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

基于单片机的电子时钟设计课程设计

基于单片机的电子时钟设计课程设计

目录第一章电子时钟的相关知识 (2)1.1电子时钟简介 (2)1.2电子时钟的工作原理 (2)1.3电子时钟的应用与优缺点 (2)第二章课程设计内容与要求分析 (4)2.1课程设计内容 (4)2.2设计要求 (4)2.3控制系统的选择 (4)第三章系统原理及其工作原理描述 (5)3.1STC89C51简介 (5)3.2系统电路组成 (7)3.3各个模块说明 (8)第四章控制系统的软件设计 (10)4.1程序流程图 (10)4.1.1按键处理程序 (10)4.1.2按键读取程序 (11)4.2程序设计 (12)第五章实验心得 (23)参考文献 (25)评语及成绩......................................... 错误!未定义书签。

第一章电子时钟的相关知识1.1电子时钟简介电子钟亦称数显钟(数字显示钟),是一种用数字电路技术实现时、分、秒计时的装置,与机械时钟相比,直观性为其主要显著特点,且因非机械驱动,具有更长的使用寿命,相较石英钟的石英机芯驱动,更具准确性。

电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大地方便。

相对于其他时钟类型,它的特点可归结为“两强一弱”:比机械钟强在观时显著,比石英钟强在走时准确,但是它的弱点为显时较为单调。

1.2电子时钟的工作原理电子钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。

它的计时周期为24小时,显示满刻度为23时59分59秒,具有校时功能和报时功能。

因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。

主电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。

秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。

单片机课程设计电子时钟

单片机课程设计电子时钟

xxxxxx大学课程设计报告课程设计名称:单片机系统综合课程设计课程设计题目:电子时钟院(系):专业:班级:学号:姓名:指导教师:完成日期:xxxxxx大学课程设计报告目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计思路 (1)1.3实验环境 (2)第2章详细设计方案 (3)2.1硬件电路设计 (3)2.2主程序设计 (3)2.3功能模块的设计与实现 (4)第3章结果测试及分析 (11)3.1结果测试 (11)3.2结果分析 (11)参考文献 (12)附录 A (13)附录 B (21)附录 C (22)第1章总体设计方案1.1 设计原理根据课程设计任务书的内容,要求实现在MCS51单片机上对数字电子钟的基本功能设计,对当前时间正确显示,并可根据需要对时间进行更改,以完成时间的校对和闹钟的设置。

时钟时间以时、分、秒在6位数码管上显示,小时以24小时计时模式,分秒均为60进位。

用6MHz晶振产生振荡脉冲,定时器进行秒计时。

调整设置时间的过程运用可编程键盘上的按键进行控制,共设有5个按键,首先按键A进入校时模式或E进入闹钟模式,再分别按键B对小时或C分钟进行更改,每按键一次数码管计数显示加一,更改结束后按键D退出设置,时钟正常显示。

闹钟时间到时,蜂鸣器鸣响10秒后时钟正常显示。

1.2 设计思路采用C语言程序设计结合硬件电路设计方法,利用Lab6000实验箱来实现数字电子钟的设计。

1)提出方案根据设计要求,可将本次设计分为3个模块进行:1)时钟显示模块:主要用于时间的正确显示。

2)校时模块:此模块用于时钟的校对,以完成用户更改时间的需求。

3)闹钟模块:用于实现闹钟的时间设置和定点闹铃的功能。

2)方案论证时钟显示模块中,利用可编程定时器中断进行秒计时,将时间显示在6位数码管上。

校时模块主要利用键盘上5个键的控制完成各项功能,并在数码管上动态显示改变结果,完成设置后进入时钟显示模块。

闹钟模块的设置过程与校时模块相似,但设置完成进入时间显示模块后则等待闹铃时间,到规定时间后,通过数码管闪烁及蜂鸣器的鸣响来实现定点闹铃提醒功能。

单片机多功能电子数字钟课程设计报告

单片机多功能电子数字钟课程设计报告

多功能电子数字钟设计数字钟在日常生活中最常见, 应用也最广泛。

本文主要就是设计一款数字钟, 以89C52单片机为核心, 配备液晶显示模块、时钟芯片、等功能模块。

数字钟采用24小时制方式显示时间, 定时信息以及年月日显示等功能。

文章的核心主要从硬件设计和软件编程两个大的方面。

硬件电路设计主要包括中央处理单元电路、时钟电路、人机接口电路、信号处理电路、执行电路等几部分组成。

软件用C语言来实现, 主要包括主程序、键盘扫描子程序、时间设置子程序等软件模块。

关键词单片机液晶显示器模块数字钟一硬件电路设计及描述;1.MCS-51单片机单片机是在一块硅片上集成了各种部件的微型计算机。

这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。

8051单片机的结构特点有以下几点: 8位CPU;片内振荡器及时钟电路; 32根I/O线;外部存储器ROM和RAM;寻址范围各64KB;两个16位的定时器/计数器; 5个中断源, 2个中断优先级;全双工串行口。

定时器/计数器8051内部有两个16位可编程定时器/计数器, 记为T0和T1。

16位是指他们都是由16个触发器构成, 故最大计数模值为2 -1。

可编程是指他们的工作方式由指令来设定, 或者当计数器来用, 或者当定时起来用, 并且计数(定时)的范围也可以由指令来设置。

这种控制功能是通过定时器方式控制寄存器TMOD来完成的。

在定时工作时, 时钟由单片机内部提供, 即系统时钟经过12分频后作为定时器的时钟。

技术工作时, 时钟脉冲由TO和T1输入。

中断系统8051的中断系统允许接受五个独立的中断源, 即两个外部中断申请, 两个定时器/计数器中断以及一个串行口中断。

外部中断申请通过INTO和INT1(即P3.2和P3.3)输入, 输入方式可以使电平触发(低电平有效), 也可以使边沿触发(下降沿有效)。

2.8051的芯片引脚如图1-2所示VCC: 供电电压。

基于单片机的智能电子钟课程设计完整版

基于单片机的智能电子钟课程设计完整版

[基于单片机的智能电钟]专业:[请 输 入 专 业] 班级:[请 输 入 班 级]学生姓名:[请 输 入 姓 名]指导教师:[请输入指导教师]完成时间:2022年4月27日目录1、设计内容及要求 (2)1.1、设计内容 (2)1.2、设计要求 (2)1.3、撰写设计报告 (2)2、总体方案设计 (2)2.1、方案图.................................. . (2)2.2、面板布置图..................... . (2)2.3、方案讨论.......................................... (3)2.4、明晰任务.................. ...................... .. (4)3、电路原理图................... .. (4)4、程序框图........................ (5)4.1、显示子程序流程图............... (5)4.2、实时时钟芯片1302读/写数据流程图 (6)5、编程序 (6)6、调试 (6)6.1、软件调试....................... .. . (6)6.2、仿真调试........................ ............ (7)7、自我感想.................. .. (7)8、参考书目......................... . (8)附录:C语言编程源程序.................... .. (8)1.设计内容及要求1. 1、设计内容:以AT89C51单片机为核心,制作一个LCD显示的智能电子钟。

1.2、设计要求:(1) 计时:秒、分、时、天、周、月、年。

(2) 闰年自动判别。

(3) 时间、月、日交替显示。

(5) 自定任意时刻自动开/关屏。

(6) 计时精度:误差≤1秒/月(具有微调设置)。

单片机电子时钟课程设计

单片机电子时钟课程设计

单片机电子时钟课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理,掌握电子时钟的工作原理;2. 使学生掌握单片机编程技术,能独立完成电子时钟的程序编写;3. 帮助学生了解电子时钟的设计过程,掌握相关电子元器件的使用。

技能目标:1. 培养学生运用单片机解决实际问题的能力,提高编程和调试技巧;2. 培养学生动手实践能力,能独立完成电子时钟的组装和调试;3. 提高学生的团队协作和沟通能力,能在小组项目中发挥积极作用。

情感态度价值观目标:1. 激发学生对电子技术和单片机编程的兴趣,培养创新意识;2. 培养学生严谨、细致的学习态度,养成良好的学习习惯;3. 增强学生的自信心和责任感,使其在项目实践中勇于面对挑战。

课程性质:本课程为实践性较强的课程,旨在通过项目实践,让学生掌握单片机编程和应用,培养实际操作能力。

学生特点:学生具备一定的单片机基础知识和编程技能,对电子技术有一定了解。

教学要求:注重理论与实践相结合,强调动手实践,鼓励学生创新和团队协作。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 单片机基础:回顾单片机的基本原理、结构、工作方式,重点掌握时钟电路、I/O 口编程、中断系统等基础知识。

教材章节:《单片机原理与应用》第1-3章2. 电子时钟原理:学习电子时钟的基本构成、工作原理,分析时钟芯片DS1302的功能和应用。

教材章节:《单片机原理与应用》第6章3. 程序设计:学习C语言编程,编写电子时钟程序,掌握定时器、中断处理、数据存储等编程方法。

教材章节:《单片机C语言程序设计》第4-6章4. 硬件设计:学习电子时钟硬件电路设计,包括单片机、时钟芯片、显示模块、按键模块等。

教材章节:《电子电路设计》第2-3章5. 调试与优化:学习电子时钟系统的调试方法,分析常见问题,进行程序和硬件优化。

教材章节:《单片机原理与应用》第8章6. 项目实践:分组进行电子时钟项目实践,从硬件组装、编程调试到产品展示,全面锻炼学生的动手能力。

电子钟单片机课程设计报告(含源码)

电子钟单片机课程设计报告(含源码)

一、总设计思路电子时钟是我们日常生活中最常见的一种钟表,由于它结构简单、功耗低、时间精度比较准、等优点,使得广泛应用,在未来肯定有很大的市场。

这次课程设计我的目的就是尝试着做一个电子时钟。

1、系统功能显示时间、声音提示、调整时间、设置闹钟的功能。

2、功能硬件实现方案时间显示:时间的显示我选用的是六位七段数码管,由于数码管控制简单,而且显示效果好,所以选用它。

由于静态显示方式比较占资源,而且电路比较复杂,所以我们选择了动态显示方式,电路简单,效果挺好。

时间调整和闹钟设置:是通过外部两个按键触发单片机中断进而控制时间的调整。

其中一个按键是模式选择按键通过触发外部中断0来选择功能,功能主要是选择要调时、调分、调秒、闹钟调时、闹钟调分、闹钟调秒六种模式。

第二个按键通过触发外部中断1来在相应的模式下对时间的大小做调整。

声音提示:通过利用蜂鸣器来作为发生装置,有整点提示功能和闹铃功能。

时间发生:利用单片机自带定时器0做定时,通过软件控制来产生时、分、秒。

3、功能软件实现方案由于单片机C语言已经全面普及,它的程序容易理解、简单易写、可移植性好,所以我们选择用单片机C语言来写。

4、开发环境操作系统:window 7旗舰版64位程序编辑编译软件:KEIL μVision V4.60.6.10仿真软件;Proteus V ersion 7.85.、总设计原理框图STC89C52RC6位七段数码管显示时、分、秒蜂鸣器发声装置时钟复位电路按键调时模块一、硬件设计定时和程序执行及控制模块:我们选择的是宏晶科技生产的STC89C52RC芯片,它在很多硬件资源上比8051提升了不少,所以在后期我们可以做更多扩展和维护。

时间显示模块::采用六个七段带小数点的共阴极数码管。

声音提示模块:采用简单蜂鸣器做声音提示。

调时模块:通过两个简单按键来触发中断调时。

时钟复位模块:采用11.0592MHz的晶振,提供单片机工作频率。

二、设计原理图三、芯片解说STC89C52:是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。

(完整word版)单片机课设电子闹钟设计

(完整word版)单片机课设电子闹钟设计

一概述1.1 课程设计的目的和意义本文是利用AT89C51单片机结合七段显示器设计一个简易的定时闹铃时钟,可以放在计算机教室或是实验室中使用,由于用七段显示器显示数据,在夜晚或黑暗的场合中也可以使用。

可以设置现在的时间及显示闹铃设置时间,若时间到则发出一分钟闹铃响。

本课程设计主要用到AT89C51单片机定时器时间计时处理、按键扫描及七段显示器扫描的设计方法等等。

闹钟与我们的日常生活密不可分,通过闹钟的设计可以使我们进一步熟悉和掌握单片机的内部结构和工作原理,掌握单片机仿真软件Proteus的使用方法。

1.2 课程设计所需元件AT89C51×1,8255A×1 ,7SEG-MPX6-CC×1,AVX0402NPO33P×2,CRYSTAL×1,3WATT10K ×3,BUTTON×3,10WATT1K×8,74LS00×1,SOUNDER×1,MINRES300R×1,SW-SPDT×1。

1.3 设计任务在熟练掌握单片机及其仿真系统的使用方法的基础上,综合应用单片机原理,微机原理,微机接口技术等专业知识,设计采用一个AT89C51单片机控制的定时闹钟。

二系统总体方案及硬件设计2.1总体设计框图该数字定时闹钟是由AT89C51单片机控制的,采用24小时制计时。

基于单片机的数字定时闹钟在设计时需要解决三个方面的主要问题:一是LED显示模块的驱动和编程,二是有关单片机中定时器的使用,三是如何利用单片机的外中断实现时钟功能和运行模式的转化。

数字定时闹钟系统框图如图一所示,包括主电路和显示电路两大部分。

2.2 主电路主电路图如图三所示。

该电路使用P3端口的P3.0端口线实现整点报时功能;同样使用P3端口的P3.0端口实现闹钟功能。

整点报时信号用SOUNDER来模拟。

当整点时,P3.0端口所接的SOUNDER闹一分钟。

单片机智能时钟课程设计

单片机智能时钟课程设计

单片机智能时钟课程设计一、课程目标知识目标:1. 学生能理解单片机的基本工作原理和编程方法。

2. 学生能掌握智能时钟的电路构成,功能实现及编程技术。

3. 学生能了解智能时钟在现实生活中的应用。

技能目标:1. 学生能运用所学知识,设计并搭建单片机智能时钟电路。

2. 学生能编写程序,实现智能时钟的基本功能,如时间显示、闹钟设定等。

3. 学生能通过实验,分析并解决单片机智能时钟在运行过程中可能出现的问题。

情感态度价值观目标:1. 学生培养对单片机及电子技术的兴趣,增强学习动力。

2. 学生在团队合作中,学会沟通、协作,培养团队精神。

3. 学生能够关注单片机智能时钟在生活中的应用,体会科技发展对生活的影响。

课程性质:本课程为实践性较强的课程,注重理论知识与实际操作相结合。

学生特点:学生具备一定的电子技术基础和编程能力,对单片机有一定了解。

教学要求:教师需引导学生运用所学知识解决实际问题,培养学生的动手能力和创新意识。

在教学过程中,注重理论与实践相结合,提高学生的实际操作能力。

通过课程目标的实现,使学生在知识、技能和情感态度价值观方面得到全面提升。

二、教学内容1. 单片机基础理论:回顾单片机的结构、工作原理,重点讲解时钟电路、I/O 口编程、中断系统等基础知识。

教材章节:第一章 单片机原理与接口技术2. 智能时钟电路设计:介绍智能时钟的硬件电路设计,包括时钟芯片、显示模块、按键模块等组成部分。

教材章节:第二章 常用单片机外围电路设计3. 单片机编程技术:讲解智能时钟的编程方法,包括时间显示、闹钟设定、调整时间等功能实现。

教材章节:第三章 单片机C语言编程4. 实践操作:指导学生进行智能时钟的电路搭建、编程、调试及优化。

教材章节:第四章 单片机实践操作5. 课程项目:以小组形式完成一个具有创意的单片机智能时钟设计,并进行展示和评价。

教材章节:第五章 课程设计与实践教学进度安排:1. 第1-2周:回顾单片机基础理论,介绍智能时钟电路设计。

电子闹钟单片机课程设计

电子闹钟单片机课程设计

电子闹钟单片机课程设计一、课程目标知识目标:1. 学生能理解单片机的基础知识,掌握其内部结构和工作原理;2. 学生能掌握电子闹钟的原理,了解时钟信号的产生与处理;3. 学生能运用所学知识,设计并实现一个具有基本功能的电子闹钟。

技能目标:1. 学生能运用编程软件进行单片机程序设计,实现电子闹钟的功能;2. 学生能运用电路设计软件绘制电子闹钟电路图,并进行电路搭建;3. 学生具备分析和解决问题的能力,能对电子闹钟进行调试和优化。

情感态度价值观目标:1. 学生培养对电子制作的兴趣,增强实践操作的自信心;2. 学生树立团队协作意识,培养沟通与协作能力;3. 学生认识到科技发展对生活的影响,激发创新精神和责任感。

分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能独立完成单片机基础知识的学习,并进行课堂讨论;2. 学生能编写并调试电子闹钟程序,实现基本功能;3. 学生能绘制电子闹钟电路图,并进行电路搭建;4. 学生在小组合作中,共同完成电子闹钟的设计与制作,展示成果并进行评价。

1. 单片机基础知识:C51语言基础,单片机内部结构,工作原理,I/O口编程;2. 电子闹钟原理:时钟信号产生,时分秒计数,闹钟设置与触发;3. 程序设计:闹钟程序框架,中断处理,时间显示,闹钟功能实现;4. 电路设计:电子闹钟电路图绘制,元件选型,电路搭建;5. 调试与优化:程序调试,电路测试,功能优化。

教学大纲安排:第一周:单片机基础知识学习,C51语言入门;第二周:单片机内部结构,I/O口编程;第三周:电子闹钟原理,时钟信号产生与处理;第四周:闹钟程序设计,中断处理;第五周:时间显示,闹钟功能实现;第六周:电子闹钟电路设计,元件选型;第七周:电路搭建,程序下载;第八周:调试与优化,成果展示与评价。

教学内容关联教材章节:1. 单片机基础知识:第三章 单片机原理与应用;2. 电子闹钟原理:第四章 时钟与定时器;3. 程序设计:第五章 C51程序设计;4. 电路设计:第六章 电子电路设计;5. 调试与优化:第七章 程序调试与优化。

基于单片机C语言电子时钟完整版(闹钟,整点报时)

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.Key words Electronic clock;;AT89S52;Hardware Design;Software Design目录1设计课题任务、功能要求说明及方案介绍 (1)1.1设计课题任务 (1)1.2功能要求说明 (1)1.3设计总体方案介绍及原理说明 (1)2设计课题硬件系统的设计 (2)2.1设计课题硬件系统各模块功能简要介绍 (2)2.2设计课题电路原理图、PCB图、元器件布局图 (2)2.3设计课题元器件清单 (5)3设计课题软件系统的设计 (6)3.1设计课题使用单片机资源的情况 (6)3.2设计课题软件系统各模块功能简要介绍 (6)3.3设计课题软件系统程序流程框图 (6)3.4设计课题软件系统程序清单 (10)4设计结论、仿真结果、误差分析、教学建议 (21)4.1设计课题的设计结论及使用说明 (21)4.2设计课题的仿真结果 (21)4.3设计课题的误差分析 (22)4.4设计体会 (22)4.5教学建议 (22)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。

(完整版)单片机毕业课程设计-电子钟

(完整版)单片机毕业课程设计-电子钟

单片机课程设计课题:电子钟系别:电气与电子工程学院专业:电气工程及其自动化姓名:学号:XXXX学院2014年 01月 01日成绩评定·一、指导教师评语课程设计成绩评定目录一、设计目的 (4)二、设计要求 (4)三、总体设计 (4)1、系统总体框图 (4)2、系统软件设计 (5)四、各部分电路设计 (6)1、单片机模块 (6)2、晶振与复位电路 (7)3、控制电路 (8)4、数码管显示电路 (8)5、整点报时电路 (9)五、整体电路图 (10)六、设计总结 (11)参考文献 (12)附录 (13)一、设计目的1、使学生增进对单片机的感性认识,加深对单片机理论方面的理解;2、使学生掌握单片机的内部功能模块的应用,如定时器计数器、中断、片内外存贮器、 IO 口、 AD、 DA、串行口通讯等;3、使学生了解和掌握单片机应用系统的软硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。

二、设计要求1、可以实现 23h59m59s的显示,用六位LED七段显示器显示出来;2、可以利用按键设置任意的时分秒各位,并具有按键复位功能;3、整点报时可以触发一音频器实现报时;三、总体设计1、系统总体框图图 1 系统总体框图2、系统软件设计图 2 系统流程图注:程序清单附后四、各部分电路设计本设计电路由五部分组成,分别是单片机模块,晶振与复位电路,控制电路,数码管显示电路,整点报时电路。

1、单片机模块图 3 单片机模块如图 3 所示, AT89S51有 40 引脚,双列直插( DIP)封装,所用引脚功能如下:(1)VCC——运行时加+ 4.5V(2)GND——接地(3)XTAL1 ——振荡器反相放大器及内部时钟发生器的输入端(4)XTAL2 ——振荡器反相放大器的输出端(5)RST——复位输入,高电平有效,在晶振工作时,在RST引脚上作用 2 个机器周期以上的高电平,将使单片机复位。

WDT溢出将使该引脚输出高电平,设置 SFT AUXR的 DISRTO位(地址 8EH)可打开或关闭该功能。

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

目录1、设计内容及要求 (2)1.1、设计内容 (2)1.2、设计要求 (2)1.3、撰写设计报告 (2)2、总体方案设计 (2)2.1、方案图.................................. . (2)2.2、面板布置图..................... . (2)2.3、方案讨论.......................................... (3)2.4、明晰任务.................. ...................... .. (4)3、电路原理图................... .. (4)4、程序框图........................ (5)4.1、显示子程序流程图............... (5)4.2、实时时钟芯片1302读/写数据流程图 (6)5、编程序 (6)6、调试 (6)6.1、软件调试....................... .. . (6)6.2、仿真调试........................ ............ (7)7、自我感想.................. .. (7)8、参考书目......................... . (8)附录:C语言编程源程序.................... .. (8)1.设计内容及要求1. 1、设计内容:以AT89C51单片机为核心,制作一个LCD显示的智能电子钟。

1.2、设计要求:(1) 计时:秒、分、时、天、周、月、年。

(2) 闰年自动判别。

(3) 时间、月、日交替显示。

(5) 自定任意时刻自动开/关屏。

(6) 计时精度:误差≤1秒/月(具有微调设置)。

1.3、撰写设计报告单片机课程设计是以课题或项目设计方式开展的一门课程,具有较强的综合性、实践性,是工科、工程类院校或职业类院校电类专业在校生的必修课,是将单片机原理与应用课程的理论知识转变为应用技术的重要教学环节。

这一环节不但能加深对单片机原理的理解,而且还能培养学生的实践动手能力,开发学生的分析、解决问题的能力。

单片机课程设计环节的训练能够让学生知道单片机工程项目的制作过程,使学生尽早了解单片机系统的开发流程。

2. 总体方案设计2.1、方案图2.2、面板布置图2.3、方案讨论方案一:采用实时时钟芯片实时时钟芯片具备年、月、日、时、分、秒计时功能和多点计时功能,计时数据的更新每秒自动进行一次,不需程序干预。

计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。

此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据,由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。

方案二:软件控制利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。

该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术MCS-51汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。

而由于Atmel公司的AT89C51是一种自带4KB Flash存储器的低电压、高性能的CMOS 8位微处理器。

该器件采用Atmel高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出引脚相兼容。

AT89C51将多功能8位CPU和闪存集成在单个芯片中,是一种高效的微控制器,使用也更方便,寿命更长,可以反复擦除1000次。

形成了功能强大、使用灵活和具有较高性能价格比的微控制器。

它的功能强大,而且也比较容易购买,故本设计中所选的单片机为AT89C51单片机。

2.4、明晰任务采用AT89C51单片机作为系统的控制核心。

时钟数据通过市场上流行的时钟芯片DS1302来获取。

DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。

实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年自动判断调整的能力。

定时电路能够实现自定任意时刻自动开/关屏,采用LCD LM016L显示年、月、周、天、时、分、秒。

通过按键开关实现微调,确保计时精度:误差≤1秒/月。

DS1302时钟芯片的主要功能特性:(1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。

(2) 31B的8位暂存数据存储RAM。

(3) 串行I/O口方式使得引脚数量最少。

(4) DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需3根线。

(5) 宽范围工作电压2.0-5.5V。

(6) 工作电流为2.0A时,小于300nA。

(7) 功耗很低,保持数据和时钟信息时功率小于1mW。

3.电路原理图4.程序框图4.1、显示子程序流程图4.2、实时时钟芯片1302读/写数据流程图5.编程序源程序见附录部分6.调试6.1、软件调试目前设计过程中容易造成元件和仪器仪表的损坏,而借助Keil和Proteus 进行单片机系统的开发,可以节省设计成本,提高设计速度。

Keil软件包是一个功能强大的开发平台,它包括项目管理器、CX51编译器、AX51宏汇编器、BL51/LX51连接定位器、RTX51实时操作系统、Simulator软件模拟器及Monitor51硬件目标调试器。

它是一种集成化程度高的文件管理编译环境,主要功能为编译C语言源程序,汇编程序或混合语言源程序,连接和定位目标文件和库,创建HEX文件,调试目标程序等。

Keil是目前最好的51单片机开发工具之一。

Keil支持软件模拟仿真(Simulator)和用户目标调试(Monitor51)两种工作模式。

前者不需要任何单片机硬件即可完成用户程序仿真、调试,后者利用硬件目标板中的监控程序可以直接调试目标硬件系统。

Proteus是一个完整的嵌入式系统软件、硬件设计仿真平台,它包括原理图输入系统ISIS、带扩展的Prospice混合模型仿真器、动态元件库、高级图形分析模块和处理器虚拟系统仿真模型VSM。

ISIS是Proteus系统的中心,具有超强的控制原理设计环境。

ProteusVSM最重要的特点是能把微处理器软件作用在处理器上,并和该处理器的任何模拟和数字元件协同仿真,仿真执行目标码就像在真正的单片机系统上运行一样,VSM CPU模型能完整仿真I/O接口、中断、定时器、通用外部设备口及其他与CPU有关的外部设备,甚至能仿真多个处理器。

6.2、仿真调试Proteus仿真7.自我感想经历过这么多天不间断的课程设计,我们有挺多感触的,从最基本上说我们看到了,也意识到了自己的不足,对于不断克服的各种阻碍也让我们体会到了课程设计的意义所在。

对于只接触课本只动笔杆的我们,面临实际的设计尺寸,让我们很是尴尬,都说理论联系实际,真正到联系的时候才发现挺困难的,不过正是理论知识的各种补充才让我们能最终完成任务,然后深深地体会到理论对现实的指导作用。

我们现在最缺乏的就是实际工作经验,而理论联系实践并不像我们想象的那么简单,他需要坚实的理论基础和实际工作经验。

坚实的理论基础决定了我必须坚持学习新的知识新的理论,完善了自己的知识结构,才能在以后的实际中轻松面对,才能设计出更好的更有益于人们生活与工作的机械,才能跟上时代的步伐,不被淘汰。

在这个一边忙着复习忙着考试又要准备课程设计的日子里,真真正正的体会到了时间的宝贵,有点像高中忙忙碌碌的生活,不过能按时完成课程设计对我们来说也是一个莫大的安慰。

严谨和细心是做机械设计的必要态度,要想做好一件事,就必须一丝不苟、态度认真。

俗话说:“失之毫厘,谬之千里。

”在机械设计上尤其应该注意。

在以后的工作中,你的很小的一个疏忽将会造成一个公司很大的损失,甚至给用户带去生命危险,而自己也会为自己的不负责任行为付出代价。

再者就是设计中要严谨和细心,对于机械是不能出差错的,任何的微小误差都可能产生不可预计的后果,当然对于我们来说就是设计中要走一些弯路,而且在这个严重缺少时间又惦记回家问题的我们来说也是一个很严重的后果。

不过,困难虽是难免的,但我们有信心就能并且已经战胜了困难,完成了这个无比揪心的课程设计。

因为时间等各种关系设计中难免有些不足还请老师助教给予批评和帮助。

8.参考文献《MCS-51系列单片机原理及应用》孙涵芳主编《新概念51单片机C语言教程》郭天祥主编《51单片机课程设计》周向红主编《单片机原理及其应用教程》张元良主编附录:C语言编程源程序#include<reg51.H>#include<intrins.h>//---------------------------------------#define uint unsigned int#define uchar unsigned char//---------------------------------------/*uchar codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf 8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 共阳极数码管代码 */ uchar codexingqi[8]={0x00,0x07,0x01,0x02,0x03,0x04,0x05, 0x06};//星期显示代码ucharmiao,shi,fen,date,month,day,year,year10,set,mun,set_shi,set_fen,time_ flag;// 全局定义uint year_data,t;//------------------------------------sbit SCLK=P3^5; //DS1302 通讯线定义sbit DIO=P3^6;sbit RST=P3^7;sbit speak=P0^0;sbit DS=P2^0; //595 通讯线定义sbit SH_CP=P2^1;sbit ST_CP1=P2^2;sbit ST_CP2=P2^3;sbit ST_CP3=P2^4;sbit ST_CP4=P2^5;sbit ST_CP5=P2^6;sbit ST_CP6=P2^7;sbit ST_CP7=P3^0;sbit ST_CP8=P3^1;sbit OE1=P1^0;sbit OE2=P1^1;sbit OE3=P1^2;sbit OE4=P1^3;sbit OE5=P1^4;sbit OE6=P1^5;sbit OE7=P1^6;sbit OE8=P1^7;sbit K1=P3^2;//按键接口定义sbit K2=P3^3;sbit K3=P3^4;sbit K4=P0^1;sbit K5=P0^2;//------------------------------------void write_595(uchar temp) //写 74HC595 一个字节{uchar temp_595,i;temp_595=temp;for(i=0;i<8;i++){SH_CP=0;_nop_();_nop_();_nop_();if(temp_595&0x80){DS=1;}else{DS=0;}_nop_();_nop_();_nop_();SH_CP=1;temp_595<<=1;}}//--------------------------------------------- void delay(uint z) //Nms 延时{uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--);}//-------------------------------------------- void delaynus(uint z) //ums 延时{uint x,y;for(x=z;x>0;x--)for(y=10;y>0;y--);}//---------------------------------------------- void write(uchar date) //写入 DS1302 一个字节{uchar temp,i;RST=1;temp=date;for(i=0;i<8;i++){ SCLK=0;if(temp&0x01)DIO=1;elseDIO=0;SCLK=1;temp>>=1;}}//------------------------------------uchar read() //读出 DS1302 一个字节{uchar a,temp;RST=1;for(a=8;a>0;a--){temp>>=1;SCLK=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCLK=0;if(DIO){temp=temp|0x80;}else{temp=temp|0x00;}}return (temp);}//----------------------------------void write_1302(uchar add,uchar dat) //写DS1302数据{RST=0;RST=1;write(add);write(dat);SCLK=1;RST=0;}//----------------------------------------- uchar read_1302(uchar add) // 读DS1302数据{uchar temp;RST=0;SCLK=0;RST=1;write(add);temp=read();SCLK=1;RST=0;return(temp);}//------------------------------------------- void display() //显示子程序{miao=read_1302(0x81); //读秒fen=read_1302(0x83); //读分shi=read_1302(0x85)&0x3f;//读时date=read_1302(0x87); //读日month=read_1302(0x89); //读月year=read_1302(0x8d); //读年day=read_1302(0x8B); //读星期write_595(miao); //显示秒ST_CP1=0;ST_CP1=1;ST_CP1=0;delaynus(10);write_595(fen); //显示分ST_CP2=0;ST_CP2=1;ST_CP2=0;delaynus(10);write_595(shi); //显示时ST_CP3=0;ST_CP3=1;ST_CP3=0;delaynus(10);write_595(date); //显示日ST_CP4=0;ST_CP4=1;ST_CP4=0;delaynus(10);write_595(month); //显示月读ST_CP5=0;ST_CP5=1;ST_CP5=0;delaynus(10);write_595(year); //显示年ST_CP6=0;ST_CP6=1;ST_CP6=0;delaynus(10);write_595(xingqi[day]); //显示星期ST_CP7=0;ST_CP7=1;ST_CP7=0;delaynus(10);}//----------------------------------------- void ds1302_init() //1302 初始化{RST=0;SCLK=0;/*write_1302(0x80,0x00);//设置初始值SECwrite_1302(0x82,0x00);//设置初始值MINwrite_1302(0x84,0x00);//设置初始值HRwrite_1302(0x86,0x00);//设置初始值DATEwrite_1302(0x88,0x00);//设置初始值MONTHwrite_1302(0x8A,0x00);//设置初始值DAY*/write_1302 (0x8C,0x10);//设置初始值YEAR}//--------------------------------------------- void PORT_INIT() //端口初始化{P0=0XFE;P1=0X00;P2=0X00;P3=0XFC;}void time_init() //定时器初始化{TMOD=0x11; //设置定时器 0\1 都为工作方式 1TH0=(65536-50000)/256; //装入初值TL0=(65536-50000)%256;TH1=(65536-10000)/256; //装入初值TL1=(65536-10000)%256;PT0=1; //T0 定时器优先级最高EA=1 ;//开总中断ET0=1;//开定时器 0 中断ET1=1;//开定时器 1 中断TR0=1;//启动定时器 0TR1=1; // 启动定时器 1}//---------------------------------------------void main(void) //主程序{PORT_INIT();ds1302_init();time_init();year=read_1302(0x8d); //读年数据year_data=0x2000|year;write_595(year_data>>8); //显示 2010 年的 20 字样ST_CP8=0;ST_CP8=1;ST_CP8=0;set_shi=0x09; //闹钟初始值设定set_fen=0x39;time_flag=0; //标志位set=0;while(1){switch(set){case 0: //设置秒{display(); // 显示子程序if((shi==set_shi)&&(fen==set_fen)&&(time_flag==0)) //闹钟设定只设定小时和分钟{speak=~speak;if((K2==0)&&(time_flag==0)) //按键 K2 停止闹钟响{P0&=0XFE;time_flag=1;}delay(10);}}break;}if (fen==set_fen+1) // 当不按下闹钟停止按键,一分钟后自动停止闹钟{P0&=0XFE; time_flag=0;}}}//---------------------------------------void time0()interrupt 1 // 定时器 0 中断{TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;mun++;if(mun==15){mun=0;switch(set){case 1: //设置秒闪烁{OE1=1;delay(300);OE1=0;}break;case 2: //设置分闪烁{OE2=1;delay(300);OE2=0;}break;case 3: //设置时闪烁{OE3=1;delay(300);OE3=0;}break;case 4: //设置日闪烁{OE4=1;delay(300);OE4=0; }break;case 5: //设置月闪烁{OE5=1;delay(300);OE5=0;}break;case 6: //设置年闪烁{OE6=1;OE8=1;delay(300);OE6=0;OE8=0;}break;case 7: //设置星期闪烁{OE7=1;delay(200);OE7=0;}break;case 8: //设置闹钟闪烁{OE2=1;OE3=1;delay(200);OE2=0;OE3=0;}break;}}TR0=1;}//------------------------------------------ void time1()interrupt 3 // 定时器 1 中断{TR1=0; //先关定时器TH1=(65536-20000)/256;TL1=(65536-20000)%256;//--------------------------------if(K1==0){delay(10);if(K1==0){set++;if(set==9){set=0;write_1302(0x80,miao); //设置初始值 SEC write_1302(0x82,fen); //设置初始值 MINwrite_1302(0x84,shi); //设置初始值 HRwrite_1302(0x86,date); //设置初始值 DATE write_1302(0x88,month); // 设置初始值 MONTH write_1302(0x8A,day); //设置初始值 DAYwrite_1302(0x8C,year_data); //设置初始值 YEAR }t=50000;while((!K1)&&t){ t--;}}}//--------------------------------------if(K2==0){delay(10);if(K2==0){switch(set){case 1:{miao++;if((miao&0x0f)>0x09){miao+=0x10;miao&=0xf0;}if(miao==0x60){miao=0x00;}write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;}break;case 2:{fen++;if((fen&0x0f)>0x09){fen+=0x10;fen&=0xf0;}if (fen==0x60){fen=0x00;}ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3:{if((read_1302(0x85)&0x80)==0x00) {shi++;if((shi&0x0f)>0x09){shi+=0x10;shi&=0xf0;}if(shi==0x24) //24 小时制{shi=0x00;}}else{shi=(shi|0x80)+1;if((shi&0x0f)>0x09){shi+=0x10;shi&=0xf0;}if(shi==0x12) //12 小时制{shi=0X80;}}write_595(shi); //显示时ST_CP3=0;ST_CP3=1;ST_CP3=0;} break;case 4:{date++;if((date&0x0f)>0x09){date+=0x10;date&=0xf0;}if((date==0x32)&&((month==0x01)||(month==0x03)||(month==0x05)||(month ==0x07)||(month==0x08)||(month==0x10)||(month==0x12))){date=0x01;}elseif((date==0x31)&&((month==0x04)||(month==0x06)||(month==0x09)||(month ==0x11))){date=0x01;}elseif((date==0x29)&&(month==0x02)&&((year_data|read_1302(0x8d))%100!=0)& &((year_data|read_1302(0x8d))%400!=0)){date=0x01;}elseif((date==0x30)&&(month==0x02)&&((year_data|read_1302(0x8d))%100==0)& &((year_data|read_1302(0x8d))%400==0)){date=0x01;}write_595(date);ST_CP4=0;ST_CP4=1;ST_CP4=0;} break;case 5:{month++;if((month&0x0f)>0x09){month+=0x10;month&=0xf0;}if(month==0x13){month=0x01;}write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;} break;case 6:{year_data++;if((year_data&0x000f)==0x0a){year_data+=0x0010;year_data&=0xfff0;}if((year_data&0x00ff)==0xa0){year_data+=0x0100; //向前进 1year_data&=0xff00; //后面尾数归 0}write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7:{day++;if((day&0x0f)==0x08){day=0x01;}write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;}t=50000;while((!K2)&&t){t--;}}}//-------------------------if(K3==0){delay(10);if(K3==0){switch(set){case 1:{miao--;if((miao&0x0f)==0x0F){miao&=0xf9; //减到 0 后,再减一次就归 0,}if(miao==0xF9) //当全部减到 00 时,再减一次就为 59 {miao=0x59;}write_595(miao);ST_CP1=0;ST_CP1=1;ST_CP1=0;} break;case 2:{fen--;if((fen&0x0f)==0x0F){fen&=0xf9;}if(fen==0xF9){fen=0x59;}write_595(fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;} break;case 3:{if((read_1302(0x85)&0x80)==0x00) {shi--;if((shi&0x0f)==0x0F){shi&=0xf9;}if(shi==0xF9) //24 小时制{shi=0x23;}}else{shi=(shi|0x80)-1;if((shi&0x0f)==0x0F){shi&=0xf9;}if(shi==0xF9) //12小时制{shi=0X12;}}write_595(shi);//显示时ST_CP3=0;ST_CP3=1;ST_CP3=0;}break;case 4:{date--;if((date&0x0f)==0x0F){date&=0xf9;}if((date==0x00)&&((month==0x01)||(month==0x03)||(month==0x05)||(month ==0x07)||(month==0x08)||(month==0x10)||(month==0x12))){date=0x31;}elseif((date==0x00)&&((month==0x04)||(month==0x06)||(month==0x09)||(month ==0x11))){date=0x30;}elseif((date==0x00)&&(month==0x02)&&((year_data|read_1302(0x8d))%100!=0)& &((year_data|read_1302(0x8d))%400!=0)){date=0x28;} elseif((date==0x00)&&(month==0x02)&&((year_data|read_1302(0x8d))%100==0)& &((year_data|read_1302(0x8d))%400==0)){date=0x29;}write_595(date);ST_CP4=0;ST_CP4=1;ST_CP4=0;}break;case 5:{month--;if((month&0x0f)==0x0F){month&=0xf9;}if(month==0x00){month=0x12;}write_595(month);ST_CP5=0;ST_CP5=1;ST_CP5=0;}break;case 6:{year_data--;if((year_data&0x000f)==0x0F) {year_data&=0xfff9;}if((year_data&0x00f0)==0xF0) {year_data&=0xf999;}write_595(year_data);ST_CP6=0;ST_CP6=1;ST_CP6=0;write_595(year_data>>8);ST_CP8=0;ST_CP8=1;ST_CP8=0;} break;case 7:{day--;if((day&0x0f)==0x00){day=0x07;write_595(xingqi[day]);ST_CP7=0;ST_CP7=1;ST_CP7=0;} break;}t=50000;while((!K3)&&t) //松手检测{t--;}}}//---------------------------------- switch(set){case 8:{if(K4==0){delay(10);if(K4==0){if((read_1302(0x85)&0x80)==0x00) {set_shi++;if((set_shi&0x0f)>0x09){set_shi+=0x10;set_shi&=0xf0;}if(set_shi==0x24) //24 小时制{set_shi=0x00;}}else{set_shi=(set_shi|0x80)+1;if((set_shi&0x0f)>0x09){set_shi+=0x10;set_shi&=0xf0;if(set_shi==0x12) //12小时制{set_shi=0X80;}write_595(set_shi); // 显示闹钟的时ST_CP3=0;ST_CP3=1;ST_CP3=0;t=50000;while((!K4)&&t){t--;}}}//----------------------------------- if(K5==0){delay(10);if(K5==0){set_fen++;if((set_fen&0x0f)>0x09){set_fen+=0x10;set_fen&=0xf0;}if(set_fen==0x60){set_fen=0x00;}write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;t=50000;while((!K5)&&t){t--;}}}}//------------------------if(((K4==0)||(K5==0))&&(set==0)){delay(10);if(((K4==0)||(K5==0))&&(set==0)){write_595(set_shi); //显示闹钟的时ST_CP3=0;ST_CP3=1;ST_CP3=0;write_595(set_fen);ST_CP2=0;ST_CP2=1;ST_CP2=0;P1=0XF9;while((!K4)||(!K5));P1=0X00;}}//----------------------------------------- TR1=1; //退出时开定时器}}//-----------------------------------------。

相关文档
最新文档