基于AT89c52单片机电子万年历设计(带程序)

合集下载

基于89C52的电子万年历

基于89C52的电子万年历

目录1设计要求 (2)2方案论证与对比 (2)2.1液晶显示器控制方式选择 (2)2.2并行接口动态显示电路选择 (2)2.3LCD液晶显示器的接口方法选择 (3)2.4液晶显示器限流电阻选择 (4)3系统硬件电路的设计 (5)3.1主控模块AT89C52 (5)3.2显示模块电路设计 (6)4系统软件设计 (7)4.1系统软件概述 (7)4.2主要子程序设计 (8)4.2.1 时钟中断服务子程序设计 (8)4.2.2时间调整子程序设计 (9)4.2.3 判断闰年子程序设计 (9)4.2.4 精度分析分析与计算 (10)4.2.5 第一次初值的设置 (10)4.2.6 重载初值的方法 (10)5系统仿真与测试 (11)5.1系统仿真 (11)5.2功能测试 (11)6总结 (12)参考文献 (13)1设计要求本课题以AT89C52单片机为核心,设计并制作出智能LCD电子钟,具有以下基本功能:能进行时间、年份、日期、星期显示;能区分是否闰年;能检测室温并显示。

扩展功能部分可以通过控制按键使时间暂停、可以调整校正时间并通过按键切换轮流显示时间、年份、日期、星期。

2方案论证与对比2.1液晶显示器控制方式选择采用LCD液晶显示,具有超精致影像画质、十足平面显示、节省空间、节省能源等优点,但按控制方式不同,LCD可分为被动矩阵式LCD及主动矩阵式LCD两种。

可根据不同需要采用不同的方式。

方案一被动矩阵式LCD被动矩阵式LCD在亮度及可视角方面受到较大的限制,反应速度也较慢。

由于画面质量方面的问题,使得这种显示设备不利于发展为桌面型显示器,但成本低廉。

方案二主动矩阵式LCD目前应用比较广泛的主动矩阵式LCD,也称TFT-LCD(Thin Film Transistor-LCD,薄膜晶体管LCD)。

TFT液晶显示器是在画面中的每个像素内建晶体管,可使亮度更明亮、色彩更丰富及更宽广的可视面积。

与CRT显示器相比,LCD显示器的平面显示技术体现为较少的零件、占据较少的桌面及耗电量较小,但CRT技术较为稳定成熟。

基于AT89C52的万年历挂钟的设计

基于AT89C52的万年历挂钟的设计

基于AT89C52的万年历挂钟的设计摘要:本文对万年历挂钟系统的总体结构和硬件、软件设计进行了阐述,采用AT89C52作为系统控制核心,并选用实时时钟芯片SD2303和温度传感器DS18B20实现时间和温度的检测,并用7段数码管显示出来。

关键词:万年历AT89C52 实时时钟随着现代社会工作和生活节奏的加快,及时准确地把握时间变得越来越重要。

对于个人使用来说,手表、手机等可以提供准确的时间信息,但是,在居家生活或室外大型活动中,万年历挂钟就显得特别实用。

1 系统总体设计在实际生活中,万年历应具有显示和调整时间、定时闹钟、显示温度等基本功能,还应有掉电运行和人工复位等功能。

2 硬件设计按照图1设计的系统结构,采用单片机AT89C52作为控制器,并使用实时时钟芯片SD2303、温度传感器芯片DS18B20、7段数码管以及独立键盘等元件和功能模块,来实现万年历挂钟系统。

系统控制面板如图所示。

AT89C52是一个低电压高性能的CMOS 8位单片机,片内含8kB 的可反复擦写的Flash只读程序存储器和256B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,在电子行业中有着广泛的应用。

SD2303是一种具有内置晶振、支持两线串行接口的高精度实时时钟芯片。

通过I2C串行接口,由单片机AT89C52向实时时钟芯片SD2303寄存器读写数据。

数字化温度传感器DS18B20采用单总线协议,与单片机连接只需一个I/O端口,读写信息时仅需要一根口线,这种“一线总线”的传输方式,提高了系统的抗干扰性。

同时数据传输不需要任何外部元件,直接将温度转换为数字信号,以16位数字码方式串行输出,大大简化了传感器与单片机的接口。

时间和温度显示部分使用15个7段数码管来显示年月日时分秒以及星期和温度。

显示电路采用4位锁存、4线~16线译码器CD4514来控制数码管的显示。

音乐万年历基于at89s52带完整程序

音乐万年历基于at89s52带完整程序

简易数字时钟的设计(完整程序附在最后)摘要:本电子钟利用单片机AT89S52控制日历时钟芯片DS12C887实现多功能数字时钟。

该时钟由单片机控制日历时钟芯片实现年份、月份、日期、时间信息的获取,并且通过LCD12864对年份、月份、日期、星期、节日、时间信息进行显示,可以对年份、月份、日期、星期、时间进行修改,具有掉电后时间信息不丢失的功能。

另外具有闹钟功能和具有整点报时功能,可设置闹铃时间,当闹铃时间到时,进行闹铃,通过任意按键可解除闹铃;当整点到来,鸣奏音乐。

采用18B20进行温度测控,超出温度阈值将会进行报警。

我们将程序固化到单片机中,并且设有程序下载口,可以方便对程序进行升级。

关键词:多功能数字时钟,单片机AT89S52,日历时钟芯片DS12C887,闹铃,整点报时。

1 设计要求基本设计要求(1)单片机控制日历时钟芯片实现年份、月份、日期、星期、时间信息的获取。

(2)在LCD上对年份、月份、日期、星期、时间、信息进行显示。

(2)可以对年份、月份、日期、星期、时间进行修改。

(3)具有掉电后时间信息不丢失的功能。

发挥部分(1)具有闹钟功能。

可设置闹铃时间,当闹铃时间到时,进行闹铃。

通过按键可解除闹铃。

(2)具有整点报时功能。

(3)程序固化到单片机中,并且可直接进行程序下载和更新。

2 总体设计2.1 系统组成及工作原理本电子钟由单片机、定时、显示、按键、定时提醒、ISP在线编程6部分组成。

产品以AT89S52单片机、DS12C887时钟芯片为核心,显示部分采用LCD12864,使用6个按键、1蜂鸣器和一个温度传感器,加上ISP在线编程模块。

DS12C887时钟芯片产生时钟信号和存放闹铃数据,其精度和可靠性高,在单片机掉电状态下能正确走时、保存闹铃数据长达10年,故能实现停电重起后定时设计不变的关键设计指标。

AT89S52单片机实时获取DS12C887的时间和闹铃数据,驱动LCD和蜂鸣器。

显示部分的LCD有高亮度,低成本等诸多优点。

基于STC89C52液晶显示数字万年历设计报告

基于STC89C52液晶显示数字万年历设计报告

