课程设计报告---万年历++温度

合集下载

万年历电子时钟温度毕业设计

万年历电子时钟温度毕业设计

摘要随着社会快速的发展,人们的生活节奏变得越来越快,人们对时间观念也愈来愈重视。

自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。

由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。

本文以STC89C52为核心控制芯片,DS1302为时钟芯片,DS18B20为温度传感器,通过液晶显示器AMPIRE128X64实时显示时间及温度,通过按键设置年月日和星期以及定时闹钟,定时闹钟时间到自动发出警报,应用C语言进行软件编程,并用Altium Designer Summer 09软件进行演示、验证。

经过测试,系统可以正常完成预定的功能。

关键词:单片机STC89C52 电子时钟C语言AbstractWith rapid development of society, people's life rhythm becomes faster and faster, people to the concept of time is also more and more attention. Automation, intelligent technology development, the intelligence degree of mechanical and electronic products become more and more high, use time reminder, timing control will be more and more, therefore, design and develop digital clock has a good application prospect.Because of the price of low-cost, high-performance microcontroller, has been widely used in automatic control of the products. With STC89C52 as the core control chip, this paper DS1887 for the clock chip, DS18B20 as temperature sensor, through the LCD display AMPITE128X64 real-time display of time and temperature, through the button and set the date and week timing alarm clock, timer alarm clock time to alert automatically, using C language for software programming, using Altium Designer Summer 09 for demonstration, software validation. Program download by general technology of PZ - ISP software made by the company to complete. After the test, the system can accomplish the functions normally.Key words: single chip microcomputer C language STC89C52 electronic clock第一章绪论1.1电子时钟的研究背景单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。

带温度计的万年历

带温度计的万年历

设计课题题目: 带温度计的万年历一、设计任务与要求1. 显示准确的北京时间(时、分、秒)及公历日期显示功能(年、月、日);2. 可通过按键切换年、月、日及时、分、秒的显示状态;3. 可随时可以调校年、月、日或时、分、秒;4. 可每次增减一进行时间调节,也可快速增减进行时间调节;5.可显示环境温度。

二、系统设计方案方案一、用主芯片为AT89C51的单片机控制实现,使用单片机内部的定时计数器实现时间的设定,使用按键进行时间的调整和定时,按键有蜂鸣器提示,温度传感器使用DALLAS 公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配处理器等优点。

显示时间和温度使用数码管显示。

方案二、用主芯片为STC89C52的单片机控制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用按键进行时间的调整和定时,温度传感器使用 DS18B20。

显示时间和温度使用LCD1602显示。

方案一片内定时器会导致计时节拍的时间误差,当进行年、月、日的日历计时,定时中断误差扥积累就会很大。

使用片内定时器进行计时的时候,单片机始终要处于工作状态。

才能维持计时时间,一旦停机或进入待机状态,开机后,计时时间就需要重新设定。

为了满足单片机系统的实时钟需求,本设计采用的是方案二,系统框图如图2-1所示。

图2-1三、单元电路分析与设计1. 原理分析 1.1主控制器单片机STC89C52 具有低电压供电和体积小等特点,如图3-1所示。

1.2晶振电路AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图3-2所示方式连接。

晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz 之间,电容C1、C2取值范围在5~30pF 之间。

根据实际情况,本设计晶振选择频率为12MHZ ,电容选择30pF 如图3-2。

多功能电子万年历课程设计报告

多功能电子万年历课程设计报告

重庆三峡学院课程设计报告书题目:基于可调的电子万年历与温度显示学院(系):年级专业:学号:学生姓名:指导教师:教师职称:完成日期年月日目录摘要 (3)第一章引言 (4)1.1 设计任务 (4)1.2 设计目的 (4)1.3 设计思路 (4)1.3.1 方案论证 (4)1.3.2 芯片的选择 (5)1.3.3 显示模块选择方案和论证 (5)1.3.4 时钟信号的选择方案和论证 (5)1.3.5 最终方案 (6)第二章硬件系统的设计2.1原理图设计 (6)2.2温度感应电路 (7)2.3 复位电路部分 (7)2.4液晶显示电路 (7)2.5时钟信号电路 (8)2.6 AT89C52原理及说明 (8)2.6.1引脚功能 (9)第三章软件系统的设计.3.1系统程序流程图 (9)3.2系统具体程序代码 (10)第四章系统调试 (23)4.1 软件调试 (23)4.2 硬件调试 (23)第五章设计心得 (23)元件清单表 (24)致谢 (24)参考文献 (24)基于可调式电子万年历与温度显示的设计重庆三峡学院应用技术学院 5人摘要:本文介绍了一种基于单片机的可调的电子万年历和温度显示。

该设计主要由五个模块组成:微处理器(单片机),温度传感器,控制调节按键,实时时钟模块及显示模块。

温传感器器主要由DS18B20来完成,它负责把采集到的温度传给单片机。

实时时钟模块主要由DS1302构成,它负责产生始终数据送给单片机,微处理器芯片AT89C52来完成DS18B20,DS1302,按键传来的数据进行处理,并送与显示模块(LCD1602)进行显示。

该系统的电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。

可以测量-55°到+125°的温度和显示年,月,日,星期,时,分,秒,并且可通过按键调节时间。

关键词单片机;万年历;温度;AT89C52;LCD1602,DS1302,DS18B20第一章引言1.1 设计任务(1)根据具体题目要求,设计以单片机为控制核心的测量系统或控制系统,完成对指定目标或对象的测量及控制。

电信12综合设计-万年历测温报警系统设计报告

电信12综合设计-万年历测温报警系统设计报告

万年历温度实时显示及报警器设计1、系统方案设计本次设计的万年历温度实时显示及报警系统以STC89C52单片机为核心,设计并自行焊制一个带有万年历、温度实时显示和温度报警的应用系统。

主要元件包括:温度采集模块DS18B20,电源模块,时钟模块DS1302,模拟开关模块,显示模块LCD1602,蜂鸣器等。

可实现功能:1:实时测量当前环境下的温度并进行显示。

2:万年历显示功能,可显示年、月、日、星期、时、分、秒。

