简易万年历的设计说明
简单万年历设计
信电学院电子信息工程专业CDIO一级项目项目设计说明书(2013/2014学年第一学期)项目名称:简单万年历的设计专业班级:电子信息工程学生姓名:学号:指导教师:设计周数:一周设计成绩:2013 年12 月29 日目录1项目设计目的及任务--------------------------------------------------------------22 设计方案--------------------------------------------------------------23 电路仿真与分析--------------------------------------------------------------94项目设计心得-------------------------------------------------------------175参考文献-------------------------------------------------------------171.项目设计目的及任务用51单片机或52单片机为主体,设计并制作一台数字万年历。
基本要求有时钟显示(时/分/秒);日期、星期显示,可设定月份;上电即可显示当前系统的时间该系统的设计电路是以 AT89C51单片机为核心控制器,其外围电路主要包括时钟模块,液晶模块,和与电脑主机通信模块等。
通过 PC 机在 Internet 上同步时间,整个系统使用C语言进行编程,实现其设计的各种功能。
输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。
实用电子时钟是一个时间控制系统,既能作为一般的时间显示器,同时可以根据需要扩展其功能。
系统上电自检后,实时实现小时、分钟、秒以及日历的显示等指示信息的显示,通过按键可实现校对时间等功能。
2 设计方案2.1总方案设计:设计简单万年历一般有三个可行方案,方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。
万年历实验报告
万年历实验报告万年历实验报告一、引言万年历是一种用来记录日期和时间的工具,它可以帮助人们追溯过去和规划未来。
在这个数字化时代,人们已经习惯了使用智能手机或电脑上的日历应用来管理时间。
然而,万年历的历史悠久,它的设计和功能一直在不断演进。
本实验旨在通过制作一个简单的万年历,探索其原理和功能。
二、实验材料和方法1. 材料:- 一张大纸板- 一支铅笔- 一把剪刀- 一些彩色纸张- 一些装饰用的贴纸或标签- 一把直尺2. 方法:- 使用直尺和铅笔在大纸板上绘制一个正方形,边长为30厘米。
- 将正方形分为7行7列,形成一个格子状的网格。
- 在每个格子中填写日期和星期几,从1号到31号。
- 使用剪刀将彩色纸张剪成小方块,每个方块代表一个特殊的日子(如生日、节日等)。
- 将彩色纸张粘贴在相应的日期上,并使用贴纸或标签进行装饰。
三、实验结果经过一番努力,我成功地制作了一个简单的万年历。
每个格子中都填写了日期和星期几,并且我还用彩色纸张标记了一些特殊的日子。
整个万年历看起来非常漂亮,装饰用的贴纸和标签增添了一些趣味性。
四、讨论万年历是人类文明的重要组成部分,它不仅帮助人们记录时间,还反映了人们对时间的认知和组织。
通过制作万年历,我更深入地理解了时间的概念和日期的变化规律。
我发现,每个月的天数不同,而星期几则是按照一定的循环顺序变化的。
此外,万年历还可以帮助我们规划未来。
通过标记特殊的日子,我们可以提前做好准备,如购买礼物、安排行程等。
而且,万年历还可以提醒我们重要的事项,如朋友的生日、会议的时间等。
它是我们生活中不可或缺的工具之一。
然而,制作一个完整的万年历并不容易。
除了填写日期和星期几之外,还需要考虑闰年的影响。
闰年是指能被4整除但不能被100整除的年份,或者能被400整除的年份。
在闰年中,2月份会多出一天,即29号。
这是为了与地球公转周期相适应,以保持日历系统的准确性。
五、结论通过本实验,我成功地制作了一个简单的万年历,并对时间的概念和日期的变化规律有了更深入的了解。
万年历设计报告
万年历设计1、设计目的:1、学会对单片机外围电路的使用。
2、熟悉使用proteus电路仿真软件。
3、熟悉使用KILE C语言编程软件。
4、了解数字万年历的工作原理及其组成。
2、设计任务:1、显示年月日时分秒及星期信息2、具有可调整日期和时间功能3、增加闰年计算功能3、方案比较:用单片机设计电子时钟通常有两种方法:一是通过单片机内部的定时器或者计数器。
这种方法硬件线路简单,采用软件编程实现时钟计数,一般称为软时钟。
系统的功能一般与软件设计有关,通常用在对时间精度要求不高的场合;二是采用时钟芯片,它的功能强大,功能部件集成在芯片内部,自动产生时钟等相关功能。
硬件成本相对较高,软件编程简单。
通常使用在对时钟精度要求较高的场合。
本次设计采用第一种方法4、设计方案4.1 设计原理:本方案有的时间脉冲由单片机内部的定时器/计数器产生,所以硬件电路相对简单,由单片机产生时钟信号,通过程序分别产生年月日时分秒,同时可以区分闰年闰月,加送数码管显示,同时加上按键电路,可以对年月日时分秒进行调整,还有清零。
4.2硬件设计:图1如图1该电路由51单片机为核心,使用数码管显示,按键电路进行调整,考虑到单片机P0口的驱动能力不足的情况,使用上拉电阻提升驱动能力。
4.3软件设计:仿真开始,先初始化系统时间加送数码管显示,然后判断按键是否按下,如果按下,就表明要对时间进行调整,接下来则显示调整完的时间,如果没有按下,则显示初始时间。
5、设计结果图2如图2所示,数码管阵列第一列显示年月日,第二列显示时分秒,按键电路从上到下分别为复位,秒分时日月年的调整按键。
每当秒到60则分进位,同理,分满时进位,时满日进位,日满月进位,月满年进位,还可以区分闰年闰月。
6、总结和个人体验通过该课程设计很好的掌握了KILE,proteus两个和专业相关的软件,极大的拓宽了自己的知识宽度,期间产生的问题都与老师一起讨论得到了很好的解决,这对自己的问题阐述能力以及解决问题的能力都有很大的提升。
万年历程序设计说明书
万年历程序设计说明书一、引言万年历是一种常见的日历工具,用于显示日期和计算日期间的差异。
本说明书旨在介绍万年历程序的设计原理和功能,帮助用户更好地理解和使用该程序。
二、程序设计原理1. 数据结构万年历程序主要基于日期的计算和显示,因此需要设计合适的数据结构来存储日期信息。
常用的数据结构包括日期对象、月份对象和年份对象。
2. 界面设计万年历程序需要提供用户友好的界面,以便用户能够方便地输入和查看日期信息。
界面设计应简洁明了,同时考虑不同屏幕尺寸和分辨率的适配。
3. 算法设计万年历程序的核心功能是日期的计算和显示。
算法设计应能够准确计算日期间的差异,包括年份、月份和天数的计算。
同时,还需要考虑闰年和月份天数不同的情况。
三、功能介绍1. 日期查询用户可以通过输入日期来查询该日期的详细信息,包括星期几、所在月份和年份等。
程序应能够准确显示查询结果并提供相关操作选项。
2. 日期计算用户可以输入两个日期,程序将计算并显示这两个日期之间的差异,包括相差的年份、月份和天数。
程序应能够处理闰年和月份天数不同的情况。
3. 节假日提醒万年历程序可以提供节假日的提醒功能,用户可以设置节假日的提醒日期和提醒方式。
程序应能够准确提醒用户,并提供相应的操作选项。
4. 日期转换用户可以输入不同的日期格式,程序将自动转换为标准的日期格式进行计算和显示。
程序应支持常见的日期格式,并提供错误处理机制。
四、程序设计实现1. 开发环境万年历程序可以使用各种编程语言和开发工具进行实现。
常见的开发环境包括Java、Python、C++等。
选择合适的开发环境可以提高开发效率和程序性能。
2. 数据库设计万年历程序可以使用数据库存储节假日和相关数据,以便程序查询和显示。
数据库设计应考虑数据的结构和索引,提高数据的查询效率和程序的响应速度。
3. 界面设计万年历程序的界面设计应简洁明了,用户可以方便地输入和查看日期信息。
界面设计可以使用图形界面或命令行界面,根据实际需求选择合适的设计方式。
万年历程序设计说明书
万年历程序设计说明书一、引言万年历是一款方便用户查询日期、农历、节假日等信息的应用程序。
本文档将详细介绍万年历程序的设计和功能实现,以帮助开发人员理解和使用该程序。
二、需求分析1. 用户可以通过程序查询指定日期的公历和农历信息。
2. 用户可以查看指定日期是否为节假日,并显示节假日名称。
3. 用户可以选择查询某个年份的所有节假日。
4. 用户可以设置提醒功能,当指定日期到来时,程序会发送通知提醒用户。
5. 界面友好,操作简单,用户体验良好。
三、系统设计1. 技术选型本程序将使用Python语言进行开发,使用以下库和框架:- tkinter:用于创建程序的图形用户界面。
- datetime:用于处理日期和时间相关的操作。
- requests:用于发送HTTP请求,获取节假日数据。
- plyer:用于发送系统通知。
2. 模块划分本程序将分为以下几个模块:- 主界面模块:负责显示程序的主界面,包括日期选择框、查询按钮等。
- 日期查询模块:负责处理用户输入的日期,查询公历和农历信息,并显示在界面上。
- 节假日查询模块:负责查询指定日期是否为节假日,并显示节假日名称。
- 节假日提醒模块:负责设置提醒功能,当指定日期到来时发送系统通知提醒用户。
3. 数据获取与处理- 公历和农历信息:使用datetime库获取指定日期的公历和农历信息。
- 节假日数据:通过发送HTTP请求获取节假日数据,并使用json库进行解析和处理。
四、功能实现1. 主界面设计主界面应包括日期选择框、查询按钮、显示区域等组件,用户可以通过日期选择框选择查询日期,并点击查询按钮进行查询操作。
查询结果将显示在显示区域中。
2. 日期查询功能实现用户选择查询日期后,程序将使用datetime库获取公历和农历信息,并将其显示在界面上。
3. 节假日查询功能实现用户可以选择查询某个年份的所有节假日。
程序将通过发送HTTP请求获取节假日数据,并使用json库进行解析和处理。
万年历设计报告
万年历设计报告1. 引言万年历是一种用于查询日期和显示重要节假日的工具,可以帮助用户快速了解任意日期所处的星期、月份、季节等信息。
在本设计报告中,我们将介绍一个基于Python语言的万年历设计方案。
该万年历设计方案使用了面向对象编程的思想,具有良好的可拓展性和易于维护的特点。
2. 功能需求本次万年历设计的功能需求如下:•显示指定年份的公历日历•查询指定日期的公历信息,如星期、星座、节假日等•支持农历查询,显示指定日期的农历信息•支持阳历和农历之间的转换•提供用户友好的命令行界面3. 设计思路基于以上功能需求,我们设计了以下几个核心类来实现万年历的功能:3.1 DateConverterDateConverter是一个日期转换的工具类,用于实现公历日期和农历日期之间的转换。
它包含了以下主要方法:•convert_to_lunar(year, month, day):将公历日期转换为农历日期•convert_to_solar(year, month, day):将农历日期转换为公历日期3.2 CalendarCalendar类负责输出指定年份的公历日历。
它包含以下主要方法:•display(year):输出指定年份的公历日历3.3 HolidayHoliday类负责确定指定日期是否为节假日。
它包含以下主要方法:•is_holiday(year, month, day):判断指定日期是否为节假日3.4 LunarCalendarLunarCalendar类负责显示指定日期的农历信息。
它包含以下主要方法:•display(year, month, day):输出指定日期的农历信息4. 实现结果4.1 用户界面我们使用命令行界面来与用户进行交互。
用户可以输入指令来查询对应的日期信息,例如:请输入指令(输入 help 查看帮助):cal 20222022 年日历如下:一月二月三月日一二三四五六日一二三四五六日一二三四五六...十月十一月十二月日一二三四五六日一二三四五六日一二三四五六4.2 功能展示以下是使用我们设计的万年历程序的一些功能示例:•查询公历日期请输入指令(输入 help 查看帮助):info 2022-01-01查询结果如下:日期:2022-01-01星期:六星座:摩羯座节假日:元旦节•查询农历日期请输入指令(输入 help 查看帮助):lunar 2022-01-01查询结果如下:日期:2022-01-01农历日期:腊月廿七农历年份:牛年•查询节假日请输入指令(输入 help 查看帮助):holiday 2022-05-01查询结果如下:日期:2022-05-01节假日:劳动节5. 总结本次万年历设计方案基于Python语言,使用了面向对象编程的思想,实现了查询公历和农历日期、显示公历日历以及查询节假日等功能。
万年历课程设计说明书
*******************实践教学*******************兰州理工大学计算机与通信学院2012年秋季学期Java 课程设计题目:万年历的设计专业班级:姓名:学号:指导教师:成绩:目录摘要 (2)序言 (3)正文 (4)一、系统分析与设计 (4)二、详细设计 (5)2.1 类Calendars (5)2.2 类Time (5)2.3 类CalTabel (5)三、系统测试 (6)四、软件使用说明书 (9)设计总结 (10)参考文献 (11)致谢 (12)附录1(源代码) (13)摘要根据万年历的需要,设计一个万年历的程序,实现在此万年历表中有关日期和时间的基本操作:显示当时系统的日期和时间;显示当日的年和月;通过查询显示指定年、月的日历;设置北京时间,以显示北京和格林威治的时间并以设定的时间开始计时。
设置时间和查询日历通过设计的窗体执行和显示。
关键词:万年历;图形界面;java技术序言1996年Java第一次发布就引起了人们的极大兴趣。
关注Java的人士不仅限于计算机出版界,还有诸如《纽约时报》、《华盛顿邮报》、《商业周刊》这样的主流媒体。
Java时第一种也是唯一一种在National Public Radio上占用了十分钟时间进行介绍的程序设计语言,并且还得到了$100 000 000的风险投资基金。
这些基金全部用来支持这种特别的计算机语言开发的产品。
Java语言在Internet舞台上以及亮相便名声大噪,其原因在于它将有望成为连接用户与信息的万能胶,而不论这些信息来源于Web服务器、数据库、信息提供商,还是任何其他渠道,Java固有的可靠性与安全性不仅令Java程序员放心,也令使用Java程序的用户放心。
而此次将用Java设计一个万年历表,我们更加了解Java面向对象的程序设计语言。
正文一、系统分析与设计1、系统的要求(1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒);(2)定义一个日期类Date,记录年、月、日,并提供日期增加的方法(按天);(3)由类Time和日期类Date,派生出DateTime类,除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差;(4)输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
简单万年历的设计与实现
课程设计任务书
学生姓名:专业班级:
指导教师:刘春燕工作单位:信息工程系
设计题目:简单万年历的设计与实现
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)设计一个万年历界面,完成以下简单的功能
(1)能够显示实现1800-2100年的日期,包括公历,农历,星期;
(2)能够按月份格式显示;
(3)能够显示系统时间;
(4)点击确定按钮产生一张选票。
设计报告撰写格式要求:
1、明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。
严格要求自己,要独立思考,按时、独立完成课程设计任务。
2、设计报告:要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。
设计报告正文字数不少于0.2万字(不包括附录)
时间安排:
消化资料、系统调查 1天
项目原型开发1天
系统功能实现 1天
系统验收 1天
系主任签字:2014 年9 月 5 日。
万年历的设计与实现
一、引言万年历是一种用来显示公历日期的工具,它可以显示任意年份、月份和日期的具体信息,是人们日常生活中常用的日历。
在现代科技的发展下,电子万年历已经成为人们生活中不可或缺的工具之一、本文将介绍电子万年历的设计与实现。
二、需求分析电子万年历的主要功能包括显示年份、月份、日期、星期和节假日等信息,还可以实现查询功能和闹钟功能。
基于这些需求,我们可以列出以下设计要点:1.显示日期信息:能够准确显示当前年份、月份和日期,并根据日期自动显示对应的星期。
2.节假日功能:能够根据日期判断是否是法定节假日,并在显示上进行标识。
3.查询功能:用户可以通过输入特定的年份、月份和日期来查询对应日期的具体信息。
4.闹钟功能:用户可以设置闹钟,在指定的时间点进行提示。
三、设计方案1.硬件设计电子万年历的硬件设计主要包括显示屏、按键和主控芯片等部分。
显示屏采用液晶显示屏,用于显示日期和相关信息;按键用于用户输入,包括查询和设置闹钟等功能;主控芯片用于控制整个系统的运行。
2.软件设计电子万年历的软件设计主要包括日期显示、节假日判断、查询功能和闹钟功能。
具体的软件设计如下:(1)日期显示:根据当前日期获取对应的年份、月份和日期信息,并通过显示屏进行显示。
同时,根据日期信息计算对应的星期,并显示在屏幕上。
(2)节假日判断:根据国家的法定节假日规定,判断当前日期是否是法定节假日,并在显示屏上进行标识。
(3)查询功能:用户可以通过输入特定的年份、月份和日期来查询对应日期的具体信息。
根据用户输入的信息,系统进行判断并显示相应的结果。
(4)闹钟功能:用户可以设置闹钟时间,当时间到达时,系统进行提示。
闹钟功能需要经常与实时的时间进行比对,以确保准确性。
四、实现细节1.硬件实现硬件设计主要包括选择合适的显示屏、按键和主控芯片。
显示屏可以选择液晶显示屏,具有较好的显示效果和易操作性;按键可以选择独立按键或触摸按键,用于用户输入;主控芯片可以选择单片机或嵌入式系统,用于控制整个系统的运行。
单片机万年历设计说明
单芯片万年历设计教学目标一、课程设计的性质本课程是在预先验证的认知实验和相关理论课程编制依据上,设计更高层次命题的教学环节。
它是一种供学生在教师指导下自主获取资料、设计、安装和编程特定功能的电子程序。
电路课程。
对提高学生的电子工程素质和科学实验能力具有十分重要的意义。
2.课程设计的目的本课程旨在培养学生综合数字电路和单片机知识的能力,解决电子信息中常见的实际问题,了解一般电子电路和单片机形成简单系统和更复杂的编程方法的能力。
是参加各类大学生电子竞赛前的技能训练课程,促进学生积累单片机系统开发经验,为更复杂、更实际的应用领域做准备。
目的是夯实基础,专注设计,发展技能,追求创新,变得实用。
二、课程设计专题(万年历设计)功能要求:1、显示年、月、日、时、分、秒;2、分、时、年、月、日可调;技术要求:课程设计通过制作PCB完成。
三、编程1.液晶1602初始化;PB口为数据输入输出口#define LCD_DDR PB_DDR MOV LCD_DDR,#0MOV PB_CR1,#0FFHMOV PB_CR2,#0#define Data_IN PB_IDR #define Data_Out PB_ODR;初始化PE5为RSBSET PE_DDR,#5BSET PE_CR1,#5BRES PE_CR2,#5BSET PE_ODR,#5#define RS PE_ODR, #5;初始化PE6为RWBSET PE_DDR,#6BSET PE_CR1,#6BRES PE_CR2,#6BSET PE_ODR,#6#define RW PE_ODR, #6;初始化PE7为E(片选信号)BSET PE_DDR,#7BSET PE_CR1,#7BRES PE_CR2,#7BRES PE_ODR,#7定义E PE_ODR,#7;液晶初始化MOV R03,#15呼叫延迟MOV LCD_COM,#38H ;调用 LCDWR_NDMOV R03,#05呼叫延迟MOV LCD_COM,#38H调用 LCDWR_ND移动 R03,#05 ;显示关闭呼叫延迟MOV LCD_COM,#08H调用 LCDWR_NDMOV R03,#05 ;显示清屏呼叫延迟MOV LCD_COM,#01H调用 LCDWR_NDMOV R03,#12 ;读或写一个字符后,地址指针减一呼叫延迟MOV LCD_COM,#04H调用 LCDWR_NDMOV R03,#15 ;显示开,光标不显示呼叫延迟MOV LCD_COM,#0CH调用 LCDWR_NDMOV R03,#15呼叫延迟2.子程序LCDWR_ND.LCDWR_ND.LBSET RW布雷斯 RS ;选择命令;阅读模式MOV LCD_DDR,#00H ;0,数据总线处于输入状态灯带1.LBSET E无无MOV LCD_D1,数据_IN布雷斯BTJT LCD_D1,#7,灯带1;写模式MOV LCD_DDR,#0FFHBRES RWMOV Data_Out, LCD_COMBSET E无无布雷斯RET3.子程序W_CODE.W_CODE.L ;读取数据布雷斯 RS ;数据指令BSET RWMOV LCD_DDR,#00HW_CODE_1.LBSET E无无LD A,Data_IN布雷斯LD R11,ABTJT R11,#7,W_CODE_1MOV LCD_DDR,#0FFHBSET RSBRES RWMOV Data_Out, LCD_COMBSET E无无布雷斯RETRETRETRETRET4. Subroutine Delay(起到延时作用)(1) TIM3初始化;计数器初始化MOV TIM3_PSCR,#01H移动 TIM3_ARRH,#27HMOV TIM3_ARRL,#10HMOV TIM3_CR1,#04HBRES TIM3_IER,#0BSET TIM3_CR1,#0(2)中断程序中断 TIM3_Interrupt_OverTIM3_Interrupt_Over.lBRES TIM3_SR1,#0十二月 R03IRET(3) 主要部分.延迟.LBSET TIM3_EGR,#0BSET TIM3_IER,#0延迟_1.lLD A, R03CP A,#00JRUGT 延迟_1BRES TIM3_IER,#0RET5、计时部分:(1) TIM1初始化;计数器初始化MOV TIM1_SMCR,#00HBRES TIM1_ETR,#6MOV TIM1_PSCRL,#01HMOV TIM1_ARRH,#{HIGH 10000} ;初始化自动重载初值寄存器TIM1_ARR MOV TIM1_ARRL,#{LOW 10000}MOV TIM1_RCR,#00H ;初始化重复计数寄存器 TIM1_RCRMOV TIM1_CR1,#05H BSET TIM1_CR1,#0 ;启动定时器 TIM1 (2) 中断程序中断 TIM1_Interrupt_OverTIM1_Interrupt_Over.lBRES TIM1_SR1,#0十二月 R19JRNE TIM1MOV R19,#100公司 R05 ; R05 是秒的一位数CLR ALD A, R05CP A,#10JRNE TIM1CLR R05INC R06 ;R06 是第二个的十位LD A, R06CP A,#6JRNE TIM1CLR R06公司 R07 ; R07 是分钟的一位数TIM1.LIRET6、LCD1602显示部分(1) 年、月、日的显示无限循环1.l移动地址,#08CHMOV LCD_COM,地址调用 LCDWR_ND无限循环2.lCLRW XCLR ACLRW YLDW X, R22LDW Y,#4DIVW X,YLD A, YLCP A,#0JRNE FRNCLRW YCLRW XCLR ALDW Y,#100LDW X, R22DIVW X,YLD A, YLCP A,#0JRNE润年CLRW YCLRW XCLR ALDW Y,#400LDW X,R22DIVW X,YLD A, YLCP A,#0JRNE FRN润年.lCLR ALD A,R21CP A,#2JRNE AS8LD A,R20CP A,#30JRC SD1MOV R20,#1INC R21JPF ASFRN.lCLR ALD A,R21CP A,#2JRNE AS8LD A,R20CP A,#29JRC SD1MOV R20,#1INC R21JPF ASAS8.LLD A,R21CP A,#1JRNE AS1LD A,R20CP A,#32JRC SD1MOV R20,#1INC R21 SD1.LJPF ASAS1.LLD A,R21CP A,#3JRNE AS2LD A,R20CP A,#32JRC SD2MOV R20,#1INC R21 SD2.LJPF ASAS2.LLD A,R21CP A,#5JRNE AS3LD A,R20CP A,#32JRC SD3INC R21 SD3.LJPF ASAS3.LLD A,R21CP A,#7JRNE AS4LD A,R20CP A,#32JRC SD4MOV R20,#1INC R21 SD4.LJPF ASAS4.LLD A,R21CP A,#8JRNE AS5LD A,R20CP A,#32JRC SD5MOV R20,#1INC R21 SD5.LJPF ASAS5.LLD A,R21CP A,#10JRNE AS6LD A,R20CP A,#32JRC SD6MOV R20,#1INC R21 SD6.LJPF ASAS6.LLD A,R21CP A,#12JRNE AS7LD A,R20CP A,#32JRC SD7INC R21 SD7.LJPF ASAS7.LIKELD A,R20CP A,#31JRC ASMOV R20,#1INC R21升学CLRW XCLR ALD A,R20LD XL,ALDW Y,#10DIVW X,YLD A,XLLD R31,ALD A, YLLD R30,ALD A,R21CP A,#13JRNE DFMOV R21,#1LDW X,R22INCW XLDW R22,X东风CLRW XCLR ALD A,R21LD XL,ALDW Y,#10DIVW X,YLD A,XLLD R33,ALD A, YLLD R32,ACLRW XCLR ALDW X,R22LDW Y,#1000DIVW X,YLD A,XLLD R37,ALDW X,YLDW Y,#100DIVW X,YLD A,XLLD R36,ALDW X,YLDW Y,#10DIVW X,YLD A,XLLD R35,ALD A,YLLD R34,A;日;个位LD A,R30CLRW XCLR ALD A,R30LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;十位CLRW XCLR ALD A,R31LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥2+0}LD LCD_COM,A调用 W_CODE;月;个位CLRW XCLR ALD A,R32LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;十位CLRW XCLR ALD A,R33LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥2+0}LD LCD_COM,A调用 W_CODELD A,R34CP A,#10JRNE条112CLR R34INC R35条112.lCLRW XCLR ALD A,R34LD XL,ALD A,(ShuZi,X) ;年的个位LD LCD_COM,A调用 W_CODELD A,R35CP A,#10JRNE条113CLR R35INC R36条113.lCLRW XCLR ALD A,R35LD XL,ALD A,(ShuZi,X) ;年的十位LD LCD_COM,A调用 W_CODELD A,R36CP A,#10JRNE条114CLR R36INC R37条114.lCLRW XCLR ALD A,R36LD XL,ALD A,(ShuZi,X) ;百岁LD LCD_COM,A调用 W_CODECLRW XCLR ALD A,R37LD XL,ALD A,(树子,X) ;年以千计LD LCD_COM,A调用 W_CODE(2) 时、分、秒显示部分.鲜食.l;秒的一位数条1.lCLRW XCLR ALD A, R05LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;几十秒条2.lCLRW XCLR ALD A, R06LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥+0}LD LCD_COM,A调用 W_CODE;分钟的一位数LD A, R07CP A,#10JRNE条3CLR R07INC R08条3.lCLRW XCLR ALD A, R07LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;分钟的十位LD A,R08CP A,#6JRNE条4CLR R08INC R09条4.lCLRW XCLR ALD A,R08LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODECLR ALD A,{风哥+0}LD LCD_COM,A调用 W_CODE;小时的个位LD A,R10CP A,#2JRNE庆玲LD A,R09CP A,#4JRNE条5CLR R09CLR R10INC R20MOV R24,#0FFHJRT条5青灵.lLD A,R09CP A,#10JRNE条5CLR R09INC R10条5.lCLRW XCLR ALD A,R09LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODE;小时的十位LD A,R10CP A,#3JRNE条6CLR R10条6.lCLRW XCLR ALD A,R10LD XL,ALD A,(树子,X)LD LCD_COM,A调用 W_CODELD A,{WEL_1+0}LD LCD_COM,A调用 W_CODECLR ALD A,R24CP A,#0FFHJRNE QCLR R24JPF 无限循环1QLJPF 无限循环RET7、键盘调时部分中断 TIM3_Interrupt_OverTIM3_Interrupt_Over.lBRES TIM3_SR1,#0十二月 R03IRETIRETIRETIRETIRET中断 TIM2_Interrupt_Over TIM2_Interrupt_Over.lBRES TIM2_SR1,#0十二月 R12JRNE 中断_TIM2_Key1MOV R12,#20BSET KeySTU,#4中断_TIM2_Key1.lLD A,KeySTU和 A,#07HJRNE 中断_TIM2_Key_exitLD A,KeyTIMECP A,#125JRNC 中断_TIM2_Key_exitINC KeyTIME中断_TIM2_Key_exit.lSCAN_Key.lBTJT KeySTU,#4,SCAN_Key_NEXT1JPF SCAN_Key_EXIT SCAN_Key_NEXT1.LBRES PG_ODR,#1无无无LD A,PC_IDR和 A,#0FEHCP A,#0FEHJRNE SCAN_Key_NEXT2供应链金融JRT SCAN_Key_NEXT3 SCAN_Key_NEXT2.LRCFSCAN_Key_NEXT3.LLD A,KeySTURLC A和 A,#07HLD KeySTU,AJREQ SCAN_Key_NEXT41CP A,#010BJRNE SCAN_Key_NEXT4BRES KeySTU,#1SCAN_Key_NEXT41.LLD A,KeyTIMECP A,#125JPF SCAN_Key_EXITCLR 密钥时间JRT SCAN_Key_NEXT6 SCAN_Key_NEXT4.LCLR 密钥时间CP A,#101BJRNE SCAN_Key_NEXT5BSET KeySTU,#1JPF SCAN_Key_EXITSCAN_Key_NEXT5.LCP A,#100BJREQ SCAN_Key_NEXT6IRETSCAN_Key_NEXT6.LCALL Key_Check_ProcSCAN_Key_EXIT.LIRETIRETIRETIRETIRET.Key_Check_Proc.lBTJT PC_IDR,#1,Key_Check_Proc_1INC R18LD A,R18CP A,#6JRNE 一号CLR R18MOV R24,#0FFH一个.lJPF Key_Check_Proc_6Key_Check_Proc_1.lLD A,R18CP A,#1JRNE Key_Check_Proc_2BTJT PC_IDR,#2,JianYi_1CLR R05CLR R06INC R07JPF Key_Check_Proc_6简一_1.lBTJT PC_IDR,#6,Key_Check_Proc_1_1LD A,R07CP A,#0JRNE建一_1_1MOV R07,#10LD A,R08CP A,#0JREQ建一_1_1十二月 R08建一_1_1.lCLR R05CLR R06十二月 R07Key_Check_Proc_1_1.LJPF Key_Check_Proc_6Key_Check_Proc_2.lLD A,R18CP A,#2JRNE Key_Check_Proc_3BTJT PC_IDR,#2,JianYi_2INC R09JPF Key_Check_Proc_6简一_2.lBTJT PC_IDR,#6,JianYi_2_2LD A,R09CP A,#0JRNE建一_2_1MOV R09,#10LD A,R10CP A,#0JREQ建一_2_1十二月 R10简一_2_1.l十二月 R09简一_2_2.lJRT Key_Check_Proc_6Key_Check_Proc_3.lLD A,R1CP A,#3JRNE Key_Check_Proc_4BTJT PC_IDR,#2,JianYi_3INC R20MOV R24,#0FFHJRT Key_Check_Proc_6简一_3.lBTJT PC_IDR,#6,Key_Check_Proc_6CP A,#0JRNE建一_3_1MOV R20.29建一_3_1.l十二月 R20MOV R24,#0FFHJRT Key_Check_Proc_6Key_Check_Proc_4.lLD A,R18CP A,#4JRNE Key_Check_Proc_5BTJT PC_IDR,#2,JianYi_4INC R21MOV R24,#0FFHJRT Key_Check_Proc_6简一_4.lBTJT PC_IDR,#6,Key_Check_Proc_6LD A,R21CP A,#1JRNE建一_4_1MOV R21,#13简一_4_1.l十二月 R21MOV R24,#0FFHJRT Key_Check_Proc_6Key_Check_Proc_5.lLD A,R18CP A,#5JRNE Key_Check_Proc_6BTJT PC_IDR,#2,JianYi_5CLRW XLDW X,R22INCW XLDW R22,XMOV R24,#0FFHJRT Key_Check_Proc_6简一_5.lBTJT PC_IDR,#6,Key_Check_Proc_6CLRW XLDW X, R22DECW XMOV R24,#0FFHJRT Key_Check_Proc_6 Key_Check_Proc_6.lRETRETRETRETRET4.硬件设计一、一般电路原理图2、LCD1602电路3、微控制器最小系统[1]世伟.印刷电路板的排版设计:科技文献,1983[2]永雄,沙河等。
万年历课程设计说明
《高级语言程序设计》课程设计说明书设计题目:万年历程序设计班级:学号:姓名:完成日期:一:课程设计目的《高级语言程序设计》课程设计是电子信息、光信息专业以及物理学专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习,其目的在于加深对程序设计基本知识的理解,掌握使用C语言进行模块化软件设计的基本方法,提高通过编写程序解决实际问题的能力,为今后从事设计工作和后续各种编程课程的学习打好基础。
二:需求分析题目:要求:输入年份和月份,自动输出该月的日历,清楚的显示每一天是星期几,输入年份,月份和具体日期能确定某天是星期几。
万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。
因此,研究万年历及扩大其应用,有着非常现实的意义。
它可以对年、月、日、周日、时、分、秒进行计时,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
三:概要设计1-判断是否为闰年计算所输入的年份是否可被4整除,若不能被整除,为平年。
若可被4整除,计算此年份能否被100整除,不能被100整除则为闰年。
既能被4整除,也能被100整除的年份,若也能被400整除,则为闰年,否则为平年。
闰年366天,平年365天2-主要设计思路四:详细设计源程序:#include <stdio.h> #include <stdlib.h>void DayOfWeek(){int rtnDay;int y,m,d;char ch;开始输入指令(1234)输入4退出判断是否为闰年1日历2月历3年历输入年月日数日年月输入年份按下回车可得星期几按下回车可得月历按下回车可得年历while (1){printf("请输入年月日(xxxx,xx,xx): ");scanf("%d,%d,%d", &y, &m, &d);fflush(stdin);rtnDay =(3*y-(7*(y+(m+9)/12))/4+(23*m)/9+d+17-((y+(m<3?-1:0))/100+1)*3/4) % 7; printf("%04d年%02d月%02d日是星期%d\n", y, m, d, rtnDay?rtnDay:7); printf("继续查询(y/n)");ch = getchar();if(ch != 'y' && ch != 'Y')break;}}void GetMonth(int D, int md, int n){int N ,m,d,y,c,Wd;int i,maxday,i1;if(md>=13||md<=0)printf("HAVE WRONG!");else{for(i1=0;;md++,i1++){if(md==0){md=12;D-=1;}elseif(md==13){md=1;D+=1;}m=md;printf("\n============%d,%2d============\n",D,md);if(0<m&&m<=12){switch(m){case 1:maxday=31;break;case 2:if(D%4==0&&D%100!=0||D%400==0) maxday=29;elsemaxday=28;break;case 3:maxday=31;break;case 4:maxday=30;break;case 5:maxday=31;break;case 6:maxday=30;break;case 7:maxday=31;break;case 8:maxday=31;break;case 9:maxday=30;break;case 10:maxday=31;break;case 11:maxday=30;break;case 12:maxday=31;break;default:printf("HAVE WRONG");}if(0<m&&m<=2){N=D-1;m=m+10;}else{N=D;m=m-2;}c=N/100;y=N%100;Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7; printf(" SUN MOU TUE WED TUR FRI SAT\n"); for(i=0;i<Wd;i++)printf("%4c",' ');for(d=1;d<=maxday;d++){printf("%4d",d);Wd=(Wd+1)%7;if(Wd==0)printf("\n");}}elseprintf("HAVE WRONG!");if(i1==n)break;}}}void MonthOfYear(){char ch;int y, m;while (1){printf("请输入年月(xxxx,xx): "); scanf("%d,%d", &y, &m);fflush(stdin);GetMonth(y, m, 0);printf("\n继续查询(y/n)");ch = getchar();if(ch != 'y' && ch != 'Y')break;}}void GetYear(){char ch;int y;while (1){printf("请输入年: ");scanf("%d", &y);fflush(stdin);GetMonth(y, 1, 11);printf("\n继续查询(y/n)");ch = getchar();if(ch != 'y' && ch != 'Y')break;}}int main(){char ch;while(1){system("cls");printf("1.查询星期\n");printf("2.查询月份\n");printf("3.显示一年\n");printf("4.退出程序\n");ch = getchar();fflush(stdin);switch(ch){case '1':DayOfWeek();break;case '2':MonthOfYear();break;case '3':GetYear();break;case '4':printf("是否退出(y/n)");ch = getchar();fflush(stdin);if(ch == 'y' || ch == 'Y')exit(0);break;}}}五:运行效果及分析1 登录界面输入3,通过输入年份可显示一年每个月份的日历;输入2,通过输入年份和月份(中间以空格分开)可显示该月的日历;若输入1,通过输入年份月份和日期(中间以逗号分开)可显示该日的星期;输入4,则退出查询系统2查询星期输入1后回车,然后输入具体的年月日可查出该天为星期几3查询月历输入2回车,然后输入年月可显示该月月历4显示一年输入3后回车,输入一个有效年份可显示该年的十二个月的月历。
万年历设计报告书
万年历设计报告书一、设计要求:1.具有年、月、日、星期、时、分、秒等功能;2.时间与阴、阳历能够自动关联;图-1 主程序流程图三、各模块的功能及程序说明1. 具有年、月、日、星期、时、分、秒等功能在设计这一程序的时候,考虑到要在用户界面上对年月日以及时分秒的输入,在使用上更简单易操作。
2. 时间与阴、阳历能够自动关联在设计这一功能的时候,考虑到阴历和阳历要关联,翻阅了大量的资料,找到他们的函数关系,使这一功能在使用上更方便。
四、源程序package prog;import java.util.Scanner;public class MC2 {static final int BASE_YEAR = 2000;static final int BASE_WEEK_DAY = 6;static int getWeekDay(int year, int month, int day) {int base = getWeekDayOfFirstDay(year);int days = getDaysBetweenFirstDay(year, month, day);return (base + days) % 7;}static int getWeekDayOfFirstDay(int year) {if (BASE_YEAR == year) return BASE_WEEK_DAY;int days = getDaysBetweenTwoYear(year, BASE_YEAR);if (year > BASE_YEAR)return (BASE_WEEK_DAY + days) % 7;elsereturn (BASE_WEEK_DAY - days % 7);}static int getDaysBetweenTwoYear(int year1, int year2) {int min = Math.min(year1, year2);int max = Math.max(year1, year2);int sum = 0;for (int i = min; i < max; i++)sum += getYearDays(i);return sum;}static int getYearDays(int year) {return isLeapYear(year)? 366: 365;}static int getDaysBetweenFirstDay(int year, int month, int day) { int sum = 0;for (int i = 1; i < month; i++)sum += getMonthDays(year, i);sum += day - 1;return sum;}static int getMonthDays(int year, int month) {switch (month) {case 1: case 3: case 5: case 7:case 8: case 10: case 12:return 31;case 4: case 6: case 9: case 11:return 30;case 2:return isLeapYear(year)? 29: 28;}return 0;}static boolean isLeapYear(int year) {return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;}static void printYear(int year) {for (int i = 1; i <= 12; i++)printMonth(year, i);}static void printMonth(int year, int month) {System.out.print("\n\n====================== " + month + " ======================\n");System.out.print("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");int wd = getWeekDay(year, month, 1);for (int i = 0; i < wd; i++)System.out.print("\t");int lastday = getMonthDays(year, month);for (int i = 1; i <= lastday; i++) {System.out.printf("%3d\t", i);if (wd++ % 7 == 6 && i != lastday)System.out.println();}}public static void main(String [] args) {System.out.print("Input a year: ");Scanner scanner = new Scanner(System.in);int year = Integer.parseInt(scanner.nextLine());printYear(year);}}五、操作方法当进入用户界面的时候,可以在年月日栏里分别输入年份月份和日,并能自己显示出相对应的农历以及星期。
#电子万年历 产品设计说明书
目录一、概况设计 01主要模块设计 0二、核心功能设计 (4)3.1显示模块 (4) (5)3.2信号调用模块 (7)3.2.1时间信号调用 (7)3.2.2功能选择调用 (10)3.2.3温度湿度调用 (10)温度计算: (10)湿度计算: (10)露点计算: (11)三、程序基本操作流程图 (13)一、概况设计1主要模块设计2界面设计2.1时间显示界面2.2温度湿度露点显示界面2.3时间设置界面2.4闹钟设定界面2.5生日提醒界面如图所示,每个按键上方都对应着相应的按键描述,可根据描述选择功能、选择、调整、确认等功能。
二、核心功能设计3.1显示模块显示屏为12864LCD液晶显示屏,分辨率为128*64。
基本指令如下:函数设置:检查忙位延时子程序写命令到LCD写数据到LCD初始化LCD屏显示图片显示字符串显示字节图片清整个GDRAM空间请指定区域GDRAM清屏命令数字图片转换指定位置反白3.2信号调用模块3.2.1时间信号调用由于硬件使用了时钟芯片ds1302,因此对时间的读取可直接对芯片寄存器内数据进行读取。
根据上图所给地址,调用函数即可实现对时间信息的读取。
时序图:寄存器地址:函数变量设置:初始化读数据写数据实时数据单字节写实时数据单字节读时间设置设置时间调整闹钟时间设置3.2.2功能选择调用设置一个函数Check_key()扫描按键,当出现按键变化时返回一个值。
设置一个全局变量MODE根据返回值选择相应的功能。
设置5个界面--功能函数,每个MODE 对应一个界面。
3.2.3温度湿度调用温度湿度传感器SHT11与口P2.0/P2.1相连读取data处理相应数据即可。
温度计算:湿度计算:露点计算:时序图:函数变量设置:启动sht11重连sht11向sht11中写数据从sht11中读数据测量实时温湿度计算温湿度计算露点获取温度湿度露点3.3其它模块存放一些上述模块未提到或关联不大的函数。
函数变量设置:响铃延迟子函数数字图库ASC码转换六、程序基本操作流程图。
简易万年历设计报告
福建三明学院课程设计(论文)题目:简易万年历设计学生姓名:王前程学号:20090662130系别:物理与机电工程学院专业:电子信息工程(1)班指导教师:林榕完成日期:2011年12月18日摘要本次的设计是以采用STC89C52单片机为核心,通过使用时钟芯片DS1302来实现时钟和日历的功能,同时利用DS18B20数字温度传感器来测量环境温度,并通过蜂鸣器来实现温度的报警功能,最后通过LCD1602液晶显示器来把这些数据显示出来,同时利用按键来实现数据的修改功能。
这样的设计理念带来了许多好处,电路设计简单化,抗干扰能力强,时间和温度的精度高,数据清晰度高,而且提供了良好的人机界面。
当前温度和时间的现场采集和显示系统已有广泛的使用,所以电子钟的应用范围非常的广,比如家里,公共场所还有一些特定的地方,如在电力,工业,农业等领域也有很多应用。
关键字:STC89C52DS1302DS18B20LCD1602按键控制蜂鸣器ABSTRACTThe graduation project is using STC89C52microcontroller as the core,by using the clock chip DS1302to achieve the clock and calendar functions,while using DS18B20 digital temperature sensor to measure ambient temperature,and finally through the LCD1602LCD monitor to bring the data displayed,at the same time using keys is achieving the alarm clock and data modification function and temperature alarm.This design has brought many benefits,simplified circuit design,anti-interference ability,time and temperature with high accuracy,high resolution data,but also provide a good user interface.The current temperature and time of site acquisition and display systems had been widely used,so the electronic clock of the wide range of applications,like household, public places there are some specific places,such as in power,industry,agriculture and other fields have many applications.目录摘要 (2)ABSTRACT (2)1.系统方案 (4)1.1主控制模块的论证与选择 (4)1.2温度采集模块的论证与选择 (4)1.3时钟控制模块的论证与选择 (4)1.4LCD1602液晶显示模块的论证与选择。
课程设计万年历的设计说明
兰州理工大学计算机与通信学院2014年秋季学期面向对象课程设计题目:万年历的设计序言《面向对象的程序设计》是计算机专业一门重要的专业基础课。
此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。
从而提高自我分析问题、解决问题的能力。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象的程序设计方法。
(6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。
目录摘要 (4)第一章系统总体设计 (5)一.理论说明 (5)二.流程图说明 (6)1.总体流程说明图 (6)2.部分流程说明图 (6)第二章系统详细设计 (9)一.主要组成部分 (9)二.源程序 (12)第三章系统测试 (45)四软件使用说明书 (51)一.系统运行环境 (51)二.系统操作提示 (51)总结 (52)参考文献 (52)致谢 (54)摘要万年历作为日常中的小工具,具有多方面的功能,能有效帮助人们记录以及计算时间,在极大程度上帮助人们在日期以及时间方面有最直观的体现。
该设计通过C++的基本知识和技能设计出一个万年历程序,该程序需实现时间和日期的显示以及计算。
一.实现提供时、分、秒组成的时间,并提供时间增加的方法(按秒);二.实现记录年、月、日的过程,并提供日期增加的方法(按天);三.通过上述两项,设计出除除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差;四. 输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
万年历说明书
湄洲湾职业技术学院万年历说明书系别:自动化工程系年级:10级专业:电气自动化姓名:小清学号:1001020254导师姓名:佘明辉职称:副教授2013年 5 月27日目录1.前言 (1)2.系统设计参数要求 (2)3.系统设计 (3)3.1系统设计总体框图 (3)3.2 各模块原理说明 (3)3.2.1 AT89C51单片机最小系统模块 (3)3.2.2 液晶显示模块 (4)3.2.3 蜂鸣器模块 (5)3.2.4 独立键盘模块 (5)3.3 系统总原理图说明 (6)3.4系统印刷电路板的制作图 (6)3.5系统的操作说明 (6)3.6 系统操作注意事项 (6)参考文献 (7)致谢词 (8)附录 (9)附录1:电路总原理图 (9)附录2:印刷电路板 (10)附录3:原件清单 (11)1.前言随着半导体技术的迅速发展,特别是大规模集成电路出现,给人类生活带来了很多的改变。
尤其是单片机技术的应用产品已经随着社会前进的步伐走进我们的生活。
电子产品的应用可谓多不胜数,电子万年历就是其中的一种。
电子万年历的出现给人们的生活带来的极大的方便。
单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。
本设计是制作一个万年历,系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。
系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。
本系统硬件部分由AT89C51单片机、液晶显示器、DS18B20温度测量、键盘、蜂鸣器系统等部分构成。
软件部分在keil环境下用C51语言编写,包括时间设置、时间显示、定时闹钟、温度显示。
2.系统设计参数要求该系统要求参数具体如下:[1] 能显示年、月、日、星期、时、分、温度[2] 用液晶显示器来显示时间[3] 用PROUTEUS设计,仿真基于AT89C51单片机的万年历实验的硬件电路[4] 可设置定时时间,当定时时间到时,蜂鸣器发出报警声音3.系统设计3.1系统设计总体框图采用AT89C51作为主控单片机,温度模块选用DS18B20作为温度传感器,显示模块选用LCD1602,设置部分选用按键电路,其框图如图3.1所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录第一部分设计任务1.1 设计题目及要求 (1)1.2.1 方案一 (1)1.2.2 方案二 (1)第二部分系统硬件平台的设计2.1 总体设计方案说明 (2)2.2 单片机最小系统 (2)2.2.1 STC89C52单片机介绍 (2)2.2.2 时钟电路 (4)2.2.3 复位电路 (4)2.3 1602液晶模块 (5)2.4 时钟芯片DS1302 (6)第三部分系统软件的设计与实现3.1 主程序 (8)3.2.1 Protues 仿真软件介绍 (8)3.2.2 仿真电路图 (9)第四部分安装调试4.1 系统软、硬件调试 (10)4.1.1 调试步骤 (11)4.1.2 故障及处理 (11)课程设计总结 (12)参考文献 (12)第一部分设计任务1.1 设计题目及要求设计一个基于单片机的简易万年历。
(1)可以在LCD液晶上显示秒、分、时、星期、日、月、年;(2)能够判断平年、润年;(3)秒、分、时、星期、日、月、年可调;(4)具有单片机断电记忆功能,在单片机掉电后无需重新设置。
1.2 备选方案设计与比较1.2.1 方案一直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数,并用程序判断平年和闰年,用数码管显示时、分、秒、年、月、日、星期。
由于需要显示的数字比较多,则需要的数码管个数比较多,采用数码管显示显得太浪费,并且多的数码管焊接时也比较复杂,此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,最主要的问题是些方法在单片机主电源断电后,计时将恢复初始值。
所以不采用此种方法作为显示。
1.2.2 方案二采用DS1302时钟芯片实现时钟,用1602LCD液晶显示屏显示时、分、秒、年、月、日、星期。
DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,不需要在程序中采用定时,而且精度高,工作电压2.5V~5.5V围,2.5V时耗电小于300nA,此芯片最主要的特点是具有备用电源引脚,在单片机主电源掉电后,备用电源供电,使得DS1302继续工作,时钟继续运行,即具备掉电记忆功能,符合课程设计要求,液晶显示屏的显示功能强大,可显示大量数字和英文字母,以及一些特殊字符,并且显示多样,清晰可见,且价格适中,固采用此方案。
第二部分系统硬件平台的设计2.1 总体设计方案说明本电路以STC89C52单片机系统为控制核心,时钟电路由高精度低功耗的DS1302提供,采用三线接口与CPU进行同步通信,输入部分采用四个独立式按键S1、S2、S3、S4,即单片机的P2.1、P2.2、P2.3、P2.4。
1602液晶显示部分,D0-D7口与单片机P1口相连,系统原理图如图2-1所示。
图1系统原理图当第一次按下S1时,1602液晶显示器上光标在秒地址上闪烁,液晶显示器是时间停止,表示秒可调;当第二次按下S1时,1602液晶显示器上光标在分地址上闪烁,表示分可调;当第三次按下S1时,1602液晶显示器上光标在时地址上闪烁,表示时可调;依次类推,当第八次按下S1时,液晶显示器是时间启动,光标不出现。
当按一下S2时,可对时、分、秒、年、月、日、星期加一。
当按一下S3时,可对时、分、秒、年、月、日、星期减一。
当按一下S4时,1602液晶显示初始化时间。
2.2 单片机最小系统2.2.1 STC89C52单片机介绍STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。
使用高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
图2 STC89C52接口电路P0 口:P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
P1 口:P1 口是一个具有部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。
对P1 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2 的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5 MOSI(在线系统编程用)P1.6 MISO(在线系统编程用)P1.7 SCK(在线系统编程用)P2 口:P2 口是一个具有部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个 TTL 逻辑电平。
对P2 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。
在这种应用中,P2 口使用很强的部上拉发送1。
在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个 TTL 逻辑电平。
对P3 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。
P3口亦作为STC89C52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
端口引脚第二功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时/计数器0)P3.5 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
2.2.2 时钟电路单片机引脚18和引脚19外接晶振及电容, STC89C52芯片的工作频率可在2~33MHz围之间选,单片机工作频率取决于晶振XT的频率,通常选用11.0592MHz 晶振。
两个小电容通常取值30pF,以保证振荡器电路的稳定性及快速性。
图3 单片机时钟电路2.2.3 复位电路一般若在引脚RST上保持24个工作主频周期的高电平,单片机就可以完成复位,但为了保证系统可靠地复位,复位电路应使引脚RST保持10ms以上的高电平。
如图复位电路带有上电自动复位功能,当电路上电时,由于C3电容两端电压值不能突变,电源+5V会通过电容向RST提供充电电流,因此在RST引脚上产生一高电平,使单片机进入复位状态。
随着电容C3充电,它两端电压上升使得RST电位下降,最终使单片机退出复位状态。
正常运行时,可按复位按钮对单片机复位。
图4 单片机复位电路2.3 1602液晶模块1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端。
第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。
15脚背光正极,16脚背光负极。
主要参数及RAM地址映射图如图5和图6所示。
图5控制器部带有80*8(80字节)的RAM缓冲区。
显示容16×2个字符芯片工作电压 4.5~5.5工作电流 2.0MA(5.0V)模块最佳工作电压 5.0V字符尺寸 2.95×4.35(WXH)mm图62.4 时钟芯片DS1302DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或 Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST 必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),SCLK始终是输入端。
Vcc1X1I/OX2CE图7 时钟芯片DS1302的引脚图其中:X1、X2:32.768KHz晶振接入引脚。
GND:地。
RST:复位引脚,低电平有效,操作时高电平。
I/O :数据输入/输出引脚,具有三态功能。
SCLK :串行时钟输入引脚。
Vcc1:工作电源引脚。
Vcc2:备用电源引脚。
图8 时钟芯片DS1302的部结构DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;DS1302中与时间、日期有关的寄存器共有12个,其中7个存放数据的格式为BCD码格式。
第三部分系统软件的设计与实现3.1 主程序主程序负责系统的初始化,数据由液晶显示器输出显示,同时检测按键是否按下,没有按键按下就进入DS1302中的时间来日期。