西安邮电学院开放实验设计报告系部名称电子与信息工程系学生姓名专业名称电子与信息工程班级实习时间基于STC89C52液晶显示数字万年历1.引言在51单片机应用系统中,常常需要记录实时的时间信息。

比如,在数据采集时,对默写重要的事件常常需要记录下准确的发生事件;又比如在银行营业大厅中使用的利率或汇率显示屏,上面除了显示利率或者汇率等数据外,还需要显示实时的时间信息,其中包括年,月,日,星期,时间等。

下面我们利用STC89C52和液晶显示器LCD1602和实时时钟芯片DS1302来实现实时时钟并利用液晶显示器进行显示。

1. 单片机STC89C52STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

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

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

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

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8 位微控制器8K字节在系统可编程Flash。

2. 实时时钟芯片DS1302DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

基于单片机的电子万年历的设计与制作

基于单片机的电子万年历的设计与制作

郑州航空工业管理学院毕业论文(设计)题目基于单片机的电子万年历的设计与制作二О一三年五月二十三日摘要单片机应用技术飞速发展,从导弹的导航装置到飞机上各种仪表的控制,从计算机的网络通讯与数据传输到工业自动化过程的实时控制和数据处理,以及生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。

单片机是集CPU、RAM、ROM 、定时、计数和多种接口于一体的微控制器。

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

本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,系统由主控制器STC89C52为控制中心,DS12C887产生时钟,DS18B20产生温度,12864液晶显示对日期、时间等进行显示,按键可以设置时间、闹钟等。

能实现时钟、日历、时间和温度显示的功能。

今后万年历将会朝着精准度更高,外观更加美丽,价格更加实惠的方向发展,并且将会出现更多的辅助功能。

关键词:单片机,农历查询,万年历,温度显示ABSTRACTAs the rapid development of Single-chip Microcomputer Application technology, from the navigation device of missile to the various instruments on the aircraft control and from computer communication network and data transmission to industrial real-time automation process control and data processing, as well as the extensive use of the smart card and electronic pets in live, All of this is inseparable from the microcontroller. SCM is set to CPU, RAM, ROM, timing, counting and multiple interfaces in one microcontroller. It has the advantages of small volume, low cost, strong function, widely used in smart industries, and industrial automation.This paper designed a electronic clock which can achieve calendar function based on microcontroller, the system consists of main controller STC89C52, clock circuit, display circuit, DS12C887circuit, and a reset circuit components,the main control system as the control center, DS12C887 generates a clock, DS18B20 generates temperature, a 12864 LCD display the date and time, the key can set the time, alarm clock, achieved the clock calendar and time display function.In the future, the calendar will be more accurate, look more beautiful; more affordable prices of the direction of development, and will appear more auxiliary function.Keywords: Monolithic single-chip,lunar calendar demand, perpetual calendars display temperature目录摘要 (I)ABSTRACT (II)第1章绪论 (1)1.1 课题的背景 (1)1.2 电子万年历的发展 (1)1.3 电子万年历设计 (1)第2章设计要求与方案论证 (3)2.1 设计要求 (3)2.2 方案论证 (3)2.2.1 控制部分方案设计 .......................................... .32.2.2 显示部分的设计 ........................................... ..42.2.3 单片机芯片的选择方案和论证 (4)2.2.4 时钟芯片的选择方案和论证 (4)2.2.5 温度传感器的选择方案和论证 (5)2.2.6 电源的选择方案 (5)第3章硬件设计 (6)3.1 电路的设计框图 (6)3.2 主要单元电路的设计 (6)3.2.1 单片机主控电路设计 (6)3.2.2 时钟振荡电路设计 (8)3.2.3 复位电路设计 (9)3.2.4 温度传感器电路设计 (9)3.2.5 时钟电路设计 (12)3.2.6 显示电路设计 (13)3.2.7 按键电路设计 (16)3.2.8 报警电路设计 (16)第4章软件设计 (17)4.1 程序流程图 (17)4.1.1 主程序流程 (17)4.1.2 时间调整程序流程图 (18)4.1.3 时钟芯片读写程序流程 (20)4.1.4 温度测量元件控制程序流程 (20)4.1.4 公历转换成农历的基本原理 (21)4.2 操作与调试 (22)4.2.1 软件调试 (22)4.2.2 万年历实物 (23)总结与展望 (26)致谢 (27)参考文献 (28)附录一:系统硬件原理图 (29)附录二:元器件清单 (30)附录三:设计程序 (31)第1章绪论1.1 课题的背景随着社会的发展和科技水平的提高,人类获得和计算时间的方法,历经观天阳、摆钟到现在电子钟,经过不断发展和创新,计时的精度越来越准确。

基于STC89C52的闹铃万年历设计

基于STC89C52的闹铃万年历设计

目录前言 (3)第1章概述 (4)第1.1节单片机设计电子时钟的背景 (4)第1.2节本设计任务及要求 (4)第2章系统功能及总体结构 (5)第2.1节工作原理 (5)第2.2节总体方框图 (5)第2.3节方案论证比较 (5)第3章硬件电路设计 (9)第3.1节系统所需的硬件介绍 (9)第3.2节系统硬件设计 (15)第4章软件设计 (16)第4.1节软件设计概述 (16)第4.2节显示程序设计 (16)第4.3节时钟程序设计 (16)第5章系统测试 (18)第5.1节系统的调试 (18)第5.2节数据测试 (18)第5.3节误差分析 (18)结论 (20)参考文献 (21)致谢............................................ 错误!未定义书签。

附录 (23)附录1:实物照片说明 (23)附录2:部分源程序 (23)【摘要】:近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,在生活和生产的各领域中,凡是有时间显示和控制要求的地方都会有单片机的身影出现,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,因此本次设计则采用单片机为核心来实现对以时间显示和记录提示的闹铃万年历设计。

本次设计的闹铃万年历的电路,具有三大功能、分别表示小时时间显示,年月日时间显示,时间记录提示功能,试验中用数码管显示,蜂鸣器模拟语音提示。

基于题目基本要求,本系统对功能设置、数据装入和定时设定功能进行了重点设计。

此外,扩展了掉电记忆、万年历显示、LED状态指示等。

该系统设计采用以单片机AT89S52为核心,结合数码管显示以及必要的外围电路,通过功能设置和数据输入,完成不同功能下的显示。

在发挥部分,该系统还添加了万年历的功能,使得用户可以随时知道当前的时间;当设定时间达到时,会发出蜂鸣提示。

测试表明,该系统具有操作简单,控制精确,更加人性化等特点。

基于52单片机的万年历设计

基于52单片机的万年历设计

论文题目:基于52单片机的万年历设计专业:自动化本科生:(签名)指导老师:(签名)摘要在现代人们生活和工作中,时间已经成为我们不可缺少的一部分。