3:温度报警,当温度高于某设定值(通过键盘设定)时,系统会进行报警(蜂鸣器发出声音)4、保护电路:当温度高于某设定值时,会自动断开外设电路开关,达到保护目的。

应用:我们本次设计的系统功能多样,可以作为特定场合的温度报警器,不仅实现了温度显示与报警,保护了电路,而且带有万年历功能,方便实用。

系统设计框图如图1-1所示。

图1-1 系统设计框图2、系统硬件设计硬件设计电路图1-2所示。

通过单片机P1口向LM1602液晶传输数据,通过单片机的P2.0、P2.1、P2.2控制液晶时序;P1.0、P1.1、P1.2作为时钟芯片DS1302的控制和数据传输接口;通过P3.3作为DS18B20温度传感器的单总线接口;同时利用与单片机P3.4、P3.5、P1.7分别连接的UP 键,DOWN 键和返回键控制报警温度;单片机P3.6控制模拟开关的通断。

图1-2 系统硬件设计图89C52 单片机DS1302时钟DS18B20温度采集 按键设定值调整LM1602显示温度和时间蜂鸣器报警电路通断开关3、系统软件设计3.1系统主程序流程图YNYNYN图1-3主程序流程图周边温度的实时显示可以精确到小数点后1位,温度高于设定值会报警,并会切断外围电路,设定值由键盘给出,万年历显示精确到秒。

图1-3为主程序流程图。

单片机上电以后,各个芯片进行初始化,显示温度和万年历。

DS18B20,常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。

万年历的课程设计报告及程序

万年历的课程设计报告及程序

第一部分:正文一,课程设计名称:1.万年历2.(a) (b)* **** *** ***** ***** ************** ***** ***** *** **** * ********* **** **** *** *** ** ** * * ** ** *** *** **** **** *********二,使用工具软件:Microsoft Visual Basic 6.0 中文版。

三,课程设计内容简介:(1)万年历的课程设计的基本结构流程:从main函数开始,比如输入2001年,调用函数yearshow,它是控制总循环次数12个月的,在yearshow里有调用了以个函数是monthshow,是控制每个月如何输出显示的,在这个函数里有调用了getmonthweekday函数,它是获得每个月一号是星期几的函数,此函数分为两部分,以2000年1月1号是星期六为准;做十一次运算便可得知2月到12月各个月的1号为星期几。

而在这个函数又调用了getyearday这个函数,是返回天数的函数,它有调用了isleap函数,计算时平年还是闰年是,时闰年返回366,平年返回355。

到这步开始就返回值了,首先isleap告诉getyeardays2000是闰年和平年,于是getyeardays得到366getyearweekday,getyearweekday 就计算sum=366且返回(366+6)%7=2给getmonthweekday,w=2,getmonthweekday中若计算1月1号则为星期二,2月-12月中如3月则要加上以月和二月的天数载加上2对7取余数,这个数返回给monthshow,若这个数是w=0;不输出空格,不等于0就输出w-1个空格,以便日期和星期对应,如此循环十二个月就计算完了,一边计算一遍显示。

(2)(a)图形的课程设计的基本结构流程(3)(b)图形的课程设计的基本结构流程(4)运行环境:Win32 Console Application四,得意之处.1把程序分解成多个小函数,那么问题就分解成几个小问题。

温度万年历的单片机实现实验报告

温度万年历的单片机实现实验报告

目录一、温度万年历设计的目的和意义 (1)二、电路设计方案 (1)三、原理设计 (1)四、方案结构图 (3)五、温度万年历1602驱动及显示的详细设计 (6)六、心得与总结 (14)一、温度万年历设计的目的和意义随着社会的发展,信息量的不断提升以前对信息交换的要求提高,温度万年历的发展以及投入市场变得非常有必要。

本设计是基于51单片机并模拟日常所用的日历,而51系列单片机是各单片机中最为典型和最有代表性的一种。

通过本次设计,学习和巩固了单片机指令编程的相关知识,熟悉单片机各部件的组成及其功能。

本设计将制作一种基于单片机控制的带实时温度显示、具有定时功能的电子万年历。

传统的电子日历大都体积大,功耗大,显示不准确等特点。

为了缩小体积,减小功耗,使其变得小巧灵敏,本设计加入了时钟芯片DS1302,可对时间进行准确记时,同时可设置定时时间,实现定时功能。

另外本设计具有显示实时温度的功能。

传统的温度传感器系统大都采用放大、调理、A/D转换,转换后的数字信号送入计算机处理,处理电路复杂、可靠性相对较差,占用计算机的资源比较多。

本设计将采用DS18B20一线制数字温度传感器,可将温度信号直接转换成数字信号送给微处理器,电路简单,成本低,实现了时间温度同时显示的效果。

最后,温度和时间都将通过LCD1602液晶显示器进行显示。

测试表明系统达到了设计要求的各项功能,各部分工作正常。

二、电路设计方案采用AT89S52作为主控制系统; 直接采用单片机定时计数器提供秒信号;LCD 液晶显示屏作为显示。

三、原理设计1.基本原理:本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路直接采用单片机定时计数器提供秒信号;温度的采集由DS18B20构成;显示部份由LCD液晶显示屏显示。

同时还添加了提醒功能,通过蜂鸣器实现。

2.总体框图图13. 单元电路设计◆ 单片机主控制模块的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O 口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O 口(P0、P1、P2、P3),每一条I/O 线都能独立地作输出或输入。

万年历课程设计报告

万年历课程设计报告

万年历课程设计报告课程设计报告课程名称程序设计基础专周题目年历显示姓名XX班级XXXXXX学号XX指导教师XXX设计时间2022-03-02至2022-03-06XX学院计算机工程系XX学院课程设计(论文)任务书一、课程设计题目年历显示二、课程设计工作自2022年03月02日至2022年03月06日。

三、课程设计地点:XXXX四、课程设计内容要求:1.本课程设计的目的1)增进对C语言各理论知识的熟练程度,2)加强算法设计的能力,为以后的程序设计与编写打下良好基础。

