基于单片机的时钟系统设计.doc

上传人:good****022 文档编号:116653538 上传时间:2022-07-06 格式:DOC 页数:59 大小:1.27MB
返回 下载 相关 举报
基于单片机的时钟系统设计.doc_第1页
第1页 / 共59页
基于单片机的时钟系统设计.doc_第2页
第2页 / 共59页
基于单片机的时钟系统设计.doc_第3页
第3页 / 共59页
点击查看更多>>
资源描述
班 级 09521 学 号 09521033 本科毕业设计论文 题 目 基于单片机的时钟系统设计 学 院 xxxxxxxx 专 业 xxxxxxxxx 学生姓名 xx 导师姓名 何联会 毕业设计(论文)诚信声明书本人声明:本人所提交的毕业论文基于单片机的时钟系统设计 是本人在指导教师指导下独立研究、写作的成果,论文中所引用他人的无论以何种方式发布的文字、研究成果,均在论文中加以说明;有关教师、同学和其他人员对本文的写作、修订提出过并为我在论文中加以采纳的意见、建议,均已在我的致谢辞中加以说明并深致谢意。本论文和资料若有不实之处,本人承担一切相关责任。 论文作者: (签字) 时间: 年 月 日指导教师已阅: (签字) 时间: 年 月 日西 安 电 子 科 技 大 学 长 安 学 院 毕业设计(论文)工作计划学生姓名 马江 学号 09521033 指导教师 何联会 职称 讲师 学院 长安学院 专业 电子科学与技术 题目名称 基于单片机的时钟系统设计 一、毕业设计(论文)进度起 止 时 间 工 作 内 容1.10 3.5 检索、阅读相关技术资料3.5 3.18 检索、阅读相关技术资料,方案研究3.18 4.1 方案研究、熟悉开发系统硬件电路4.1 4.15 设计电路图4.15 4.29 模块电路试验4.29 5.12 电路原理图和PCB设计,软件设计 电路调试,硬件调试,软件调试5.12 5.24 撰写论文、论文答辩二、主要参考书目(资料)1、蒋建文等,CAN总线通信协议分析和实现,计算机工程,2002年02期2、阳宪惠,现场总线技术及其应用(第2版),清华大学出版社,2008.103、马忠梅等,单片机的C语言应用程序设计,北京航空航天大学出版社,2004年3月4、杨文龙,单片机技术及应用,电子工业出版社,2008年2月5、孙肖子,电子设计指南,高等教育出版社,2006年1月6、邬宽明,CAN总线原理和应用系统设计北京舫空航天大学出版社,1996三、主要仪器设备及材料硬件电路实验板、集成电路、万用表、单片机、计算机四、教师的指导安排情况(场地安排、指导方式等)检索、阅读资料期间,可以在图书馆、自习教室进行;设计、实验阶段场地在F313每周老师和每个毕业设计同学至少讨论一次五、对计划的说明注:本计划一式两份,一份交学院,一份学生自己保存(计划书双面打印)西 安 电 子 科 技 大 学 长 安 学 院毕业设计(论文)任务书学生姓名 马江 学号 09521033 指导教师 何联会 职称 讲师 学院 长安学院 专业 电子科学与技术 题目名称 基于单片机的时钟设计 任务与要求任务:利用单片机和钟芯片实现数字时钟,并且具有调节时间的功能。要求;(1)查阅相关文献,熟悉课题背景、任务;(2)深入学习51系列单片机原理及C语言并且会用Keil软件进行编程;(3)学习时钟芯片和LED的工作原理;(4)学会利用protel进行原理图绘制,并且能够利用protues对其进行仿真;要求:1、了解各种通信协议,设计现场总线适配器方案; 2、根据系统方案,设计电路原理图和pcb; 3、调试电路,确定电路参数; 4、设计相应软件,并进行调试。开始日期 2013年1月10日 完成日期 2013年5月24日 院长(签字) 2013年 月 日注:本任务书一式两份,一份交学院,一份学生自己保存。西 安 电 子 科 技 大 学 长 安 学 院毕业设计(论文)中期检查表学 院 长安学院专 业电子科学与技术学生姓名马江学 号09521033班 级09521导师姓名何联会职 称讲师单 位理学院题目名称基于单片机的时钟系统设计检 查 内 容检 查 结 果题目是否更换及更换原因否学生出勤情况出勤正常进 度 评 价(完成总工作量的百分比)65%质量评价、进度描述方案已完善,正在制作PCB,正在完善数据采集模块功能,初步完成硬件调试;初步完成软件功能模块总 体 评 价(按优、良、中、及格、不及格五挡评价)良存在的问题与建议进一步完善软、硬件设计,抓紧时间撰写论文。学 院 审 核(盖章)注:此表由指导教师填写,5月15日前交学院办公室,中期检查成绩将作为毕业设计总成绩的一部分;此表装订入毕业设计(论文)中。西 安 电 子 科 技 大 学 长 安 学 院毕业设计(论文)成绩登记表学 院长 安 学 院专 业电子科学与技术姓 名马江学 号09521033成 绩题目名称基于单片机的时钟系统设计指导教师何联会职 称讲师指导教师评语及对成绩的评定意见你在论文撰写的过程当中态度认真,能够充分利用时间查找资料。每次导师见面你都能及时参加,并通过电话、邮件等方式积极主动与指导老师联系,汇报论文进度。对于指导老师提出的问题和不足之处,能够及时修改和完善。作者利用计算机以及相关资料文献等工具,结合Visual C+、Keil、Protel 99、STC-ISP等软件对毕业论文进行了全面的设计,并实现了各项功能。论文内容丰富,设计新颖,布局合理。整个软件与硬件的设计表现出作者较扎实的专业知识和语言功底。论文格式符合规范化要求。建议论文成绩为“ ”。:签名 年 月 日评阅人评语及成绩评定意见 签名 年 月 日答辩小组意见签名 年 月 日学院答辩委员会意见答辩委员会主任签名 (学院盖章) 年 月 日注:学院、专业名均写全称;成绩登记表双面打印ABSTRACT摘要随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。关键词:单片机 AT89C52 电子时钟 ABSTRACTTraditional digital electronic clock with a greater amount of discrete components, not only takes up a lot of space and utilization than low, as the system design complexity continues to improve, the clock system design using traditional methods are difficult to meet the design requirements . Microcontroller is a CPU, RAM, ROM, timer / counter and a variety of interfaces in one of the micro-controller. Its small size, low cost, powerful, widely used in smart products and industrial automation. And 51 of the microcontroller MCU is the most typical and most representative one. This design is based on 51 single-chip electronic clock, using both assembly language for the programming language, to overcome the drawbacks of conventional electronic clock. The design of the basic functions to be achieved for the microcontroller timer display. SCM can reflect the scalability advantages of electronic clock, add time to adjust, the use of buttons, adjust the date and time of year, month; to join the lunar calendar display. Keywords: microcontroller, electronic clock目 录i目 录第一章 绪论11.1 课题背景11.2 设计任务11.3 课题意义11.4 本章小节2第二章 总体方案32.1 系统的设计思路32.2 系统硬件描述32.3 系统软件描述32.4 设计流程和预期成果4第三章 系统硬件设计63.1 芯片的选择63.2 实验板电路原理图93.3 功能电路分析93.3.1 时钟电路93.3.2 复位电路103.3.3 键盘电路113.3.4 液晶显示屏LCD1602113.4 本章小节14第四章 软件设计154.1 软件设计总体说明154.2 主程序软件实现164.2.1主程序流程图164.2.2主程序代码174.4 LCD1602模块软件实现194.4.1 LCD1602液晶显示模块子程序流程图194.4.2 LCD1602液晶显示模块子程序代码194.5 DS12887模块软件实现214.5.1 DS12887模块子程序流程图214.5.2 DS12887模块子程序代码22第五章 系统调试315.1 最小系统的调试315.2 液晶显示模块调试315.3 整体调试31结束语32致谢34参考文献36参考文献41第一章 绪论1.1 课题背景单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。单片机有两种基本结构:一种是在通用微型计算机中广泛采用的,程序存储器和数据存储器共用一个存储器空间的结构,称为“冯诺依曼”(Von Neumann)结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,称为“哈佛”(Harvard)结构,目前的单片机采用此种结构为多。本文讨论的单片机多功能时钟系统的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能多等特点。不仅能满足所需要求而且还有很多功能可供扩展,有着广泛的应用领域。1.2 设计任务熟练掌握相关知识内容。1.3 课题意义在日常生活和工作中,我们常常用到定时控制,如扩印过程中的曝光定时等。早期常用的一些时间控制单元都使用模拟电路设计制作的,其定时准确性和重复精度都不是很理想,现在基本上都是基于数字技术的新一代产品,随着单片机性价比的不断提高,新一代产品的应用也越来越广泛。大则可以构成复杂的工业过程控制系统,完成复杂的控制功能;小则可以用于家电控制,甚至可以用于儿童电子玩具。它功能强大、体积小、质量轻、灵活好用,配以适当的接口芯片,可以构成各种各样、功能各异的微电子产品。随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。这些具有人们所需要的智能化特性的产品减轻了人的劳动,扩大了数字化的范围,为家庭数字化提供了可能。根据这种实际情况,设计了一个单片机多功能时钟系统,它有基本的时间功能,还有定时功能,既可作为闹铃,也可扩展为定时对家电等电气产品的自动控制,可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制;可增加温度传感器,进行实时温度显示,进一步扩展为利用不同的温度某些电气产品进行自动控制;也可增加湿度传感器,进行实时湿度显示,以便对湿度进行控制,方便人们的生活。1.4 本章小节本章主要介绍了课题背景、设计任务和课题意义,对单片机的优点及结构作了简要叙述,也对本系统的应用及概况进行了说明。第二章 总体方案2.1 系统的设计思路本次设计完成电子时钟年、月、日、时、分、秒的显示功能。由于DS12887时钟芯片内含一个锂电池,所以断电情况可以运行十年以上不丢失数据,重新上电后不用校正时钟。硬件电路包括单片机最小系统电路、DS12887实时时钟芯片电路模块、LCD1602液晶显示模块、按键模块;软件部分主要通过c程序的编程实现对时钟芯片进行时间数据的读和写,然后通过液晶显示程序将时间显示出来,通过按键操作实现功能的转换和屏幕的切换。设计中结合硬件、软件的分步调试,达到要求的控制效果。2.2 系统硬件描述基于单片机系统的电子时钟基本结构框图如图2.1所示:图2.1 系统基本结构框图该系统所需要的器件包括单片机STC89C52芯片一块,实时时钟芯片DS12887一块,液晶显示屏LCD1602一块, 12mHZ的晶振一个,排针排线若干组,电容电阻若干,导线若干,发光二级管一个,三极管一个,按钮4个。2.3 系统软件描述系统程序实现三部分功能:时钟部分实现年、月、日、时、分、秒、星期显示和设置功能;键盘部分主要为时钟设置;功能整体程序流程框图如图2.2所示。单 片 机时钟日期退出模式按键操作显示时间日期输入输出图2.2 功能整体流程框图2.4 设计流程和预期成果该设计的主要流程如下:首先阅读大量参考文献,进行设计方案的确定,然后在Protel 99SE上进行原理图的绘制和修改,在电气检查无误的情况下,购买所需要的元器件(元器件应考虑裕量)。接着把元器件焊接到各个功能电路的模块上,并结合程序进行调试。最后将各个功能的电路程序组合起来,然后再进行总体调试直到成功。本设计能达到以下结果: 1)显示年、月、日、星期等日历相关信息。通过按键设置年月日和星期,还具有秒表的功能。 2)掉电后时钟芯片正常运行,重新上电后不用校正时钟。 第三章 系统硬件设计3.1 芯片的选择本设计选用AT89S52芯片,它是一种低功耗、高性能CMOS 8位微控制器,具有8K(0000H1FFFH)在线系统可编程Flash存储器。片上Flash允许程序存储器在线编程,也适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供灵活、高效的解决方案。AT89S52具有以下标准功能:8K(0000H1FFFH)Flash,256字节(00HFFH)数据存储器(RAM),64K(0000HFFFFH)程序存储器(ROM),32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口内晶振及时钟电路。其中,数据存储器(RAM)用于存放各种运算的中间结果,作缓存和数据暂存,以及设置特征标志等。AT89S52的片内数据存储器用位寻址方式,最大寻址范围为256字节(00HFFH)。按使用情况不同可分成低128字节(00H7FH)和高128字节(80HFFH)。其中低128字节为真正的RAM存储器,高128字节为特殊功能寄存器(SFR)区,如累加器ACC、程序状态字PSW、数据指针DPTR、程序计数器PC等。整个片内RAM区分布如图3.1所示。图3.1 片内RAM区1.单片机的介绍单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机也被称为微控制器(Microcontroler),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对提及要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可.用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。2.时钟电路的介绍时钟电路工作原理:3.5电源经过二极管和电感进入分频器后,分频器开始工作,和晶体一起产生振荡,在晶体的两脚均可以看到波形。晶体的两脚之间的阻值在450-700欧之间。在它的两脚各有1V左右的电压,由分频器提供。晶体两脚常生的频率总和是14.318M。 总频(OSC)在分频器出来后送到PCI槽的B16脚和ISA的B30脚。这两脚叫OSC测试脚。也有的还送到南桥,目的是使南桥的频率更加稳定。在总频OSC线上还电容。总频线的对地阻值在450-700欧之间,总频时钟波形幅度一定要大于2V电平。如果开机数码卡上的OSC灯不亮,先查晶体两脚的电压和波形;有电压有波形,在总频线路正常的情况下,为分频器坏;无电压无波形,在分频器电源正常情况下,为分频器坏;有电压无波形,为晶体坏。 没有总频,南、北桥、CPU、CACHE、I/O、内存上就没有频率。有了总频,也不一定有频率。总频一定正常,可以说明晶体和分频器基本上正常,主要是晶体的振荡电路已经完全正常,反之就不正常。当总频产生后,分频器开始分频,R2将分频器分过来的频率送到南桥,在南桥处理过后送到PCI槽B8和ISA的B20脚,这两脚叫系统测试脚,这个测试脚可以反映主板上所有的时钟是否正常。系统时钟的波形幅度一定要大于1.5V,这两脚的阻值在450-700欧之间,由南桥提供。 在主板上RESET和CLK者是南桥处理的,在总频正常下,如果RESET和CLK都没有,在南桥电源正常情况下,为南桥坏。主板不开机,RESET不正常,先查总频。在主板上,时钟线比AD线要粗一些,并带有弯曲。3.复位电路的介绍复位电路,就是 利用它把电路恢复到起始状态。就像计算器的清零按钮的作用一样,当你进行完了一个题目的计算后肯定是要清零的是吧!或者你输入错误,计算失误时都 要进行清零操作。以便回到原始状态,重新进行计算。和计算器清零按钮有所不同的是,复位电路启动的手段有所不同。一是在给电路通电时马上进行复位操作;二是在必要时可以由手动操作;三是根据程序或者电路运行的需要自动地进行。篡位电路都 是比较简单的大都是只有电阻和电容组合就可以办到了。再复杂点就有三极管等等配合程序来进行了。为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V5%,即4.755.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。3.2 实验板电路原理图实验板电路结构框图如图3.2所示图3.2 实验板结构框图3.3 功能电路分析3.3.1 时钟电路实验板的时钟振荡源电路如图3.3所示。其中JT 为11.0592MHz 的晶振,改变两电容CB的值即可对此晶振频率进行调节。该电路提供单片机工作所需的振荡频率,计算定时器初值即需此晶振频率,在通信时也需知道晶振频率,以对波特率进行计算。图 3.3 时钟电路3.3.2 复位电路如图3.4所示为实验板的复位电路,当RESET 信号为低电平时,实验板为工作状态,当RESET信号为高电平时,实验板为复位或下载程序状态。由于AT89S52具有ISP 的功能,即可以通过并口线直接将程序下载到单片机内,因此, AT89S52 具有两种状态,下载程序状态和运行状态。该复位电路能实现上电自动复位,也能手动复位,一般复位时RESET应保持20毫秒以上高电平,此复位时间由接地电容控制。图 3.4 复位电路3.3.3 键盘电路图3.5如图3.5所示为阵列按键电路,各设置及转换信号由此电路输入,实验板提供了16个按键,由P1口经SN74F244(驱动芯片)输出扩展成44的阵列按键,P1.0P1.3为行线,P1.4P1.7为列线。SN74F244有一片选信号线,当此口线为低电平时,A1A4与Y1Y4接通,反之,A1A4与Y1Y4断开。此键盘用扫描工作方式,若有键按下,则相应位端口被拉低为低电平,由于本系统只用了4个按键,所以只需对4个按键进行扫描。扫描时,先置P3.3口为高电平,向P1口送0EFH(MOV P1,#0EFH),再置P3.3口为低电平,读P1口(MOV A,P1),最后判断P1口低4位哪位是低电平,若某位为低电平,则相应按键被按下,如P1.0为低电平(ACC.0=0),则K1键被按下。3.3.4 液晶显示屏LCD1602 (一)LCD1602特点说明12 13液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。本系统设计采用字符型液屏显示模块LCD1602 作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。字符型液晶显示模块LCD1602是单片机应用设计中最常用的信息显示器件。LCD1602 可以显示两行,每行16 个字符,采用5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比14。(二)LCD1602功能介绍 LCD1602各引脚功能如表3.6所示。表3.6 LCD1602管脚功能表(1)基本操作时序:LCD1602 读写操作时序总体上来说是比较简单的,掌握其有两种方法:一种是直接看时序图,另外一种方法是直接记忆和总结读写时电平高低和变化。很显然第二种更简单、直接,下面就列出典型读写的时序要求,以方便编写程序。读状态-输入:RS=L,R/W=H,E=H 输出:D0-D7=状态字写指令-输入:RS=L,R/W=L,D0-D7=指令码,E=高脉冲 输出:无读数据-输入:RS=H,R/W=H,E=H 输出:D0-D7=数据写数据-输入:RS=H,R/W=L,D0-D7=数据,E=高脉冲 输出:无(2)状态字说明: 表3.8 状态字表对控制器每次进行读写操作之前,都必须进行读写检测,确保STA7为0(3)指令说明: 表3.9 显示模式设置表表3.10 显示开/关及背光灯设置表(4)数据控制控制器内部有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM(5)数据指针设置 表3.11 数据指针设置表(6)其他设置表3.12 其他设置指令表(三)LCD1602初始化过程(1)延时15ms(2)写指令38H(不检测忙信号)(3)延时5ms(4) 写指令38H(不检测忙信号)(5)写指令5ms(6) 写指令38H(不检测忙信号)(7)之后每次写指令、读/写数据操作之前均需检测忙信号(8)写指令38H:显示模式设置(9)写指令08H:显示关闭(10) 写指令01H:显示清屏幕(11) 写指令06H:显示光标移动设置(12) 写指令0CH:显示及光标设置3.4 本章小节本章主要对芯片作了介绍,对其内存单元作了详细说明,并对系统硬件(实验板)的结构框图和各功能电路作了说明,以及这些电路在本设计中的用途。 第四章 软件设计4.1 软件设计总体说明本系统的程序采用C语言编写,为了便于修改和调试,系统软件采用模块化设计,程序的编写编译在WAVE6000软件中完成。首先对STC89C52、LCD1602、DS12C887进行初始化,日历信息通过LCD1602显示出来,实际上芯片内部的时间仍然在走。时钟芯片向单片机发出中断请求,单片机通过报警模块进行警报,此时,若按下四个按键中的任意一个,报警停止,LCD1602显示的时间继续精确显示。20系统中有四个按键,即:设置键k1、切换键k2、上调键k3、下调键k4。(1)按下k1键,系统进入设置状态,再按下k2键可在除了温度外的项目,如年、月、日、时、分、秒、星期、闹钟上停留,此时再按下上调键S3即可进行加一操作,按下下调键S4即可进行减一的操作。(2)同时按下k1键和k2键会将当前的时间恢复到程序中设定的默认时间。(3)同时按下k3键和k4键可对闹钟进行开启和关闭的操作。4.2 主程序软件实现4.2.1主程序流程图图4.1 主程序流程图4.2.2主程序代码void main()lcd_init(); Start_calendar (); initial_irq (); enable_set = F; while(1)if ( enable_play_song ) play_song(); enable_play_song = F; update_display_data (); display_calender_and_temp (); if (enable_set) delay (100); update_set_display (cur_set_pos); /更新设置的信息display_calender_and_temp (); delay (100); date_timeTIME_SIGN_POS = :; continue; delay (200); flash_time_sign (); 4.4 LCD1602模块软件实现4.4.1 LCD1602液晶显示模块子程序流程图图4.3 LCD1602子程序流程图4.4.2 LCD1602液晶显示模块子程序代码#include #include #include #include #include typedef.h#include common_funs.h#define LCD_DATA P2 sbit rs = P16;sbit rw = P15;sbit ep = P14;BOOL lcd_bz()BOOL result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(LCD_DATA & 0 x80);ep = 0;return result;void lcd_wcmd(BYTE cmd)while(lcd_bz();rs = 0;rw = 0;ep = 0;_nop_();_nop_();LCD_DATA = cmd;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;void lcd_pos(BYTE pos)lcd_wcmd(pos | 0 x80);void lcd_wdat(BYTE dat)while(lcd_bz();rs = 1;rw = 0;ep = 0;LCD_DATA = dat;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;void lcd_write_line(BYTE line, BYTE *line_data) BYTE i = 0;lcd_pos(line * 0 x40);for (i = 0; line_datai != 0; i +)lcd_wdat(line_datai);void lcd_clear_line(BYTE line)BYTE i = 0;lcd_pos(line * 0 x40);for (i = 0; i 16; i +)lcd_wdat ( );void lcd_init()lcd_wcmd(0 x38);delay(1);lcd_wcmd(0 x0c);delay(1);lcd_wcmd(0 x06);delay(1);lcd_wcmd(0 x01);delay(1);lcd_clear_line(0);lcd_clear_line(1); 4.5 DS12887模块软件实现4.5.1 DS12887模块子程序流程图图4.4 DS12887时间显示流程图4.5.2 DS12887模块子程序代码#include #include #include #include #include typedef.h#include common_funs.h sbit key_tab = P10; sbit key_set = P11; sbit key_up = P12; sbit key_down = P13; #define CENTURY_POS 0 #define YEAR_POS 2#define MONTH_POS 5#define DAY_POS 8#define HOUR_POS 11#define TIME_SIGN_POS 13#define MINUTE_POS 14#define WEEK_POS 0#define ALARM_SIGN_POS 4#define ALARM_HOUR_POS 5#define ALARM_MINUTE_POS 8#define clock_second XBYTE0 xff00 #define clock_second_a XBYTE0 xff01 #define clock_minute XBYTE0 xff02 #define clock_minute_a XBYTE0 xff03 #define clock_hour XBYTE0 xff04 #define clock_hour_a XBYTE0 xff05 #define clock_week XBYTE0 xff06#define clock_day XBYTE0 xff07#define clock_month XBYTE0 xff08#define clock_year XBYTE0 xff09#define clock_a XBYTE0 xff0a#define clock_b XBYTE0 xff0b#define clock_c XBYTE0 xff0c#define clock_century XBYTE0 xff32#define clock_ram_first XBYTE0 xff0e#define clock_ram_second XBYTE0 xff33 BYTE *week7 = SUN,MON, TUE, WED, THU, FRI, SAT; BYTE date_time16 = 2,0,1,1,/,0,5,/,1,7, ,2,0,:,3,5; BYTE week_alarm_temperature16 = , , , , , , , , , , , , , , , ;BYTE ALARM_STATE = A; #define SET_MODE_COUNT (7 + 1) void play_song(void);void lcd_init();void lcd_write_line(BYTE line, BYTE *line_data);void lcd_pos(BYTE pos);void lcd_clear_line(BYTE line);BYTE cur_set_pos = 0;BYTE enable_set = 0; BYTE enable_play_song = 0; BYTE inc_bcd_value(BYTE bcd) if (bcd & 0 xF) = 9) return (bcd & 0 xF0) + 0 x10; return bcd + 1;BYTE dec_bcd_value (BYTE bcd) if (bcd & 0 xF) = 0) return (bcd&0 xF0) - 0X10)|0X9; return bcd - 1;void bcd_to_byte_string(uchar bcd, uchar *bcd_str) bcd_str0 = (bcd 4) + 0; bcd_str1 = (bcd & 0 x0F) + 0; return ; void update_display_data() bcd_to_byte_string (dec_bcd_value(clock_century), &date_timeCENTURY_POS);bcd_to_byte_string (clock_year, &date_timeYEAR_POS); bcd_to_byte_string (clock_month, &date_timeMONTH_POS);bcd_to_byte_string (clock_day, &date_timeDAY_POS);bcd_to_byte_string (clock_hour, &date_timeHOUR_POS);bcd_to_byte_string (clock_minute,&date_timeMINUTE_POS);memcpy (&week_alarm_temperatureWEEK_POS, week(clock_week & 0 xF) - 1, 3); week_alarm_temperatureALARM_SIGN_POS = ALARM_STATE; bcd_to_byte_string (clock_hour_a, &week_alarm_temperatureALARM_HOUR_POS);week_alarm_temperatureALARM_SIGN_POS + 3 = :;bcd_to_byte_string (clock_minute_a, &week_alarm_temperatureALARM_MINUTE_POS); void Start_calendar(void) BYTE i = clock_c;clock_a = 0 x20;clock_b = 0 x22; void Set_calendar (void) clock_a = 0 x70; clock_b = 0 x82 | 0 x20; /bcd,24 hourvoid enable_alarm (void) clock_b = 0 x22;void disable_alarm (void) clock_b = 0 x2;void Set_default_calendar(void) Set_calendar();clock_century = 0 x21; /21 centruyclock_year = 0 x10; clock_month= 0 x08;clock_day = 0 x21;clock_hour = 0 x14;clock_minute = 0 x46;clock_second = 0 x00;clock_week = 07;clock_hour_a = clock_hour;clock_minute_a = inc_bcd_value (clock_minute);clock_second_a = 0 x00; clock_a = 0 x20;/select 32.768kvoid increase_value(BYTE cur_pos) switch (cur_pos) case 0: if ( clock_year = 0 x99) clock_century = inc_bcd_value(clock_century); clock
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!