而随着科学技术的发展,我们获知时间的方式也逐渐变得多种多样,例如通过手表,手机,电子时钟等;而随着生活和工作的繁忙,人们在获知时间的同时,对于与人们生活和工作息息相关的信息也不可缺少,比如:温度,日期等;电子万年历的诞生,很好解决了这一问题,它在显示时间的同时,又显示了温度、日期、时间等诸多功能于一身。

本设计的电子万年历采用的是AT89C52单片机作为控制核心,内部带有8KB的ROM,能够存储大量的程序,而且兼容性也很好;通过DS1302作为时钟芯片,它能够够实时提供年、月、日、时分、秒信息;由LCD1602作为屏幕显示,LCD1602功耗低,携带方便,功能强大;温度检测采用DALLAS公司的数字化温度传感器(DS18B20),;另外本次设计还增加了闹钟功能和温度上限报警功能,大大地提高了万年历的功能。

关键词:时钟芯片DS1302,温度传感器DS18B20,单片机AT89C52Subject :The design of calendar based on AT89C52Specialty :AutomationName :(signature)Instructor:(signature)ABSTRACTIn the modern, time has become an indispensable part of our life and work. With the development of science and technology, how we get the time becomes diverse, for example, by watches, mobile phones, electronic clocks, etc. With the busy life and work, when people informed of the time, information tha is closely related to people’s life and work is also essential, such as: temperature, date, etc.The birth of electronic calendar is a good solution to this problem. When it displays the time, it also show the temperature, date, time, and many other functions is in one. The variety of electronic calendar is wide.The design of the electronic calendar is used as a control core microcontroller AT89C52. With 8KB of internal ROM, it can store a large number of procedures, and it also has good compatibility. Through the DS1302 as a clock chip, it can provide enough real year, month, day, hours, seconds information. the display of the screen is by the LCD1602, LCD1602 has the low power,convenient to carry. Temperature detected is by the DALLAS's digital temperature sensor (DS18B20).In addition this design also increased the upper temperature limit alarm clock function and alarm function, greatly improved calendar functions.KEY WORDS:electronic calendar,DS1302,DS18B20,AT89C52目录1.绪论 (1)1.1研究背景 (1)1.2设计目的 (2)1.3设计意义 (3)2.设计内容 (4)2.1总方案设计 (4)2.1.1主控模块 (4)2.1.2显示模块 (5)2.1.3时间计算模块 (5)2.1.4温度检测模块 (5)2.1.5报警模块 (5)2.1.6设置模块 (6)3.系统硬件介绍 (7)3.1AT89C52单片机主控模块 (7)3.1.1单片机介绍 (7)3.1.2 单片机应用组成系统 (7)3.1.3 单片机发展及发展趋势 (7)3.1.4 单片机的应用 (8)3.1.5 AT89C52的功能介绍 (9)3.1.6单片机I/O端口的简单介绍 (9)3.2LCD1602液晶显示 (10)3.2.1 LCD1602的优点 (10)3.2.2功能特性介绍 (10)3.2.3引脚的介绍 (11)3.2.4 11条指令介绍 (11)3.2.5 LCD1602与单片机的接口电路 (15)3.3时间计算模块DS1302 (15)3.3.1 DS1302的特性介绍 (15)3.3.2 DS1302引脚介绍 (16)3.3.3 DS1302有关日历、时间的寄存器 (17)3.3.4 DS1302控制字介绍 (17)3.3.5 DS1302与单片机接口电路 (18)3.4环境温度检测DS18B20 (18)3.4.1 DS18B20的功能特性 (18)3.4.2 DS18B20的引脚介绍 (19)3.4.3 DS18B20内部结构 (20)3.4.4 DS18B20操作步骤 (20)3.5报警模块蜂鸣器 (21)3.5.1 蜂鸣器驱动 (21)3.5.2 蜂鸣器驱动电路 (21)3.6按键模块设置 (22)4软件设计 (23)4.1语言的选择 (23)4.2程序流程图 (24)4.2.1主程序流程图 (24)4.2.2 子程序流程图 (25)5 PROTEUS仿真及测试 (27)5.1系统仿真 (27)5.1.1 系统硬件仿真原理图 (27)5.1.2 开始界面仿真图 (28)5.1.3 时间显示仿真图 (29)5.1.4 温度显示仿真图 (30)5.1.5高温报警设置仿真 (31)5.1.6闹钟设置仿真 (32)5.2系统测试 (33)5.2.1 硬件问题 (33)5.1.2 软件问题 (33)6总结 (34)6.1结论 (34)6.2论文小结 (35)致谢 (36)参考文献 (37)附录 (38)1.绪论1.1 研究背景当代世界,电子科学技术获得了飞速的发展,与此同时,含现代电子技术的高科技产品也飞速发展,不断改良换代,走进世界人民生活和工作的每个角落,快速的发展传播现代社会的信息和生产力,进一步的提高了现代电子产品的性能和功能,是产品更新换代的时间越来越少。

基于AT89S52单片机的万年历设计

基于AT89S52单片机的万年历设计

南通纺织职业技术学院毕业设计(论文)基于AT89S52单片机万年历的设计董刚班级: 09电子信息专业:电子信息工程教学系:机电系指导老师:荀磊完成时间: 年月日至年月日摘要电子万年历是一种非常广泛日常计时工具。

它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3---5V电压供电。

此次是基于52系列的单片机进行的电子万年历设计,相比传统的万年历来说,精确度更高。

可以显示温度、年、月、日、时、分、秒及周信息,具有可调整日期和时间功能。

对单片机的理论基础和外围扩展知识进行了比较全面准备。

在硬件与软件方面进行同步设计。

硬件部分主要由单片机,LED显示电路,以及调时按键电路等组成。

在单片机的选择上使用了AT89S52单片机,该单片机适合于许多较为复杂控制应用场合。

显示器使用共阴极的数码管。

使用MAX7219来驱动显示,然后并行输出。

软件方面主要包括日历程序、时间调整程序、温度程序、显示程序等。

程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。

所有程序编写完成后,在keil软件中进行调试,确定没有问题后,在Proteus 软件中嵌入单片机内进行仿真。

关键词:时钟芯片、MAX7219、DS18B20、动态扫描、单片机。