3)增加对C语言的熟练程度,提高程序设计的能力,并初步接触实用程序的编写。

2.课程设计的任务及要求题目:年历显示要求:(1)输入一个年份,输出是在屏幕上显示该年的日历。

假定输入的年份在1940-2040年之间。

(2)输入年月,输出该月的日历。

(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。

3)课程设计编写要求1)详细清晰地描述个人的课程设计工作;2)要按照本模板的规格打印誊写课程报告;3)课程报告包括目录、内容提要、正文、课程设计体会、参考文献、附录等;4)课程报告装订按学校的统一要求完成4)评分标准:1)完成原理分析:20分;2)完成设计过程:40分;3)完成代码分析:20分。

4)个人创新工作:20分。

学生签名:XX2022年3月8日目录目录-1-正文-2-一、需求分析-2-二、个人工作-2-三、概要设计-2-流程图……………………………………………………………….-2-程序……………………………………………………………….-4-四、程序结果-7-课程设计体会-9-正文一、需求分析我选择课程设计题目:年历显示日常生活当中,我们查询日期很大程度上需要用到日历。

而手动去翻纸质日历查询速度慢,而且会让人看的眼花缭乱。

因此,我们可以编写一个程序来显示某一年的日历。

①程序要能够准确输出某一年的日历;②程序要能够准确的输出某一年的某一月的月历;③程序能够详细查询某一年某一天的日期;④程序能够循环输出。

万年历课程设计报告

万年历课程设计报告

万年历课程设计报告一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及其换算方法。

2. 学生能够运用所学知识,独立制作并使用简易的万年历。

3. 学生了解我国农历与公历的区别及相互转换方法。

技能目标:1. 培养学生运用数学知识解决实际问题的能力,提高逻辑思维和推理能力。

2. 培养学生动手操作和团队协作能力,通过制作万年历的过程,锻炼实践操作技能。

情感态度价值观目标:1. 培养学生对时间管理的重视,树立珍惜时间的观念。

2. 增强学生对传统文化的认识,激发对中国古代天文历法的兴趣。

3. 培养学生积极探究、合作交流的良好学习态度,提高学习自信心。

课程性质分析:万年历课程属于数学与生活相结合的综合性课程,旨在让学生在实际问题中运用数学知识,提高解决实际问题的能力。

学生特点分析:考虑到学生所在年级的特点,课程内容应以直观、生动、有趣的方式进行设计,注重培养学生的动手操作能力和团队协作精神。

教学要求:1. 教师应充分准备教学资源,提供丰富的实例,引导学生主动参与学习过程。

2. 教学过程中,教师要以学生为主体,关注学生的个体差异,给予个性化指导。

3. 教师要关注学生的学习反馈,及时调整教学策略,确保课程目标的达成。

二、教学内容1. 年、月、日的关系及其换算方法- 公历与农历的基本概念- 年、月、日的定义及其相互关系- 闰年和平年的判断方法2. 简易万年历的制作- 万年历的基本结构- 制作步骤及注意事项- 万年历的使用方法3. 我国农历与公历的转换方法- 农历与公历的对应关系- 农历日期的推算方法- 二十四节气的计算与应用教学大纲安排:第一课时:导入万年历的概念,介绍年、月、日的关系及其换算方法,讲解闰年和平年的判断方法。

第二课时:指导学生动手制作简易万年历,掌握万年历的基本结构和使用方法。

第三课时:学习我国农历与公历的转换方法,了解二十四节气的计算与应用。

教材章节:《数学》教科书:第四章 时间与测量,第四节 万年历的制作与应用。

c语言课程设计报告 万年历 最详细

c语言课程设计报告 万年历 最详细

C语言课程设计报告-----万年历设计人:贾伟涛学号:2013010912班级:13电信应电班指导老师:张伟日期:2014年6月9日内容提要通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我虽然可以看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对c语言的兴趣。

C语言是近年在国内外得到迅速推广应用的一种机器语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日历的查询,利用C语言的程序编成一个简单的万年历查询系统。

通过这个小小的系统可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了,大家拭目以待吧!目录一、系统功能和数据说明-----------------------二、问题分析---------------------------------三、程序总体设计及功能结构框图---------------四、程序流程图-------------------------------五、源程序代码-------------------------------六、使用说明---------------------------------七、个人心得---------------------------------八、参考文献---------------------------------一、系统功能和数据说明(一)功能简介在日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简单明了的给我们最想要的日期信息。

万年历课程设计报告

万年历课程设计报告

课程设计(基于51单片机的电子万年历)题目:万年历课程设计院(系)成都农业科技职业学院信息技术分院专业应用电子技术班级14电子2班学生姓名黄攀学号************指导老师陈一虎、雷永辉日期2016年6月目录绪论 (Ⅰ)1项目概述(项目组成,功能) (1)1.1硬件部分 (2)1.2软件部分 (2)2项目原理分析 (3)2.1原理框图 (3)2.2原理分析 (3)2.3系统关键元器件选择 (4)2.4项目印制板设计过程心得 (5)3系统的软件设计与实现 (6)3.1程序流程框图 (6)3.2 子程序的设计 (7)4项目软硬件联调 (10)4.1印制板图 (10)4.2原理图 (10)4.3 DXP图 (11)4.4系统调试 (11)5总结 (12)参考文献 (12)信息技术分院课程设计–集成电路设计VHDL教程绪论电子万年历是实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人家庭,车站,码头,办公室,银行大厅等场所,成为人们日常生活中的必需品。

数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。

钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的万年历精度高,功能易于扩展。

可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等电路。

所有这些,都是以钟表数字化为基础的。

因此,研究数字时钟及扩大其应用有着非常现实的意义。

本设计就是数字时钟简单的扩展应用。

1项目概述本设计基于AT89s51单片机,结合DS1302时钟芯片设计了一个数字万年历,显示部分用数码管动态显示,初始时间可由按键设置,此外还具有温度显示功能,掉电保护功能。

万年历还具有节能模式,具有很强的实用性。

关键词:单片机万年历数码管显示温度万年历设计项目组成与功能1.1硬件部分硬件部分主要由AT89S52单片机,LED显示电路,以及调时按键电路等组成。

