简易万年历的设计设计
多功能万年历毕业设计
多功能万年历毕业设计多功能万年历毕业设计在现代社会,人们对时间的管理变得越来越重要。
为了更好地规划和安排生活,人们需要一个方便实用的工具来帮助他们追踪日期、计划活动和提醒重要事件。
在这个背景下,我决定设计一个多功能的万年历,以满足人们对时间管理的需求。
首先,我的多功能万年历将具备传统日历的基本功能,包括显示年、月、日、星期和节假日。
用户可以通过触摸屏幕或旋转按钮来切换日期和月份,方便快捷。
同时,为了满足不同用户的需求,我还将提供多种显示模式,例如数字模式、文字模式和图标模式,用户可以根据自己的喜好选择合适的显示方式。
其次,我的万年历还将配备提醒功能。
用户可以设置重要的事件或活动,并在指定的日期和时间收到提醒。
这将帮助人们更好地规划和安排生活,不再错过重要的事情。
同时,为了提高用户体验,我还将为提醒功能设计多种提醒方式,例如声音、震动和闪光灯,用户可以根据自己的喜好选择合适的提醒方式。
除了基本的日期和提醒功能,我的多功能万年历还将提供一些额外的实用功能。
首先,它将配备天气预报功能,用户可以实时查看当地的天气情况,以便更好地安排出行和活动。
其次,它还将具备健康管理功能,用户可以记录自己的健康数据,例如体重、血压和运动情况,以便更好地掌握自己的健康状况。
此外,我的万年历还将提供备忘录功能,用户可以随时记录重要的事项和想法,方便日后查看和回顾。
为了使我的多功能万年历更加实用和便捷,我还将设计一个与手机或电脑的同步功能。
用户可以通过无线连接将万年历与手机或电脑同步,以便更好地管理和分享自己的日程安排和健康数据。
这将使用户可以随时随地访问自己的日历和数据,无需携带额外的设备。
总的来说,我的多功能万年历将成为人们生活中不可或缺的工具。
它不仅具备传统日历的基本功能,还提供了提醒、天气预报、健康管理和备忘录等实用功能。
通过与手机或电脑的同步,它将帮助人们更好地规划和安排生活,提高工作和生活的效率。
我相信,这个多功能万年历的毕业设计将为人们的时间管理带来全新的体验。
万年历实验报告
万年历实验报告1. 引言日历是人们日常生活中必不可少的工具,用于追踪时间和日期。
在计算机科学中,开发一个能够准确显示日期和日历的程序也是非常重要的。
本实验的目标是设计并实现一个万年历程序,能够显示指定年份和月份的日历。
2. 实验目标本实验的目标是设计和实现一个简单的万年历程序,具体要求如下: - 能够根据指定的年份和月份显示该月的日历。
- 显示的日历应包含月份的名称、年份、星期几和日期。
- 如果输入的年份和月份超出了合法范围(如年份小于1或大于9999,月份小于1或大于12),程序应给出相应的错误提示。
3. 实验方法为了实现上述目标,我们采用了以下步骤:3.1 设计算法设计一个算法来确定给定年份和月份的开始日期,以及该月份的天数。
我们使用基于蔡勒公式的算法来计算开始日期,并根据每个月的天数确定日历的布局。
3.2 编写代码使用Python编程语言编写代码来实现万年历程序。
采用面向对象的编程方式,将日历的显示和计算逻辑封装到一个Calendar类中。
3.3 编写测试用例编写一系列测试用例来验证万年历程序的正确性。
测试用例包括输入合法年份和月份的情况,以及输入非法年份和月份的情况。
3.4 运行程序运行程序,并根据输入的年份和月份来显示相应的日历。
如果输入的年份和月份超出合法范围,程序应给出相应的错误提示信息。
4. 实验结果经过编写代码并进行测试,我们得到了一个能够正常显示日历的万年历程序。
以下是几个测试用例的示例结果:4.1 输入合法年份和月份输入年份为2022,月份为6的情况下,程序显示的结果如下:六月 2022日一二三四五六1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 304.2 输入非法年份和月份输入年份为0,月份为13的情况下,程序应给出错误提示信息,如下:输入的年份或月份不合法,请重新输入。
万年历 毕业设计
万年历毕业设计万年历毕业设计毕业设计是每个大学生都要面对的一项重要任务,它不仅是对所学知识的综合运用,更是对学生综合能力的一次考验。
在选择毕业设计题目时,我对于万年历产生了浓厚的兴趣。
万年历是一种记录时间的工具,它不仅可以帮助人们了解日期和节气,还可以记录重要的日程安排。
因此,我决定以万年历为主题进行毕业设计。
首先,我将设计一个基于手机应用的万年历。
随着智能手机的普及,手机应用成为人们日常生活的重要组成部分。
通过手机应用,人们可以随时随地查看日历,并进行日程安排。
我的设计将包括一个简洁而美观的界面,用户可以通过滑动屏幕查看不同日期的信息。
同时,我还将添加提醒功能,用户可以设置重要的日程提醒,以免错过重要的事项。
其次,我将研究和设计一个能够自动识别节气的万年历。
节气是中国传统文化的重要组成部分,它与农业生产和人们的生活密切相关。
通过研究历史数据和天文知识,我将设计一个算法,能够准确地判断节气的日期和时间。
用户可以通过万年历应用随时查看当前的节气,并了解与之相关的习俗和文化。
另外,我还将研究和设计一个能够记录重要纪念日的功能。
每个人都有自己重要的纪念日,比如生日、结婚纪念日等。
通过万年历应用,用户可以设置这些纪念日,并在特定日期收到提醒。
这将帮助人们更好地珍惜和庆祝重要的时刻,增进彼此之间的情感。
在进行毕业设计的过程中,我将不仅仅局限于软件开发,还将深入了解和研究万年历的历史和文化背景。
万年历作为一种时间记录工具,有着悠久的历史和丰富的文化内涵。
我将通过阅读相关文献和参观博物馆,了解万年历的演变和不同地区的特色。
这将为我的毕业设计增添一份独特的深度和魅力。
最后,我将进行用户调研和测试,以进一步完善我的毕业设计。
通过与用户的交流和反馈,我可以了解他们对于万年历应用的需求和期望。
我将根据用户的反馈进行改进和优化,以提供更好的用户体验。
总之,我的毕业设计将以万年历为主题,设计一个基于手机应用的万年历,包括日程安排、节气识别和纪念日记录等功能。
万年历 论文(设计)定稿
xxxxx毕业论文(设计)基于89S51万年历设计学生姓名xx学号xxxxxxxxxxxxxx指导教师xxxxx学院信息工程学院专业电子信息工程年级xxxx级论文答辩日期20xx年xx月xx日xxxxxxxxx基于89S51万年历设计完成日期:指导教师签字:答辩小组成员签字:摘要万年历在我国已有1000多年的历史,现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。
而随着微电子技术的高速发展,人们发明了更加便捷的电子万年历。
该万年历在日常生活中运用得越来越广泛。
基于单片机控制技术的微电子技术得到了很好的的发展。
广泛应用于各种控制领域、仿真领域、智能领域。
控制领域里的控制温度,定时时温控制,在我们的生活中得到了广泛的应用。
以AT89S51单片机为主要芯片,设计实现的各种时钟控制电路,应用于各种家电、实验设备等。
本文主要介绍了电子日历时钟芯片DS12C887和AT89S51单片机的基础上设计的电路设计和软件设计,可显示年,月,日,星期,时,分,秒。
并可以根据需要进行调整。
关键词:AT89S51单片机;万年历;DS12C887AbstractCalendar in China has 1,000 years of history, calendar is actually recorded within a certain time (for example, 100 years or more) specific Gregorian calendar or lunar calendar date, are in need query withThe original calendar, no direct link. With the rapid development of microelectronics technology, people invented the more convenient electronic calendar. The calendar in their daily lives more and more widely used.SCM control technology-based microelectronic technology has been an unprecedented development. Widely used in various control field, the field of simulation, intelligent field. Control in the field of temperature control, temperature control, timing has been widely used in our lives. AT89S51 microcontroller as the main chip, the design and implementation of a variety of clock control circuit used in a variety of household appliances, laboratory equipment. This paper introduces based the AT89S51 microcontroller DS12C887 electronic calendar clock chip circuit design and software design, the design can display year, month, day, week, hours, minutes, seconds. And can be adjusted according to need.Key words: AT89S51; Calendar; DS12C887目录1引言 (1)2方案论证与设计 (2)2.1方案论证与选择 (2)2.2系统总体设计 (3)3硬件电路设计 (4)3.1主控模块 (4)3.2时钟电路设计 (6)3.2.1晶体振荡器电路及分频器电路 (6)3.2.2时间计数器电路 (7)3.3按键部分电路设计 (8)3.4其它电路及可靠性分析 (8)3.5硬件电路所需要的器材 (11)4软件设计 (12)4.1星期计算 (12)4.2按键模块 (14)4.3显示模块 (16)4.4本章小结 (17)5制作与调试 (18)5.1安装制作 (18)5.2调试与检测安全 (18)5.2.1供电安全 (18)5.2.2测量仪器安全 (18)5.2.3注意事项 (19)5.3实物演示 (19)结束语 (22)参考文献 (23)致谢 (24)1引言时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。
三年级手工年历装饰方法
制作手工年历是一个很好的创意手工活动,可以帮助孩子们学习时间和月份,同时也锻炼他们的动手能力。
以下是一些适合三年级孩子制作的手工年历装饰方法:
1.手印日历:让孩子们在每个月份上用手印出手掌或手指,再写上日期和节日,非常有趣。
您可以使用颜料、水彩笔或彩色笔等来装饰。
2.彩纸日历:用彩纸剪成各种形状,如圆形、星形、心形等,然后将它们粘贴到一个大的
卡纸上,制成一个彩纸月历。
孩子们可以在每个月份上写上日期和重要事件。
3.DIY立体日历:利用纸板、剪刀、胶水和彩笔等材料,制作一个立体日历,让孩子们可
以把每个月份的日历翻到下一页。
这种方法需要较多的耐心和技巧,但可以提高孩子们的手工制作能力和空间想象力。
4.线织日历:使用不同颜色的线织成各种图案,如花朵、星星等,再将它们贴在一个卡纸
上,制成一个线织月历。
孩子们可以在每个月份上写上日期和节日。
这些手工年历装饰方法都比较简单易行,而且可以根据孩子们的兴趣和创造力进行自由组合和变化。
通过手工制作年历,可以让孩子们更好地理解时间和月份,同时也可以培养他们的动手能力和创意思维。
基于51单片机的万年历设计
基于51单片机的万年历设计一、系统设计方案本万年历系统主要由 51 单片机、时钟芯片、液晶显示屏、按键等部分组成。
51 单片机作为核心控制器,负责整个系统的运行和数据处理。
时钟芯片用于提供精确的时间信息,液晶显示屏用于显示万年历的相关内容,按键则用于设置时间和功能切换。
二、硬件设计1、单片机选型选用常见的 51 单片机,如 STC89C52 单片机,它具有性能稳定、价格低廉、易于编程等优点。
2、时钟芯片选择 DS1302 时钟芯片,该芯片能够提供高精度的实时时钟,具有闰年补偿功能,并且可以通过串行接口与单片机进行通信。
3、液晶显示屏采用 1602 液晶显示屏,能够清晰地显示字符和数字,满足万年历的显示需求。
4、按键电路设计四个按键,分别用于时间设置、功能切换、加和减操作。
三、软件设计1、主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、时钟芯片初始化、液晶显示屏初始化等。
然后读取时钟芯片中的时间数据,并在液晶显示屏上显示出来。
接着进入循环,不断检测按键状态,根据按键操作执行相应的功能,如时间设置、功能切换等。
2、时钟芯片驱动程序通过单片机的串行接口向 DS1302 发送命令和数据,实现对时钟芯片的读写操作,获取准确的时间信息。
3、液晶显示屏驱动程序编写相应的函数,实现对1602 液晶显示屏的字符和数字显示控制。
4、按键处理程序采用扫描方式检测按键状态,当检测到按键按下时,执行相应的按键处理函数,实现时间设置和功能切换等操作。
四、时间设置功能通过按键操作进入时间设置模式,可以分别设置年、月、日、时、分、秒等信息。
在设置过程中,液晶显示屏会显示当前设置的项目和数值,并通过加、减按键进行调整。
设置完成后,将新的时间数据保存到时钟芯片中。
五、显示功能万年历的显示内容包括年、月、日、星期、时、分、秒等信息。
通过合理的排版和显示控制,使这些信息在液晶显示屏上清晰、直观地呈现给用户。
六、系统调试在完成硬件和软件设计后,需要对系统进行调试。
基于STM32单片机的万年历设计毕业设计论文
万年历是一种可以显示年、月、日、星期的电子设备,广泛应用于日常生活和办公场所。
本文将介绍一个基于STM32单片机的万年历的设计思路和实现过程。
首先,我们需要明确设计目标。
在这个项目中,我们的目标是使用STM32单片机开发一个功能齐全、易于操作的万年历。
具体地说,这个万年历应该能够显示当前的年、月、日和星期,并且能够进行日期的加减操作,同时应该具备一些辅助功能如闹钟设置、倒计时等。
接下来,我们需要进行硬件设计。
首先需要选择适当的显示屏,比如常见的LCD或OLED屏幕。
然后,我们需要选择合适的按键和外部触发器,用于用户的交互输入。
同时,还需要添加一些必要的接口,如USB接口用于数据传输和维护。
在软件设计方面,我们需要定义合适的数据结构来存储日期、时间、闹钟等信息。
同时,需要编写相应的程序来实现日期的显示和更新、日期的加减、闹钟的设置等功能。
在实现倒计时功能时,我们可以使用定时器中断来实现精确的计时。
此外,为了提高用户体验,我们可以添加一些额外的功能。
比如,我们可以为万年历设计一个简洁美观的用户界面,考虑使用图形库绘制用户界面元素。
同时,可以添加一些实用的功能如温湿度监测、天气预报等。
最后,在整个开发流程结束后,我们需要进行集成测试和调试,确保万年历的各项功能正常运行。
并且,我们还可以考虑为万年历添加一些优化和改进措施,如增加存储容量、优化节能技术等。
综上所述,基于STM32单片机的万年历设计主要涉及硬件设计和软件设计两个方面。
通过精心的设计和合理的实现,我们可以开发出一款功能丰富、易于使用的万年历产品,满足用户的各种需求。
基于单片机万年历设计
基于单片机万年历设计基于单片机的万年历设计二、实验要求设计一个万年历,将时钟显示在LCD1602的显示屏上并且可以进行年、月、日以及时、分、秒的设置。
此外还可以通过按键进行闹钟设置以及事件提醒功能,用蜂鸣器进行闹铃提醒。
最后附加一个温湿度检测的功能,用温湿度传感器检测室内的温湿度并将温湿度数据在显示屏上显示出来。
三、实验设备和仪器1.用STC89C52芯片作为系统板的主控芯片2.DHT11温湿度传感器3.DS1302时钟芯片4.LCD1602显示屏四、实验各模块原理介绍4.1STC89C52单片机STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flah存储器。
STC89C52使用经典的MCS-51内核,具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flah,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
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口用时,需加上拉电阻。
8.具有EEPROM功能9.共3个16位定时器/计数器。
即定时器T0、T1、T2。
10.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。
11.通用异步串行口(UART),还可用定时器软件实现多个UART。
12.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)13.PDIP封装1、STC89C52单片机引脚图图4.1STC89C52单片机引脚图①主电源引脚(2根) VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线②外接晶振引脚(2根) 某TAL1(Pin19):片内振荡电路的输入端某TAL2(Pin20):片内振荡电路的输出端③控制引脚(4根) RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
电子万年历设计报告
电子万年历设计报告The document was prepared on January 2, 2021电子万年历设计报告专业电气工程及其自动化班级电气2班姓名马志欣学号小组第22组指导教师王松林电子万年历概述电子万年历是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎.LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命.第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表.第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级.第三次革命就是单片机数码计时技术的应用电子万年历,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求因此,电子万年历的出现带来了钟表计时业界跨跃性的进步.随着科学技术的快速发展,不断研究创新,对于电子万年历采用直观的数字显示,可以同时显示年,月,日,时,分,温度等信息,还具有时间校准等功能,该电路采用AT89C51单片机作为核心,电压可选用3-5V电压供电.一、内容摘要本设计利用数量较少的芯片制作了一个运用简单的电子万年历.以单片机作为本设计的核心,实现时钟日历的显示:用八段LED数码管分别显示年、月、日、星期、时、分、秒,用DS1302作为该设计的实时时钟芯片,用74LS164寄存器来驱动数码管的各段码,用三极管来驱动数码管的各位码.并且通过AT89C51单片机读取数字温度芯片的内部数据,进行处理后送到数码管显示其温度功能,通过按键实现调试功能.二、设计要求1设计电子万年历,实现时钟日历的显示,或显示年、月、日或时、分、秒,用DS1302作为设计的实时时钟芯片.2温度记录仪电路设计:功能:1、记录温度并保存,每10分钟记录一次温度数据.2、可显示时间、温度数据3、可查询温度数据4、可由上位机电脑读取温度数据.三、设计方案1、显示时钟功能1单片机芯片的选择采用AT89C51芯片作为硬件核心,并且与MCS-51系列单片机完全兼容.2显示模块的选择采用LED数码管,更注重于显示多位数字.3时钟芯片的选择采用DS1302时钟芯片实现时钟,且精度高,可自动对时、分、秒进行计数,工作电压在范围内.2、温度显示功能1单片机芯片的选择AT89C51芯片2显示模块的选择采用LED数码管来显示温度3温度传感器的选择采用温度传感器DS18B20,传感器DS1302四、系统硬件框图1单片机模块引脚功能:AT89C51单片机有40个引脚.Vcc:电源电压+5VGND:接地P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口.作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用.P1口:P1口是一个带内部上拉电阻的8位双向I/O,P1的输出缓冲级可驱动吸收或输出电流4个TTL逻辑门电路.对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流.P2口:P2口是一个带内部上拉电阻的8位双向I/O,P2的输出缓冲级可驱动吸收或输出电流4个TTL逻辑门电路.对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流.P3口:P3口是一组带内部上拉电阻的8位双向I/O,P3的输出缓冲级可驱动吸收或输出电流4个TTL逻辑门电路.对P3口写入“1”时,它们被内部的上拉电阻拉高并可作为输入端口.作输入端时,被外部拉低的P3口将用上拉电阻输出电流.P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,见表3-1所示:RST:复位输入.ALE/PROG:当访问外部程序存储器或数据存储器时,ALE地址锁存器允许输出脉冲用于锁存地址的低8位字节XTAL1:振荡器反相放大器及内部时钟发生器的输入端.XTAL2:振荡器反相放大器的输出端.定时/计数器:AT89C51单片机内含有2个16位的定时器/计数器.中断系统:AT89C51单片机有6个中断源,中断系统主要由中断允许寄存器IE、中断优先级寄存器IP、优先级结构和一些逻辑门组成.2按键电路3数码管显示4热敏电阻5DS1302系统精确时钟DS1302的控制字节的最高有效位位7必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位位0如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出.DS1302 引脚图6蜂鸣器7拨动开关五、万年历软件系统的流程当接通电源开始工作后,单片机中的程序开始运行,将对DS18B20进行初始化,以便和单片机芯片达成通信协议.完成初始化后,由于本系统只有一个测温元件,单片机会向其发出跳过RAM 指令,接下来便可向其发送操作指令,启动测温程序,测温过程完成后,发出温度转换指令,从而便可将温度转化成数字模式进行显示读取;同时DS1302将读取时分秒及年月日寄存器后通过LED数码管显示时间日期,键盘电路中按键可对实时时钟进行调整.六、各单元元器件内容介绍1、温度信息采集通过DS18B20单线总线的所有执行处理都从一哥舒适化序列开始,初始化序列包括一个由总线控制器发出复位脉冲和随后由从机发出的存在脉冲.1复位2存在脉冲3控制器发送ROM指令4控制器发送存储器操作指令5执行或数据读写2、时钟的读取1DS1302控制字节2DS1302数据的输入和输出在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始.在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位至高位7.3温度的显示控制先对LED数码管进行初始化,当所测温度从DS18B20输送到单片机上之后,在LED数码管上显示出来.4按键模块使用按键可调整LED数码管上显示的数值.七、相关的电路图和实物图电子万年历实物图电子万年历封装图八、调试与软件仿真1、软件的仿真与调试1打开KEIL,输入所编写的源程序进行编译,在软件的帮助下检查其中的错误并进行修改,直到编译正确后运行.2绘制单片机电子万年历运行电路图.3检查所画电路运行图,确保没错误后,在PROTEUS下对原理图进行加载KEIL下的源程序.4加载完成后,进行仿真,观察LED数码管情况,程序调试完成后2、硬件调试与连接1检测AT89C51运行是否正常2LED数码管显示是否正常3各元件是否正常4将程序下载完调试完后用仿真软件主机与从机连接主机与从机连接后的电路板情况九、问题分析与总结出现的问题:1、在焊接电路板时,有些元件出现假焊,致使LED数码管不能正常显示.2、在接芯片时引脚弄错,致使与电路图不能相互符合.3、在调试完成后,LED数码管不能正常显示或出现乱码,检查后发现是接触不良造成的.总结在制作过程中一直不断出现很多常见的错误,导致结果都不理想,之后通过与老师与同学之间的交流后每个问题都得到了解决,这让我们更加加深印象.虽然出现很多问题但也学到了许多常识性的知识,这使我们的能力也得到锻炼和提高,也使对设计的整体流程有了更清楚的认识,小组成员们也一直在不断的努力,在经过老师与同学的帮助后最终有了成果使我们信心上得到了很大的支持.。
万年历课程设计
万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及其换算方法。
2. 学生能够运用所学的知识,制作并解释简单万年历,了解闰年和平年的判断规则。
3. 学生能够解释生活中的时间单位,如时、分、秒,并掌握它们之间的换算。
技能目标:1. 学生通过实际操作,学会制作和应用简单万年历,提升解决问题的能力和动手实践能力。
2. 学生能够运用万年历进行日期查询和推算,增强逻辑思维和计算能力。
3. 学生通过合作交流,提高表达和沟通能力,培养团队协作精神。
情感态度价值观目标:1. 学生培养对时间管理和计划安排的意识,养成珍惜时间、合理规划的好习惯。
2. 学生在学习过程中,体验探索和发现的乐趣,激发对自然科学和数学的兴趣。
3. 学生通过了解不同文化背景下的时间观念,增强跨文化理解和尊重多元文化的态度。
课程性质:本课程以实践性、探究性和趣味性为主要特点,结合数学、自然科学和社会文化知识,帮助学生建立时间观念,提高综合运用知识的能力。
学生特点:考虑到学生的年级特点,课程设计将注重直观演示和实际操作,以激发学生的兴趣和好奇心,同时结合学生的认知水平,逐步引导他们掌握万年历的制作和应用。
教学要求:教师在教学过程中,应关注学生的个体差异,提供个性化的指导和支持。
课程设计应注重培养学生的动手能力、逻辑思维能力和团队协作能力,确保学生能够达到预定的学习目标。
二、教学内容1. 年、月、日的概念及其关系- 介绍年、月、日的定义和相互关系。
- 年份的种类:闰年和平年的区别及判断方法。
2. 万年历的制作原理- 探索如何将日历与天文数据相结合,介绍格里高利历的基本原理。
- 学习如何通过计算确定每个月的天数,以及如何安排闰年的2月。
3. 日期的换算与查询- 学习日期的换算方法,如年与日、日与星期等。
- 实践操作:使用万年历进行日期查询和推算。
4. 实际应用与时间管理- 讨论如何利用万年历进行时间规划和管理。
万年历课程设计报告
万年历课程设计报告一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及其换算方法。
2. 学生能够运用所学知识,独立制作并使用简易的万年历。
3. 学生了解我国农历与公历的区别及相互转换方法。
技能目标:1. 培养学生运用数学知识解决实际问题的能力,提高逻辑思维和推理能力。
2. 培养学生动手操作和团队协作能力,通过制作万年历的过程,锻炼实践操作技能。
情感态度价值观目标:1. 培养学生对时间管理的重视,树立珍惜时间的观念。
2. 增强学生对传统文化的认识,激发对中国古代天文历法的兴趣。
3. 培养学生积极探究、合作交流的良好学习态度,提高学习自信心。
课程性质分析:万年历课程属于数学与生活相结合的综合性课程,旨在让学生在实际问题中运用数学知识,提高解决实际问题的能力。
学生特点分析:考虑到学生所在年级的特点,课程内容应以直观、生动、有趣的方式进行设计,注重培养学生的动手操作能力和团队协作精神。
教学要求:1. 教师应充分准备教学资源,提供丰富的实例,引导学生主动参与学习过程。
2. 教学过程中,教师要以学生为主体,关注学生的个体差异,给予个性化指导。
3. 教师要关注学生的学习反馈,及时调整教学策略,确保课程目标的达成。
二、教学内容1. 年、月、日的关系及其换算方法- 公历与农历的基本概念- 年、月、日的定义及其相互关系- 闰年和平年的判断方法2. 简易万年历的制作- 万年历的基本结构- 制作步骤及注意事项- 万年历的使用方法3. 我国农历与公历的转换方法- 农历与公历的对应关系- 农历日期的推算方法- 二十四节气的计算与应用教学大纲安排:第一课时:导入万年历的概念,介绍年、月、日的关系及其换算方法,讲解闰年和平年的判断方法。
第二课时:指导学生动手制作简易万年历,掌握万年历的基本结构和使用方法。
第三课时:学习我国农历与公历的转换方法,了解二十四节气的计算与应用。
教材章节:《数学》教科书:第四章 时间与测量,第四节 万年历的制作与应用。
基于单片机C51的简单万年历设计毕业设计
第十届学生科技节-----单片机设计大赛作品名称:万年历专业:物联网班级:1指导老师:郑旭丹组长:邓清兰学号:3112113111组员:黄孟秋学号:3112113101目录一、绪论 (1)二、系统功能 (1)三、硬件电路 (1)3.1. 电路设计框图 (1)3.2. 系统硬件概述 (2)四、各模块功能及工作原理 (2)4.1. 单片机主控制模块的设计 (2)4.2. LCD1602显示模块 (3)4.3. 键盘模块 (6)五、实现结果 (9)六、系统的实用性及创新性 (9)七、调节中遇到的问题及心得体会 (10)八、程序设计 (11)8.1. 流程图 (11)8.2. 源代码 (12)九、总结及感谢 (24)一、绪论众所周知单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
本设计要制作的就是单片机于生活中最为常见的几种应用——万年历。
本设计以AT89S52单片机作为核心,可以显示当前的日历和时间,时间也可以人为设定,显示格式为年(四位),月(两位),日(两位),时(两位),分(两位),秒(两位)。
设置时间的位切换、设定数值、启动定时器、切换日历通过外部中断来实现。
万年历显示电路由LCD1602组成,制作该装置的材料需要有软硬件的支持,硬件方面AT89C51单片机,晶振,电源,液晶屏LCD1602。
二、系统功能本次设计的是万年历,采用LCD1602显示,实现的功能如下:1.显示当前时间,显示格式为年(四位),月(两位),日(两位),时(两位),分(两位),秒(两位);2.时钟计时,自动进行时间的位切换;3.键盘设置,能通过键盘设定当前时间和计时,并通过键盘人为设定时间。
万年历的设计与实现
一、引言万年历是一种用来显示公历日期的工具,它可以显示任意年份、月份和日期的具体信息,是人们日常生活中常用的日历。
在现代科技的发展下,电子万年历已经成为人们生活中不可或缺的工具之一、本文将介绍电子万年历的设计与实现。
二、需求分析电子万年历的主要功能包括显示年份、月份、日期、星期和节假日等信息,还可以实现查询功能和闹钟功能。
基于这些需求,我们可以列出以下设计要点:1.显示日期信息:能够准确显示当前年份、月份和日期,并根据日期自动显示对应的星期。
2.节假日功能:能够根据日期判断是否是法定节假日,并在显示上进行标识。
3.查询功能:用户可以通过输入特定的年份、月份和日期来查询对应日期的具体信息。
4.闹钟功能:用户可以设置闹钟,在指定的时间点进行提示。
三、设计方案1.硬件设计电子万年历的硬件设计主要包括显示屏、按键和主控芯片等部分。
显示屏采用液晶显示屏,用于显示日期和相关信息;按键用于用户输入,包括查询和设置闹钟等功能;主控芯片用于控制整个系统的运行。
2.软件设计电子万年历的软件设计主要包括日期显示、节假日判断、查询功能和闹钟功能。
具体的软件设计如下:(1)日期显示:根据当前日期获取对应的年份、月份和日期信息,并通过显示屏进行显示。
同时,根据日期信息计算对应的星期,并显示在屏幕上。
(2)节假日判断:根据国家的法定节假日规定,判断当前日期是否是法定节假日,并在显示屏上进行标识。
(3)查询功能:用户可以通过输入特定的年份、月份和日期来查询对应日期的具体信息。
根据用户输入的信息,系统进行判断并显示相应的结果。
(4)闹钟功能:用户可以设置闹钟时间,当时间到达时,系统进行提示。
闹钟功能需要经常与实时的时间进行比对,以确保准确性。
四、实现细节1.硬件实现硬件设计主要包括选择合适的显示屏、按键和主控芯片。
显示屏可以选择液晶显示屏,具有较好的显示效果和易操作性;按键可以选择独立按键或触摸按键,用于用户输入;主控芯片可以选择单片机或嵌入式系统,用于控制整个系统的运行。
C++课程设计PPT教学课件
万年历的程序总体图
• 万年历分两大部分:查询输入部分和结果显示 部分。查询输入部分包一个文本框,用于输入 年份。
• 当输入完成后,用户图形界面出现相应年月简 易的日历表,并且是以星期的格式出现
万年历
输入年份 文本框
输出万年 历
2020/12/09
3
万年历详细设计流程图
打印一年日历
Void f
Void q
大月
小月
闰年 二月
非闰 年二 月
输出 日历 表
一月 的定 义
主函 数
闰二 月的 定义
非闰 二月 的定 义
三月
四月 五月 六月 七月
2020/12/09
八月
九月
十月
十一 月
十二 月
4
大月和小月的定义
• void f1(int x)
//大月
•{
• for( i=0;i<50;i++)
• a[i]=33;
• for(i=k-1;i>=0;i--)
• a[i]='\000'; //1号前均为空格
• for(i=k;i<31+k;i++)
• a[i]=a[i-1]+1;
•}
•
主要运用了数组的循环语句进行对大月的定义。
• void f2(int x)
//小月
•{
• for( i=0;i<50;i++)
• a[i]=33;
•
day=day+31+29;
•} • else
//非闰年二月
•{
• k=((day+31)%7+6)%7+1;
C语言课程设计实验报告(万年历)
C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。
假定输入的年份在1-9999年之间。
2、输入年月,输出该月的月历。
3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。
:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。
即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。
二、使用的所有变量的说明变量说明:(以下均为整型变量)year 表示年份的变量month 表示月份的变量day 表示日期的变量select 表示菜单选择的变量i 表示月份的变量j 表示一个月中的某一天的变量sum 判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[] 表示每月天数的数组变量year1 系统时间年份的变量month1 系统时间月份的变量day1 系统时间日期的变量三、程序清单及其说明#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" 请输入相应数字:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" 年历显示:输入年(如2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 2: /*当选择为2显示月历*/printf(" 月历显示:输入年月(如2011,6):");if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 3: /*当选择为3时显示日期*/printf(" 日期显示:输入年月日(比如2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) ){display3(year,month,day);printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 4:exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" 输入无效,重新输入!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {int i,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;return sum;}int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ {int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d 年%d 月\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d 年%d 月\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/{int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,daydays=days0-days1; /*计算出两个日期之间的时间差*/printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ;switch( number){case 0:printf( "\n %d年%d月%d日是星期日",year,month,day);break;case 1:printf( "\n %d年%d月%d日是星期一",year,month,day);break;case 2:printf( "\n %d年%d月%d日是星期二",year,month,day);break;case 3:printf( "\n %d年%d月%d日是星期三",year,month,day);break;case 4:printf( "\n %d年%d月%d日是星期四",year,month,day);break;case 5:printf( "\n %d年%d月%d日是星期五",year,month,day);break;case 6:printf( "\n %d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf(" 出现错误!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/{if(month==1)switch(day){case 1:printf(",这天是元旦");}if(month==2)switch(day){case 14:}if(month==3)switch(day){case 8:printf(",这天是妇女节");break;case 12:printf(",这天是植树节");}if(month==4)switch(day){case 1:printf(",这天是愚人节");}if(month==5)switch(day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if(month==6)switch(day){case 1:printf(",这天是儿童节");}if(month==7)switch(day){case 1:printf(",这天是建党节");}if(month==8)switch(day){case 1:printf(",这天是建军节");}if(month==9)switch(day){printf(",这天是教师节");}if(month==10)switch(day){case 1:printf(",这天是国庆节");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/ if(year<2){system("cls");printf(" 警告!超出范围!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown:/*“↓”年份变大*/ year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/char k;getch();k=getch();switch(k){case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight:/*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}{printf(" ************主菜单************\n\n");printf(" * 欢迎进入万年历系统*\n\n");printf(" * 1、年历显示*\n\n");printf(" * 2、月历查询*\n\n");printf(" * 3、日期查询*\n\n");printf(" * 4、退出系统*\n\n");printf(" ******************************\n\n"); }四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示(2)输入年份2011,显示2011年的年历如下(3)按↑键盘显示上一年(2010年)的年历,显示如下(4)按↓键盘显示上一年(2012年)的年历,显示如下2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下(2)按←键盘显示上一个月(5月)的月历,显示效果如下(3)按→键盘显示上上个月(7月)的月历,显示效果如下3、日历的显示(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天(2)按PagDown显示前一天的日历,显示如下(3)按PagUp显示后一天的日历,显示如下4 退出程序输入选择4,显示如下界面,按任意键退出程序五、总结和体会。
万年历的课程设计
万年历的课程设计一、课程目标知识目标:1. 学生能够理解年、月、日的关系,掌握闰年和平年的判断方法。
2. 学生能够运用万年历知识,正确编制和计算不同年份的日历。
3. 学生了解中国农历的基本知识,理解农历与公历之间的关系。
技能目标:1. 学生能够运用所学知识,独立完成万年历的制作。
2. 学生通过实际操作,提高观察、分析、解决问题的能力。
3. 学生能够运用信息技术手段,查找、整理万年历相关知识。
情感态度价值观目标:1. 学生培养对时间管理的重视,养成珍惜时间的良好习惯。
2. 学生在学习过程中,增强对我国传统文化的认同感和自豪感。
3. 学生通过合作学习,培养团队协作精神和沟通能力。
课程性质:本课程为综合实践活动课程,结合数学、历史等学科知识,注重实践与探究。
学生特点:四年级学生具有较强的求知欲和动手能力,对时间概念有初步的认识。
教学要求:教师应注重引导学生主动探究,培养学生的实践能力和创新精神,将理论知识与实际生活相结合,提高学生的学习兴趣和积极性。
通过本课程的学习,使学生达到上述课程目标,并将目标分解为具体的学习成果,以便于后续的教学设计和评估。
二、教学内容1. 年、月、日的关系及其计算方法- 公历与农历的基本概念- 闰年和平年的判断规则- 每月天数及年度天数的计算2. 万年历的制作原理与步骤- 万年历的基本结构- 万年历的制作方法及注意事项- 制作过程中日期排列与校验技巧3. 中国农历基础知识- 农历的起源与发展- 二十四节气的基本概念及其应用- 生肖、农历节日及其习俗4. 教学内容的安排与进度- 第一节课:介绍年、月、日的关系及计算方法,闰年和平年的判断规则- 第二节课:讲解万年历的制作原理与步骤,学生动手制作简易万年历- 第三节课:讲解中国农历基础知识,探讨农历与公历的异同教学内容参考教材章节:- 《数学》四年级上册:时间与日期- 《综合实践活动》四年级上册:我们的时间教学内容确保科学性和系统性,结合教学大纲,让学生在掌握万年历知识的基础上,深入了解我国传统文化,提高实践与探究能力。
C语言万年历设计报告
千里之行,始于足下。
C语言万年历设计报告设计报告:C语言万年历1. 引言本文旨在介绍一个基于C语言开发的万年历设计,并对其设计思路、代码细节、实现效果进行具体的阐述。
万年历是一种依据历法规章,能够显示任意年份任意月份的日历的工具。
在本设计中,我们使用C语言来编写一个简易的万年历程序,具备显示任意年份任意月份的日历、日期查询等功能。
2. 设计思路2.1 数据结构设计在设计万年历程序时,我们需要设计适用于存储日期信息的数据结构。
考虑到日历是依据年份和月份来呈现的,我们可以使用结构体来存储日期的年、月、日信息。
具体数据结构如下:```struct Date {int year;int month;int day;};```2.2 星期计算算法第1页/共3页锲而不舍,金石可镂。
在日历中,我们需要依据给定日期计算出其对应的星期。
这里我们接受Zeller公式来计算星期。
Zeller公式可以依据给定的年、月、日计算出一个对应的星期数。
具体公式如下:```h = (q + ((13*(m+1))/5) + K + (K/4) + (J/4) - (2*J)) % 7```其中,h是一个星期的编号,0代表星期一,1代表星期二,以此类推。
2.3 日历显示算法对于日历的显示,我们需要依据给定的年份和月份计算出该月的天数,并打印出日历表。
具体算法如下:- 首先,依据给定的年份和月份,计算出该月的天数。
- 然后,依据给定年份、月份、星期计算公式,计算出该月的第一天是星期几。
- 接下来,依据计算结果,打印出日历表。
3. 主要函数设计在C语言万年历程序的设计中,我们主要需要设计以下几个函数:3.1 输入函数该函数用于接收用户输入的年份和月份,并进行基本的输入验证,确保输入的年份和月份在合理范围内。
千里之行,始于足下。
3.2 星期计算函数该函数依据给定的年份、月份、日期,计算出对应的星期数,并返回星期数。
3.3 天数计算函数该函数依据给定的年份和月份,计算出该月的天数,并返回天数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
漳州师范学院简易万年历的设计系别:物理与电子信息工程系专业:电子信息科学与技术2013年6月目录1. 设计任务 (4)1.1设计任务 (4)1.2设计要求 (4)2.设计方案 (4)2.1设计思路 (4)2.2方案比较与论证 (4)2.2.1 数码管显示模块 (4)2.2.2 温度传感器的选择 (5)2.2.3 时钟计时的选择 (5)2.3系统结构框图 (6)3.各功能模块设计 (6)3.1显示模块原理 (6)3.2参数计算 (7)3.3独立式按键模块 (7)3.4时钟模块 (8)3.4.1 DS1302特性介绍 (8)3.4.2 DS1302引脚介绍 (8)3.4.3 DS1302有关日历、时间的寄存器 (9)3.4.4 DS1302控制字介绍 (9)3.4.5 DS1302单字节读写时序介绍 (10)3.4.6 DS1302操作指令介绍 (11)3.4.7 DS1302与单片机接口电路 (11)3.5温测模块 (11)3.5.1 单总线介绍 (11)3.5.2 DS18B20特性介绍 (12)3.5.3 DS18B20管脚介绍 (12)3.5.4 DS18B20内部结构 (12)3.5.5 DS18B20温度转化示例 (13)3.5.6 DS18B20时序介绍 (13)3.5.7 DS18B20操作步骤 (15)3.5.8 DS18B20与单片机的接口电路 (16)3.6总系统原理图 (16)4.软件设计 (16)4.1I/O口分配 (17)4.2按键扫描 (17)5.流程图 (17)5.1主程序流程图 (17)5.2 WORK0模块流程图 (18)5.3 WORK1模块流程图 (18)5.4 WORK2模块流程图 (19)5.5获取温度子程序流程图 (19)5.6按键扫描 (20)5.7中断服务子程序 (21)5.8显示方式1 (21)5.9初始化DS1302子程序流图 (22)5.10温显模块子程序流图 (22)5.11读取时间模块子程序流图 (23)6.程序代码 (23)6.1主程序部分 (23)6.2包含文件<DS18B20.H>部分 (31)6.3包含文件<DS1302.H>部分 (33)7.调试要点 (41)7.1硬件调试 (41)7.2软件调试 (41)7.3结果分析及设计工作总结 (41)8.参考文献及附件 (42)8.1参考文献 (42)8.2元器件清单 (42)8.3PCB版图 (42)8.4实物图正面 (43)8.5实物图背面 (44)摘要:单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。
单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。
将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。
本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括两大功能:可显示年、月、日、时、分;实时监测环境温度(具有超低温的报警功能,且报警的上下限值可由用户自定义设置),。
关键字:单片机,DS18B20,DS1302,共阳数码管.1. 设计任务1.1 设计任务利用单片机、时钟芯片DS1302、温度传感器DS18B20、数码管等实现日期、时间、温度的显示,即一个简单的万年历。
1.2 设计要求1. 通过DS1302计时,时间可调并在数码管上显示出来。
2. 通过DS18B20检测当前环境温度,精读为0.5。
3. 具有超温报警功能2.设计方案2.1设计思路本设计由DS18B20作为温度检测的核心,检测一次当前温度所耗费的时间大约在100ms—750ms之间,随着检测精度的增加,耗费时间在方位内逐渐增加,所以利用软件延时的方法来实现温检,并且具有超温和低温的报警功能,其温度报警的上下限值可根据用户喜好进行更改;时钟部分使用专用计时芯片DS1302,可精确显示年、月、日、时、分、秒;2.2方案比较与论证2.2.1 数码管显示模块方案一:单片机输出数据经译码芯片CD4511进行译码后直接驱动数码管,数码管公共端接9012三极管扩流,并通过单片机I/O口控制三极管的选通,实现动态显示。
方案二:有单片机的I/O口直接驱动数码管的段码,数码管的公共端接9012三极管,通过灌电流的方式点亮数码管,也需通过单片机I/O口控制三极管的选通,实现动态显示。
由于所需I/O口由AT98S52可直接提供,无须因为I/O口不够而用CD4511来节省I/O口,方案二又较方案一更容易实惠,所以,我选择方案二。
2.2.2 温度传感器的选择方案一:采用热敏电阻作为检测温度的核心元件,由于热敏电阻会随温度变化而变化,进而其阻值发生变化,再经555振荡器变化的脉冲数传递给单片机进行处理。
方案二:采用数字式的集成温度传感器DS18B20作为温度检测的核心元件,由其检测并直接输出数字温度信号给单片机进行处理。
对于方案一,采用热敏电阻作为温度检测元件,有价格便宜,元件易购的优点,但热敏电阻对温度的细微变化不太敏感,并且由于热敏电阻的R-T关系的非线性,其自身电阻对温度的变化存在较大误差,而且在人体所处环境温度变化过程中难以检测到小的温度变化。
但作为本次设计虽已能满足基本要求,但为了更深入的学习,所以放弃该方案。
对于方案二,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转化等电路的误差因数,温度误差变得很小,并且由于其检测温度的原理与热敏电阻检测的原理有着本质的不同,使得其温度分辨力极高。
温度值在器件内部转化成数字量直接输出,简化了系统程序设计,又由于该温度传感器采用先进的单总线技术,与单片机的接口变得非常简洁,抗干扰能力强,虽然芯片原理复杂,但是可以对时序的理解更深入一步,所以选择此方案。
2.2.3 时钟计时的选择方案一:AT89S52单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592的晶振就能实现零误差的计时,因此可以利用此功能实现计时,但因为只有单一的计时功能要实现“万年历”的功能需要较复杂的程序,而且如果单片机掉电无法继续进行计时,所以使用不便。
方案二:DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
利用单片机强大的控制功能就可实现实时计时的功能,而且消耗的系统资源少,程序简单。
综合上述两种方案,宜采用方案二实现实时计时功能。
2.3系统结构框图AT89S52单片机在模式键、设置键的控制下,由P0口输出数据,通过P2.0 、P2.1、P2.2、P2.3进行选通,用数码管显示信息。
系统框图:图2-3系统总框图3.各功能模块设计3.1显示模块原理由单片机(AT89S52)的引脚P0口输出温度、时间等数据信息,通过片选信号P2.0 、P2.1、P2.2、P2.3就可在相应的数码管进行显示。
当位选信号P2.0为低电平时,P1口送出数据也为低电平就点亮数码管,电流灌进单片机。
多位LED显示,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。
而共阳极公共端分别接一个9012,由相应的I/O口线控制9012,实现各位数码管的分时选通。
段选码,位选码每送入一次后延时5MS,因人的视觉暂留时间为0.1S(100MS),所以每位显示的时间不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。
电路如(图3-1)所示。
由于采用的是共阳极数码管,所以要让段码点亮需把I/O口置0,例如:段码a到h对应的I/O口是P0.0到P0.7,则要让数码管显示0到9对应的16进值如图3-2所示图3-1显示电路图3-2码表3.2 参数计算由于I/O 口高电平约等于5V ,使用灌电流的方式驱动数码管,故选用PNP 型三极管9012;数码管能正常工作的段电流为3mA--10 mA ,压降为1.7V ,三极管发射极和集电极的压降为0.3V ,因此限流电阻的压降为3.0V , 所以选用限流电阻的阻值R=470欧.3.3 独立式按键模块独立式按键是直接用I/O 口线构成的单个按键电路,其特点是每个按键单独占用一根I/O 口线,每个按键的工作不会影响其它I/O 口线的状态。
独立式按键的典型应用如(图3-3)所示。
Ω==500105mA VR独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,但本设计只用到四个按键,顾采用独立式按键电路。
K0K1 K2 K3P24 P25 P26 P27按键模块图3-3独立式按键电路3.4 时钟模块DS1302通过三根口线实现与单片机的通信,因DS1302功耗很小,即使电源掉电后通过3V的纽扣电池仍能维持DS1302精确走时。
3.4.1 DS1302特性介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
3.4.2 DS1302引脚介绍各引脚的功能为:1、Vcc2:5V电源。
当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。
2和3、X1、X2 是外接晶振脚(32.768KHZ的晶振)4、地(GND)5、CE/RST:复位脚6、I/O:数据输入输出口;7、SCLK:串行时钟,输入;8、Vcc1:备用电池端;3.4.3 DS1302有关日历、时间的寄存器寄存器的说明如下:1、秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。
当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄存器的该位置改写为0时,时钟才能开始运行。
2、小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。
当为高时,选择12小时模式。
在12小时模式时,位5是,当为1时,表示PM。