目录摘要 (1)1 绪论 (4)1.1设计背景 (4)1.2设计思想 (4)1.3设计框图 (5)2 系统硬件设计 (6)2.1最小化电路设计 (6)2.1.1 主控芯片简介 (6)2.1.2 复位电路、晶振电路设计 (7)2.2显示电路设计 (9)2.2.1 显示器简介 (9)2.2.2 驱动芯片简介 (11)2.2.3 显示电路 (16)2.3温度采集电路设计 (17)2.3.1 温度采集芯片简介 (17)2.3.2 温度采集电路 (21)2.4实时时钟电路设计 (21)2.4.1时钟芯片简介 (22)2.4.2时钟电路 (22)3 系统软件设计 (25)3.1主程序流程图 (26)3.2系统子程序的设计 (27)3.2.1送显示流程图 (27)3.2.2 时钟流程图 (28)3.2.3 温度采集流程图 (29)4 系统仿真 (30)4.1仿真软件简介 (30)4.2 软件仿真过程 (34)4.3仿真结果 (36)5 系统的制作与调试 (37)5.1 系统的制作 (37)5.2 系统的调试 (37)5.3 实物展示 (38)致谢 (39)参考文献 (40)附录一 (41)附录二 (42)1 绪论1.1设计背景随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。

基于AT89S52单片机的多功能电子万年历

基于AT89S52单片机的多功能电子万年历

基于AT89S52单片机的多功能电子万年历
引言
随着生活节奏的日益加快,人们的时间观也越来越重,同时对电子钟表、日
历的需求也随之提高。

因此,研究实用电子时钟及其扩展应用,有着非常现实
的意义,具有很大的实用价值。

本系统程序由主程序、中断服务函数和多个子函数构成。

主函数主要完成各
子函数和中断函数的初始化。

定时中断函数主要完成时钟芯片的定时扫描及键
盘扫描。

时钟芯片的读写函数主要是将时间、日历信息读出来,并把要修改具
体值写入时钟芯片内部。

系统的硬件设计与电路原理
电路设计框图
系统硬件概述
本电路是由AT89S52单片机为控制核心,具有在线编程功能、低功耗、能在3V的超低压工作。

时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,
工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发
方式一次传送多个字节的时钟信号或RAM数据。

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

可产生年、月、日、周日、时、分、秒,具有使用寿命长、精度高和低功耗等特点,同时具有掉电自动保存功能。

主控制模块
单片机主控制模块的设计
AT89S52单片机为40引脚双列直插芯片,有四个I/O口
P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),。

基于单片机的电子万年历设计报告

基于单片机的电子万年历设计报告

基于单片机的万年历设计报告一、研究意义随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。

日历是人们不可或缺的日常用品。

但一般日历都为纸制用品,使用不便,寿命不长。

电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。

本设计以AT89S52单片机为核心,构成单片机控制电路,AT89C52是一种带8K字节闪速可编程可擦除只读存储器(PEROM)的低电压、高性能CMOS 8位为控制器。

该器件采用ATMEL 非易失存储器制造技术制造,与工业标准的80C51和80C52指令集和输出管脚相兼容。

结合DS1302时钟芯片和24C02 FLASH存储器,完成时间的自动调整和掉电保护,全部信息用液晶显示。

时间、日期调整由三个按键来实现,并可对闹铃开关进行设置。

日历能显示阳历和阴历年、月、日以及星期、时、分、秒。

在显示阴历月份时,能标明是否闰月。

二、总体方案设计本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02 FLASH存储器,显示阳历的年、月、日、星期、时、分、秒和阴历的年、月、日,在显示阴历时间时,能标明是否闰月,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示出来。

输入接口由三个按键来实现,用这三个按键可以对日期和时间进行调整,并可以对闹铃的开关和闹铃的时间进行设置。

闹铃功能通过蜂鸣器来实现。

软件控制程序实现所有的功能。

整机电路使用+5V稳压电源,可稳定工作。

系统框图如图2-1所示,其软硬件设计简单,时间记录准确,可广泛应用于长时间连续显示的系统中。

三、系统硬件设计按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、存储模块、键盘接口模块、显示模块和闹铃模块共6个模块组成,电路系统构成框图如图3-1所示。

主控芯片使用52系列AT89S52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1302,存储模块采用美国ATMEL公司生产的低功耗CMOS串行EEPROM存储芯片AT24C02。

基于AT89c52单片机电子万年历设计(带程序)

基于AT89c52单片机电子万年历设计(带程序)

目录一、摘要•二、设计・3三、设计任务.2四、设计要求•3五、系统方案设计・31、系统-31)原理构成框图•32)设计思路42 、主程序设计43 、中断程序设计55 、时间调整电路的设计7六、系统评价7七、c 语言程序注释及说明8一、摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。

将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。

本设计是基于AVR 单片机强大的控制功能制作而成的电子万年历,该电子万年历包括四大功能:实时显示年、月、日、时、分、秒、星期;人为的校正年、月、日、时、分、星期;第一次开机显示12-00-30 。

二、设计目的1、掌握C52 程序用于实践并实现相应的功能;2、掌握时钟程序的使用方法;3、掌握时间函数的使用方法;4、掌握键盘的程序使用方法;三、设计任务通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,七个按钮连接P0 口可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。

四、设计要求(1)能够准确的计时,时间可在数码管上显示出来,默认显示为时、分、秒,每隔一分钟自动显示年、月、日及星期,也可通过按键控制显示,并可通过按键调节时间。

(2)第一次开机显示12-30-30 。

(3)每半秒led 彩灯闪烁一次五、系统方案设计:1 、系统总体设计:1)原理构成框图本设计用AT89C52 作为核心控制部分,外接晶振电路与复位电路,以两个四位数码管作为显示部分,开关控制显示时间与日期,具体框图如图 1 所示,数码管框图如图 2 所示:P3 口开关控制>调整时间部分复位电路P1 口Led 彩灯部分单片机AT89C52数码管段选部分八数码管显示部分SB.B:「74HC138图1 原理框图图2 :数码管模块2)设计思路通过一段时间对专业书籍及多种设计方案的研究分析,我采用了比较常用的AT89C52作为核心控制芯片,用C语言进行编程来满足设计的要求。

基于STC89C52单片机的多功能电子万年历

基于STC89C52单片机的多功能电子万年历

摘要本文介绍了基于STC89C52单片机的多功能电子万年历的硬件结构和软硬件设计方法。

本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。

系统以STC89C52单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。

温度采集选用DS18B20芯片,万年历采用直观的数字显示,数据显示采用1602A液晶显示模块,可以在LCD上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。

此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。