简易万年历设计报告

简易万年历设计报告

福建三明学院课程设计(论文)题目:简易万年历设计学生姓名:王前程学号: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液晶显示模块的论证与选择。

温湿度万年历实训报告

温湿度万年历实训报告

一、引言随着科技的不断发展,人们对生活品质的要求日益提高,温湿度控制已成为现代生活中不可或缺的一部分。

万年历作为一种时间管理工具,其与温湿度控制系统的结合,不仅能够满足人们对时间管理的需求,还能提供更加舒适的生活环境。

本实训报告旨在通过对温湿度万年历的设计与实现,探讨其在实际应用中的可行性和实用性。

二、实训目的1. 理解温湿度万年历的设计原理和实现方法。

2. 掌握温湿度传感器的应用技术。

3. 提高嵌入式系统开发能力。

4. 培养团队合作精神和创新能力。

三、实训内容1. 系统需求分析温湿度万年历系统应具备以下功能:(1)实时显示年、月、日、星期等信息。

(2)实时显示室内外温湿度信息。

(3)温湿度阈值设置与报警功能。

(4)万年历查询功能。

2. 系统设计(1)硬件设计温湿度万年历系统主要由以下硬件组成:- 主控芯片:选用STC89C52单片机,具有丰富的片上资源,易于编程。

- 温湿度传感器:选用DHT11温湿度传感器,具有高精度、低功耗等特点。

- 显示模块:选用LCD液晶显示屏,显示万年历和温湿度信息。

- 电源模块:采用可充电锂电池,保证系统长时间运行。

(2)软件设计温湿度万年历系统软件主要包括以下模块:- 主程序模块:负责系统初始化、数据采集、显示和报警等功能。

- 时钟模块:实现实时时钟功能,提供年、月、日、星期等信息。

- 温湿度采集模块:读取DHT11传感器数据,并进行处理。

- 显示模块:控制LCD显示屏显示万年历和温湿度信息。

- 报警模块:根据用户设定的温湿度阈值,进行报警提示。

3. 系统实现(1)硬件实现根据系统设计,搭建温湿度万年历硬件平台,连接主控芯片、温湿度传感器、LCD 显示屏等硬件模块。

(2)软件实现编写温湿度万年历系统软件,实现各项功能。

四、实训过程1. 硬件搭建首先,根据系统设计图纸,搭建温湿度万年历硬件平台。

连接主控芯片、温湿度传感器、LCD显示屏等硬件模块,并检查连接是否正确。

万年历课程设计(完整版)

万年历课程设计(完整版)

万年历课程设计(完整版)-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN基于51单片机的万年历的设计学生姓名学号所在专业电子信息工程所在班级电子1111小组成员指导教师完成日期基于51单片机的万年历的设计1 需求分析1.1“需“的分析万年历是一个可以显示当前时间、日历、温度信息以及设置闹钟报警的应用系统,其具有以下功能:(1)可以显示当前的时间信息;(2)可以显示当前的温度;(3)可以手动修改时间;(4)可以设置闹钟,并且达到设置的时间点发出音响信号。

1.2 “求“的分析设计万年历,需要考虑以下几方面的内容:(1)如何获取当前的时间信息,这些时间信息包括时、分、秒、年、月、日、和星期;(2)如何获得当前的温度信息,精确到1°C即可;(3)提供必要的用户输入设置通道;(4)提供相应的显示和报警部件;(5)需要写出合适的软件应用代码。

2方案设计与论证2.1时间获取方法的方案设计与论证方案一:使用单片机的内部定时器进行定时,使用软件算法来计算当前的时间信息。

此种方案虽然可以不使用时钟芯片,节约成本,但是时间的精准度一般,软件代码复杂。

方案二:采用外部扩展实时时钟芯片DS12C887的方式来获取相应的时间信息。

DS12C887是一种高性能的芯片,能自动产生年、月、日、时、分、秒等信息,并有闰年修正功能。

采用双电源供电方式,可设置备用电源充电方式,提供了对后备电源进行涓细电流的充电的能力,在能满足精度要求的同时价格也比较便宜,性价比较高。

所以采用方案二。

2.2显示模块的方案设计与论证方案一:采用LED数码管动态扫描。

LED数码管价格适中,但只能显示数字和简单的字符,且其的接口线少。

方案二:采用点阵式数码管显示。

点阵式数码管是由八行八列的发光二极管组成,并不太适合于对数字跟字母进行显示,其主要用于汉字的显示。

方案三:采用LED液晶显示屏。

液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,虽然价格稍微贵了点,但其接口线多。

单片机课程设计报告(万年历)

单片机课程设计报告(万年历)

目录一、摘要 (2)二、设计任务 (4)三、总体方案设计与论证 (4)1、液晶显示模块 (4)2、实时时间计算模块 (5)3、实时环境温度采集模块 (5)4、报警模块 (6)5、设置模块 (6)四、总体方案组成框图 (7)五、系统硬件设计 (8)1、LCD显示模块 (8)2、实时时间计算模块 (12)3、实时环境温度检测模块 (16)4、报警模块 (21)5、设置模块 (22)六、系统软件设计 (23)七、系统硬件电路设计 (24)八、系统硬件PROTEUS仿真原理图 (25)九、系统硬件仿真运行情况图 (26)1、显示欢迎界面 (26)2、显示实时时间 (26)3、显示当前温度 (27)4、时间设置 (27)5、最高报警温度设置 (28)6、闹钟时间设置 (28)7、超温 (29)8、闹钟时间到 (29)附录一:实物图 (30)附录二:PCB图 (32)附录三:源程序代码 (33)附录四:参考文献 (62)摘要单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

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

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

本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时显示年、月、日、时、分、秒;实时监测环境温度(可根据需要启动高温报警功能);电子闹钟。

M bn本设计采用的是AT89S52单片机,该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有8KB的ROM,能够存储大量的程序,最突出特点是具有ISP在系统烧写功能,使得烧写程序更加方便。

计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。

