基于51单片机的实时时钟设计(8255扩展io口) (1)
- 格式:doc
- 大小:228.00 KB
- 文档页数:19
设计题目:基于51 单片机的电子时钟设计摘要单片机,是集CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器。
自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。
它体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。
本系统为基于DS12C887的多功能电子钟,以STC89C51单片机作为主控芯,采用实时时钟芯片DS12C887,使用1602液晶作为显示输出。
该系统走时精确,具有闹钟设置,时间模式切换,秒表以及可同时显示时间、日期等多种功能。
本文将详细介绍STC89C51 单片机和DS12C887 时钟芯片的基本原理,从软件和硬件电路的实现两大方面进行分析【关键词】STC89C51 单片机液晶屏时钟芯片蜂鸣器目录前言 (1)一、方案选型: (2)二、系统硬件设计 (3)2.1 51单片机最小系统设计 (3)2.2 电源供电电路设计 (3)2.3 串口通信电路设计 (4)2.4 时钟芯片电路设计 (4)2.5 LCD显示电路设计 (6)2.6 报警电路设计 (6)2.7 键控电路设计 (6)三、系统软件设计 (7)3.1 系统程序流程图设计 (7)3.2 系统程序设计(见附录) (9)四、总结 (9)4.1 作品功能、特色 (9)4.2 综合设计的体会 (9)参考文献 (11)附录 (12)前言随着科学技术的不断发展 , 人们对时间计量的要求越来越高。
在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。
本作品是以STC89C51单片机作为主控芯片,使用12MHZ的晶振,使用专用时钟日历芯片DS12C887产生时间信息,时间精确。
软件部分以C语言为主体,用1602LCD液晶屏显示输出信息,输出信息量多,更直观、人性化。
该时钟可实现人机交互,可通过提供的键盘对其进行调整。
系统具有以下功能:年、月、日、时、分、秒显示;12 小时/24小时模式切换,在12小时模式中,用AM和PM区分上午和下午;秒表功能;整点闹铃和报时功能,且闹钟可设置多组。
基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。
本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。
51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。
本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。
本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。
接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。
将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。
软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。
本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。
通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。
2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。
它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。
51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。
51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。
其存储器分为程序存储器(ROM)和数据存储器(RAM)。
程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。
51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。
51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。
摘要这个设计时基于AT89C2051设计的电子时钟,通过对硬件资源和软件的编写,初步了解设计的思路以及实现过程。
电子闹钟是采用电子电路实现对时、分、秒进行数字显示的装置,广泛应用于个人家庭、医院、车站、码头、办公室等公共场所,成为人们日常生活中不可缺少的必需品。
本设计基于单片机技术原理,以AT89SC2051作为核心控制器,通过硬件电路的制作及软件程序的编制,设计制作了一种利用四位LED数码管动态扫描显示时间的电子闹钟系统。
整个电子闹钟系统主要由时间显示模块、时间设置、闹铃模块、闹钟响应模块。
可实现时间显示、时间调整、闹钟设置和整点闹铃功能,具有制作简单、调整方便、稳定性好、便于扩展等特点。
电子时钟还通过对比实际的数字电子时钟,来校正和调整,从而找出误差的来源,尽可能的减少误差,是系统可以达到实际数字电子时钟允许的误差范围内。
关键词:单片机AT89SC2051、电子闹钟、LED动态显示目录摘要 (I)1.引言 (1)2 系统设计 (1)2.1设计要求 (1)2.2总设计方案 (1)2.2.1 系统实现 (2)3系统硬件电路设计 (2)3.1时钟电路设计 (3)3.2显示模块的设计 (4)3.3按键模块的设计 (5)3.4复位电路设计 (5)3.5闹铃的设计 (6)3.6发光二极管闪烁电路设计 (6)4 软件设计 (7)4.1程序流程 (7)4.1.1主程序 (8)4.1.2 时钟走时模块 (9)4.1.3时间设置模块 (10)4.1.4闹钟设置模块 (11)4.1.5 奏乐模块 (11)5 系统测试 (15)5.1硬件调试 (15)5.2软件调试 (15)6 结论 (15)附录 (15)附录1器件清单 (15)附录2调试仪器 (16)附录3原理图和PCB图 (16)附录4实物 ............................................... 错误!未定义书签。
附录5程序清单 ........................................... 错误!未定义书签。
基于51单片机的电子时钟设计51单片机是一种广泛应用于嵌入式系统的微控制器,由于其性能稳定、易于编程和成本相对较低的特点,被广泛应用于各种电子设备中。
在现代社会,电子时钟已经成为人们日常生活中不可或缺的工具。
随着科技的不断发展,电子时钟在功能和外观上都得到了极大的提升,如今的电子时钟不仅可以显示时间,还能设置闹钟、定时、显示温湿度等功能。
本文通过对51单片机的应用和实践,设计了一款功能丰富的电子时钟,旨在探讨如何利用51单片机实现电子时钟的设计与制作过程。
首先,我们将介绍51单片机的基本原理和特点。
51单片机是一种8位微控制器,由Intel公司于1980年推出,至今已有数十年的历史。
它采用哈佛结构,具有较高的工作速度和稳定性,适合用于各种嵌入式系统。
51单片机的指令系统简单,易于学习和掌握,因此被广泛用于各种嵌入式应用中。
除此之外,51单片机的外围设备丰富,可以通过外部扩展模块实现各种功能,如串口通信、定时器、数模转换等,这也为我们设计电子时钟提供了便利。
其次,我们将详细介绍基于51单片机的电子时钟的设计和实现过程。
电子时钟主要由时钟模块、显示模块、闹钟模块等部分组成,通过合理的接线和程序设计实现各种功能。
首先,我们设计时钟模块,通过外部晶振产生时钟信号,并利用51单片机的定时器模块实现时间的精确计算和显示。
同时,我们还设计了显示模块,采用数码管或液晶屏显示时间和日期信息,通过数字或字符的组合,使信息直观清晰。
此外,闹钟模块也是电子时钟的重要功能之一,我们可以设置闹钟时间,并在设定时间触发闹钟功能,提醒用户。
通过合理的程序设计,我们可以实现电子时钟的各种功能,并提升用户体验。
最后,我们将讨论基于51单片机的电子时钟在实际生活中的应用前景和发展趋势。
随着智能家居的快速发展,电子时钟作为家庭必备的电子设备,其功能和外观需求也在不断提升。
未来,基于51单片机的电子时钟将会更加智能化,可以与手机、电视等智能设备联动,实现更多个性化的功能。
课程设计(论文)任务书信息工程学院信息工程专业(2)班一、课程设计(论文)题目嵌入式课程设计二、课程设计(论文)工作自 2014 年 6 月 9 日起至2014年 6月15日止。
三、课程设计(论文) 地点: 5-402 单片机实验室四、课程设计(论文)内容要求:1.本课程设计的目的(1)使学生掌握单片机各功能模块的基本工作原理;(2)培养学生单片机应用系统的设计能力;(3)使学生能够较熟练地使用proteus工具完成单片机系统仿真。
(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求1)基本要求:(1)分析所设计系统中各功能模块的工作原理;(2)选用合适的器件(芯片);(3)提出系统的设计方案(要有系统电路原理图);(4)对所设计系统进行调试。
2)创新要求:在基本要求达到后,可进行创新设计,如改善单片机应用系统的性能。
3)课程设计论文编写要求(1)要按照书稿的规格打印撰写论文。
(2)论文包括目录(自动生成)、摘要、正文、小结、参考文献、附录等。
(3)论文装订按学校的统一要求完成。
4)答辩与评分标准:(1)完成原理分析:20分;(2)完成设计过程:30分;(3)完成调试:20分;(4)回答问题:20分;(5)格式规范性(10分)。
5)参考文献:(1)张齐.《单片机原理与嵌入式系统设计》电子工业出版社(2)周润景.《PROTUES入门实用教程》机械工业出版社(3)任向民.《微机接口技术实用教程》清华大学出版社(4)/view/a5a9ceebf8c75fbfc77db2be.html6)课程设计进度安排内容天数地点构思及收集资料1图书馆系统设计与调试 4 实验室撰写论文2图书馆、实验室学生签名:2014 年6 月9日课程设计(论文)评审意见(1)完成原理分析(20分):优()、良()、中()、一般()、差();(2)设计分析(30分):优()、良()、中()、一般()、差();(3)完成调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)格式规范性(10分):优()、良()、中()、一般()、差();评阅人:职称:2014 年6 月15 日目录摘要 (4)第1章设计要求 (5)1.1设计要求 (5)1.2设计内容 (5)1.3设计基本环境 (5)第2章设计方案和论证 (6)2.1总设计原理框图 (6)2.2设计方案选择 (7)第3章硬件电路 (8)3.1单片机的选择 (8)3.1.1 单片机内部原理分析 (8)3.1.2单片机的引脚及封装 (9)3.1.3单片机最小系统 (11)3.2 数码管显示工作原理 (11)3.3 8255A模块 (12)3.4时间调节模块 (13)3.4.1 时间设置 (13)3.4.2整点报时 (13)第4章软件调试 (14)4.1时间调节程序流程图 (14)4.2主程序流程图 (18)第5章仿真调试 (22)第6章总结与体会 (23)第7章参考文献 (23)摘要单片计算机即单片微型计算机。
(完整)基于51单片机电子时钟设计编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)基于51单片机电子时钟设计)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)基于51单片机电子时钟设计的全部内容。
基于51单片机的电子时钟设计摘要本电子时钟以STC89C52单片机作为主控芯片,采用DS12C887时钟芯片,使用1602液晶作为显示输出.该时钟走时精确,具有闹钟设置,以及可同时显示时间、日期等多种功能。
本文将详细介绍该电子时钟涉及到的一些基本原理,从硬件和软件两方面进行分析.【关键词】STC89C52单片机 DS12C887时钟芯片 1602液晶蜂鸣器目录一、绪论 (4)1.1 电子时钟功能 (4)1.2设计方案 (4)二、硬件设计 (4)2。
151单片机部分设计 (4)2.2 USB供电电路设计 (5)2.3 串行通信电路设计 (6)2.4 DS12C887时钟芯片电路的设计 (6)2。
5 1602LCD液晶屏显示电路设计 (7)2。
6蜂鸣器电路设计 (8)2。
7按键调整电路设计 (8)三、软件设计 (9)3.1系统程序流程图设计 (9)3。
2程序设计 (11)四、心得体会 (22)参考文献 (23)一、绪论1。
1电子时钟功能(1)在1602液晶上显示年、月、日、星期、时、分、秒,并且按秒实时更新显示。
(2)具有闹铃设定即到时报警功能,报警响起时按任意键可取消报警。
(3)能够使用实验板上的按键随时调节各个参数,四个有效键分别为功能选择键、数值增大键、数值减小键和闹钟查看键。
(4)每次有键按下时,蜂鸣器都以短“滴”声报警.(5)利用DS12C887自身掉电可继续走时的特性,该时钟可实现断电时间不停、再次上电时时间仍准确显示在液晶上的功能。
基于51系列单片机及DS1302时钟芯片的实时时钟仿真设计一、课程设计目的意义通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解并灵活运用。
二、实现目标本设计主要为实现一款可正常显示时钟/日历的实时电子时钟。
对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现电子时钟。
本设计应用AT89C52芯片作为核心,LCD显示屏,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。
三、硬件设计本设计采用具有32根I/O引脚的AT89C52单片机。
AT89C52单片机是一款低功耗,低电压,高性能CMOS 8位单片机,片内含4KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器(EPROM),器件采用CMOS工艺和ATMEI公司的高密度、非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-52兼容。
片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储器编程器来编程。
因此,AT89C52是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域。
AT89C52具有以下主要性能:1.4KB可改编程序Flash存储器;2.全静态工作:0——24Hz;3.128×8字节内部RAM;4.32个外部双向输入/输出(I/O)口;5.6个中断优先级; 2个16位可编程定时计数器;6.可编程串行通道;7.片内时钟振荡器。
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。
数字钟项目硬件总体设计说明书编制单位:侏罗纪工作室作者发布日期:2011-1-22审核人:批准人:目录1.引言 (1)1.1.编写目的: (1)1.2.背景 (1)1.3.定义 (2)1.4.参考资料 (2)2.总体设计 (3)2.1开发与运行环境 (3)2.2硬件功能描述 (3)2.3硬件结构 (3)3.硬件模块设计 (4)3.1.描述 (4)3.1.1.AT89C51单片机简介 (4)3.1.2. 键盘电路的设计 (5)3.1.3. 段码驱动电路 (5)3.1.4. 显示器的选择 (7)3.1.5. 蜂鸣器驱动电路 (8)3.2.功能 (8)4.嵌入式软件设计 (9)4.1.流程逻辑 (9)4.2.算法 (10)4.2.1. 中断定时器的设置 (26)4.2.2. 闹钟子函数 (27)4.2.1. 计时函数 (28)4.2.2. 键盘扫描函数 (29)4.2.3. 时间和闹钟的设置 (30)5.经验总结 (31)6.附录 (37)1.引言1.1.编写目的:20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间等造成的。
而钟表的数字化给人们生产生活带来了极大的方便。
数字钟是通过数字电路实现时,分,秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烤箱、通断动力设备、甚至各种定时电气的自动启用等。
XXXXXXX毕业论文摘要本设计是基于51系列的单片机进行的实时日历和时钟显示设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。
在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。
实时日历和时钟显示的设计过程在硬件与软件方面进行同步设计。
硬件部分主要由AT89S52单片机,LED显示电路,以及调时按键电路等组成,系统通过LED显示数据,所以具有人性化的操作和直观的显示效果。
软件方面主要包括时钟程序、键盘程序,显示程序等。
本系统以单片机的汇编语言进行软件设计,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及日期显示功能。
所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。
关键词:AT89S52; DS1302; LEDAbstractThis design is based on 51 series monolithic integrated circuits of a real-time calendar and the clock shows the design, you can show how and when a week, has may adjust the date and time functions. in the design for monolithic integrated circuits, and peripheral to expand the basic theories of knowledge was fairly comprehensive preparation.Real-time calendar and the clock shows the design in hardware and software design of hardware that is synchronized. the led display at89s52 monolithic integrated circuits, and when should the electrical circuits, the system through the led display data so be humanized operate and intuitive that effect. including the software application programs, the keyboard, the program, etc. This system to monolithic integrated circuits of the assembly language for easily developing software design, and changes, software design to use modular design, the programming logical relationship with more and more so as to realize the time and date display the functions. all procedures in writing after wave of debugging the software and make no question of the proteus software embedded monolithic integrated circuits.Key Words:AT89S52; DS1302; LED目录1概述 (1)2设计方案论证 (2)2.1功能要求 (2)2.2方案确定 (2)2.2.1单片机芯片的选择方案和论证 (2)2.2.2显示模块选择方案和论证 (3)2.2.3时钟芯片的选择方案和论证 (3)2.2.4电路设计最终方案确定 (3)3主控制器和外围器件 (4)3.1AT89S52单片机 (4)3.2DS1302时钟芯片 (4)3.2.1DS1302芯片介绍 (4)3.2.2DS1302的应用 (8)3.3数码管LED (8)3.4译码器74HC138 (9)3.5锁存器74LS244 (9)4硬件设计 (10)4.1电路设计框图 (10)4.2系统概述 (10)4.3电源设计 (10)4.4单片机的复位电路 (11)4.5单片机系统的晶振电路 (11)4.6主电路设计 (12)5软件设计 (13)5.1主程序设计 (13)5.2键盘子程序设计 (14)5.3日历时钟子程序设计 (16)5.4显示子程序设计 (18)6系统调试 (18)6.1软件调试 (18)6.2硬件调试 (19)7结论 (20)致谢 (22)参考文献 (23)附录 (24)附录Ⅰ硬件电路图 (24)附录Ⅱ主程序源代码 (25)附录Ⅲ外文翻译原文.......................................................... 错误!未定义书签。
目录摘要 (1)第一章51单片机简介 (2)1.151系列单片机每部结构 (2)1.251单片机的封装及引脚 (2)第二章实时时钟的设计方案 (4)2.1单片机最先系统 (4)2.28255A模块 (4)2.3数码管显示模块 (5)2.4时间调节模块 (6)2.5整点报时 (7)第三章实时时钟的程序设计 (8)3.1时间调节程序流程图 (8)3.2主程序流程图 (9)第四章小结 (10)参考文献 (11)附录1 (12)附录2 (13)摘要单片计算机即单片微型计算机。
由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
通过本子课程设计掌握单片机的基本原理,加深对课堂知识的理解,从而达到学习、设计、开发单片机软硬的能力。
本设计主要设计了一个基于AT89C52单片机的电子时钟,由定时器定时并在数码管上显示相应的时间,通过中断和按键扫描实现对时间的停止、启动和设置调整。
应用Proteus软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
关键字:单片机;子时钟;键盘控制。
第一章51单片机简介单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等,比方说用来控制路口红绿灯的亮灭公交车报站。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
1.1 51系列单片机每部结构51系列单片机中主要有8031、8051、8751三种机型,它们的指令系统和芯片引脚完全兼容,只是片内程序存储器(ROM)有所不同,其中8031片内没有ROM,8051片内有4k的掩膜ROM,8751片内有4k的紫外线可擦除ROM。
武汉大学电子信息学院电子系统综合设计课程论文基于51单片机的数字钟设计目录1 作品的背景与意义 12 功能指标设计 13 作品方案设计 13.1总体方案的选择 13.1.1方案一:基于单片机的数字钟设计 23.1.1方案二:基于数电实验的数字钟设计 33.1.2两种方案的比较................................................................... . (3)3.2控制方案比较 33.3显示方案比较 33.4单片机理论知识介绍 43.4.1单片机型号................................................................... . (5)3.4.2硬件电路平台................................................................... (6)3.4.3内部时钟电路................................................................... .. (7)3.4.4复位电路................................................................... .. (7)3.4.5按键部分................................................................... . (8)4 硬件设计94.1显示模块电路图95 软件设计115.1主程序流程图115.2中断服务以及显示 126 系统测试136.1测试环境136.2测试步骤136.2.1硬件测试6.2.2软件测试1.连接单片机和计算机串接................................................................... ................13 6.2.3实施过程................................................................... ..................................................................... . (14)6.3测试结果187 实验总结 (18)7.1代码编写过程中出现问题................................................................... . (18)7.2整个实验过程的体会................................................................... (19)7.3实验误差分析。
51单⽚机实时时间显⽰及调节程序代码由3个⽂件组成,main.c,DS1302.c,DS1302.h。
1. main.c/************************************************************************************** 实验现象:实时时间显⽰及调节* 接线说明:动态数码管段选接P0,位选接P2^2,3,4⼝,k1、k2、k3、k4接P3^1、0、2、3,beep接P1^5***************************************************************************************/#include "reg52.h"//此⽂件中定义了单⽚机的⼀些特殊功能寄存器#include "ds1302.h"typedef unsigned int u16; //对数据类型进⾏声明定义typedef unsigned char u8;sbit LSA = P2 ^ 2;sbit LSB = P2 ^ 3;sbit LSC = P2 ^ 4;sbit k1 = P3 ^ 1;sbit k2 = P3 ^ 0;sbit k3 = P3 ^ 2;sbit k4 = P3 ^ 3;sbit beep = P1 ^ 5;char num = 0;u8 DisplayData[8];u8 code smgduan[20] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00, 0x40}; //显⽰0~F,⽆,'-'的值u8 clocks, minutes, seconds;u8 stopSwitch = 0;u8 beepSwitch = 0;/******************************************************************************** 函数名 : delay()* 函数功能 : 延时函数,i=1时,⼤约延时10us*******************************************************************************/void delay(u16 i){while (i--);}/******************************************************************************** 函数名 : DS1302WriteTime()* 函数功能 : 时分秒写⼊函数* 输⼊ : 时、分、秒* 输出 : ⽆*******************************************************************************/void DS1302WriteTime(u8 clocks, u8 minutes, u8 seconds){u8 clocks_16, minutes_16, seconds_16;clocks_16 = (clocks / 10 * 16) | (clocks % 10);minutes_16 = (minutes / 10 * 16) | (minutes % 10);seconds_16 = (seconds / 10 * 16) | (seconds % 10);Ds1302Write(0x8E, 0X00); //禁⽌写保护,就是关闭写保护功能Ds1302Write(WRITE_RTC_ADDR[2], clocks_16);Ds1302Write(WRITE_RTC_ADDR[1], minutes_16);Ds1302Write(WRITE_RTC_ADDR[0], seconds_16);Ds1302Write(0x8E, 0x80); //打开写保护功能}/******************************************************************************** 函数名 : getTime()* 函数功能 : 时间读取处理转换函数* 输⼊ : ⽆* 输出 : ⽆*******************************************************************************/void getTime(){if (stopSwitch){DS1302WriteTime(clocks, minutes, seconds);}else{Ds1302ReadTime();clocks = (TIME[2] / 16 * 10) + (TIME[2] % 16);minutes = (TIME[1] / 16 * 10) + (TIME[1] % 16);seconds = (TIME[0] / 16 * 10) + (TIME[0] % 16);}}/******************************************************************************* * 函数名 : DigDisplay* 函数功能 : 数码管显⽰函数* 参数 : ord为数码管次序,ch为该数码管显⽰符号*******************************************************************************/ void DigDisplay(u8 ord, u8 ch){switch (ord) //位选,选择点亮的数码管,{case (0):LSA = 1;LSB = 1;LSC = 1;break; //显⽰第0位case (1):LSA = 0;LSB = 1;LSC = 1;break; //显⽰第1位case (2):LSA = 1;LSB = 0;LSC = 1;break; //显⽰第2位case (3):LSA = 0;LSB = 0;LSC = 1;break; //显⽰第3位case (4):LSA = 1;LSB = 1;LSC = 0;break; //显⽰第4位case (5):LSA = 0;LSB = 1;LSC = 0;break; //显⽰第5位case (6):LSA = 1;LSB = 0;LSC = 0;break; //显⽰第6位case (7):LSA = 0;LSB = 0;LSC = 0;break; //显⽰第7位}P0 = smgduan[ch]; //发送段码if (beepSwitch)beep = ~beep;}/******************************************************************************* * 函数名 : timeDisplay* 函数功能 : 将时分秒显⽰在数码管上* 输⼊ : ⽆* 输出 : ⽆*******************************************************************************/ void timeDisplay(){u8 n = 0;u8 dig[10];getTime();dig[0] = clocks / 10;dig[1] = clocks % 10;dig[2] = 17;dig[3] = minutes / 10;dig[4] = minutes % 10;dig[6] = seconds / 10;dig[7] = seconds % 10;for (n = 0; n < 8; n++){DigDisplay(n, dig[n]);delay(10);DigDisplay(n, 16);}}/******************************************************************************* * 函数名 : keypros* 函数功能 : 按键处理* 输⼊ : ⽆* 输出 : ⽆*******************************************************************************/ void keypros(){u16 delayTimes = 10;//按键K1if (k1 == 0) //检测按键K1是否按下{while (delayTimes--)timeDisplay(); //消除抖动⼀般⼤约10msif (k1 == 0) //再次判断按键是否按下{if (++clocks == 24){clocks = 0;}DS1302WriteTime(clocks, minutes, seconds);}while (!k1)timeDisplay(); //检测按键是否松开}//按键K2if (k2 == 0) //检测按键是否按下{while (delayTimes--)timeDisplay(); //消除抖动⼀般⼤约10msif (k2 == 0) //再次判断按键是否按下{if (++minutes == 60){minutes = 0;}DS1302WriteTime(clocks, minutes, seconds);}while (!k2)timeDisplay(); //检测按键是否松开}//按键K3if (k3 == 0) //检测按键是否按下{while (delayTimes--)timeDisplay(); //消除抖动⼀般⼤约10msif (k3 == 0) //再次判断按键是否按下{if (++seconds == 60){seconds = 0;}DS1302WriteTime(clocks, minutes, seconds);}while (!k3)timeDisplay(); //检测按键是否松开}//按键K4if (k4 == 0) //检测按键是否按下{while (delayTimes--)timeDisplay(); //消除抖动⼀般⼤约10msif (k4 == 0) //再次判断按键是否按下{stopSwitch = (stopSwitch + 1) % 2;}while (!k4)timeDisplay(); //检测按键是否松开}}/******************************************************************************* * 函数名 : main* 函数功能 : 主函数* 输出 : ⽆*******************************************************************************/void main(){Ds1302Init(); //初始化while (1){keypros(); //按键处理timeDisplay(); //显⽰时间//蜂鸣器整点响应if (minutes == 59 && seconds == 59){beepSwitch = 1;}if (beepSwitch == 1){if (minutes == 0 && seconds == 3){beepSwitch = 0;}}}}2. ds1302.h#ifndef __DS1302_H_#define __DS1302_H_//---包含头⽂件---//#include<reg52.h>#include<intrins.h>//---重定义关键词---//#ifndef uchar#define uchar unsigned char#endif#ifndef uint#define uint unsigned int#endif//---定义ds1302使⽤的IO⼝---//sbit DSIO=P3^4;sbit RST=P3^5;sbit SCLK=P3^6;//---定义全局函数---//void Ds1302Write(uchar addr, uchar dat);uchar Ds1302Read(uchar addr);void Ds1302Init();void Ds1302ReadTime();//---加⼊全局变量--//extern uchar TIME[7]; //加⼊全局变量extern uchar code WRITE_RTC_ADDR[7];#endif3. ds1302.c#include"ds1302.h"//---DS1302写⼊和读取时分秒的地址命令---////---秒分时⽇⽉周年最低位读写位;-------//uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //---DS1302时钟初始化2016年5⽉7⽇星期六12点00分00秒。
目录摘要 (1)第一章51单片机简介 (2)1.151系列单片机每部结构 (2)1.251单片机的封装及引脚 (2)第二章实时时钟的设计方案 (4)2.1单片机最先系统 (4)2.28255A模块 (4)2.3数码管显示模块 (5)2.4时间调节模块 (6)2.5整点报时 (7)第三章实时时钟的程序设计 (8)3.1时间调节程序流程图 (8)3.2主程序流程图 (9)第四章小结 (10)参考文献 (11)附录1 (12)附录2 (13)摘要单片计算机即单片微型计算机。
由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
通过本子课程设计掌握单片机的基本原理,加深对课堂知识的理解,从而达到学习、设计、开发单片机软硬的能力。
本设计主要设计了一个基于AT89C52单片机的电子时钟,由定时器定时并在数码管上显示相应的时间,通过中断和按键扫描实现对时间的停止、启动和设置调整。
应用Proteus软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
关键字:单片机;子时钟;键盘控制。
第一章51单片机简介单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等,比方说用来控制路口红绿灯的亮灭公交车报站。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
1.1 51系列单片机每部结构51系列单片机中主要有8031、8051、8751三种机型,它们的指令系统和芯片引脚完全兼容,只是片内程序存储器(ROM)有所不同,其中8031片内没有ROM,8051片内有4k的掩膜ROM,8751片内有4k的紫外线可擦除ROM。
其主要资源有:8位CPU、片内带震荡器及时钟电路、128B片内数据存储器、4K片内程序存储器(8031无)、21B特殊功能寄存器、4个8位的IO口、一个全双工串行接口、两个16位定时器、中断系统有5个中断源、111条指令。
其内部结构如图1.1所示。
图1.1 单片机内部结构1.2 51单片机的封装及引脚在封装上,51单片机有常用的三种封装:PQFP-44、DIP-40和PLCC-44。
我们学习中最常见的封装为DIP-40型的封装,其封装图如图1.2所示。
该封装的单片机共有40个引脚,其中可分为端口线电源线和控制线三类。
端口线有32条,为4个并行的8为IO端口,由于地址或数据的传送,其中P0口为开漏输出,在作为通用IO使用时需要加上上拉电阻。
在外部扩展时分时提供系统的数据总线和地址总线;P2口可作为通用IO接口和外部扩展时的地址总线;P1口只作为通用IO口使用;P3口作为通用IO口外,还附有第二功能,如表1.1所示。
表1.1P3口的位第二功能P3.0 RXD(串行口输入)P3.1 TXD(串行口输出)P3.2 INT0(外部中断0输入)P3.3 INT1(外部中断1输入)P3.4 T0(定时器/计数器0的外部输入)P3.5 T1(定时器/计数器1的外部输入)P3.6 WR(片外数据存储器写允许)P3.7 RD(片外数据存储器读允许)电源线有两根:VCC为+5V电源线,GND为接地。
控制线有6根,其中EA为片外存储器访问选择线;PSEN为片外ROM选通线;RST为复位线;XTAL1和XTAL2为片内震荡电路输入线;ALE为地址锁存允许线。
图1.2 单片机引脚图第二章实时时钟的设计方案本课设制作的实时时钟由单片机外扩一片8255A芯片,用8255A的PA口和PB口控制6位8段共阳数码管显示时钟,并由定时器控制时钟精准的计时,中断和按键扫描共同完成对时间的初始化、启停和调整。
整体完成实时时钟的设计,精准的计时。
整体仿真原理图见附录1。
2.1单片机最先系统单片机最小系统就是能使单片机工作的最少的器件构成的系统。
对于本课设所使用的AT89C52来讲,其最小系统为AT89C52单片机芯片、时钟电路和复位电路,器仿真原理图如图2.1所示。
图2.1单片机最小系统2.28255A模块8255A是一种可编程的I/O接口芯片,可以与MCS-51系统单片机以及外设直接相连,广泛用作外部并行I/O扩展接口。
8255A内部由PA、PB、PC三个8位可编程双向I/O口,A组控制器和B组控制器,数据缓冲器及读写控制逻辑四部分电路组成。
数据总线(8条):D0~D7,用于传送CPU和8255A间的数据、命令和状态字。
控制总线(6条):RESET:复位线,高电平有效。
/CS:片选线,低电平有效。
/RD、/WR:/RD为读命令线,/WR为写命令线,皆为低电平有效。
A0、A1:地址输入线:用于选中PA、PB、PC口和控制寄存器中哪一个工作。
本次课设中8255A 的设计如图2.2。
图2.2 8255A连接图其中DO~D7连接在单片机的外扩数据总线P0口上,WR和RD分别接在单片机的WR和RD口,RESET接在单片机RST上,CS、A1和A0分别接在P2.7、P2.6和P2.5上,从而8255A的A口地址可为0000H,B口地址可为2000H,C口地址可为4000H 控制口地址可为6000H。
2.3数码管显示模块本课设采用8段共阳数码管,其中abcdefg七段构成日字形dp段位小数点位,当阳极那端为高电平时相应的段为低电平则该段点亮,从而显示不同的数字和符号。
本次利用8255A控制数码管,其连接图如图2.3所示。
图2.3 数码管显示原理图2.4时间调节模块时间调节时利用中断和按键扫描来实现的,其连接图如图2.4所示。
图2.4 按键连接图其中,定时器启停有外部中断0控制,设置时分秒由外部中断1控制,而调时间时的加减是由按键连接P1.0和P1.1口。
2.5整点报时利用蜂鸣器实现整点报时,仿真原理图如图2.5所示。
图2.5 蜂鸣器控制第三章实时时钟的程序设计程序设计中主要包括初始化,定时器0的控制,中断和按键扫描,蜂鸣器控制等。
程序清单见附录2。
3.1时间调节程序流程图时间调节程序流程图如图3.1所示。
图3.1 时间调节程序流程图3.2主程序流程图主程序流程图如图3.2所示。
否否图3.2主程序流程图第四章小结本次我和本组另外一名同学完成了这次单片机课程设计课题中的实时时钟设计,通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。
损耗了过多的内存资源。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的实时时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。
最后,感谢老师一个学期来对我们的教育,正是由于老师的精彩的课程和对我们严格的要求,使得我的课程设计能够顺利的完成,同时在课程设计过程中,我们巩固和学习了我们的单片机知识。
相信这对我以后的课程设计和毕业设计乃至今后的工作将会有很大的帮助!参考文献(1)张齐.《单片机原理与嵌入式系统设计》电子工业出版社(2)周润景.《PROTUES入门实用教程》机械工业出版社(3)任向民.《微机接口技术实用教程》清华大学出版社(4)/view/a5a9ceebf8c75fbfc77db2be.html#include<reg52.h>#include<absacc.h>#define PA XBYTE[0x0000]#define PB XBYTE[0x2000]#define PC XBYTE[0x4000]#define CMD XBYTE[0x6000]sbit up=P1^0;sbit down=P1^1;sbit FMQ=P1^3;bit flag_TR=0;unsigned char flag_SET=0,shi=0,fen=0,miao=0,temp=0,i; unsigned char shu[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };void init(){IE=0x87;TMOD=0x01;TH0=0x4c;TL0=0X00;TCON=0x05;CMD=0x80;}void delay(unsigned int m){unsigned char count;while(m!=0){for(count=0;count<239;count++){}m--;}}void display(unsigned char shi,unsigned char fen,unsigned char miao) {unsigned char shi0,shi1,fen0,fen1,miao0,miao1;shi0=shi/10; shi1=shi%10;fen0=fen/10; fen1=fen%10;miao0=miao/10; miao1=miao%10;PA=0x80;PB=shu[shi0];delay(5);PA=0x40;if(flag_SET==3&&!flag_TR)PB=shu[shi1]&0x7f;elsePB=shu[shi1];delay(5);PA=0x20;PB=shu[fen0];delay(5);PA=0x10;if(flag_SET==2&&!flag_TR)PB=shu[fen1]&0x7f;elsePB=shu[fen1];delay(5);PA=0x08;PB=shu[miao0];delay(5);PA=0x04;if(flag_SET==1&&!flag_TR)PB=shu[miao1]&0x7f;elsePB=shu[miao1];delay(5);}void main(){init();while(1){display(shi,fen,miao);if(flag_SET){TR0=0;if(flag_SET==1&&up==0){while(up==0);miao++;if(miao==60)miao=0;}if(flag_SET==1&&down==0){while(down==0);miao--;if(miao>60)miao=59;}if(flag_SET==2&&up==0){while(up==0);fen++;if(fen==60)fen=0;}if(flag_SET==2&&down==0){while(down==0);fen--;if(fen>60)fen=59;}if(flag_SET==3&&up==0){while(up==0);shi++;if(shi==24)shi=0;}if(flag_SET==3&&down==0){while(down==0);shi--;if(shi>24)shi=23;}}if(flag_TR==1)TR0=1;elseTR0=0;if(flag_TR==1&&fen==0&&miao==0){for(i=0;i<shi;i++){display(shi,fen,miao);FMQ=0;delay(300);FMQ=1;delay(300);}while(miao==0);}}}void timer0() interrupt 1{EA=0;TH0=0x4c;TL0=0x00;flag_SET=0;temp++;if(temp==20){temp=0;miao++;}if(miao==60){miao=0;fen++;}if(fen==60){fen=0;shi++;}if(shi==24){shi=0;}EA=1;}void timer_run() interrupt 0 {EA=0;flag_TR=!flag_TR;EA=1;}void set_time() interrupt 2 {EA=0;if(!flag_TR)flag_SET++;flag_SET%=4;EA=1;}。