关键字:万年历温度计液晶显示ABSTRACTThis paper introduces the based on STC89C52 multi-function electronic calendar of the hardware structure and software and hardware design method. This design by data display module, temperature acquisition module, time processing module and set module four modules. With STC89C52 single-chip microcomputer system for the controller to serial clock calendar chip DS1302 record calendar and time, it can be to date and time, minutes and seconds for the time, also has a leap year compensation and other functions. Temperature gathering choose DS18B20 chip, calendar by using object digital display, data showed that the 1602 A liquid crystal display module, can be in the LCD shows at the same time year, month, day, Sunday, when, minutes and seconds, still have time calibration etc. Function. This calendar has read the convenient, direct display, functional diversity, simple circuit, low cost, and many other advantages, has a broad market prospect.Key words:Perpetual Calendar thermometer LCD display目录摘要 (I)ABSTRACT (II)前言....................................................................................................................... I V 1 绪论 .. 01.1 课题研究的背景 01.2课题的研究目的与意义 01.3课题解决的主要内容 02 系统的方案设计与论证 (1)2.1单片机芯片设计与论证 (2)2.2按键控制模块设计与论证 (2)2.3时钟模块设计与论证 (2)2.4温度采集模块设计与论证 (3)2.5显示模块模块设计与论证 (3)3 系统硬件的设计 (4)3.1 STC89C52单片机 (4)3.2时钟芯片DS1302接口设计与性能分析 (7)3.3温度芯片DS18B20接口设计与性能分析 (10)3.4 LCD显示模块 (15)3.5按键模块设计 (16)3.6复位电路的设计 (17)4 系统的软件设计 (19)4.1主程序流程图的设计 (19)4.2 程序设计 (21)5 系统的机体设计 (27)5.1系统的模块组成 (27)5.2 功能实现 (27)结论 (29)参考文献 (30)致谢 (31)附录 (32)前言随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。

基于STC89C52液晶显示数字万年历设计报告

基于STC89C52液晶显示数字万年历设计报告
器。日历、时间寄存器及控制字如表1所示:
寄存器名称
7
6
5
4
3
21Biblioteka 01RAM/CK
A4
A3
A2
A1
A0
RD/W
秒寄存器
1
0
0
0
0
0
0
分寄存器
1
0
0
0
0
0
1
小时寄存器
1
0
0
0
0
1
0
日寄存器
1
0
0
0
0
1
1
月寄存器
1
0
0
0
1
0
0
星期寄存器
1
0
0
0
1
0
1
年寄存器
1
0
0
0
1
1
0
写保护寄存器
1
0
0
0
1
1
1
慢充电寄存器
5.DS1302的读写
DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。
下面我们利用STC89C52和液晶显示器LCD1602和实时时钟芯片DS1302来实现实时时钟并利用液晶显示器进行显示。
1.单片机STC89C52
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash。

基于STC89C52的多功能万年历课程设计

基于STC89C52的多功能万年历课程设计

信息与通信工程学院作品名称负责人:任霞专业班级:通信122成员:任霞马木提亚库普李宗卿指导教师:杨亚宁完成日期:2014年11 月7 日目录目录 (1)一、设计任务和要求 (1)1.1设计任务 (1)1.2性能指标 (1)二、设计方案及原理 (2)2.1方案一 ................................................................................. 错误!未定义书签。

2.2方案二 ................................................................................. 错误!未定义书签。

2.3本设计采用方案及原理 ..................................................... 错误!未定义书签。

三、系统硬件设计 (3)3.1单片机最小系统设计 (4)3.2温度电路 (4)3.3时钟电路 (5)3.4显示电路 (6)3.5按键电路 (6)3.6闹钟电路 (6)四.系统软件设计 (10)4.1主程序设计 (10)4.2温度部分程序设计 (11)4.3时钟部分程序设计 ............................................................. 错误!未定义书签。

4.4键盘部分程序设计.............................................................. 错误!未定义书签。

4.5显示部分程序设计.............................................................. 错误!未定义书签。

4.6闹钟部分程序设计.............................................................. 错误!未定义书签。

基于STC89C52RC万年历程序

基于STC89C52RC万年历程序