温度检测采用DALLAS公司的数字化温度传感器,该芯片采用的是独特的“一线总线”的方式与单片机进行通信,一线总线独特而且经济的特点,是用户可以轻松的组建传感器网络,为测量系统的构建引入全新的概念。

课程设计_电子万年历DS12C887+温度18B20+LCD12864显示+闹钟

课程设计_电子万年历DS12C887+温度18B20+LCD12864显示+闹钟

西南科技大学电子专业综合设计报告设计名称:基于单片机的多功能电子万年历系统设计姓名:学号:班级:指导教师:起止日期:西南科技大学信息工程学院制综合设计任务书学生班级:学生姓名:学号:设计名称:基于单片机的多功能电子万年历系统设计起止日期:指导教师:设计要求:基本要求:1.查阅有关资料,掌握单总线的基本通信协议及C语言的编程方法;2.用STC89C52微控制器控制DS12CR887和DS18B20的工作方式,完成多功能电子万年历系统的设计,显示部分采用LCD12864。

要求日期可显示农历,并能提示农历节日和阳历节日;要求电子万年历具有闹钟功能并能实时显示当前环境温度;3.对系统的工作的可靠性进和稳定性行分析,得出结论;4.撰写设计报告。

综合设计学生日志时间设计内容2013.11.23 熟悉题目,对研究题目做分析,具体划分为几个模块2013.11.24 LCD12864显示屏的显示模块的实现2013.11.25 DS18B20温度传感器模块的研究2013.11.26 对DS18B20和LCD12864联合设计温度显示系统2013.11.27 阅读DS12CR887的数据手册,了解芯片的功能实现2013.11.28 根据DS12CR887数据手册完成基本的驱动程序2013.11.30 在C52单片机最小系统的的基础上搭建电子万年历硬件系统,完成芯片焊接及连线2013.12.1 上网查阅阳历转换阴历的相关算法2013.12.2 完成阳历转换阴历相关算法在单片机的程序设计以及节日的显示程序2013.12.3 设计程序实现在LCD12864上显示时间,日期,农历,节日,温度等功能2013.12.4 完成闹钟程序设计2013.12.5 调试硬件系统和软件系统解决系统BUG2013.12.6 完成课程设计报告1基于单片机的多功能电子万年历系统设计摘要:电子万年历是一种通过STC52C89RC单片机编程来对不同电子芯片件进行控制、执行、数据读取、和读取的数据结果的显示的电子产品。

带温度显示的万年历--单片机课程设计

带温度显示的万年历--单片机课程设计

课程设计说明书课程名称:《单片机技术》设计题目:万年历院(部):电子信息与电气工程学院学生姓名:*******学号:************专业班级:************指导教师:*******20**年5月23日课程设计任务书万年历摘要:设计了一个带温度显示的万年历电路系统,该电路具有年、月、日、星期、时、分、秒、闹钟显示和调整功能,并且还能显示温度和按键鸣叫、整点鸣叫、定时闹钟鸣叫等功能。

其中显示部分采用LCD1602显示,时钟部分采用DS1302时钟芯片,温度部分采用DS18B20单线温度传感器。

报时鸣叫采用有源蜂鸣器并用三极管驱动。

软件方面我们采用C语言编程,利用Keil uVision4软件编写C语言程序并且生成HEX文件。

先将程序在Proteus仿真,通过之后再烧录到单片机中。

该设计的优点是充分利用了LCD1602的显示功能完成了万年历应该具有的功能并且还扩展了温度和闹钟。

不足之处是收到LCD1602显示功能的限制没能显示农历日期,而且报时部分只是发出滴滴声而不是语音报时。

关键词:万年历;LCD1602;温度传感器(DS18B20);时钟芯片(DS1302)目录1.设计背景 (1)1.1时钟的用途及精度的需求 (1)1.2万年历的使用现状及设计目的 (1)2.设计方案 (1)2.1任务分析 (1)2.2方案选择和论证 (2)2.2.1显示模块选择方案和论 (2)2.2.2时钟模块的方案选择和论证 (2)2.2.3按键控制模块的方案选择和论证 (2)2.2.4温度采集模块方案选择 (3)2.2.5方案的整体框图 (3)2.2.6设计流程图程序部分的拟定案 (4)3.方案实施 (5)3.1.1整体电路及其分析 (5)3.1.2电源电路 (6)3.1.3单片机最小系统 (6)3.1.4蜂鸣器及驱动电路 (7)3.1.5时钟芯片DS1302电路 (7)3.1.6温度采集芯片DS18B20电路 (8)3.1.7键盘控制电路 (8)3.1.8 LCD1602控制电路 (9)3.2软件仿真 (10)3.2.1 Proteus仿真软件介绍 (10)3.2.2电路仿真调试 (11)3.3 电路的焊接与调试 (12)4.结果与结论 (14)5.收获与致谢 (14)6.参考文献 (15)7.附件 (15)7.1电路原理图 (15)7.2 Proteus仿真图 (16)7.3电路工作中实物图 (17)7.4元器件清单 (19)7.5源程序清单 (20)1.设计背景1.1时钟的用途及精度的需求时间,对人们来说是非常宝贵的,准确的掌握时间和分配时间对人们来说至关重要。

万年历实验报告

万年历实验报告

