单片机毕业论文.docx

上传人:牧羊曲112 文档编号:3346610 上传时间:2023-03-12 格式:DOCX 页数:73 大小:74.12KB
返回 下载 相关 举报
单片机毕业论文.docx_第1页
第1页 / 共73页
单片机毕业论文.docx_第2页
第2页 / 共73页
单片机毕业论文.docx_第3页
第3页 / 共73页
单片机毕业论文.docx_第4页
第4页 / 共73页
单片机毕业论文.docx_第5页
第5页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单片机毕业论文.docx》由会员分享,可在线阅读,更多相关《单片机毕业论文.docx(73页珍藏版)》请在三一办公上搜索。

1、单片机毕业论文专 科 毕 业 设 计 题目 基于51单片机的可调数码日历钟的设计与制作 院 电子与信息工程系 专业名称 电子信息技术 年级班级 学生姓名 指导教师 摘 要 单片机以其体积小、编程灵活、控制功能强大、价格低廉等特点被广泛应用在各种电子电器产品中。单片机技术的出现和发展带来了电子技术和控制领域的一场革命。 单片机课程作为职业院校电子信息类专业一门重要的基础课程,它既是一门很有实用价值、实践性很强且很有趣味性的课程,同时它又是一门集硬件电路设计与软件编程于一体的学科,既要求我们有较好的电工电子技术基础知识,又要求有一定的逻辑思维和软件开发能力。通过近几年对单片机的学习,我已掌握单片机

2、的基本知识,并具备了单片机应用系统的初步开发能力。即将毕业之际,我运用我所掌握的单片机知识设计和制作了一个基于51单片机的可调数码日历钟,这既是对我所学知识的总结与高度概括,同时也将自己所掌握的知识与实际应用结合起来,进一步提高工程实践能力。 数码日历钟是实际生活中应用较多的一个电子计时装置,可供人们查询日期、星期及掌握时间。本文首先从数码日历钟的功能要求入手,对设计任务进行了分析,并将任务分解为若干个模块,提出在设计与制作过程中要用到的相关知识点,给出了本设计的硬件电路及软件流程,还给出了部分模块的源程序代码。本设计经过多次调试运行无误,最终提交出一个完整的应用系统产品。 本次毕业设计的数码

3、日历钟能在12864液晶屏上显示出年月日时分秒以及星期几,还能显示当前环境温度,并能通过按键调整日期和时间,在调整日期的同时通过相应算法自动实现星期几的调整,而且无论是否闰年、任何月份,当日期调整时都保证不会出现非法日期。数码日历钟是一个非常实用的设计与制作,成本低廉,如能进一步完善,具有一定的推广使用价值。 本设计任务比较复杂,要考虑的问题很多,C语言的模块化程序设计思想较好地解决了这个问题,故本设计任务采用C语言编程。 关键词:51单片机,C语言,数码日历钟,毕业设计,制作 I 河南理工大学毕业设计论文 目 录 摘要 . 1概述. 1 1.1 毕业设计的选题背景及制作意义 . 1 1.1.

4、1毕业设计的选题背景 . 1 1.1.2毕业设计的制作意义 . 1 1.2 数码日历钟的功能要求 . 1 1.3 本设计制作的主要内容 . 2 2数码日历钟的设计与制作任务分析 . 3 2.1数码日历钟的设计与制作任务分析与分解. 3 2.2设计方案的论证及选择 . 3 3 相关知识链接 . 6 3.1 51单片机简介 . 6 3.1.1 51单片机简介 . 6 3.1.2 51单片机引脚功能介绍 . 8 3.2由已知日期推算星期几 . 11 3.2.1如何判断一个年份是否闰年 . 11 3.2.2由已知日期如何推算星期几 . 11 3.3 12864图形液晶的使用 . 13 3.3.1 液晶