TICK_CNT EQU 40H ;T0溢出计数器SECOND EQU 41H ;存储数据用真值,未用BCD码MINUTE EQU 42HHOUR EQU 43HDAY EQU 44HMONTH EQU 45HYEAR EQU 46HYUSHU EQU 47H ;存放余数FLASH_FLAG EQU 27H ;时间日期调整标志;R7: 0-时间;1-日期;中断向量表ORG 0000HLJMP MAINORG 0003HLJMP EX0_INTORG 000BHLJMP T0_INTORG 0013HLJMP EX1_INT;主程序ORG 0030HMAIN: NOP;初始化堆栈MOV SP,#60H;初始化变量MOV SECOND,#0MOV MINUTE,#0MOV HOUR,#0MOV DAY,#21MOV MONTH,#1MOV YEAR,#96MOV FLASH_FLAG,#00HMOV R7,#00H;MOV TL0,#0B0H ; 定时50msMOV TH0,#3CHMOV TICK_CNT,#20 ;装计数初值(1s计数器)MOV TMOD,#01HSETB ET0SETB EX0SETB EX1SETB EA ;开中断SETB PX0SETB PX1 ;设置中断优先级SETB TR0 ; 启动定时器T0LOPP:LCALL DISPLAY ;调用显示子程序LJMP LOPP; ------------------------------------------------- ; 定时器0中断T0_INT: MOV TL0,#0B0HMOV TH0,#3CH ; 重装载DJNZ TICK_CNT,NOT_1S ;1秒到?AJMP IS_1SNOT_1S: LJMP T0_RET; 1秒时间到IS_1S: PUSH ACCMOV A,SECONDCJNE A,#59,IN3 ; 59s到?AJMP IN4IN3: LJMP SECOND_INC ; 秒加1IN4: MOV SECOND,#0 ; 秒进位MOV A,MINUTECJNE A,#59,IN5 ; 59分到?AJMP IN6IN5: LJMP MINUTE_INCIN6: MOV MINUTE,#0 ; 分进位MOV A,HOURCJNE A,#23,HOUR_INC ; 23h到?MOV HOUR,#0 ; "时"进位MOV A,MONTHCJNE A,#2,NOT_FEB ; 是否二月?;2月处理;--------------------------FEB: NOPACALL DIV4MOV A,YUSHUCJNE A,#0,NOT_LEAP_Y ;是否闰年?LEAP_Y: MOV A,DAY ;闰年CJNE A,#29,DAY_INCMOV DAY,#1MOV MONTH,#3LJMP RESET_CNT;非闰年NOT_LEAP_Y: MOV A,DAYCJNE A,#28,DAY_INC ;MOV DAY,#1MOV MONTH,#3LJMP RESET_CNT;---------------------------;非2月处理;30/31天?NOT_FEB:NOPCJNE A,#4,Y01AJMP MON_30DY01: CJNE A,#6,Y02 ;是否小月?AJMP MON_30DY02: CJNE A,#9,Y03AJMP MON_30DY03: CJNE A,#11,T11AJMP MON_30D;31天T11: MOV A,DAY ;大月CJNE A,#31,DAY_INCAJMP NEXT_MONTH;30天MON_30D:MOV A,DAY ;小月CJNE A,#30,DAY_INC;天进位NEXT_MONTH: MOV DAY,#1MOV A,MONTHCJNE A,#12,MONTH_INC; 月进位MOV MONTH,#1MOV A,YEARCJNE A,#99,YEAR_INCMOV YEAR,#0AJMP RESET_CNT;年加1YEAR_INC: M OV A,YEARINC AMOV YEAR,AAJMP RESET_CNTMONTH_INC: MOV A,MONTHINC AMOV MONTH,AAJMP RESET_CNTDAY_INC: MOV A,DAYINC AMOV DAY,AAJMP RESET_CNTHOUR_INC:MOV A,HOURINC AMOV HOUR,AAJMP RESET_CNTMINUTE_INC: MOV A,MINUTE INC AMOV MINUTE,AAJMP RESET_CNTSECOND_INC: MOV A,SECONDINC AMOV SECOND,ARESET_CNT: POP ACCMOV TICK_CNT,#20T0_RET: RETI;--------------------------------------------------------------------;-------------------------------------------------------------------; sub: LED Display;显示子程序DISPLAY:MOV DPTR,#TAB1 ; 装段选表MOV A,R7 ;CJNE A,#00H,DISP_DATE ; 显示时间?DISP_TIME: MOV R0,#SECOND ;AJMP TSADISP_DATE: MOV R0,#DAY ; ;显示日期;显示时间或日期TSA: MOV A,@R0MOV B,#10DIV AB ;取十位MOVC A,@A+DPTRMOV R2,A ;存段选MOV A,B ;取个位MOVC A,@A+DPTRMOV R1,A ;存段选;------------INC R0MOV DPTR,#TAB1MOV A,@R0MOV B,#10DIV ABMOVC A,@A+DPTRMOV R4,AMOV DPTR,#TAB2MOV A,BMOVC A,@A+DPTRMOV R3,A;-------------INC R0MOV DPTR,#TAB1MOV A,@R0MOV B,#10DIV ABMOVC A,@A+DPTRMOV R6,AMOV DPTR,#TAB2MOV A,BMOVC A,@A+DPTRMOV R5,A;---------------------;P1:位选线;P0:段选线TDP: MOV P0,R1MOV A,FLASH_FLAGCJNE A,#03H,A02 ;是否闪烁?AJMP A03A02: CJNE A,#06H,A04;A03: MOV A,TICK_CNTRRC AJNC A05A04: MOV P1,#0DFH ;开D6 A05: LCALL DELAYMOV P1,#0FFH ;关位选MOV P0,R2MOV A,FLASH_FLAGCJNE A,#03H,B02AJMP B03B02: CJNE A,#06H,B04B03: MOV A,TICK_CNTRRC AJNC B05B04: MOV P1,#0EFH ;开D5 B05: LCALL DELAYMOV P1,#0FFH ;关;Display DS4MOV P0,R3MOV A,FLASH_FLAGCJNE A,#02H,C02AJMP C03C02: CJNE A,#05H,C04C03: MOV A,TICK_CNTRRC AJNC C05C04: MOV P1,#0F7H ;开D4 C05: LCALL DELAYMOV P1,#0FFH ;关;Display DS3MOV P0,R4MOV A,FLASH_FLAGCJNE A,#02H,D02AJMP D03D02: CJNE A,#05H,D04D03: MOV A,TICK_CNTRRC AJNC D05D04: MOV P1,#0FBH ;开D3D05: LCALL DELAYMOV P1,#0FFH;Display DS2MOV P0,R5MOV A,FLASH_FLAGCJNE A,#01H,E02AJMP E03E02: CJNE A,#04H,E04E03: MOV A,TICK_CNTRRC AJNC E05E04: MOV P1,#0FDH ;开D2E05: LCALL DELAYMOV P1,#0FFHMOV P0,R6MOV A,FLASH_FLAGCJNE A,#01H,F02AJMP F03F02: CJNE A,#04H,F04F03: MOV A,TICK_CNTRRC AJNC F05F04: MOV P1,#0FEH ;开D1F05: LCALL DELAYMOV P1,#0FFHRET;-------------------------------------------------------------------D_CNT_2 EQU 28HD_CNT_1 EQU 29HD_CNT_4 EQU 30HD_CNT_3 EQU 31H; ---------------------------------------- ;短延时DELAY: MOV D_CNT_2,#2D_LOOP2: MOV D_CNT_1,#100 ;[1]D_LOOP1: DJNZ D_CNT_1,D_LOOP1 ;[2]DJNZ D_CNT_2,D_LOOP2 ;[2]RET;长延时(用于键盘去抖动)DELAY2: MOV D_CNT_4,#60D_LOOP4:MOV D_CNT_3,#100 ;[1]D_LOOP3:DJNZ D_CNT_3,D_LOOP3 ;[2]DJNZ D_CNT_2,D_LOOP4 ;[2]RET; ---------------------------------------- ;除法子程序,用于判断闰年DIV4: PUSH ACCPUSH BMOV A,YEARMOV B,#4DIV ABMOV YUSHU,BPOP ACCPOP BRET;--------------------------------------------------------- ;外部中断0; sub: INT0 interrupt; 处理按键K0,切换时间/日期显示或者调整时间EX0_INT:PUSH ACCLCALL DELAY2 ;长延时,去抖动JB P3.2,OUTMOV A,FLASH_FLAG ;装标志位CJNE A,#00H,JYY ;是否为零?MOV A,R7 ;R7取反XRL A,#0FFHMOV R7,AOUT: LJMP EX0_RET;-------------------------------------------------------JYY: CJNE A,#01H,JMM;调节年MOV A,YEARCJNE A,#99,YY0MOV YEAR,#0LJMP YYFYY0: INC AMOV YEAR,AYYF: LJMP EX0_RET;---------------------------------------JMM: CJNE A,#02H,JDD;调节月MOV A,MONTHCJNE A,#12,MM0MOV MONTH,#1LJMP MMFMM0: INC AMOV MONTH,AMMF: LJMP EX0_RET;****************************************************** *****JDD: CJNE A,#03H,ADH ;调节天MOV A,MONTHCJNE A,#2,NFBIFB: NOPLCALL DIV4MOV A,YUSHUCJNE A,#0,ANGARN: MOV A,DAYCJNE A,#29,D0ALJMP D0BD0A: LJMP DDAD0B: LJMP DD1ANG: MOV A,DAYCJNE A,#28,D0ALJMP DD1NFB: NOPCJNE A,#4,Y04LJMP AD1Y04: CJNE A,#6,Y05LJMP AD1Y05: CJNE A,#9,Y06LJMP AD1Y06: CJNE A,#11,Y07LJMP AD1Y07: NOPMOV A,DAYCJNE A,#31,D0ALJMP DD1AD1: NOPMOV A,DAYCJNE A,#30,D0ADD1: MOV DAY,#1LJMP DDFDDA: MOV A,DAYINC AMOV DAY,ADDF: LJMP EX0_RET;--------------------------------------------------- ADH: CJNE A,#04H,ADM ;调节时MOV A,HOURCJNE A,#23,JH0MOV HOUR,#0LJMP JHFJH0: MOV A,HOURMOV HOUR,AJHF: LJMP EX0_RET;----------------------------------------- ADM: CJNE A,#05H,ADS ;调节分MOV A,MINUTECJNE A,#59,JM0MOV MINUTE,#0LJMP JMFJM0: MOV A,MINUTEINC AMOV MINUTE,AJMF: LJMP EX0_RETADS: MOV A,SECOND ;调节秒CJNE A,#59,JS0MOV SECOND,#0LJMP EX0_RETJS0: MOV A,SECONDINC AMOV SECOND,AEX0_RET:NOPJNB P3.2,EX0_RET ;判断键盘是否释放RETI;---------------------------------------------------------; 处理按键K1EX1_INT:PUSH ACCLCALL DELAY2 ;长延时,去抖动JB P3.3,EX1_RETNOPMOV A,R7CJNE A,#00H,DIS_DATE;显示时间MOV A,FLASH_FLAGCJNE A,#00H,ED2MOV FLASH_FLAG,#04H ; 标志位置04AJMP EX1_RETED2: CJNE A,#06H,ED1;reach 06HMOV FLASH_FLAG,#00H ;重置为0AJMP EX1_RET;显示日期DIS_DATE:MOV A,FLASH_FLAGCJNE A,#03H,ED1;== 03HMOV FLASH_FLAG,#00H ;重置为0AJMP EX1_RET;标志加1,ED1: INC AMOV FLASH_FLAG,AEX1_RET: NOPJNB P3.3,EX1_RETPOP ACCRETI;----------------------------------------------; code tableTAB1: DB 0c0h,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H TAB2: DB 040H,79H,24H,30H,19H,12H,02H,78H,00H,10H END。