实验报告实验课程:单片机实验学生姓名:刘士伟胡奕彬邱若生学号:091522102909152210160915221035专业班级:09电科A班一、实验目的:1.熟悉和学习单片机制板过程2. 利用单片机制作一个多功能电子时钟二、实验原理利用单片机的定时中断产生简单的电子时钟,利用单片机的外部中断实现粗略的温控三、实验步骤及过程1、时钟源程序如下:#include <reg52.h>#include <intrins.h>#include"1602.h"#include"DELAY.H"unsigned char data year=11,month=6,date=9,k=1;//年、月、日、星期unsigned char disbuf[16],TempData[6];unsigned char data hour=20,min=10,sec=00,sec20=0; //时、分、秒tab[]=[‘MON,TUE,WED,THU,FRE,SAT,SUN’]void shuchu(){uchar n;for(n=0;n<16;n++){LCD_write_char(n,1, disbuf[n]);}for(n=1;n<6;n++)LCD_write_int(n+7,0,TempData[n]);}void updatetime(void){ disbuf[0] ='2';disbuf[1] ='0';disbuf[2] =year/10+48;disbuf[3] =year%10+48;disbuf[4] =' ';disbuf[5] =month/10+48;disbuf[6] =month%10+48;disbuf[7] ='.';disbuf[8] =date/10+48;disbuf[9] =date%10+48;disbuf[10] =' ';disbuf[11]=hour/10+48;disbuf[12]=hour%10+48;//disbuf[3]=' ';disbuf[14]=min/10+48;disbuf[15]=min%10+48;}void pro_timedate(){sec++;if(sec > 59){sec = 0;min++;if(min>59){min=0;hour++;if(hour>23){hour=0;date++;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) if (date>31){date=1;month++;} //大月31 天if (month==4||month==6||month==9||month==11)if (date>30){date=1;month++;} //小月30 天if (month==2){if( leap_year()) //闰年的条件{if (date>29) {date=1;month++;}} //闰年2 月为29 天else{if (date>28) {date=1;month++;}} //平年2 月为28 天}if (month>12) {month=1;year++;}if (year>99) year=0;}}}}//Timer0 中断处理程序,秒的产生void timer0() interrupt 1{TH0=0x4C; //Timer0 置10ms 定时初值dc00H(2^16=65536D,dc00H=56320D)TL0=0x00; //定时时间=(65536-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)sec20++;if(sec20 >= 99) //1 秒时间(100*10ms=1000ms=1s){ sec20=0;updatetime ();pro_timedate();shuchu();if(sec&0x01)disbuf[13]=' ';else disbuf[13]=':';}}void main(){TMOD=0X01;TH0=0X4C;TL0=0X00;TR0=1;ET0=1;EA=1;LCD_init();while(1);}2、温控源程序如下:#include "1602.h"#include"DELAY.H"bit ReadTempFlag;//定义读时间标志unsigned char TempData[8]; //存储显示值的全局变量void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*------------------------------------------------定时器中断子程序------------------------------------------------*/ void Timer0_isr(void) interrupt 1{static unsigned int num;TH0=(65536-2000)/256;TL0=(65536-2000)%256;num++;if(num==300){num=0;ReadTempFlag=1;}}void shuchu(){uchar i,j=1;for(i=0;i<6;i++){/*j=1;if (TempData[i]==45){LCD_write_char(i,1,45);j=0;}else{LCD_write_char(i,1,' ');j=0;}if (TempData[i]==46){LCD_write_char(i,1,46);j=0;}*/LCD_write_int(i+7,1,TempData[i]);} }void main (void){unsigned int TempH,TempL,temp;Init_Timer0();LCD_init();LCD_write_string(0,0,"WAIT"); while (1) //主循环{if(ReadTempFlag==1){ReadTempFlag=0;temp=ReadTemperature();if(temp&0x8000){TempData[0]=45;//负号标志temp=~temp; // 取反加1temp +=1;}elseTempData[0]=0;TempH=temp>>4;TempL=temp&0x0F;TempL=TempL*6/10;//小数近似处理if(TempH/100==0)TempData[1]=0;elseTempData[1]=TempH/100; //十位温度if((TempH/100==0)&&((TempH%100)/10==0))//消隐TempData[2]=0;elseTempData[2]=(TempH%100)/10; //十位温度TempData[3]=(TempH%100)%10; //个位温度,带小数点TempData[4]=46;TempData[5]=TempL;TempData[6]=0x39; //显示C符号}LCD_write_string(0,1,"wendu:");LCD_write_string(13,1,"c");shuchu();}}3、实验原理图如下:四、实验心得及体会经过本次的课题设计与研究,我学习了除课本以外的很多知识,掌握的很多实验操作技能。

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

天津职业技术师范大学电子工程学院电子信息工程课程设计报告课程设计题目:基于单片机的电子万年历设计同组学生姓名(学号):王珂0990*******、王飞龙0990*******班级:电信12技术1班任务分工:王珂:编写程序、软件调试、整理报告王飞龙:查找资料、硬件连接、整理报告设计时间: 2013年1月7 日—— 2013 年 1月18日指导教师:姜德宁、王天慧目录题目:基于单片机的电子万年历设计目录 (1)一、课程设计的目的与要求(含设计指标) (1)二、方案论证及选择 (1)1. 单片机芯片的选择方案和论证 (1)2. 显示模块选择方案和论证 (1)3. 时钟芯片的选择方案和论证 (1)4. 电路设计最终方案决定 (2)三、原理设计(或基本原理) (2)1. 基本原理: (2)2. 总体框图 (2)3. 单元电路设计 (2)4. 元件列表 (4)四、方案实现与测试(或调试) (5)五、总结 (6)六、个人总结 (6)七、参考书目: (6)附录:C程序一、课程设计的目的与要求(含设计指标)1.要有完整的设计过程及设计图2.最终的设计结果。

3.个人总结不少于1000字。

二、方案论证及选择1.单片机芯片的选择方案和论证方案一:采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。

2.显示模块选择方案和论证方案一:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。

方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。

方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,并且我做的最小系统上带一个TS1620-1,和A T89S52已经接好,省了很多麻烦,所以在此设计中采用LCD液晶显示屏。

3.时钟芯片的选择方案和论证方案一:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。

方案二:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。

采用此种方案虽然减少芯片的使用,节约成本。

虽然实现的时间误差较大,但是,考虑到需要采购芯片,综合考虑,对于课程设计来说能用较省事的方法达到目的最好。

4. 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; 直接采用单片机定时计数器提供秒信号;LCD 液晶显示屏作为显示。

三、 原理设计(或基本原理)1. 基本原理:本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V 超低压工作;时钟电路直接采用单片机定时计数器提供秒信号;温度的采集由DS18B20构成;显示部份由LCD 液晶显示屏显示。

同时还添加了提醒功能,通过蜂鸣器实现。

2. 总体框图图13. 单元电路设计◆ 单片机主控制模块的设计AT89S52单片机为40引脚双列直插芯片,有四个I/O 口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O 口(P0、P1、P2、P3),每一条I/O 线都能独立地作输出或输入。