5、概述 . 13 3.3.2 LCM引脚功能介绍 . 14 3.3.3 LCD12864图形液晶显示模块指令集 . 15 3.3.4 LCD12864图形液晶显示模块与单片机的接口 . 17 3.3.5 LCD12864图形液晶显示模块的基础函数 . 17 3.4 51单片机中的中断与定时 . 19 3.4.1 51单片机中的中断 . 19 3.4.2 51单片机中的定时/计数器 . 22 3.5数字温度传感器DS18B20的使用. 28 3.5.1 DS18B20概述 . 28 3.5.2 DS18B20的内部结构 . 29 3.5.3 DS18B20与单片机的接口电路 . 32 3.5.4

6、DS18B20的操作命令 . 32 -1- 3.5.5 DS18B20的时序 . 33 3.6 矩阵式按键的检测 . 36 4系统设计与调试 . 44 4.1 硬件系统设计与调试 . 44 4.1.1硬件系统设计原理图 . 44 4.1.2硬件系统元器件清单 . 44 4.1.3硬件系统组装与调试 . 45 4.2 软件系统设计与调试 . 45 4.2.1软件系统设计 . 45 4.2.2软件系统调试与仿真 . 47 5结束语 . 49 参考文献 . 50 致 谢 . 51 -2- 河南理工大学毕业设计论文 1 概述 1、 概述 1.1 毕业设计的选题背景及制作意义 1.1.1毕业设计的选题背

7、景 单片机以其体积小、编程灵活、控制功能强大、价格低廉等特点被广泛地应用在各种电子电器产品中。单片机技术的出现和发展带来了电子技术和控制领域的一场革命。 单片机课程作为职业院校电子信息类专业一门重要的基础课程,它既是一门很有实用价值、实践性很强且很有趣味性的课程,同时它又是一门集硬件电路设计与软件编程于一体的学科,既要求我们有较好的电工电子技术基础知识,又要求有一定的逻辑思维和软件开发能力。通过近几年对单片机的学习,我已掌握单片机的基本知识,并具备了单片机应用系统的初步开发能力。即将毕业之际,为了将自己所掌握的知识与实际应用结合起来,进一步提高工程实践能力,同时也对自己所学知识作以总结及高度概

8、括向老师汇报,我决定将我的毕业设计课题选作基于51单片机的可调数码日历钟的设计与制作,并以此向老师作毕业汇报。 1.1.2毕业设计的制作意义 数码日历钟是实际生活中应用较多的一个电子计时产品,广泛地应用在酒店、宾馆、车站、家庭及办公室中,可供人们查询日期、星期,掌握当前时间及环境温度。 在上述背景下,需要我运用近几年在学校学到的单片机知识及开发技巧设计和制作出一个功能完善的可调数码日历钟。通过这个设计的制作,必将进一步提高我的工程实践能力和单片机应用系统开发能力,将我所学到的理论知识与实际应用结合起来,做到理论与实践相结合,同时也能对我高职阶段所学知识作以梳理和总结。这是一个非常实用的设计与制

9、作,成本低廉,若将它稍加改进安装在镜框或其它工艺品中,则更加实用。如能进一步完善其功能,具有一定的实际推广使用价值。 1.2数码日历钟的功能要求 本设计制作出来的数码日历钟要求能在12864液晶显示屏上显示出年月日及对应的星期几,当前时间及环境。而且要求日期和时间可通过按键调整,当日期调整时,通过相应算法自动实现星期几的调整,无论是否闰年、任何月份,当日-1- 1 概述 河南理工大学毕业设计论文 期调整时都保证不会出现非法的日期。本设计制作出来的数码日历钟显示如图1-1所示。 图1-1 毕业设计作品数码日历钟的显示效果图 1.3 本设计制作的主要内容 本设计制作需要完成的主要内容有: (1)对