基于单片机的液晶显示“万年历”设计

基于单片机的液晶显示“万年历”设计

单片机液晶显示“万年历”一、设计任务利用STC89C52RC单片机设计一个具有如下功能的电子万年历:(一)、能够显示年、月、日、时、分、秒、星期(二)、能正确显示闰年日期(三)、用独立键盘进行校时二、硬件设计1、系统框图按照系统设计的要求和功能,将系统分为主控模块、时钟电路模块、按键扫描模块、LCD显示模块、蜂鸣器电路、电源电路、复位电路、晶振电路几个模块,系统框图如图1所示。

主控模块采用STC89C52RC单片机,按键模块用5个按键,用于调整时间和设定闹钟,显示模块采用LCD1602,时钟电路模块采用DS1302实时时钟实现对时间,日期的操作。

图1 基于AT89C52RC单片机的电子万年历系统框图2、原理图基于STC89C52RC单片机的电子万年历硬件仿真电路图如图10所示,系统由STC89C52RC单片机、按键扫描电路、显示电路、时钟电路、晶振电路、复位电路、蜂鸣器电路组成。

图2 电子万年历仿真图3、各部分介绍(1)、主控模块控制芯片使用STC89C52,控制系统如下图:图3 STC89C52RC主控模块主控制芯片采用STC89C52,系统包括晶振电路、复位电路、下载接口。

(2)、时钟芯片时钟芯片使用DS1302,该模块电路原理图如下图:图4 DS1302时钟电路时钟电路采用的是ds1302芯片,DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

工作电压与单片机的输入电压比较适合。

上面是它的一些基本的应用介绍。

下面是它的引脚的描述:图5 DS1302引脚下面是DS1302的时钟寄存器。

我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。

当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。

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

目录一、摘要 (2)二、设计 (3)三、设计任务. (2)四、设计要求 (3)五、系统方案设计 (3)1、系统 (3)1)原理构成框图 (3)2)设计思路 (4)2、主程序设计 (4)3、中断程序设计 (5)5、时间调整电路的设计 (7)六、系统评价 (7)七、c语言程序注释及说明 (8)一、摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。

将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。

本设计是基于AVR单片机强大的控制功能制作而成的电子万年历,该电子万年历包括四大功能:实时显示年、月、日、时、分、秒、星期;人为的校正年、月、日、时、分、星期;第一次开机显示12-00-30。

二、设计目的1、掌握C52程序用于实践并实现相应的功能;2、掌握时钟程序的使用方法;3、掌握时间函数的使用方法;4、掌握键盘的程序使用方法;三、设计任务通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,七个按钮连接P0口可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。

四、设计要求(1)能够准确的计时,时间可在数码管上显示出来,默认显示为时、分、秒,每隔一分钟自动显示年、月、日及星期,也可通过按键控制显示,并可通过按键调节时间。

(2)第一次开机显示12-30-30。

(3)每半秒led彩灯闪烁一次五、系统方案设计:1、系统总体设计:1) 原理构成框图本设计用AT89C52作为核心控制部分,外接晶振电路与复位电路,以两个四位数码管作为显示部分,开关控制显示时间与日期,具体框图如图1所示,数码管框图如图2所示:图1 原理框图图2:数码管模块2)设计思路通过一段时间对专业书籍及多种设计方案的研究分析,我采用了比较常用的AT89C52作为核心控制芯片,用C语言进行编程来满足设计的要求。

用LED数码管来实现年、月、日、时、分、秒、星期的显示,通过按键开关可以在日期与时间间切换和对时钟进行调整。

2、主程序的设计系统程序采用C语言按模块化方式进行设计,然后通过KeilC51L软件开发平台将程序转变成十六进制程序语言,得到HEX文件,经过USB转串口线下载到单片机板上即可实现。

系统程序主要包括主程序、延时程序、显示处理程图3 主程序框图3、中断程序设计本设计中还有两个中断程序定时器0中断和定时器1中断,定时器1用来动态扫描,定时0零用来计时并且控制led灯的闪烁及年月日时分秒的自加一。

动态扫描框图这里不再画出。

定时器0中断框图如下:图4 中断程序框图4、时间调整电路的设计采用按键设计,该单片机有四个独立按键,分别为P3^0、P3^1、P3^2、P3^3独立式按键直接与单片机I/O 口相连构成键盘,每个按键不会相互影响,这四个按键可控制时于分的加和减,调节年月日及星期时需要按键组合控制(具体方法见程序注释),键盘模块框图如下:图5:键盘模块六、系统评价该设计利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时,该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术MCS-52 c语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现时,而由于ATMEL公司的AT89C52单片机是低功耗的具有4KB在线可编程FLASH存储器的单片机。

它与通用80C52系列单片机的指令第和引脚兼容。

片内的FLASH集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。

它的功能强大,而且也较容易购买。

总结:所要实现的功能通过单片机编程就可以达到,不需要额外的时钟芯片来增加成本,并使外围电路更加简单明了。

