基于单片机的电子万年历的设计
基于单片机的万年历设计
基于单片机的万年历设计一、系统总体设计基于单片机的万年历系统主要由单片机控制模块、时钟模块、显示模块、按键模块和电源模块等组成。
单片机控制模块是整个系统的核心,负责处理和协调各个模块之间的数据传输和控制信号。
通常选用具有较高性能和稳定性的单片机,如 STC89C52 等。
时钟模块用于提供准确的时间信息,常见的有 DS1302 等芯片,能够实现年、月、日、时、分、秒的精确计时。
显示模块用于将时间等信息直观地展示给用户,可采用液晶显示屏(LCD)或数码管。
LCD 显示效果清晰、美观,但成本相对较高;数码管则价格低廉,显示简单明了。
按键模块用于用户对万年历进行设置和操作,如调整时间、设置闹钟等。
电源模块为整个系统提供稳定的电源供应,保证系统的正常运行。
二、硬件设计1、单片机最小系统单片机最小系统包括单片机芯片、晶振电路和复位电路。
晶振电路为单片机提供时钟信号,保证其正常工作;复位电路则用于在系统出现异常时将单片机恢复到初始状态。
2、时钟模块电路DS1302 时钟芯片通过串行方式与单片机进行通信,其引脚连接到单片机的相应 I/O 口。
通过对 DS1302 进行读写操作,可以获取和设置时间信息。
3、显示模块电路若采用 LCD1602 液晶显示屏,其数据线和控制线与单片机的 I/O 口相连。
通过编程控制单片机向 LCD 发送指令和数据,实现时间等信息的显示。
4、按键模块电路通常使用独立按键,将按键的一端接地,另一端连接到单片机的I/O 口,并通过上拉电阻保证在按键未按下时引脚处于高电平。
当按键按下时,引脚电平被拉低,单片机通过检测引脚电平的变化来判断按键的操作。
三、软件设计软件设计主要包括主程序、时钟模块驱动程序、显示模块驱动程序和按键处理程序等。
主程序负责初始化各个模块,并进行循环检测和处理。
在循环中,不断读取时钟模块的时间数据,然后通过显示模块进行显示,并检测按键是否有操作。
时钟模块驱动程序根据 DS1302 的通信协议,实现对时钟芯片的读写操作,从而获取和设置时间。
基于单片机的电子万年历设计
基于单片机的电子万年历设计一、概述随着科技的快速发展和人们对生活品质的追求,电子设备在日常生活中扮演着越来越重要的角色。
电子万年历作为一种集日期、时间显示于一体的实用电子产品,已经深入到人们的日常生活和工作中。
传统的机械式日历已经无法满足现代人对时间精确性和功能多样性的需求,基于单片机的电子万年历设计应运而生,成为了当前研究的热点之一。
基于单片机的电子万年历设计,旨在利用单片机(如STC89CAT89C51等)的强大计算和控制能力,结合液晶显示屏(LCD)、按键输入等外设,实现时间的准确显示、日期的自动更新、闹钟提醒、温度显示等多样化功能。
该设计不仅具有高度的集成性和可靠性,而且能够通过编程实现各种定制化的功能,满足不同用户的需求。
本文将对基于单片机的电子万年历设计进行详细的介绍和分析,包括设计思路、硬件组成、软件编程等方面。
通过本文的阅读,读者可以了解电子万年历的基本原理和设计方法,掌握单片机在电子万年历设计中的应用技巧,为实际的开发工作提供有益的参考和借鉴。
1.1 研究背景与意义随着科技的不断进步,人们日常生活和工作中对于时间的精度和便捷性的要求日益提高。
传统的机械式日历和简单的电子时钟已经无法满足现代生活的需求。
电子万年历作为一种集时间显示、日历查询、定时提醒等多功能于一体的电子装置,在日常生活、工作乃至科研领域都具有广泛的应用价值。
基于单片机的电子万年历设计,不仅可以提供准确的时间显示,还能实现复杂的日期计算、农历显示、节假日提示等功能,极大地提高了时间管理的效率和便捷性。
单片机作为一种集成度高、功耗低、价格适中的微型计算机,非常适合用于小型化、智能化的电子产品设计,如电子万年历。
本研究的意义在于,通过对基于单片机的电子万年历的设计研究,可以推动微型计算机技术和电子时钟技术的融合发展,提升电子产品的智能化水平,满足人们日益增长的生活和工作需求。
同时,该研究还可以为相关领域的技术人员提供参考和借鉴,推动电子万年历产品的不断创新和优化。
基于单片机的万年历设计
一、引言万年历是一种显示当前日期和时间的器件或软件。
随着科技的发展,电子产品普及率愈来愈高,基于单片机的万年历设计成为了一种非常受欢迎的设计方案。
本文将介绍一种基于单片机的万年历设计。
二、设计原理1.显示模块:采用液晶显示屏作为显示模块,可以显示日期、时间等信息。
2.时钟模块:基于RTC(实时时钟)模块,用于获取当前日期和时间。
3.按键模块:采用按键模块作为输入模块,用于设置日期和时间、切换显示模式等。
4.控制模块:基于单片机,用于控制各个模块的工作,并进行相关的计算和显示。
三、硬件设计1.单片机选择在本设计中,选择了一款常用的单片机,STM32F103C8T6、它具有低功耗、高性能的特点,并且具备丰富的外设接口,非常适合用来设计万年历。
2.RTC模块选择在本设计中,选择了一款常用的RTC模块,DS1302、它具有低功耗、稳定性好的特点,并且具备SPI接口,非常适合用来获取当前日期和时间。
3.液晶显示屏选择在本设计中,选择了一款常用的液晶显示屏,1602液晶显示屏。
它具有较大的屏幕尺寸、低功耗的特点,并且可以显示多行字符,非常适合用来显示日期、时间等信息。
4.按键模块选择在本设计中,选择了一款常用的按键模块,4x4按键模块。
它具备4行4列的按键布局,可以满足设置日期和时间、切换显示模式等功能的需求。
五、软件设计1.初始化设置在软件设计中,首先需要对各个硬件模块进行初始化设置。
2.获取当前日期和时间使用RTC模块获取当前日期和时间,并将其存储在相应的变量中。
3.显示日期和时间使用液晶显示屏将当前日期和时间显示出来。
4.设置日期和时间通过按键模块获取用户的输入,并将对应的日期和时间设置到RTC模块中。
5.切换显示模式通过按键模块获取用户的输入,并根据用户的选择切换不同的显示模式,例如切换到年模式、月模式、日模式等等。
六、总结通过以上的设计,基于单片机的万年历完成了日期和时间的获取、显示和设置等功能。
基于51单片机的万年历设计
基于51单片机的万年历设计一、系统设计方案本万年历系统主要由 51 单片机、时钟芯片、液晶显示屏、按键等部分组成。
51 单片机作为核心控制器,负责整个系统的运行和数据处理。
时钟芯片用于提供精确的时间信息,液晶显示屏用于显示万年历的相关内容,按键则用于设置时间和功能切换。
二、硬件设计1、单片机选型选用常见的 51 单片机,如 STC89C52 单片机,它具有性能稳定、价格低廉、易于编程等优点。
2、时钟芯片选择 DS1302 时钟芯片,该芯片能够提供高精度的实时时钟,具有闰年补偿功能,并且可以通过串行接口与单片机进行通信。
3、液晶显示屏采用 1602 液晶显示屏,能够清晰地显示字符和数字,满足万年历的显示需求。
4、按键电路设计四个按键,分别用于时间设置、功能切换、加和减操作。
三、软件设计1、主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、时钟芯片初始化、液晶显示屏初始化等。
然后读取时钟芯片中的时间数据,并在液晶显示屏上显示出来。
接着进入循环,不断检测按键状态,根据按键操作执行相应的功能,如时间设置、功能切换等。
2、时钟芯片驱动程序通过单片机的串行接口向 DS1302 发送命令和数据,实现对时钟芯片的读写操作,获取准确的时间信息。
3、液晶显示屏驱动程序编写相应的函数,实现对1602 液晶显示屏的字符和数字显示控制。
4、按键处理程序采用扫描方式检测按键状态,当检测到按键按下时,执行相应的按键处理函数,实现时间设置和功能切换等操作。
四、时间设置功能通过按键操作进入时间设置模式,可以分别设置年、月、日、时、分、秒等信息。
在设置过程中,液晶显示屏会显示当前设置的项目和数值,并通过加、减按键进行调整。
设置完成后,将新的时间数据保存到时钟芯片中。
五、显示功能万年历的显示内容包括年、月、日、星期、时、分、秒等信息。
通过合理的排版和显示控制,使这些信息在液晶显示屏上清晰、直观地呈现给用户。
六、系统调试在完成硬件和软件设计后,需要对系统进行调试。
(完整版)基于51单片机的万年历的设计
单片机课程实训SCM PRACTICAL TRAINING目录第一部分课程设计任务书 (1)一、课程设计题目 (1)二、课程设计时间 (1)三、实训提交方式 (1)四、设计要求 (1)第二部分课程设计报告 (2)一、单片机发展概况 (2)二、MCS-51单片机系统简介 (2)三、设计思想 (3)四、硬件电路设计 (3)1. 总体设计 (3)2. 晶振电路 (4)3. 复位电路 (4)4. DS1302时钟电路 (5)5. 温度采集系统电路 (5)6. 按键调整电路 (6)7. 闹钟提示电路 (6)五、软件设计框图 (7)六、程序源代码 (8)1. 主程序 (8)2. 温度控制程序 (11)3. 日历设置程序 (13)4. 时钟控制程序 (18)5. 显示设置程序 (20)七、结束语 (23)八、课程设计小组分工 (23)九、参考文献 (23)第一部分课程设计任务书一、课程设计题目用中小规模集成芯片设计制作万年历。
二、课程设计时间五天三、实训提交方式提交实训设计报告电子版与纸质版四、设计要求(1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。
(2)可通过键盘自动调整时间。
(3)具有闹钟功能。
(4)能够显示环境温度,误差小于±1℃(5)计时精度:月误差小于20秒。
第二部分课程设计报告一、单片机发展概况单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段:第一阶段(1976-1978):初级单片机微处理阶段。
该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。
第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。
第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。
基于单片机的电子万年历的设计-大学毕业(设计)论文
学号:毕业设计题目:基于单片机的电子万年历的设计作者届别 2013院别物理与电子学院专业电子科学与技术指导老师职称讲师完成时间2013年5月毕业设计(论文)摘要智能电子万年历系统是由硬件与软件相结合而设计,而它是以AT89C55单片机作为主控核心与时钟电路、显示电路、复位电路、振荡电路、报警闹铃电路、温度检测电路、独立键盘电路等模块组成硬件系统,其中时钟电路采用了时钟芯片DS12887,显示电路采用了LCD1602液晶显示,温度检测电路采用了DS18B20温度传感器;而软件使用了Keil软件进行C语言编程、Proteus软件进行仿真测试,Altium Designer软件进行原理设计。
系统采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,且具有整点报时、时间校准及设置闹钟等功能。
关键词:单片机AT89C55 ;时钟电路;电子万年历;液晶显示毕业设计(论文)AbstractThe design of Intelligent electronic calendar system is composed of hardware and software, and it is based on A T89C55 microcontroller as the master core .It is Composed of clock circuit, display circuit, reset circuit, oscillation circuit, alarm alarm circuit, temperature detection circuit, keyboard circuit module hardware. the clock circuit using the clock chip DS12887, the display circuit displays useing LCD1602 liquid crystal, temperature detection circuit using DS18B20 temperature sensor; It is simulated by C programming language and Proteus software useing Keil software, Use Altium Designer software design principles. The system adopts visual digital display, can display year, month, day, Circle day, hours, minutes, seconds and temperature information, and with the whole point timekeeping, time and set the alarm function.keyword : MCU AT89C55; clock circuit; electronic calendar; liquid crystal display.目录第一章引言 .......................................................................................................................... 错误!未定义书签。
「基于单片机的多功能电子万年历设计」
基于单片机的多功能电子万年历设计引言在现代社会中,计算机及其应用已经成为我们生活中不可或缺的一部分。
计算机科技的发展不仅使我们的生活更加便捷,还为我们提供了更多的娱乐和功能选择。
在这样一个科技高度发达的时代,电子万年历作为一种基于单片机技术的应用产品,正逐渐走进人们的生活。
而本文将着重对基于单片机的多功能电子万年历进行设计与实现。
一、设计目标本次设计主要是基于单片机的多功能电子万年历。
设计目标包括:1.显示日期、时间和星期几的功能。
2.具备日历计算功能,能够计算今天是该年的第几天,该周的第几天等信息。
3.具备闹钟和定时器功能。
二、设计思路基于单片机的多功能电子万年历的设计理念是通过单片机与LCD显示屏、温度传感器、按键等外设组合实现多种功能。
具体实现步骤如下:1. 使用单片机和RTC(Real-Time Clock)芯片实现时间的获取和处理。
RTC芯片可以提供准确的时钟信息,单片机可以通过与RTC芯片的通信来读取时钟信息,并进行相应的处理。
2.使用单片机与LCD显示屏进行通信,将获取的时间、日期和星期信息显示在LCD显示屏上。
3.设计按键接口,通过按键的触发实现切换功能或进行相应操作。
例如,通过按键的触发可以实现日期、时间的调整,以及闹钟和定时器的设置等。
4.使用单片机和温度传感器实现温度测量功能。
通过温度传感器读取当前温度信息,并将其显示在LCD屏幕上。
5.使用定时器功能实现闹钟和定时器的功能。
单片机可以通过定时器来控制闹钟和定时器的开启与关闭,并通过LCD屏幕上的显示提醒用户。
三、电路设计本次设计中需要使用的元器件主要包括单片机、RTC芯片、LCD显示屏、温度传感器和按键。
其中,单片机为本次设计的核心控制器,RTC芯片用于提供准确的时钟信息,LCD显示屏用于显示时间、日期和其他信息,温度传感器用于测量当前温度信息,按键用于触发相应的操作。
四、软件设计本次设计中需要编写相应的软件程序,用于读取RTC芯片提供的时钟信息,并将其显示在LCD屏幕上。
基于单片机的电子万年历设计报告
基于单片机的万年历设计报告一、研究意义随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。
日历是人们不可或缺的日常用品。
但一般日历都为纸制用品,使用不便,寿命不长。
电子万年历采用智能电子控制和显示技术,改善了纸制日历的缺陷。
本设计以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。
基于单片机的电子万年历设计
毕业设计报告(论文)报告(论文)题目:基于单片机的电子万年历的设计作者所在系部:电子工程系作者所在专业:通信工程作者所在班级: B10231作者姓名:作者学号:指导教师姓名:完成时间: 2014年6月10日北华航天工业学院教务处制摘要本文介绍了基于STC89C52单片机的电子万年历的软硬件设计方法。
采用从软件设计、软件仿真到硬件实验板仿真进而焊接硬件电路的设计步骤完成了本课题。
本系统以STC89C52单片机为核心控制器,用串行时钟芯片DS1302来记录时间,它能够以秒为单位进行计时。
万年历显示部分采用LCD12864,可以在12864上同时显示年、月、日、时、分、秒,星期、阴阳历、天干地支以及实时温度,此外本系统还具有时间校准、整点半点报时和闹钟功能。
本文详尽叙述了系统中所用到的各种软硬件的特点,并就软硬件设计过程中出现的种种问题做出了思考,并最终一一解决,在单片机设计万年历这一成熟的产品领域里,应用所学知识,做出了自己的有益尝试。
关键词:单片机 STC89C52 万年历 DS1320 LCD12864AbstractThis paper introduces the hardware structure of an electronic calendar based on STC89C52 single-chip microcomputer and a software and hardware design method.The use of design steps from software design, software simulation to hardware experiment simulation and hardware circuit board weldin completed this topic.System’s controller is STC89C52 single-chip microcomputer, serial clock chip DS1302 is usede to record the time for calender, it can be to time the time in seconds, but also has an automatic leap year compensation and other more functions. Calendar using intuitive digital display, which is on the LCD12864 display year, month, day,hour, minute, second and week, at the same time,the solar calendar, lunar calendar and real-time temperature can be displayed, moreover,it has time calibration function and alarm clock function, and so on.This paper describes the characteristics of the system using a variety of software and hardware in details,and I gradually considered and solved some problems appeared in the process of Software and hardware design.In the mature product eara of SCM calender design, I apply relevant knowledge and has made a beneficial attempt.Keyword:single-chip microcomputer STC89C52 DS1320 electronic calendar 12864目录第1章绪论 (6)1.1课题产生背景及其意义 (6)1.2电子万年历的研究现状与发展趋势 (6)1.3本课题主要流程和论文章节安排 (7)1.4小结 (7)第2章课题设计方案选择 (8)2.1单片机电子万年历系统概述 (8)2.2单片机方案选择 (8)2.3计时方案选择 (9)2.4显示方案选择 (9)2.5温度传感器方案选择 (10)2.6按键方案选择 (10)2.7报时方案选择 (10)2.8课题设计流程说明 (11)2.9小结 (11)第3章软件设计部分 (12)3.1模块化程序设计简介 (12)3.2主程序流程描述 (12)3.2各子程序设计 (13)3.2.1 DS1302时钟子程序 (14)3.2.2 LCD12864显示子程序 (15)3.2.3 DS18B20温度传感器子程序 (17)3.2.4 独立按键子程序 (18)3.2.5 阳历转阴历显示程序 (20)3.2.6 干支纪年子程序 (21)3.2.7 星期计算子程序 (21)3.2.8 延时子程序 (22)3.3程序调试的常见问题说明 (22)3.4实验板仿真 (23)3.5小结 (23)第4章硬件设计部分 (24)4.1硬件设计整体框架 (24)4.2单片机最小系统设计 (24)4.3外围电路设计 (25)4.3.1 温度传感器电路 (25)4.3.2 时钟电路 (25)4.3.3 按键电路与蜂鸣器电路 (26)4.3.4 12864显示电路 (26)4.4小结 (27)第5章结论 (28)5.1课题成果 (28)5.1.1 焊接实物图展示 (28)5.1.2上电实物图展示 (28)5.2可改进部分 (29)5.3课题收获 (29)致谢 (30)参考文献 (31)附录 (32)基于单片机的电子万年历的设计第1章绪论1.1 课题产生背景及其意义上世纪九十年代以来,电子技术的发展势头强劲,它使得人类社会发生了深刻变革,并且到目前为止这种变革依然在迅猛发展,而半导体技术的发展使得摩尔定律所预言的发展周期越来越短,电子产品竞争激烈,产品更新速度更是让人应接不暇。
基于-单片机电子万年历设计
毕业设计报告(论文) 基于单片机的电子万年历设计所属系电子工程系专业自动化学号01208435姓名柏亚林指导教师林起讫日期2012.3 --- 2012.5设计地点东南大学成贤学院东南大学成贤学院毕业设计报告(论文)诚信承诺本人承诺所呈交的毕业设计报告(论文)及取得的成果是在导师指导下完成,引用他人成果的部分均已列出参考文献。
如论文涉及任何知识产权纠纷,本人将承担一切责任。
学生签名:日期:摘要随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。
它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。
该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
本电路为实现电子万年历的功能,采用单片机AT89S52,辅助以必要的外围电路,用C语言编写程序,并进行模块化设计而成的电子万年历系统.它通过LCD能正确显示阴阳历星期和时分秒,具有功能稳定,精确度高和可调的特点。
关键词:单片机AT89S52;DS1302;LCD;AbstractAlong with the rapid development of technology, the passage of time, to view the sun, from the pendulum clocks are now electric clock, human continuously research, innovation record. The United States out Juan DALLAS has fine current charge of low power consumption can real time clock circuit DS1302. It can be to year, month, day, Sunday, when, minutes and seconds for the time, also has a leap year compensation and other functions, and the DS1302 long service life and small error. For digital electronic calendar using intuitive digital display, can also shows that year, month, day, Sunday, when, minutes and seconds and temperature, information, but also has time calibration etc. Function. This circuit AT89S52 SCM as the core, power consumption is small, can be in 3 V of low-pressure work, voltage can choose 3 ~ 5 V voltage power supply.To sum up the calendar has read the convenient, direct display, functional diversity, simple circuit, low cost, and many other advantages, conform to the trend of the development of electronic instruments, and has a broad market prospect.This circuit to realize the function of electronic calendar, USES the monolithic integrated circuit AT89S52, aided by the necessary peripheral circuit, with the C language program, and the modular design and into electronic calendar system. It through the LCD can display correct YinYangLi week and determined when, with function stability, high precision and adjustable characteristics.Keywords: monolithic integrated circuit AT89S52; DS1302; LCD;目录摘要IAbstractII第一章绪论11.1 设计目的与意义11.2 方案选择与DIY电子万年历的研究情况1 1.2.1时钟芯片选择11.2.2键盘选择21.2.3显示模块选择31.2.4 DIY万年历的研究情况4第二章主要硬件描述42.1 89C52模块42.2 显示模块LCM1286452.2.1液晶模块概述52.2.2液晶模块特点52.3 芯片DS1302简介52.4 芯片DS18B20简介6第三章硬件设计与实现63.1单片机最小系统的设计73.2时钟电路的设计73.3温度采集模块的设计83.4人机交互模块设计8第四章系统软件设计与实现104.1主要算法流程图描述104.2 LCM16824子程序的实现154.3 DS1302子程序的实现164.4 DS18B20子程序的实现174.5键盘子程序的实现184.6主程序的实现19第五章测试结果分析与结果205.1测试结果分析205.2测试总结20结束语21致22参考文献24附录一作品实物图25 附录二原理图26附录三部分程序27第一章绪论1.1 设计目的与意义随着电子技术的高速发展,对电子方面人才的要求越来越高,不仅要求其具备相关的专业理论知识,还要求其具有较强的设计、制作等实践动手能力.此次学校举行的电子设计无疑是对从事电子相关专业的人的一次很好的锻炼和考验,是培养信息人才的一次良好的机会,为其提供了一个理论知识与实践相结合的平台。
基于51单片机的万年历设计流程
基于51单片机的万年历设计流程
基于51单片机的万年历设计流程可以分为以下几个步骤:
1. 确定需求:首先,你需要明确你的万年历需要有哪些功能。
例如,是否需要显示日期、时间、星期,是否需要闹钟功能,是否需要手动或自动校准等。
2. 选择硬件:选择合适的单片机作为主控制器。
常用的单片机有8051系列,如AT89C51、AT89S52等。
此外,还需要选择适当的显示模块、按键模块、实时时钟模块等。
3. 设计硬件电路:根据选择的硬件设备,设计电路原理图和PCB图。
需要
考虑单片机的引脚连接、电源供给、时钟源、外部扩展等问题。
4. 编写软件程序:根据硬件电路和需求,编写相应的软件程序。
这包括初始化程序、主程序、中断服务程序等。
5. 调试和测试:将编写好的程序下载到单片机中,进行实际测试。
根据测试结果,对程序进行调试和修改,直到满足设计要求。
6. 生产:完成调试后,就可以进行批量生产了。
在生产过程中,还需要对产品进行质量检测,确保每个产品都能正常工作。
7. 后期维护:在产品上市后,可能需要对产品进行维护或升级。
例如,如果用户在使用过程中发现了问题,或者有新的需求,就需要对产品进行改进或升级。
以上是基于51单片机的万年历设计的基本流程,但具体的步骤可能会根据具体的需求和硬件设备有所不同。
基于51单片机的电子万年历系统的设计
参考内容
一、引言
单片机是现代电子设备中的重要组成部分,广泛应用于各种嵌入式系统设计。 51单片机作为一种经典的微控制器,因其结构简单、易于编程、可靠性高等优点, 被广泛用于各种领域,如智能家居、工业控制、物联网等。万年历作为一种日常 生活中常见的计时工具,具有显示日期、时间、星期、月份等功能,对于人们的 日常生活和工作有着重要的作用。本次演示将介绍一种基于51单片机的万年历设 计。
二、系统设计
1、硬件设计
基于51单片机的万年历设计需要硬件和软件的配合实现。硬件部分主要包括 51单片机、显示模块、按键输入模块和时钟芯片等。其中,51单片机作为主控制 器,负责处理各种数据和控制信号;显示模块用于显示日期、时间等信息;按键 输入模块用于用户输入操作;时钟芯片则为系统提供实时时间。
基于51单片机的电子万年历系 统的设计
目录
01 一、概述
03 三、软件设计
02 二、硬件设计 04 四、系统调试与优化
目录
05 五、应用场景及前景
07 参考内容
06 六、结论
随着科技的不断发展,单片机已经成为现代于51单片机的电子万年历系统设计具有广泛的实际应用价值。 本次演示将详细介绍这种系统的设计过程和实现方法。
感谢观看
首先需要进行硬件搭建,包括选择合适的单片机、显示模块、按键输入模块 和时钟芯片等,并将其连接起来。需要注意的是,在搭建硬件时需要考虑各个模 块之间的接口和连接方式,以确保系统能够正常工作。
2、软件编程
在硬件搭建完成后,需要进行软件编程。首先需要进行系统初始化,包括对 单片机进行初始化和对显示进行清屏处理。然后需要进行按键处理和时钟数据处 理,以实现用户输入和实时时间的读取。最后需要进行显示处理,将处理后的数 据显示到显示模块上。
(完整word版)基于单片机的万年历设计
基于单片机的万年历设计二、实验要求设计一个万年历,将时钟显示在LCD1602的显示屏上并且可以进行年、月、日以及时、分、秒的设置。
此外还可以通过按键进行闹钟设置以及事件提醒功能,用蜂鸣器进行闹铃提醒。
最后附加一个温湿度检测的功能,用温湿度传感器检测室内的温湿度并将温湿度数据在显示屏上显示出来。
三、实验设备和仪器1.用STC89C52芯片作为系统板的主控芯片2.DHT11温湿度传感器3.DS1302时钟芯片4.LCD1602显示屏四、实验各模块原理介绍4.1 STC89C52单片机STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
(1)主要特性8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间;可直接使用串口下载;(2)器件参数1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。
2. 工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V 单片机)3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O 口(32个),复位后为:P1/P2/P3 是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载用户程序,数秒即可完成一片。
基于51单片机电子万年历设计
一、引言电子万年历是一种以数字形式实时显示日期、星期和时间等信息的电子设备。
在现代人日常生活中,万年历是一种常见的小型电子产品。
本文将基于51单片机设计一款简单实用的电子万年历。
二、设计原理1.时钟模块:采用DS1302实时时钟模块。
DS1302通过三线式串行接口与51单片机进行通信,可以实时获取日期、星期和时间等信息。
2.显示模块:使用数码管显示日期、星期和时间等信息。
共使用四块共阳数码管,采用数码管模块进行驱动,通过IO口进行数据传输。
3.按键模块:设计四个按键,分别为设置、上、下和确定。
通过按键来调整日期、星期和时间等信息。
4.闹钟功能:加入闹钟功能,可以设定闹钟时间,到达设定时间时,会有提示音。
5.温湿度传感器:加入温湿度传感器,可以实时监测环境温湿度,并在数码管上进行显示。
6.外部电源:由于51单片机工作电压较高,需要使用外部电源进行供电。
三、硬件设计1.电源电路:使用稳压电源芯片LM7805进行5V稳压,将稳压后的电压供给单片机和各个模块。
2.时钟模块:DS1302模块与单片机通过串行通信进行连接。
时钟模块上的时钟信号、数据信号和复位信号分别与单片机的IO口相连。
3.数码管显示模块:共有四块共阳数码管,通过595芯片进行驱动。
单片机的IO口与595芯片的串行、时钟和锁存引脚相连,595芯片的输出引脚与数码管的各段相连。
4.按键模块:通过电阻分压来实现按键功能,按下按键时,相应的IO口会被拉低。
5.闹钟功能:使用蜂鸣器来产生提示音,通过IO口与单片机相连。
6.温湿度传感器:使用DHT11温湿度传感器。
传感器的数据引脚通过IO口与单片机相连。
四、软件设计1.时钟显示:通过DS1302获取日期、星期和时间等信息,将其转化为数码管需要的编码格式,并通过595芯片进行显示。
2.按键操作:对按键进行扫描,根据按键的不同操作进行相应的处理。
例如按下设置键进行日期和时间的设置,按下上下键进行数值的变化,按下确定键进行数值的确认。
基于51单片机的电子万年历的设计
设计说明书基于51单片机的电子万年历的设计系部电子信息与控制工程系专业名称电子信息工程技术班级电子姓名学号指导教师2014 年 06 月 23 日基于51单片机的电子万年历的设计摘要电子万年历是单片机系统的一个应用,由硬件和软件相配合使用。
硬件由主控器、时钟电路、温度检测电路、显示电路、键盘接口5个模块组成。
主控模块用AT89C52、时钟电路用时钟芯片DS1302、显示模块用LED数码管、温度检测采用DS18B20温度传感器、键盘接口电路用普通按键接上拉电阻完成;软件利用C语言编程实现单片机程序控制。
单片机通过时钟芯片DS1302获取时间数据,DS18B20采集温度信号送该给单片机处理,单片机再把时间数据和温度数据送给74LS154译码,然后通过三极管C9015放大驱动LED数码管显示阳历年、月、日、时、秒、闹钟、星期、温度。
关键词:电子万年历;单片机;温度传感器;时钟;数码显示。
目录1 引言 (4)2 功能要求 (5)3 方案论证与设计 (6)3.1控制部分的方案选择 (6)3.2测温部分的方案选择 (6)3.3显示部分的方案选择 (7)4 系统硬件电路设计 (8)4.1主控器AT89S52 (8)4.2时钟电路DS1302 (8)4.2.1. DS1302的性能特性 (8)4.2.2 DS1302数据操作原理 (9)4.3测温电路的设计 (11)4.3.1 温度传感器工作原理 (11)4.3.2 DS18B20与单片机的接口电路 (15)4.4键盘接口的设计 (15)5 系统程序的设计 (16)5.1阳历程序设计 (16)5.2时间调整程序设计 (16)5.3温度程序设计 (16)5.3.1 主程序 (17)5.3.2 读出温度子程序 (17)5.3.3 温度转换命令子程序 (17)5.3.4 计算温度子程序 (18)5.3.5显示数据刷新子程序 (18)6调试及性能分析 (19)6.1调试步骤 (19)6.2性能分析 (19)7总结 (20)致谢 (21)参考文献 (22)附1 实物图 (23)1 引言随着微电子技术和超大规模集成电路技术的不断发展,家用电子产品不但种类日益丰富,而且变得更加经济实用,单片微型计算机体积小、性价比高、功能强、可靠性高等独有的特点,在各个领域得到了广泛的应用。
基于单片机的电子万年历的设计
4总结
经过测试,本文设计的电子万年历 具备显示直观、功能多样、电路简洁、成 本低廉等诸多优点,符合电子计时器的 发展趋势,具有广阔的市场前景。
参考文献: …裴彦纯,陈志超.基于单片机系统的红 外遥控器应用【J1.现代仪器,2004(3)46—48.
f2】高海生,杨文焕.单片机应用技术大全 fM】.第三版.成都:西南交通大学出版社, 2003:200.
关键词:AT89S52;单片机;时钟芯片
Key words:AT89S52;singlechip;clock chip
中图分类号:1P36
.
文献标识码:A
文章编号:1006--431l(20lO)06-0063_01
基于单片机的电子万年历的设计
基于单片机的电子万年历的设计摘要本文以AT89C2051单片机为主控芯片,采用美国DALLAS公司的涓细充电时钟芯片DS1302为时钟控制芯片,设计了一个电子万年历,能够显示年、月、日、时、分、秒、星期信息。
关键词实时显示 AT89C2051 单片机目录0、引言 (3)1、电子万年历的硬件电路设计 (3)2、主控制器AT89C2051 (3)3、DSl302时钟芯片的工作原理 (4)3.1 引脚功能 (4)3.2 DSl302的控制字节 (4)3.3 DSl302的复位特征和时钟控制要求 (4)3.4 数据输入输出I/O (5)3.5 DSl302的寄存器 (5)4、DS1302与微控制器的连接及软件控制 (5)4.1 DSl302与AT89C2051的连接 (5)4.2 软件控制 (6)4.3 根据在调试中出现的问题,作如下说明: (9)5、总结 (9)0、引言日常生活生产中有许多地方需要电子时钟和日历,比如家庭,办公室,以及一些智能化仪表。
目前的电子时钟日历系统多采用时钟芯片以简化系统的设计。
DSl302是众多时钟芯片中一款性价比较高的产品。
以AT89C2051单片机为主控芯片,采用美国DALLAS 公司的实时时钟芯片DSl302为时钟控制芯片,设计并实现的各种时钟控制电路,应用于各种家电、实验设备等。
其能够显示年、月、日、时、分、秒、星期。
并且可根据需要对各个位进行调节。
1、电子万年历的硬件电路设计硬件电路设计是电子时钟日历系统设计的第一步。
系统由主控模块,时钟芯片。
显示电路、键盘扫描电路共四个部分组成,电路构成,框图如图l所示。
图l 电子万年历系统的框架图主控芯片使用MCU-51系列的AT89C2051单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。
采用DSl302作为主要计时芯片,可以作到计时准确。
更重要的是,DSl302可以在很小的后备电源(2.5-5.5V电源,在2.5V 时耗电小于300Na)下继续计时,并可编程选择多种充电电源来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
基于单片机控制的电子万年历设计
基于单片机控制的电子万年历设计1设计要求功能:电子万年历能显示阳历、时间、室温,并能表明是否是闰年,通过按键实现切换。
本课题以单片机为核心,设计并制作出智能LCD电子钟,具有以下基本功能:计时、秒、分、时、天、周、月、年;能进行时间、年份、日期、星期显示;能区分是否闰年;能检测室温并显示。
扩展功能部分可以通过控制按键使时间暂停、可以调整校正时间并通过按键切换轮流显示时间、年份、日期、星期。
2方案论证与对比2.1液晶显示器控制方式选择采用LCD液晶显示,具有超精致影像画质、十足平面显示、节省空间、节省能源等优点,但按控制方式不同,LCD可分为被动矩阵式LCD及主动矩阵式LCD两种。
可根据不同需要采用不同的方式。
方案一被动矩阵式LCD被动矩阵式LCD在亮度及可视角方面受到较大的限制,反应速度也较慢。
由于画面质量方面的问题,使得这种显示设备不利于发展为桌面型显示器,但成本低廉。
方案二主动矩阵式LCD目前应用比较广泛的主动矩阵式LCD,也称TFT-LCD(Thin Film Transistor-LCD,薄膜晶体管LCD)。
TFT液晶显示器是在画面中的每个像素内建晶体管,可使亮度更明亮、色彩更丰富及更宽广的可视面积。
与CRT显示器相比,LCD显示器的平面显示技术体现为较少的零件、占据较少的桌面及耗电量较小,但CRT技术较为稳定成熟。
相比之下,本设计当中选用方案二主动矩阵式LCD方式。
2.2 并行接口动态显示电路选择可以采取串行接口动态显示电路或者并行接口动态显示电路,比较如下:方案一串行接口动态显示电路利用8051系列单片机内部的串行接口,也可以实现动态显示及键盘处理。
这样不但可以节省8051的并行I/O接口,而且在大多数不用单行口的情况下,可免于扩展接口。
在这种方法中,串行口工作在方式0状态,相当于一个移位寄存器,其输入/输出通过RXD引脚,移位脉冲则由TXD输出。
每次输入或输出8位数据(一个字节)。
基于单片机的电子万年历设计
具体实现功能:(1) 显示年月日时分秒及星期信息(2) 具有可调整日期和时间功能(3) 与即时时间同步1.4 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;LCD 液晶显示屏作为显示。
2 系统的硬件设计与实现2.1 电路设计框图图1系统原理图图2 主控制系统AT89S52 主控制模 块DS1302时钟模块 LCD 液晶显示屏显示模块 键盘模块图3 DS1302的引脚图图4 LCD液晶显示屏显示模块3 系统的软件设计3.1 程序流程框图图5主程序流程图图6 时间调整程序流程图附录一:系统电路图附录二:系统程序#include <REG51.H>#include <intrins.h>//#include "LCD1602.h"//#include "DS1302.h"#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P1^7; //实时时钟时钟线引脚sbit DS1302_IO = P1^6; //实时时钟数据线引脚sbit DS1302_RST = P1^5; //实时时钟复位线引脚sbit ACC0 = ACC^0;sbit ACC7 = ACC^7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数sbit Set = P2^0; //模式切换键sbit Up = P2^1; //加法按钮sbit Down = P2^2; //减法按钮sbit out = P2^3; //立刻跳出调整模式按钮char done,count,temp,flag,up_flag,down_flag;uchar TempBuffer[5],week_value[2];void show_time(); //液晶显示程序1602液晶显示部分子程序//Port Definitionssbit LcdRs = P2^5;sbit LcdRw = P2^6;sbit LcdEn = P2^7;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数unsigned char LCD_Wait(void){ LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;return DBPort;}//向LCD写入命令或数据#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意顺序LcdEn=1;_nop_();//注意顺序LcdEn=0;_nop_();LCD_Wait();}//设置显示模式#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode); }//设置输入模式#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCDvoid LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动} //液晶字符输入的位置void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示void Print(unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}//DS1302时钟部分子程序typedef struct __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[11];unsigned char TimeString[9];}SYSTEMTIME; //定义的时间类型SYSTEMTIME CurrentTime;#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 0x8Cvoid 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;} unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据{ unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); // 地址,命令ucData = DS1302OutputByte(); // 读1Byte数据DS1302_CLK = 1;DS1302_RST = 0;return(ucData);}void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组{unsigned char ReadV alue;ReadValue = Read1302(DS1302_SECOND);Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = ((ReadV alue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = ((ReadV alue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = ((ReadV alue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadV alue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadV alue&0x0F); }void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]{ if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为2007/07/22{ Time->DateString[0] = '2';Time->DateString[1] = '0';Time->DateString[2] = Time->Year/10 + '0';Time->DateString[3] = Time->Year%10 + '0';}else{ Time->DateString[0] = ' '; Time->DateString[1] = ' ';Time->DateString[2] = ' '; Time->DateString[3] = ' ';}Time->DateString[4] = '/';if(hide_month<2){Time->DateString[5] = Time->Month/10 + '0';Time->DateString[6] = Time->Month%10 + '0';}else{ Time->DateString[5] = ' '; Time->DateString[6] = ' ';}Time->DateString[7] = '/';if(hide_day<2){Time->DateString[8] = Time->Day/10 + '0';Time->DateString[9] = Time->Day%10 + '0';}else{Time->DateString[8] = ' ';Time->DateString[9] = ' '; }if(hide_week<2){week_value[0] = Time->Week%10 + '0'; //星期的数据另外放到week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示}else { week_value[0] = ' ';}week_value[1] = '\0';Time->DateString[10] = '\0'; //字符串末尾加'\0' ,判断结束字符}void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组TimeString[];{ if(hide_hour<2){ Time->TimeString[0] = Time->Hour/10 + '0';Time->TimeString[1] = Time->Hour%10 + '0';}else{ Time->TimeString[0] = ' ';Time->TimeString[1] = ' ';}Time->TimeString[2] = ':';if(hide_min<2){ Time->TimeString[3] = Time->Minute/10 + '0';Time->TimeString[4] = Time->Minute%10 + '0';}else {Time->TimeString[3] = ' ';Time->TimeString[4] = ' '; }Time->TimeString[5] = ':';if(hide_sec<2){Time->TimeString[6] = Time->Second/10 + '0';Time->TimeString[7] = Time->Second%10 + '0';}else{Time->TimeString[6] = ' ';Time->TimeString[7] = ' '; }Time->DateString[8] = '\0';}void Initial_DS1302(void) //时钟芯片初始化{ unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) //判断时钟芯片是否关闭{Write1302(0x8e,0x00); //写入允许Write1302(0x8c,0x07); //以下写入初始化时间日期:07/07/25.星期: 3. 时间: 23:59:55 Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); //禁止写入}}void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}/*延时子程序*/void mdelay(uint delay){ uint i;for(;delay>0;delay--)for(i=0;i<62;i++) //1ms延时.}void outkey() //跳出调整模式,返回默认显示{uchar Second;if(out==0){ mdelay(8);count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_y ear=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); //写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); //禁止写入done=0;while(out==0);}}void Upkey()//升序按键{Up=1;if(Up==0)mdelay(8);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp+1; //秒数加1up_flag=1; //数据调整后更新标志if((temp&0x7f)>0x59) //超过59秒,清零temp=0;break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp+1; //分数加1up_flag=1;if(temp>0x59) //超过59分,清零temp=0;break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp+1; //小时数加1up_flag=1;if(temp>0x23) //超过23小时,清零temp=0;break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp+1; //星期数加1up_flag=1;if(temp>0x7)temp=1;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp+1; //日数加1up_flag=1;if(temp>0x31)temp=1;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp+1; //月数加1up_flag=1;if(temp>0x12)temp=1;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp+1; //年数加1up_flag=1;if(temp>0x85)temp=0;break;default:break;}while(Up==0); }}void Downkey()//降序按键{Down=1;if(Down==0){mdelay(8);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp-1; //秒数减1down_flag=1; //数据调整后更新标志if(temp==0x7f) //小于0秒,返回59秒temp=0x59;break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp-1; //分数减1down_flag=1;if(temp==-1)temp=0x59; //小于0秒,返回59秒break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp-1; //小时数减1down_flag=1;if(temp==-1)temp=0x23;break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp-1; //星期数减1down_flag=1;if(temp==0)temp=0x7;;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp-1; //日数减1down_flag=1;if(temp==0)temp=31;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp-1; //月数减1down_flag=1;if(temp==0)temp=12;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp-1; //年数减1down_flag=1;if(temp==-1)temp=0x85;break;default:break;}while(Down==0);}}void Setkey()//模式选择按键{Set=1;if(Set==0){ mdelay(8);count=count+1; //Setkey按一次,count就加1done=1; //进入调整模式while(Set==0);}}void keydone()//按键功能执行{ uchar Second;if(flag==0) //关闭时钟,停止计时{Write1302(0x8e,0x00); //写入允许temp=Read1302(0x80);Write1302(0x80,temp|0x80);Write1302(0x8e,0x80); //禁止写入flag=1;}Setkey(); //扫描模式切换按键switch(count){case 1:do //count=1,调整秒{outkey(); //扫描跳出按钮Upkey(); //扫描加按钮Downkey(); //扫描减按钮if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据{Write1302(0x8e,0x00); //写入允许Write1302(0x80,temp|0x80); //写入新的秒数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_sec++; //位闪计数if(hide_sec>3)hide_sec=0;show_time(); //液晶显示数据}while(count==2);break;case 2:do //count=2,调整分{hide_sec=0;outkey();Upkey();Downkey();if(temp>0x60)temp=0;if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x82,temp); //写入新的分数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_min++;if(hide_min>3)hide_min=0;show_time();}while(count==3);break;case 3:do //count=3,调整小时{outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x84,temp); //写入新的小时数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_hour++;if(hide_hour>3)hide_hour=0;show_time();}while(count==4);break;case 4:do //count=4,调整星期{hide_hour=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x8a,temp); //写入新的星期数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_week++;if(hide_week>3)hide_week=0;show_time();}while(count==5);break;case 5:do //count=5,调整日{outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x86,temp); //写入新的日数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_day++;if(hide_day>3)hide_day=0;show_time();}while(count==6);break;case 6:do //count=6,调整月{hide_day=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x88,temp); //写入新的月数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_month++;if(hide_month>3)hide_month=0;show_time();}while(count==7);break;case 7:do //count=7,调整年{outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){ Write1302(0x8e,0x00); //写入允许Write1302(0x8c,temp); //写入新的年数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_year++;if(hide_year>3)hide_year=0;show_time();}while(count==8);break;case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); //写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); //禁止写入done=0;break; //count=7,开启中断,标志位置0并退出default:break;}}void show_time() //液晶显示程序{DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据TimeToStr(&CurrentTime); //时间数据转换液晶字符DateToStr(&CurrentTime); //日期数据转换液晶字符GotoXY(0,1);Print(CurrentTime.TimeString); //显示时间GotoXY(0,0);Print(CurrentTime.DateString); //显示日期GotoXY(15,0);Print(week_value); //显示星期GotoXY(11,0);Print("Week"); //在液晶上显示字母 weekDelay1ms(400); //扫描延时}main(){flag=1; //时钟停止标志LCD_Initial(); //液晶初始化Initial_DS1302(); //时钟芯片初始化up_flag=0;down_flag=0;done=0; //进入默认液晶显示while(1){while(done==1) keydone(); //进入调整模式while(done==0){show_time(); //液晶显示数据 flag=0;Setkey(); //扫描各功能键}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由cdled003贡献pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
ValueEngineering63?基于单片机的电子万年历的设计ElectronicCalendarDesignBasedonSinglechip滕振芳TengZhenfang;张昆Zhang(保定职业技术学院,保定071000)Kun(BaodingCollegeofVocationalandTechnical,Baodin9071000,China)摘要:基于单片机的电子万年历以AT89S52单片机为核心控制器,具有显示时问、日期、星期.温度,进行12/24时制转换.整点报时和设王闹铃的功能,具有很强的实用价值。
本文介绍了其硬件电路的设计,并给出了主程序的流程图。
Abstract:Basedtemperatureonthesingleehip。
electroniccalendarwithMCUAT89S52microcontrolleraascorecontrollerhasthefunctionoftime,date,week,display,12/24hourssystemforconversion.OHtimealarmandalarmset.whichhasprogramstrongpracticalvalue.Thisarticledescribesthedesignofitshardwareandshowsthemainflowchart.关键词:AT89S52;单片机;时钟芯片Keywords:AT89S52;singlechip;clockchip中图分类号:1P36.文献标识码:A文章编号:1006--431l(20lO)06-0063_01随着近代大规模集成电路和单片机技术的成熟,出现了糅合多项先进电子技术及现代经典工艺的电子万年历代表了钟表计时业界跨跃性的进步,也给人们的生活带来了诸多方便。
本文设计的基于MCS一51单片机的电子万年历具有读取时间、日期、星期和温度的功能,并能够进行12/24时制转换、整点报时和设置闹铃。
1功能和外观年、月、日、时、分、秒等时间信息,自带可保存时间信息10年的锂电池。
支持12/24时制,并可用二进制数或BCD码表示时间,能够满足设计要求。
温度芯片选用的是DALLAs公司的数字化温度传感器DSl8820,具有3引脚TO一92小体积封装形式;温度测量范围为一55一+125℃,测温分辨率可达0.0625℃,它具有独特的单线总线接口方式,占用单片机的端口较少,可节省大量的引线和逻辑电路。
用户设定的报警温度存储在EEPROM中,掉电后依然保存,性价比非常出色。
驱动芯片选用的是CH451,它是一款整合了数码管显示驱动、键盘扫描控制和“P监控的多功能外围芯片,内置RC震荡电路,可以动态驱动8位数码管或64只LED发光管,具有BCD译码、闪烁、移位等功能,还可以进行64键的键盘扫描。
CH451通过级联的串行接口与单片机交换数据,并且提供上电复位和看门狗等监控功能。
语音芯片选用的是1SDl420,它采用CMOS技术,内含震荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、扬声器驱动及EEPROM阵列。
最小的录放系统仅需麦克风、喇叭、两个按钮、电源及少数电阻电容。
在录放操作结束后,芯片自动进入低功耗节电模式、功耗仅0.5p,A。
根据外观设计要求,本文选用1.2英寸动态数码管,因为数码管的段电流是IOMA,因此电源采用220V交流转5V/lOW的普通电源即可。
因为选用的数码管工作电压有3.6V和1.8V两种,电阻的阻值分别是140欧和320欧,因此选用1/8W的电阻。
3软件设计本文设计的电子万年历要求能够实现如下功能:显示公历2001~2049年日历,星期自动对应,闰年、大、小月份自动调整;12/24时制转换:自动显示温度:在24小时内任意时刻设定4次定时闹铃,响闹时进行中文语音报时:在8.21点整点时敲整点钟声进行正点报时:亮度显示自动调节,即数码管显示亮度在晚上22点至早上7点降低亮度,使显示柔和不刺眼:时钟精度小于等于正负0.2秒/天:停电保持时钟运行十年以上;同时实现按键和红外遥控双重控制调时。
电子万年历的外部面板显示年、月、日、时、分、星期、温度以及12/24时制转换显示灯、走秒显示灯、定闹、整点报时显示灯。
并标注生产厂家及其标志。
2硬件设计2.1总体方案电子万年历包括硬件电路板、显示元件和产品外壳三个部分。
硬件电路板包括核心芯片电路、数码管驱动及显示电路、时钟芯片电路、温度感应、外部按键及语音输出电路几个部分。
核心芯片用来接收和处理外部信号及向外发部元器件发送控制命令,温度感应、外部按键和时钟芯片提供显示的时间、日期和温度信息,通过数码管驱动及显示电路放大单片机输出的电流,并送给数码管显示出来。
语音输出电路在整点或定点闹铃时刻进行语音报时。
电路总体设计框图如图1所示。
2.2元器件选用本文选用的单片机AT89S52是一个低功耗,高性能的CMOS8位单片机,兼容标准MCS一51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和8kISPFlash存储单元,可反复擦写1000次,有效地降低开发成本。
图1总体设计框图时钟芯片选择的是DAUAs公司的新型时钟日历芯片DSl2e887,能够自动产生世纪、电子万年历的软件部分主要实现阳历、阴历计算,时间调整,语音报时等功能。
采用模块化设计思想,便于程序的调试和维护,最终有C语言编程实现。
主程序流程图如图2所示。
4总结经过测试,本文设计的电子万年历具备显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子计时器的发展趋势,具有广阔的市场前景。
参考文献:…裴彦纯,陈志超.基于单片机系统的红外遥控器应用【J1.现代仪器,2004(3)46—48.f2】高海生,杨文焕.单片机应用技术大全fM】.第三版.成都:西南交通大学出版社,2003:200.『3】王为青,邱文勋.51单片机应用开发圈2主程序流程圈案例精选【M】.北京?人民邮电出版社.【4】赵国亮,侯国锐.单片机C语言编程与实例【MJ.北京:人民邮电出版社.作者简介:滕振芳(1982~),女,汉族,河北故城人,工作于保定职业技术学院,职称:助教,研究方向嵌入式系统开发:张昆(1981一),男,汉族,河北满城人,工作于保定职业技术学院,职称:助教,研究方向:嵌入式系统开发。
【5】楼然苗,李光飞.单片机课程设计指导【M】.北京:北京航空航天大学出版社,2005:152~178.万方数据基于单片机的电子万年历的设计作者:作者单位:刊名:英文刊名:年,卷(期):被引用次数:滕振芳,张昆,Teng Zhenfang, Zhang Kun 保定职业技术学院,保定,071000 价值工程 VALUE ENGINEERING 2010,29(6) 0次参考文献(5条) 1.裴彦纯.陈志超基于单片机系统的红外遥控器应用 2004(3) 2.高海生.杨文焕单片机应用技术大全 2003 3.王为青.邱文勋 51单片机应用开发案例精选 4.赵国亮.侯国锐单片机C语言编程与实例 5.楼然苗.李光飞单片机课程设计指导 2005 相似文献(10条) 1.期刊论文张兆朋.ZHANG Zhaopeng 基于AT89S52单片机的自动温控电风扇设计 -现代电子技术2009,32(3)利用单片机设计了电风扇的自动控制系统,分析了硬件电路与软件设计.利用单片机检测18B20采集的温度,根据温度高低,单片机的P2.7脚输出高电平或者低电平,来控制继电器线圈中能否有电流经过,根据继电器线圈通电时,常开触点闭合,设电流经过时,常开触点保持断开,从而实现自动控制电风扇的起停.该系统改变了传统的手动控制电风扇的起停,根据温度高低实现自动控制,方便于夏天人们晚上睡觉时使用.实践证明该系统可靠性高,工作稳定,成本低,实现了弱电控制强电,有较高的应用价值.2.期刊论文陈京培.徐永梅.CHEN Jingpei.XU Yongmei 基于AT89S52单片机的液晶显示控制电路设计 -现代电子技术2008,31(22)液晶显示是目前单片机技术中广泛应用的功能.利用功能强大的AT89S52型单片机和编程软件Visual C++,设计一种新型液晶显示控制电路.从 AT89S52单片机和DMC20261型LCD 液晶显示屏的性能特点入手,结合实际经验实现二者之间的接口设计.经过调试,该控制系统取得了比较满意的设计结果 ,且系统软硬件设计简单方便、稳定可靠,可广泛应用于智能化仪器仪表及各种宣传场所,为嵌入式控制系统提供高灵活、高性价比的解决方案.3.期刊论文刘建川一种基于单片机AT89S52的陶瓷称重电子称 -佛山陶瓷2010,20(3)为了精确计量粉料的使用生产情况和计算、统计生产成本,有必要对粉料储料仓转送到压机的粉料进行计量.本文描述了单片机在粉料流量累积中的软硬件设计,并提出了一些应用中的注意事项.4.期刊论文张兆朋.邹应全.施海凤.Zhang Zhaopeng.Zou Yingquan.Shi Haifeng 基于AT89S52单片机的学校电铃自动控制 -电子技术2010,37(1)目前学校的铃声除了周一到周五正常上课时间铃响之外,周末休息时间电铃也在响,影响了老师同学的休息.通过AT89S52单片机实现对学校电铃的自动控制,周一到周五按作息时间表使电铃发出响声,周末通过按钮可以设置响或不响,使忙碌一周的老师同学能好好休息.同时该系统中包含了时间设置按钮,可用于作息时间不同的学校,1302起到掉电保护的作用,保证停电后时间不受影响.本设计解决了目前周末学校电铃还在响的问题,也可以使用于其他需要电铃的场所.5.期刊论文刘天旺.LIU Tian-wang 基于AT89S52单片机电阻炉炉温控制系统 -南宁职业技术学院学报2009,14(2)根据热处理炉温控制的特点和要求,设计了基于AT89S52单片机的智能化电阻炉温度控制系统,解决了炉温较大波动的问题,实现了无纸化记录热处理过程及参数,降低了热处理生产劳动强度.6.学位论文陈京培 AT89S52单片机实验系统的开发与应用 2007目前单片机应用已渗透到各个领域,单片机技术的发展也因此日新月异。
作为实践性很强的应用型学科,单片机研发及教学离不开实验。
传统的单片机实验系统,需要频繁拔插烧写单片机芯片来编程,依赖于仿真机调试,实验成本高且效率低,已不适应现代科技开发需求。
如何充分合理利用单片机的性能,方便用户高效学习与开发产品成为当前的研究热点。
本文从微处理器、嵌入式系统和C语言等三个方面着手,以AT89S52单片机为核心,设计出功能较强的新型单片机实验系统。