10、设计与制作任务进行分析、分解; (2)对设计与制作方案进行可行性论证,选择一种较为现实可行的方案; (3)根据所选方案列出所需硬件元器件、制作与调试工具清单; (4)准备制作与调试工具,照单购买所需元器件并进行逐一测试,保证完好; (5)根据所选方案,画出硬件电路原理图; (6)逐一完成每个软件模块的编写与调试,最终编译生成目标程序; (7)整机联调。在Proteus中进行软件仿真,直至实现所有预先设定的功能要求。 (8)根据硬件电路原理图搭建电路,并进行电路焊接; (9)对硬件电路进行测试与调试,保证无虚焊、短路等故障,将目标程序写入单片机,再次整机联调; (10)完成毕业设计论文的撰写,提

11、交完整的毕业设计作品,由指导老师审阅,完成毕业设计论文答辩。 -2- 河南理工大学毕业设计论文 2 数码日历钟的设计与制作任务分析 2、 数码日历钟的设计与制作任务分析 2.1 数码日历钟的设计与制作任务的分析与分解 本设计任务比较复杂,要考虑的问题很多,故需对设计与制作任务进行分析和分解,使分解后的每一个子任务都在能够容易解决的范围之内。为此,通过对本设计任务的分析,将其按硬件和软件两个方面各分解为几个模块。它们分别是: (1) 硬件 根据所选方案画出硬件电路原理图; 根据所选方案,列出所需硬件元器件、制作与调试工具清单; 准备制作与调试工具; 照单购买所需元器件并进行逐一测试,保证完好;

12、根据硬件电路原理图搭建电路,并进行电路焊接; 对硬件电路进行测试与调试,保证无虚焊、短路等故障; (2) 软件 12864液晶的显示,编写12864液晶的基础显示函数; 根据已知日期推算出相应的星期几; 利用实时时钟芯片DS1302提供日期和时间,从而实现电子钟功能; 编写按键扫描程序,能够识别按键,并通过相应的按键调整年份、月份、日期、时、分; 数字温度传感器18B20的使用; 所测温度结果数据的处理及显示。 2.2设计方案的论证及选择 (1) 硬件方面: l 主控模块: 单片机芯片的选择:考虑到本程序较为复杂,目标程序可能占用存储空间较大,故应选择程序存储器容量稍大一些的单片机芯片较好,但

13、又要顾及尽量降低成本,程序开发、调试、载入方便。综合考虑,决定选用目前占有较大市场份额、技术成熟、资料丰富的Atmel公司生产的AT89S52单片机。 晶振的选择:由于本设计中读取时间和温度的时刻由定时/计数器控制,为便于计算定时/计数器的初值和定时时长,故采用稳定性较高的、固有振荡频率为12MHz的石英晶体振荡器。 -3- 2 数码日历钟的设计与制作任务分析 河南理工大学毕业设计论文 l 显示模块: 显示模块既可采用数码管显示,也可采用液晶显示。数码管的优点是价格便宜,显示亮度高,但它也有不少不足之处:当显示的信息量较大时,所用数码管较多,接口电路复杂,编程麻烦;而且其体积较大,不宜用于便携

14、式产品,显示也不够美观;当其中某一段出现劣化而不能正常显示时,需整体更换。图形液晶显示模块的优点是价格适中,与单片机的接口电路简单,便于编程控制其显示,体积小、质量轻、功耗低、寿命长、可靠性高、显示操作简单,显示美观,且显示的信息量大,特别适合用于便携式电子产品中作显示器件。故本设计中的显示模块决定采用12864点阵图形液晶显示器。 l 实时时钟模块: 我们固然可以利用单片机本身自带的定时/计数器提供秒信号实现电子日历钟,但这过于消耗单片机资源,且由于中断响应影响到时钟的精度,而且一旦主机掉电后重新启动时系统的时间日期必将再次初始化,每次上电后必须重新调整日期和时间初始值。本设计决定采用美国D