七、c语言程序及注释说明:/*1、按键可以调整当时时间2、按键可以调节定时时间3、定时时间到继电器吸合*8位数码管显示时间格式格式12-30-30 表示:12点30分30秒S1 用于小时加1操作S2 用于小时减1操作S3 用于分钟加1操作S4 用于分钟减1操作*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit KEY1=P3^0; //定义端口参数sbit KEY2=P3^1;sbit KEY3=P3^2;sbit KEY4=P3^3;sbit KEY5=P3^6;sbit KEY6=P3^7;sbit KEY7=P3^5;sbit LED=P1^2; //定义指示灯参数code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0-9unsigned char StrTab[8];//定义缓冲区Unsigned char minute=30,hour=12, second=45, month=12,day=26,yea=2012r,week=1;/*****************************************************/ /* 延时函数*/ /******************************************************/ void delay(unsigned int cnt){while(--cnt);}/******************************************************/ /* 显示处理函数*/ /***************************************************/ void Displaypro(void){if(((second>=0)&&(second<=1))|| (KEY5==0)) //显示年、月、日(自动或同时按下按键0和2){StrTab[0]=tab[year/1000]; //年StrTab[1]=tab[year/100%10];StrTab[2]=tab[year/10%10];StrTab[3]=tab[year%10];StrTab[4]=tab[month/10]; //月StrTab[5]=tab[month%10];StrTab[6]=tab[day/10]; //日StrTab[7]=tab[day%10];}if((second==2)||(KEY6==0)) //显示星期(自动或同时按下按键0和3){StrTab[0]=0x40;StrTab[1]=0x40;StrTab[2]=0x40; //显示"-"StrTab[3]=0x40;StrTab[4]=0x40; //显示"-"StrTab[5]=0x40; //显示"-"StrTab[6]=0x40; //显示"-"StrTab[7]=0x40; //显示"-"StrTab[7]=tab[week];}if((second>=3)&&(second<=60)&&(KEY6==1)&&(KEY5==1)){StrTab[0]=tab[hour/10]; //显示小时StrTab[1]=tab[hour%10];StrTab[2]=0x40; //显示"-"StrTab[3]=tab[minute/10]; //显示分钟StrTab[4]=tab[minute%10];StrTab[5]=0x40; //显示"-"StrTab[6]=tab[second/10]; //显示秒StrTab[7]=tab[second%10];}}/******************************************************/ /* 主函数*/ /******************************************************/ main(){TMOD |=0x01;//定时器0 10ms in 12M crystal 用于计时TH0=0xd8; //初值TL0=0xf0;ET0=1;TR0=1;TMOD |=0x10; //定时器1用于动态扫描TH1=0xF8; //初值TL1=0xf0;ET1=1;TR1=1;EA =1;Displaypro(); //调用显示处理while(1)//主循环{if((!KEY1)&&KEY6&&KEY5) //按键1去抖以及动作{delay(10000);if((!KEY1)&&KEY6&&KEY5){hour++;if(hour==24)hour=0; //正常时间小时加1Displaypro();}}if((!KEY2)&&KEY6&&KEY5) //按键2去抖以及动作{delay(10000);if((!KEY2)&&KEY6&&KEY5){hour--;if(hour==255)hour=23; //正常时间小时减1Displaypro();}}if((!KEY3)&&KEY6&&KEY5) //按键3去抖以及动作{delay(10000);if((!KEY3)&&KEY6&&KEY5){minute++;if(minute==60)minute=0;//分加1Displaypro();}}if((!KEY4)&&KEY6&&KEY5) //按键4去抖以及动作{delay(10000);if(!KEY4){minute--;if(minute==255)minute=59; //分减1Displaypro();}}if((!KEY3)&&(!KEY6)) //按键去抖以及动作{delay(10000);if((!KEY3)&&(!KEY6)){week++;if(week==8)week=1; //按键显示星期时如果按下8按键星期加1Displaypro();}}if((!KEY4)&&(!KEY6)) //按键2去抖以及动作{delay(10000);if((!KEY4)&&(!KEY6)){week--;if(week==0)week=7; //按键显示星期时如果按下c按键星期减1Displaypro();}}if((!KEY2)&&(!KEY5)) //如果按键显示年、月、日时{delay(10000);if((!KEY2)&&(!KEY5)){day++;if((day>=29)&&(month==2)&&(year%4!=0))day=1;if ((day>=30)&&(month==2)&&(year%4==0))day=1;if((day>=31)&&(month==4||month==6||month==9||month==11))day=1;if((day>=32)&&(month==1||month==3||month==5||month==7||mo nth==8||month==10||month==12))day=1;Displaypro();}}if((!KEY3)&&(!KEY5)){delay(10000);if((!KEY3)&&(!KEY5)){month++;if(month==13)month=1;Displaypro();}}if((!KEY4)&&(!KEY5)){delay(10000);if((!KEY4)&&(!KEY5)){year0++;if(year0==100){year0=00;year1++;}Displaypro();}}if((!KEY7)&&(!KEY5)){delay(10000);if((!KEY7)&&(!KEY5)){year0--;if(year0==255){year0=99;year1--;};Displaypro();}}}}/******************************************************/ /* 定时器1中断*/ /******************************************************/ void time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描{static unsigned char num;TH1=0xF8;//重入初值TL1=0xf0;switch (num){case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描case 1:P2=1;P0=StrTab[num];break;case 2:P2=2;P0=StrTab[num];break;case 3:P2=3;P0=StrTab[num];break;case 4:P2=4;P0=StrTab[num];break;case 5:P2=5;P0=StrTab[num];break;case 6:P2=6;P0=StrTab[num];break;case 7:P2=7;P0=StrTab[num];break;default:break;}num++; //扫描8次,使用8个数码管if(num==8)num=0;}/******************************************************/ /* 定时器0中断*/ /******************************************************/ void tim(void) interrupt 1 using 1{static unsigned char count;//定义内部静态变量TH0=0xd8; //重新赋值TL0=0xf0;count++;switch (count){case 0:case 20:case 40:case 60:case 80:Displaypro(); //隔一定时间调用显示处理break;case 50:P1=~P1; //半秒LED闪烁break;default:break;}if (count==100){year=year1*100+year0;count=0;second++;if(second==60){second=0;minute++;if(minute==60){minute=0;hour++;if(hour==24){hour=0;day++;week++;if(week==8)week==1;if((day>=29)&&(month==2)&&(year%4!=0)){day=1;month++;}if((day>=30)&&(month==2)&&(year%4==0)){day=1;month++;}if((day>=31)&&(month==4||month==6||month==9||month==11)){day=1;month++;}If((day>=32)&&(month==1||month==3||month==5||month==7||month==8||month==10||month==12)){day=1;month++;}if(month>=13)year0++;if(year0==100){year0=00;year1++;}}}}}}。

相关文档
最新文档