单片机的最小系统如下图2所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。

第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。

◆ 显示模块的设计如图3为LCD 显示模块: 此模块需要注意上拉电阻。

图2图3温度模块考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。

另外DS18B20具有3引脚的小体积封装,测温范围为-55~+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。

DS18B20性能●独特的单线接口仅需一个端口引脚进行通信●简单的多点分布应用●无需外部器件●可通过数据线供电●零待机功耗●测温范围-55~+125℃,以0.5℃递增●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃●温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字●应用包括温度控制、工业系统、消费品、温度计和任何热感测系统●负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作●GND:地●DQ:单线运用的数据输入/输出引脚●VD:可选的电源引脚4.元件列表四、方案实现与测试(或调试)此方案由于只用到51单片机芯片,因此各个功能都是由编程来实现。

大体程序流程框图如下在本成电子万年历的设计调试中遇到了很多的问题。

回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:1)烧入程序后,LCD液晶显示屏显示亮度不好。

解决:一边旋转KT1滑动变阻器,一边观看LCD显示屏,知道看到合适的亮度为止。

2)蜂鸣器声音过小或没声。

解决:在相应管脚接上拉电阻。

3)液晶屏显示乱码,显示字符错行。

解决:程序在合并时起冲突,调试程序,重新定义变量等;仔细检查程序错误。

五、总结经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。

同时在软件的编程方面得到更多的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与巩固。