15、allas半导体公司的DS1302实时时钟芯片实现日历钟功能。DS1302可以在主机掉电后由后备电源为其供电,从而保证日期和时间在主机掉电后依旧保持运行,不需每次上电调整。而且DS1302还提供了为后备电源涓流充电的功能。DS1302自身还有31个字节的RAM空间,可以存储其他数据,从而为系统功能进一步拓展提供了空间。 l 温度测量模块: 温度测量模块当然可以采用较为简单的热敏电阻,其阻值会随着周围环境温度的变化而变化。热敏电阻的优点是电路及其工作原理都较为简单,但其测量结果为模拟量,要让单片机去处理其测量结果,需通过ADC电路,这样又增加了不少成本,且需熟悉ADC与单片机的接口电路及其编程,

16、这就增加了开发的难度和时间,比较麻烦。当然也可采用模拟温度传感器,如LM35,它测得的结果同样是模拟量,也需通过A/D转换,单片机才能处理,既提高了开发成本,又增加了开发难度,故本设计放弃采用以上这两种方案,决定采用DALLAS 公司的“一线式”接口的数字化温度传感器DS18B20。相比热敏电阻,该传感器的优点是可谓多多:首先,它与单片机的接口非常简单,只需一根线即可实现和单片机之间的数据传输。测温范围为55125,固有测温分辨率0.5。具有耐磨耐碰,体积小,工作电源: 35V/DC。非常适合要求。 l 按键调整控制模块: 为了便于用户识记各按键的功能,本设计中只用3个按键来实现对日期和时间的

17、调整。由于所用按键数目较少,为便于编程,按键采用独立式按键的接法,独立式按键接口电路简单,编程方便。 -4- 河南理工大学毕业设计论文 2 数码日历钟的设计与制作任务分析 硬件系统的组成框图如图2-1所示: 图2-1 数码日历钟硬件系统组成框图 (2) 软件方面: l 编程语言选择: 考虑到本设计任务较为复杂,C语言的模块化程序设计思想能够较好地解决这个问题,且用C语言编写程序,开发效率高,生成的目标代码质量也较高,执行效率高,综上所述,故本设计任务采用C语言编程。 l 编译环境软件选择: 本设计选用目前单片机应用系统开发使用最泛的集成开发编译软件Keil公司的Keil C,它既可用于汇编程言

18、源程序的编辑、编译,生成目标程序,也可用于C语言源程序的编辑、编译、连接并生成目标代码。 l 仿真软件选择: 在焊接硬件电路之前,为避免不必要的麻烦,要对本设计系统进行软件仿真,直到仿真运行无误后,再焊接元器件,搭建本设计硬件电路。本设计选用目前单片机应用系统仿真中最受欢迎的一款软件英国Labcenter Electronics公司开发的电子电路设计与仿真软件Proteus。它包括ISISARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的制图与仿真。Proteus 的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机

19、芯片以及单片机外围电路,例如键盘、LED、LCD等等。通过Proteus软件的使用,我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。 Proteus软件有十多年的历史,在全球广泛使用,除了具有和其它EDA工具一样的原理图制图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能在于其电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级别的实时调试,如果显示及输出,还能看到运行后输入输出的效果,此外系统还配置有丰富的虚拟仪器,如示波器、逻辑分析仪等。 -5- 3 相关知识链接 河南理工大学毕业设计论文 3、 相关知识链接 3.1 51单片机简介

20、 3.1.1 51单片机简介 单片机就是将中央处理器、存储器、I/O接口电路、定时/计数器、中断系统和时钟电路等计算机基本部件集成在一块芯片上,具有独特功能的单片微型计算机。由于其体积小,主要应用在控制领域,所以又被称为微控制器。 单片机出现的历史并不长,其前身起源于上世纪XX年代研制成功的微处理器。作为一门非常有前途的计算机技术,单片机一经出现就迅速发展起来。一路走来,单片机的性能在不断提高,存储容量也在不断增大,而体积、价格、功耗却在不断降低。由于其体积小、控制功能强大、编程灵活、价格低廉,所以在控制领域得到了广泛的应用。可以说,凡是与控制或简单计算有关的场合,都可以用单片机来实现。目前,

21、单片机已得到了大力推广和广泛应用,从工业控制系统到日常工作和生活的方方面面,单片机的应用几乎无处不在。从形形色色的家用电器、电子玩具、数码产品,到各种医疗器械、智能仪器仪表、通信设备,大到航空航天、雷达、导弹等现代化武器装备,单片机的身影无处不在。复杂的工业控制系统中甚至有上百台单片机在同时工作。 单片机的应用从根本上改变了传统的控制系统的设计思想和设计方法,可以说,单片机技术的出现和发展给现代电子技术和控制领域带来了一场新的革命。以往由硬件电路实现的大部分控制功能现在都能够使用单片机通过软件方式来实现,这种以软件取代硬件并能够提高系统性能的微控制技术,随着单片机应用的推广普及,不断发展,日益

22、完善。因此,学习单片机,掌握其应用和开发技术,也成为当今职业院校电子信息专业的学生必须具备的一项基本技能。 下面谈谈单片机的发展情况及其常用系列。 虽然单片机出现的历史并不长,至今也不到四十年的时间,但其发展却十分迅猛。 XX年,美国的Intel公司在8位微处理器的基础上首先研制成功了最早的单片机产品MCS-48系列单片机,这是一种低档的8位单片机,但它以其体-6- 河南理工大学毕业设计论文 3 相关知识链接 积小、功能全、价格低、容易嵌入到其他控制产品中等特点得到了广泛的应用。现在MCS-48系列单片机已经完全退出了历史舞台。20世纪XX年代,Intel公司在总结MCS-48系列单片机的基础

23、上推出了8位单片机的第二代产品MCS-51系列单片机。虽然它仍然是8位单片机,但其功能有了很大的增强。其系列产品包括基本型8031/8051/8751/8951、80C31/80C51,增强型8032/8052,改进型8044/8344/8744等,其中80C31/80C51采用CHMOS工艺制造,功耗更低。上述单片机产品的内核均是8051内核,它们是高档的8位单片机。 由于Intel公司主要致力于计算机的CPU的研究和开发,所以该公司在推出MCS-51体系结构后不久,开放了8051内核技术,授权一些厂商以MCS-51系列单片机为核心生产各自的单片机,为单片机的发展起了很大作用。随后世界各大半

24、导体公司依靠自己的优势,争相研究和开发单片机,发展了MCS-51单片机,创造了许多各具特色的单片机产品,成为事实上的8位单片机主流和经典。这些单片机统称MCS-51系列单片机,它们与MCS-51单片机兼容,又各具特点。 目前,全世界生产单片机的厂家不计其数,单片机的型号也五花八门。值得一提的是,本设计中所采用的AT89S52单片机是Atmel公司的产品,它拥有与MCS-51单片机同样的内核和引脚排列,它除了具有和MCS-51单片机的全部功能外,还内置了一些非常实用的功能。例如,它采用Flash ROM、支持ISP功能,可以反复快速擦写,因此程序写入和调试非常方便,使得我们在写入程序时不需再依靠

25、传统的编程器,只需使用它所支持的专用ISP软件就可轻易将程序写入,它改变了单片机应用系统的结构模式和开发运行条件,此外它还增加了一些外部接口功能,内置有看门狗。AT89S52是目前占有较大市场份额、性能卓越的典型的51系列单片机。 AT89S52单片机的主要参数如下: l 8KB在系统可编程Flash ROM存储器。 l 片内256B RAM存储器。 l 工作电源电压:4.0V5.5V。 l 可重复擦写1000次。 l 时钟频率0Hz33MHz。 l 加密结构:三级。 l 可编程并行I/O口:48位。 l 定时/计数器:3个16位可编程定时/计数器。 l 中断源:8个可编程中断源。 l 全双工