六、个人总结另附七、参考书目:[1]柴诚敬,刘国维,李阿娜,《化工原理课程设计》,天津,天津科学技术出版社,1994年[2]网络参考文献资料附录:程序源代码:#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define DS18B20#ifdef DS18B20#define READROM (0x33)#define MATCHROM (0x55)#define SKIPROM (0xCC)#define SEARCHROM (0xF0)#define ALARMSEARCH (0xEC)#define WIRTESCRATCHPAD (0x4E)#define READSCRATCHPAD (0xBE)#define COPYSCRATCHPAD (0x48)#define CONVETT (0x44)#define RECALLE2 (0xB8)#define READPOWERSUPPLY (0xB4)sbit DS18B20_Port = P2^6;unsigned char T;unsigned char flag_t = 0;unsigned char Buffer_DS18B20[9];unsigned long Temperature_DS18B20_LONG;unsigned char Temperature_DS18B20_STRING[9] = {0x00};unsigned char flag_temp = 0;unsigned char Board_InputOutput_DS18B20(unsigned char _mode);//模式选择:Read_Temp(读取温度),Updata_Info(更新所有信息)#endifsbit rs=P2^2;sbit rw=P2^1;sbit lcden=P2^0;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;uchar count,s1num;char nian_1,nian_0,yue,ri,week,miao,shi,fen,b,a,c;uchar code table[]=" - - week ";uchar code table1[]=" : : ";void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;lcden=0;rw=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<16;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(uchar add,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void write_sfm1(uchar add,uchar date) {write_com(0x80+add);write_date(0x30+date);}void write_sfm2(uchar add,uchar date) {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan(){if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){a=0;TR1=0;TR0=0;write_com(0x80);write_com(0x0f);}}if(s1num==2){write_com(0x80+2);}if(s1num==3){write_com(0x80+5);}if(s1num==4){write_com(0x80+8);}if(s1num==5){write_com(0x80+15);}if(s1num==6){write_com(0x80+0x40+0);}if(s1num==7){write_com(0x80+0x40+3);}if(s1num==8){write_com(0x80+0x40+6);}if(s1num==9){s1num=0;write_com(0x0c);TR0=1;TR1=1;a=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){nian_1++;while(nian_1==99)nian_1=0;write_sfm2(0,nian_1);write_com(0x80+0);}if(s1num==2){nian_0++;while(nian_0==100)nian_0=0;write_sfm2(2,nian_0);write_com(0x80+2);}if(s1num==3){yue++;if(yue==13)yue=1;write_sfm2(5,yue);write_com(0x80+5);}if(s1num==4){ri++;if(ri==32)ri=1;write_sfm2(8,ri);write_com(0x80+8);}if(s1num==5){week++;if(week==8)week=1;write_sfm1(15,week);write_com(0x80+15);}if(s1num==6){shi++;if(shi==24)shi=0;write_sfm(0,shi);write_com(0x80+0x40+0);}if(s1num==7){fen++;if(fen==60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);}if(s1num==8){miao++;if(miao==60)miao=0;write_sfm(6,miao);write_com(0x80+0x40+6);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){nian_1--;if(nian_0==-1)nian_0=99;write_sfm2(0,nian_1);write_com(0x80+0);}if(s1num==2){nian_0--;if(nian_0==-1)nian_0=99;write_sfm2(2,nian_0);write_com(0x80+2);}if(s1num==3){yue--;if(yue==0)yue=12;write_sfm2(5,yue);write_com(0x80+5);}if(s1num==4){ri--;if(ri==0)ri=31;write_sfm2(8,ri);write_com(0x80+8);}if(s1num==5){week--;if(week==0)week=7;write_sfm1(15,week);write_com(0x80+15);}if(s1num==6){shi--;if(shi==-1)shi=23;write_sfm(0,shi);write_com(0x80+0x40+0);}if(s1num==7){fen--;if(fen==-1)fen=59;write_sfm(3,fen);write_com(0x80+0x40+3);}if(s1num==8){miao--;if(miao==-1)miao=59;write_sfm(6,miao);write_com(0x80+0x40+6);}}}}}void main(){init();nian_1=20;nian_0=14;yue=12;ri=30;week=2;shi=23;fen=59;miao=55;write_sfm2(0,nian_1);write_sfm2(2,nian_0);write_sfm2(5,yue);write_sfm2(8,ri);write_sfm1(15,week);write_sfm(0,shi);write_sfm(3,fen);write_sfm(6,miao);a=1;while(1){if(a==1){#ifdef DS18B20flag_t = 1;while(flag_t){EA = 0;TR1 = 0;write_com(0x80+0x40+9);Board_InputOutput_DS18B20(0x01);write_date(Temperature_DS18B20_STRING[1]);write_date(Temperature_DS18B20_STRING[2]);write_date(Temperature_DS18B20_STRING[3]);write_date(Temperature_DS18B20_STRING[4]);write_date(Temperature_DS18B20_STRING[5]);write_date(Temperature_DS18B20_STRING[6]);write_date(Temperature_DS18B20_STRING[7]);T = (Temperature_DS18B20_STRING[1]-0x30)*10 + (Temperature_DS18B20_STRING[2]-0x30);if(T>=26||T<19)////////////////////////{flag_t = 1;SPK = 1;}else{flag_t = 0;SPK = 0;}}EA = 1;TR1 = 1;#endif}keyscan();if(b==0){bee();b++;}if(c==0){bee1();c++;}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==15){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;week++;if(week==8){week=1;}write_sfm1(15,week);ri++;if(ri>28){if(nian_0%4==0){switch(yue){ case 1: if(ri==32){ri=1;yue++;}break;case 2: if(ri==30){ri=1;yue++;}break;case 3: if(ri==32){ri=1;yue++;}break;case 4: if(ri==31){ri=1;yue++;}break;case 5: if(ri==32){ri=1;yue++;}break;case 6: if(ri==31){ri=1;yue++;}break;case 7: if(ri==32){ri=1;yue++;}break;case 8: if(ri==32){ri=1;yue++;}break;case 9: if(ri==31){ri=1;yue++;}break;case 10: if(ri==32){ri=1;yue++;}break;case 11: if(ri==31){ri=1;yue++;}break;case 12: if(ri==32){ri=1;yue++;}break;} }else{switch(yue){case 1: if(ri==32){ri=1;yue++;}break;case 2: if(ri==29){ri=1;yue++;}break;case 3: if(ri==32){ri=1;yue++;}break;case 4: if(ri==31){ri=1;yue++;}break;case 5: if(ri==32){ri=1;yue++;}break;case 6: if(ri==31){ri=1;yue++;}break;case 7: if(ri==32){ri=1;yue++;}break;case 8: if(ri==32){ri=1;yue++;}break;case 9: if(ri==31){ri=1;yue++;}break;case 10: if(ri==32){ri=1;yue++;}break;case 11: if(ri==31){ri=1;yue++;}break;case 12: if(ri==32){ri=1;yue++;}break;}}if(yue==13){yue=1;nian_0++;if(nian_0==100){nian_0=0;nian_1++;if(nian_1==99){nian_1=0;}}}write_sfm2(0,nian_1);write_sfm2(2,nian_0);write_sfm2(5,yue);}write_sfm2(8,ri);}write_sfm(0,shi);}write_sfm(3,fen);}write_sfm(6,miao);}}#ifdef DS18B20void Delay_DS18B20_us(unsigned char _t){while(--_t);}void Delay_DS18B20_ms(unsigned char _t){while(_t--){Delay_DS18B20_us(245);Delay_DS18B20_us(245);}}void DS18B20_WriteByte(unsigned char _byte){unsigned char i = 0;for(i = 0; i < 8; i++){DS18B20_Port = 0;DS18B20_Port = _byte & 0x01;Delay_DS18B20_us(25);DS18B20_Port = 1;_byte >>= 1;}Delay_DS18B20_us(25);}unsigned char DS18B20_ReadByte(void){unsigned char dat;unsigned char i = 0;for(i = 0; i < 8; i++){DS18B20_Port = 0;dat >>= 1;DS18B20_Port = 1;_nop_();_nop_();_nop_();_nop_();_nop_();if(DS18B20_Port){dat |= 0x80;}Delay_DS18B20_us(25);}return dat;}unsigned char DS18B20_Initialization(void){unsigned char flag = 0;DS18B20_Port = 1;Delay_DS18B20_us(5);DS18B20_Port = 0;Delay_DS18B20_us(200);Delay_DS18B20_us(200);DS18B20_Port = 1;Delay_DS18B20_us(50);flag = DS18B20_Port;Delay_DS18B20_us(25);return flag;}void DS18B20_Updata_Info(void){unsigned char i = 0;DS18B20_Initialization();DS18B20_WriteByte(SKIPROM);DS18B20_WriteByte(CONVETT);Delay_DS18B20_ms(10);DS18B20_Initialization();DS18B20_WriteByte(SKIPROM);DS18B20_WriteByte(READSCRATCHPAD);for(i=0; i<9; i++){Buffer_DS18B20[i] = DS18B20_ReadByte();}}void DS18B20_Read_Temp(void){unsigned int temperature_ds18b20 = 0;DS18B20_Updata_Info();temperature_ds18b20 = (unsigned int)Buffer_DS18B20[1] * 0x0100 + (unsigned int)Buffer_DS18B20[0];Temperature_DS18B20_LONG = (unsigned long)temperature_ds18b20 * 625 ;Temperature_DS18B20_STRING[8] = '\0';Temperature_DS18B20_STRING[7] = 0x30+(Temperature_DS18B20_LONG%10) /1;Temperature_DS18B20_STRING[6] = 0x30+(Temperature_DS18B20_LONG%100) /10;Temperature_DS18B20_STRING[5] = 0x30+(Temperature_DS18B20_LONG%1000) /100;Temperature_DS18B20_STRING[4] = 0x30+(Temperature_DS18B20_LONG%10000) /1000;Temperature_DS18B20_STRING[3] = '.';Temperature_DS18B20_STRING[2] = 0x30+(Temperature_DS18B20_LONG%100000)/10000;Temperature_DS18B20_STRING[1] = 0x30+(Temperature_DS18B20_LONG%1000000)/100000;Temperature_DS18B20_STRING[0] =0x30+(Temperature_DS18B20_LONG%10000000)/1000000;}unsigned char Board_InputOutput_DS18B20(unsigned char _mode){switch(_mode){case 0x01:DS18B20_Read_Temp(); break;case 0x02:DS18B20_Updata_Info(); break;default :return 1; break;}return 0;}#endif第19 页。

相关文档
最新文档