26、UART串行通道。 l 具有低功耗空闲工作模式和掉电保持模式。 l 内置看门狗定时器和复位电路。 l 双数据指针。 -7- 3 相关知识链接 河南理工大学毕业设计论文 3.1.2 51单片机引脚功能介绍 单片机就是一块集成电路,在使用其之前,必须先了解其外部引脚功能。51单片机有多种封装方式,下面以DIP-40封装为例介绍其引脚功能。DIP-40封装的AT89S52单片机实物图如图3-1所示。 图3-1 DIP-40封装的AT89S52单片机实物图 由于受到集成电路芯片引脚数目的限制,许多引脚具有双重功能。AT89S52单片机的引脚排列如图3-2所示。按其功能类别来划分,这40个引脚可分为以下

27、四类:电源引脚、时钟引脚、I/O接口引脚、编程控制引脚。各引脚功能介绍如下。 (1) 电源引脚Vcc和GND 集成电路都需要电源供电才能正常工作,单片机也不例外。采用DIP-40封装的AT89S52单片机的第40脚Vcc为电源正极输入端,一般接+5V,第20脚GND为电源负极输入端,接电源负极,也作为电路中的公共接地端。 图3-2 DIP-40封装的AT89S52单片机外部引脚图 (2) 时钟引脚XTAL1和XTAL2 第19脚XTAL1为片内振荡电路输入端,第18脚XTAL2为片内振荡电路输出端。在使用片内时钟发生电路时,这两个引脚用于外接石英晶体和振荡电容,此时晶振频率即为时钟振荡频率;在

28、使用片外时钟电路时,这两个引脚用于外接外部时钟源。需要说明的是:本设计采用单片机内部时钟振荡电路,所以这两个引脚外接石英晶体和振荡电容。为便于计算定时器的初始值及定时时间,晶振频率为12MHz。 -8- 河南理工大学毕业设计论文 3 相关知识链接 (3) 并行I/O接口引脚 AT89S52单片机共有4个8位并行I/O口,分别为P0、P1、P2、P3(字母P为英文单词Port(意为“端口”)的第一个字母),每个I/O口均有8位,分别表示成Pm.n的形式,在用C语言写程序时则应写成Pmn的形式。 P0口为8位双向三态I/O口。值得注意的是,P0口内部没有上拉电阻,不能正常输出高电平,因此P0口在作

29、为通用I/O口作基本输入输出使用时必须外接上拉电阻,否则应输出高电平时为高阻态,无法正常输出高电平。上拉电阻阻值一般取10KW。P0口除了作为I/O口使用外,在系统扩展时还作为低8位地址总线和数据总线分时复用。本设计中的12864液晶显示器的数据总线就是与P0口连接的,已外接上拉电阻。 P1口为8位准双向并行I/O口。P1口内部已接有上拉电阻,故在使用时无需再接上拉电阻。P1口功能较为简单,仅作基本I/O口使用,没有第二功能。本设计中用P1口作为矩阵式按键接口使用。 P2口为8位准双向并行I/O口。P2口内部也已接有上拉电阻,故在使用时无需再接上拉电阻。P2口除了作为I/O口使用外,在系统扩展

30、时还作为高8位地址总线使用。 P3口作为第一功能使用时为普通的8位并行I/O口,在使用时也无需再接上拉电阻。需要强调的是:P3口的每个引脚又各自具有非常重要的第二功能。P3口的每个引脚的第二功能如表3-1所示。 表3-1 AT89S52单片机P3口的第二功能 引脚名称 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第二功能 RXD TXD 功能描述 串行数据输入 串行数据输出 外部中断0中断请求输入 外部中断1中断请求输入 定时/计数器0外部时钟输入 定时/计数器1外部时钟输入 外部RAM写选通信号 外部RAM读选通信号 INT0 INT1 T0 T1 WR

31、RD -9- 3 相关知识链接 河南理工大学毕业设计论文 注意:P3口每个引脚各自具有的第二功能都是比较重要的控制信号,在实际应用中应优先满足第二功能使用需要,然后再用剩余的口线作为数据的输入和输出使用。由于本设计中不涉及到P3口第二功能的使用,故不再对P3口的第二功能作详细介绍。 以上四个I/O口既可字节操作,亦可位操作 (4) 编程控制引脚 第9脚RST/Vpd为复位信号输入端。当RST端保持两个机器周期以上的高电平时即可使单片机进入复位状态,完成一系列初始化操作。单片机复位时,使片内各特殊功能寄存器的内容复位到初始状态,程序计数器PC的值归零,即指向ROM的第一个单元。复位操作还使4个并

32、行I/O口的每根口线都置为高电平状态。除作为复位信号输入外,该引脚也具有不太常用的第二功能,即作为片内RAM的备用电源输入端。一旦电源断电或者电压降到一定值时,可通过该引脚为片内RAM供电,以保护片内RAM中的数据不丢失,且上电后能够继续工作。 第29脚PSEN为外部ROM的读选通信号,当访问片外扩展ROM时,只有该引脚为低电平有效信号,才能选通片外程序存储器对其进行读操作。本设计中无外接扩展ROM,不涉及对该引脚的使用,故悬空。 第30脚ALE/PROG为地址锁存使能/片内ROM编程脉冲信号输入端。在单片机扩展外部存储器时,该引脚作第一功能使用,用于控制把P0口提供的低8位地址送锁存器锁存起

33、来,以实现低8位地址和数据的隔离。在没有访问外部存储器时,该引脚以时钟周期频率的6分频固定频率输出,因此可作为外部时钟,或可作为外部定时脉冲使用。该引脚的第二功能PROG为片内ROM的编程脉冲输入端。这是为兼容以往的低版本单片机而设置的。以往低版本单片机的片内ROM要靠编程脉冲才能将程序写入,而AT89S52支持ISP功能,无需编程脉冲输入。本设计中既没有扩展外部存储器,往片内ROM写入程序时也无需编程脉冲输入,故不涉及该引脚的使用,故闲置。 第31脚EA/Vpp具有双重功能。其第一功能为访问片内、片外ROM的控制信号,当该引脚接低电平时,CPU对ROM的访问限定在片外ROM;当该引脚接高电平

34、时,CPU对ROM的访问方式为,如果地址不超过片内ROM的存储单元范围,则访问片内ROM,当地址信号所标志的存储单元超出片内ROM范围时,则自动延伸至片外ROM。该引脚的第二功能Vpp用于对片内含有EPROM的单片机,对其内部EPROM写入程序时作编程电压输入端。本设计中采用的AT89S52单片机片内含有8KB Flash ROM,其存储容量已能满足需求,无需扩展片外ROM,-10- 河南理工大学毕业设计论文 3 相关知识链接 且AT89S52单片机支持ISP功能,无需编程电压输入,故此引脚直接接高电平,仅限于对片内程序存储器的访问。 3.2 由已知日期推算星期几 3.2.1如何判断一个年份是

35、否是闰年 数码日历钟显示的年份如果是闰年,则2月为29天,否则为28天。在本设计任务中,无论是日期的调整,还是星期几的推算,都涉及到闰年的判断。查阅相关资料可知,如果一个年份是闰年,则该年份必然满足以下两个条件其中之一: (1) 年份是4的整数倍但不是100的整数倍; (2) 年份是400的整数倍。 只要年份能满足以上两个条件其中之一,便可判定是闰年,否则不是闰年。于是,不难写出判断一个年份是否闰年的函数如下: bit leap(int year) /判断是否闰年函数 return(year%4=0&year%100!=0|year%400=0); /闰年的条件 该函数的类型为C51中扩展的b

36、it型,这种类型的函数的返回值只能是0或1,不能为其它值。具体到本函数,若年份能满足闰年的条件则返回1,否则返回0。 3.2.2由已知日期如何推算星期几 我们在日常生活中经常会遇到这样的问题,忘记了某年某月某日是星期几,特别是一些重大节日或是一些值得纪念的日子,这就是星期几的推算问题。那么,如何由一个已知日期推算出是星期几呢? 人们一般会采用这样的方法:从一个已知星期几的某天开始推算,先计算已知星期几的这一天距要推算的那天共相差几天,由于星期是7天一轮回的,故可以将相差的天数除以7取余数,再用已知的那天星期几加上余数,就可以推算出要计算的这天是星期几了。在此,我们也采用类似的方法进行推算。已知

37、公元元年x月x日正好是星期一,那么,只需计算出从公元元年x月x日到要推算的这一天总共多少天,再用天数s除以7取余数,余0则说明正好够整数个星期,则要推算的这一天正好就是一个星期的最后一天,也就是星期日;余1则说明整数个星期还多一天,那么要推算的这一天就是星期一了;依次类推,余2就是星期二,余3就是星期三.。但是我们在计算天数时会发现由于中间会经历平年、闰年,每年的不同月份天数也不相同,这样算来,计算量是很大的,计算也十分不便。有没有改进的方法呢?我们不妨这样来考虑:如果一个年份是平年,则该年有365天,也就是52个星期多一天;如果一个年份是闰年,则该年有366天,也就是52个星期多两天;于是,

38、对于以前的年份,如-11- 3 相关知识链接 河南理工大学毕业设计论文 果是平年,则只计为一天,同理,如果是闰年,则计为两天。这样一来,则计算量大大减少。 再进一步,把要推算的这一年之前的所有年份都先按平年计算,则之前有多少年,就有多少天。设要推算的年份为y,则之前有y-1个年份,就计为y-1天。其中y-1个年份中有若干个年份是闰年,由于闰年比平年多一天,则需再加上闰年的个数,于是可以算出y年之前有(y-1) +(y-1)/4-(y-1)/100+(y-1)/400天。注意:先把之前y-1年中凡是4的整数倍的年份都暂按闰年计算,然后再去掉是100的整数倍的年份,再加上是400的整数倍的年份,即

39、可算出y年之前有之少天了。 然后再计算要推算的这一天是当年的第多少天,这个不难计算。如果要推算的日子在该年的前两个月,则与该年是否闰年无关;如果是2月份以后的月份,可以先按平年计算,如果是闰年,则再加上一天。这样,就可以对要推算的日子所在的月份进行测试,并按各种情况计算出要推算的这一天所在的月份之前当年已过了多少天,再加上要推算的这一天是当月的第几天,就可以算出要推算的这一天是当年的第多少天了。用之前所算出的当年之前的总天数加上要推算的这一天是当年的多少天,如此计算出总天数,再用这个总天数除以7取余数,余0则是星期日,余1则是星期一,余2则是星期二,如此等等。 由已知日期推算星期几的函数的参考

40、源代码如下: char tuisuan(int y, char m, char d) /根据已知日期推算星期几 int s; /变量s用于存放总天数 switch (m) case 1: s=0; break; /如果欲推算的这一天在1月份,则当月之前经历了0天 case 2: s=31;break; case 3: s=59; break; case 4: s=90;break; case 5: s=120; break; case 6: s=151;break; case 7: s=181; break; case 8: s=212;break; case 9: s=243; break; case 10: s=273;break; -12- 河南理工大学毕业设计论文 3 相关知识链接 case 11: s=304; break; case 12: s=334;break; if(m2&leap(y) s=s+1; s=s+d; s=s+(y-1)+(y-1)/4-(y-1)/100+(y-1)/400; return (s%7); 程序运行期间,通过按键调整日期,运行结果测试如表3-2所示: 表3-2 星期计算问题测试数据表 测试数据 第一组 第二组 第三组 XX年x月x日 XX年x月x日 XX

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号