单片机制作数字万历毕业设计方案_第1页
单片机制作数字万历毕业设计方案_第2页
单片机制作数字万历毕业设计方案_第3页
单片机制作数字万历毕业设计方案_第4页
单片机制作数字万历毕业设计方案_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子设计大赛 数字万年历 摘要 在当代繁忙的工作与生活中,时间与我们每一个人都有非常亲密的 关系,每个人都收到时间的影响,为了更好的利用我们自己的时间,我 们必须对时间有一个度量,因此产生了钟表。随着社会、科技的发展, 人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了 在观测时间的同时能够了解其他与人类密切相关的信息,比如温度、星 期、日期等,电子万年历诞生了,它集时间、日期、星期和温度于一 身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合 电子仪器仪表的发展趋势,具有广阔的市场前景。随着人们生活水平的 提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费

2、 需求也是越来越多。 该电子万年历主要采用 AT89S52 单片机作为主控核心,由 DS1302 时钟芯片提供时钟、LED动态扫描显示屏显示,AT89S52单片机具有功 耗小,片内ROM全都采用FlashROM能以3V的超低电压工作,同时也 与MCS-51系列单片机完全兼容,该芯片内部存储器为8KB ROM存储空 间,同时具有89C51的功能,且具有在线编程可擦除技术,当在对电路 进行调试时,由于程序的错误修改或程序的新增功能需要烧入程序时, 不需要对芯片进行多次插拔,所以不会对芯片造成损坏。DS1302 时钟 芯片是美国DALLAS公司推出的具有涓流电流充电功能的低功耗实时时 钟芯片,它可以

3、对年、月、日等进行计时,还有闰年补偿等功能,而且 使用寿命长,误差小,数字显示是采用的 LCD液晶显示,可以同时显示 各种需要的信息。此外,该电子万年历还具有时间校准等功能。 【关键字】 时钟电路 时钟芯片 DS1302 LCD 液晶显示 单片机 AT89S52 目录 摘 要 第一章 绪论 1 1.1 选题背景 1 1.2 系统目标 7 1.3 设计意义 7 第二章 设计要求与方案论证 9 2.1 设计要求 9 2.2 系统基本方案选择和论证 9 2.3 电路设计最终方案决定 11 第三章 系统的硬件设计与实现 12 3.1 系统硬件概述 12 3.2 主要单元电路的设计 12 第四章 系统的

4、软件实现 19 第五章 设计总结与心得体会 19 致谢 22 附录: 1 源代码 1 2 参考文献 1 3 电路原理图 1 第一章绪论 1.1选题背景 在社会迅速发展的今天,单片机的的运用已经渗透到我们生活的每 个角落,也似乎很难找到哪个领域没有单片机的足迹。智能仪表、医疗 器械,导弹的导航装置,智能监控、通讯与数据传输,工业自动化过程 的实时控制和数据处理,广泛使用的各种智能IC卡,汽车的安全保障 系统,动控制领域的机器人,数码像机、电视机、全自动洗衣机的控 制,电话机以及程控玩具、电子宠物等等,这些都离不开单片机。 能手机 图1-3数码相机 所以,单片机的学习、开发与应用将对于现代社会的发

5、展,经济 的繁荣,和提高满足人类日益增长的物质文化需求有着至关重要的作 用。也成就了一批又一智能化控制的工程师和科学家。科技越发达,智 能化的东西就越多。学习单片机是社会发展的必然需求,也是我们现代 高级技工所必须要掌握的技能。 1.1.1 单片机的简介 1)微型计算机 Single Chip Microcomputer ) 微型计算机的主要特点: CPU 集成于一个芯片中。单片机 Micro Controller Unit )是把组成微型计算机的各功能部件:CPU、 RAM、 ROM定时/计数器、中断控制器、并行和串行接口均集成在一个芯片 中。其一个芯片就构成了一个比较完整的计算机系统。 微

6、型计算机与单片机是微电子领域的两个分支。微型计算机的特点 是运算速度快、存储容量大,适合于信息管理、科学计算等领域;而单 片机的特点为体积小、价格低,适合于仪器、设备的控制,常常嵌入到 仪器、设备中。故单片机也称作微控制器 Microcontroller )。 2)单片机的生产与发展 目前世界上单片机的生产公司有上百家,如 Intel 、 Philips 、 Microchip 、 Motorola 、 Siemens、 NEC、 AMD、 Zilog 、 TI 、 Atmel 等。 但在国内广泛应用的只有 Intel 系列和 Microchip PIC 系列, 第 1 阶段19761980)

7、:单片机发展初级阶段。集成了 8 位 CPU、 RAM ROM定时器、并行口 无串行口)等部件,但性能低,寻址范围 小vw 4KB,中断系统、定时器也简单。典型机型:In tel MCS-48 系 列。 第2阶段19801983:高性能单片机阶段。此阶段的单片机普遍 带有串行口,有多级中断处理系统,多个 16 位定时 /计数器,片内 ROM RAM的容量加大,寻址范围达64KB典型机型:In tel MCS-51系 列。 第3阶段198380年代末):16位单片机和高性能8位机并行发 展阶段。此阶段In tel推出16位单片机MCS-96系列,其他公司也推出 了各种 16 位单片机。同时高性能

8、 8 位单片机的性能更为完善。 第 4 阶段90 年代):单片机在集成度、功能、速度、可靠性等方 面全面发展,如采用 Flash ROM,加入了一些特殊功能部件 AD转换 器,PWM输出,监视定时器 WDT DMA调制解调器,通信控制器,浮点 运算单元等)。 至今,单片机的性能已比较完善,且专业化的特点很强,为各种应 用提供了很大的方便。 1.1.2 单片机的应用 单片机由于体积小,价格低,功耗低、控制功能强且控制逻辑可由 软件来实现,因此可以很方便地完成由一般数字电路很难实现的控制逻 辑。所以在测控系统,智能仪表,机电一体化产品,智能接口,智能民 用产品,机器人等领域得以广泛应用。 1. 在

9、智能仪器仪表上的应用 如电压、功率、频率、湿度、温度、 流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量) 只需结合不同类型的传感器即可控制,使得仪表达到数字化。智能化、 微型化 示波器)。 2. 在工业控制中的应用 如工厂流水线的智能化管理,电梯智能化 控制、各种报警系统,与计算机联网构成二级控制系统等)多用于构成 多样的控制系统,数字采集系统。设计用于实现特定功能,从而在各种 电路中进行模块化应用,而不要求使用人员了解其内部结构,在大型电 路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、 错误率,也方便于更换。 3. 在家用电器中的应用 洗衣机、电冰箱、空调机、彩

10、电、及其他 音响视频器材,电子秤量设备等)极大的方便了我们的生活。 4. 在计算机网络和通信领域中的应用 手机,电话机、小型程控交 换机、楼宇自动通信呼叫系统、列车无线通信、集群移动通信,无线电 对讲机等)利用单片机的通讯接口可以方便的与计算机进行数据通,为 在计算机网络通讯设备间的应用提供了很好的物质条件。 5. 单片机在汽车设备领域中的应用 如汽车中的发动机控制器,基 于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死 系统,制动系统等) 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都 有着十分广泛的用途。 6多机应用 利用单片机的串行接口和并行接口,多个单片

11、机子系统可以彼此进 行通信,构成一个网络。可以构成一个集散式的控制系统,从而控制和 处理大量的控制对象和信息,且可以通过并行运算方式来提高处理速 度。 总之在单片机系统中,单片机是作为控制中枢,数字电路器件是作 为外围电路,二者是相辅相成的。 1.1.3 单片机的发展趋势 目前,为了适应各种嵌入式系统的应用需求,单片机将向着高集成 度、增强工能。提高速度、降低成本和功耗等方向发展。这组要表现在 以下几个方面。 1)处理性能的增强:单片机的处理性能取决于其内部数据总线宽 度、指令执行速度、片内存储器容量等指标。近几年发展起来的 16 位 和 32 位单片机就体现了这个发展趋势 2)增强功能:未来

12、单片机的增强功能主要在网络功能。A/D 和 D/A功能、ISP功能、DMA功能、显示器驱动等方面另外为了能有效地 保护嵌入式系统的知识产权,对单片机内部软件的加密是必要的,单片 机的内部的程序代码存储器带有加密特性是单片机的一种增强功能。 3 )高集成度:随着集成电路技术的和工艺的不断提高,单片机 技术的发展及其应用领域不断拓展提高单片机的集成度,增加片内功能 器件,减少外围器件的扩展,实现真正的“单片”系统已成为发展趋势 集成更多的I/O端口和特殊接口,直接驱动 LED VFD LCD等显示器, 带有直接中断方式键盘端口等。 近 年 来 , 单 片 机 结 合 专 用 集 成 电 路 App

13、lication Specific Integrated Circuit, ASIC ) 和 精 简 指 令 集 计 算 机 Reduced InstructionSet Computer, RISC)技术,发展为嵌入式处理器 vEmbedded Processor),适用于数据与数值分析、信号处理、智能机 器人及图像处理等高技术领域。 由于我做的小实验用的是宏晶公司的STC89C54RD单片机所以下面 我就详细介绍STC89C541过它来反映单片机的开发应用过程! 我所用STC89C54RD+一个低功耗,高性能的8位单片机片内含有 串行编程可反复擦写 1000 次的 Flash 只读程序存储

14、器器件采用高密 度、非易失性存储技术制造,兼容标准的MCS-51指令系统及80C51引 脚的结构,芯片内集成了1用 8 位中央处理器和 ISP Flash 存储单元, 功能强大的AT89C51可为许多嵌入式应用式控制性应用系统提供高性价 比的解决方案! STC89C54RD+有 以下特性: 兼容MCS-51指令系统,32个双向I/O 口,2个16位可编程定时/ 计数器、全双工 UART串行中断口线、两个外部中断源、中断唤醒省电 模式、看门狗(WDT电路、灵活的ISP字节和分页编程、4KB可反复擦 写/2.0V-3.8V3V 单片机) 工作频率:0-40MHz相当于普通8051单片机;实际使用范

15、围为 0-80MHz。 16KB片内Flash程序存储器,擦写次数10万次以上。 片上集成512RAM数据存储器。 四组通用 I/O 口,复位后为: P1、 P2、 P3、 P4 是弱上拉 /准双向 口; P0 口是开漏输出口,作为总线扩展时用,不用加上拉电阻; P0 口 作为 I/O 口用时,需要加上拉电阻。 T0定时器0 TXAL2 接外部晶振 T1 定时器 1 TXAL1 接外部晶振 除此之外,STC89C5单片机自身还有很多独特的优点: 1)加密性强,无法解密。 2)超强抗干扰。主要表现在:高抗经典,可以轻松抗御 2KV/4KV 快速脉冲干扰,宽电压、不怕电源抖动,宽温度范围, I/O

16、 口经过特殊 处理,单片机内部的电源供电系统、时钟电路、复位电路及看门狗电路 都经过特殊的处理。 3)超低功耗:掉电模式,典型电流损耗 0.1uA,空闲模式,典型 电流损耗为2mA正常工作模式,典型电流损耗 4-7毫安。 1.2 选题目的 随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越 高,精准数字计时的消费需求也是越来越多。 二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是 近代世界钟表界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳 定的机械振荡频率使钟表的走时差从分级缩小到秒级,代表性的产品就 是带有摆和摆轮游丝的机械表或钟。第二次革命是石英晶体振荡器的应 用,发

17、明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩 小到了秒级。第三次革命就是单片机数码计时技术的应用电子万年 历),使计时产品的走时日差从分级缩小到了百万分之一秒,从原有传 统指针计时的方式发展为人们日常更为熟悉的夜光数字显示式,直观明 了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功 能,他更符合消费者的生活需求,因此,电子万年历的出现带来了钟表 计时业跨越性的进步。 1.3 设计意义 我国生产的电子万年历有很多种,总体上来说以研究多功能电子万 年历为主,使万年历除了具有原来的显示时间,日期等基本功能外,还 具有闹铃,报警等功能,商家生产的电子万年历更从质量,价格,使用

18、 上考虑,不断的改进电子万年历的设计,使其更加具有市场。 本设计为软件,硬件相结合的一组设计,在软件设计过程中,应对 硬件部分有相关的了解,这样有助于对设计题目的更深了解,有助于软 件设计,基本的要了解一些主要期间的基本功能和作用。 除了采用集成化的时钟芯片外,还有采用MCU的方案,利用AT89 系列单片机微机制成万年历电路,采用软件和硬件相结合的方法,控制 液晶输出显示。其最大的特点是:硬件电路简单,安装方便易于实现, 软件设计独特,可靠。 本文介绍了基于AT89S52单片机设计的电子万年历。首先简单介绍 了单片机的发展和应用。并且论述了在本次设计中的设计方案,并在此 基础上实现了万年历的基

19、本电路设计,然后使用单片机C语言程序的设 计,程序采用模块化设计,使得逻辑关系简单明了,维护方便。 第二章 设计要求与方案论证 2.1 设计要求 2.1.1 基本功能 设计一个能够显示年、月、日、时、分、秒、星期功能的数字 万年历。采用LED或LCD显示并具备以下功能。能够任意设定年、月、 日、时、分、星期;能够任意设定报时时间;能够区分平年、闰年、大 小月份。 2.1.2 发挥部分 1)能够完成掉电保护 2)能够在夜间自动关闭 LCD 显示 3)具有温度显示功能和温度报警功能。 2.2 系统基本方案选择和论证 2.2.1 单片机芯片的选择和方案论证 采用89C51芯片作为硬件核心,内部具有

20、4KB ROM存储空间,能于 3V的超低电压工作,而且与 MCS-51系列单片机完全兼容,但是运用于 电路设计中时由于不具备 ISP 在线编程技术,当在对电路进行调试时, 由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多 次查吧会对芯片造成一定的损坏。 采用AT89S52片内ROW都采用FlashROM能以3V的超低电压 工作,同时也与 MCS-51 系列单片机完全兼容,该芯片内部存储器为 8KB ROM存储空间,同时具有89C51的功能,且具有在线编程可擦除技 术,当在对电路进行调试时,由于程序的错误修改或程序的新增功能需 要烧入程序时,不需要对芯片进行多次插拔,所以不会对芯片

21、造成损 坏。 综上所述,所以采用AT89S52作为主控系统。 2.2.2 显示模块选择方案和论证 方案一:采用LED数码管动态扫描,LED数码管价格适中,对于显 示数字最合适,而且采用动态扫描法与单片机相连接时,占用的单片机 口线少,但所需要的数码管数量太多,焊接困难极易出错,所以不采用 LED数码管作为显示。 方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发 光二极管组成,对于显示文字比较合适,如果用在显示数字显得太浪 费,且价格也相对较高,所以也不用此种作为显示。 方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显 示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需

22、要的接口 线多,本设计所需显示较多且需要文字,所以在本次设计中采用 LCD液 晶显示屏。 2.2.3 时钟芯片的选择方案和论证 方案一:直接采用单片机定时计数器提供秒信号,使用程序实现 年、月、日、星期、时、分、秒技术,采用此种方案虽然减小芯片的使 用,节约成本,但是,实现的时间误差较大,所以不采用此方案。 方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性 能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的 年进行计数,而且精度高,位的 RAM乍为数据暂存区,工作电压 2.5V- 5.5V 范围内, 2.5V 时耗电小于 300Ma。 2.2.4 温度传感器的选

23、择方案论证 方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电 阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两 个电阻变化的分压值,并进行 A/D 转换,此设计方案需要 A/D 转换电 路,增加了硬件成本而且热敏电阻的感温特性曲线并不是严格性的,会 产生较大的测量误差。 方案二:采用数字式温度传感器 DS18B20此类传感器为数字式传 感器,而且仅需要一条数据线进行数据传输,易于与单片机连接,可以 去除 A/D 模块,降低了硬件成本,简化系统电路。另外,数字式温度传 感器还具有测量精度高,测量范围广等优点 2.3 电路设计最终方案决定 综上各方案所述,对此次设计的方案选

24、定 : 采用 AT89S52 作为主控 系统;DS1302提供时钟;数字式温度传感器;LCD液晶显示屏作为显 示。 第三章 系统的硬件设计与实现 3.1 系统硬件概述 本电路是由AT89S52单片机作为控制核心,具有在线编程功 能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种 高性能、低功耗、带RAM勺实时时钟电路,它可以对年、月、日、时、 分、秒等进行计时,具有闰年补偿功能,工作电压为 2.5V-5.5V 。采用 三线接口与CPUS行同步通信,并可采用突发方式一次传送多个字节的 时钟信号或RAM数据。DS1302内部有一个用于临时存放数据的 RAM寄 存器。可产生年、月、

25、日、时、分、秒等,具有使用寿命长,精度高和 低功耗等特点,同时具有掉电自动保存功能;温度的采集由 DS18B20勾 成,显示部分为LCD液晶显示屏,能够实现字符与数字同时显示的功 3.2主要单元电路的设计 3.2.1控制系统的设计 使用AT89S52作为单片机的主控芯片,AT89S52单片机为40引脚 双列直插芯片,有四个I/O 口 P0,P1,P2,P3,每一条I/O线都能独立地 作输出或输入。 单片机的最小系统如下图所示,18引脚和19引脚接时钟电路, XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的 输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相 放

26、大器的输出,第9引脚为复位输入端,接上电容,电阻及开关后构成 3.2.2时钟电路模块的设计 图3-2示出DS1302的引脚排列,其中VCC1为后备电源,VCC2为 主电源,在主电源关闭的情况下,也能保持时钟的连续运行,DS1302 由VCC1或VCC2两者中的较大者供电,当 VCC2大于VCC1+0.2V时, VCC2合DS1302供电,当VCC2、于VCC1寸候VCC1供电。X1和X2是振 荡源,外接32.768KHZ晶振,RST是复位片选线,通过把 RST俞入驱动 置咼电平来启动所有的数据传送。RST输入有两种功能:首先,RST接 通控制逻辑,允许地址/命令序列送入移位寄存器;其次, RS

27、T提供终 止单字节或多字节数据的传送手段,当 RST为高电平时,所有的数据传 送被初始化,允许对 DS1302进行操作,如果在传送过程中 RST置为低 电平,则会终止此次数据传送,I/O引脚变为高阻态,上电运行时,在 VCC大于等于2.5V之前,RST必须保持低电平,中有在SCLK为低电平 时,才能将RST置为高电平,I/O为串行数据输入端,SCLK始终是输入 端。 时钟电路芯片DS1302引脚图如下图所示: 图3-2 DS1302的引脚图 3.2.3温度采集模块设计 如图3-3所示,采用数字式温度传感器DS18B20它是数字式温度 传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一

28、条 数据线进行数据传输,使用I/O 口与DS18B20连接加一上拉电阻,VCC 接电源,VSS接地。芯片管脚图如下图所示: 图3-3 DS18B20温度采集 3.2.4电路原理及说明 1 )时钟芯片DS1302的工作原理 DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下 图3-4所示,图3-5为DS1302的控制字,此控制字的位 7必须置1, 若为0则不能把对DS1302进行读写数据,对于位6,若对程序进行读/ 写时RAM=1对时间进行读/写时,CK=0位1至位5指操作单元的地 址。位0是读/写操作位,进行

29、读操作时,该位为 1;该位为0则表示 进行的是写操作,控制字节总是从最低开始输入/输出的。“ WP为1 时,写保护位防止对任一寄存器的写操作。 2)DS1302的控制字节 DS1302的控制字的高有效位 位7)必须是逻辑,如果它为 0,则 不能把数据写入 DS1302 中,位 6 如果是 0,则表示存取日历时钟数 据,为1表示存取RAM数据;位5至位1指操作单元的地址;最低有效 位如果为 0 表示要进行写操作,为 1 表示进行读操作,控制字节总是从 最低位开始输出。 数据输入输出1/0 ):在控制指令字输入后的下一个SCLK时钟的 上升沿时,数据被写入 DS1302数据输入从低位即位 0开始。

30、同样, 在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的 数据,读出数据时从低位 0到高位 7.如下图所示: DS1302读/写时序如下图所示: 图 3-4 DS1302 读/ 写时序图 3.2.5 液晶显示模块概述 本次设计采用由香港静电公司的“ MDLS”- 字符型液晶显示模块, 该系列是目前世界上品种最全的字符型 LCM系列,它具有各种规格,广 泛应用于智能仪表、通讯、办公自动化及军工等领域。字符型液晶显示 模块目前在国际上已经规范化,无论显示屏的规格如何变化,其电特性 和接口形式都是统一的。因此只要设计出一种型号的接口电路,在指令 设置上稍加改动即可使用各种规格的

31、字符型液晶显示模块。 在这次设计采用的MDLS系列接口特性如下表所示 引脚号 符号 功能 1 Vss 电源地 2 Vdd +5V逻辑电源 3 VO 液晶駆动电源 斗 RS 输入 寄存器选择1;数据;0;指令 5 RW 输入 请、鹄操柞选择1;读;0;弓 6 E 输入 便能花号(述LS40466未用,符号NC) 7 DBO 三态 数据总线(LSB) S DB1 独据总线 9 DB2 数据总绒 10 DBS 数据总线 11 DB4 三态 数据总线 12 DBS 三畚 数摇总线 B DB6 三态 :数摇总线 14 DB7 三态 数据总线(MSB) *15 El 输人 MDUS4峽5上两行悝能信号 *

32、16 E2 输人 表3-1 MDLS系列接口特性表 通过对MDLS勺时序的了解后可知,在对 DS1302卖或写操作的过程 中必需要保持RST为高电平,且在SCLK为低电平时置位RST读写操 作完毕后需要对RST复位,并且要置位SCLK避免时序错乱。另外由动 作时序图还可看出在读写数据前都要写指令,且读写的数据是紧紧的跟 在指令的后面,即在此过程中,时钟信号是连续发送的,其占空比是相 同的,如果写完指令后将RST复位,再来读写数据是行不同的,因其占 空比发生了变化,读写的数据不是紧紧的跟在指令的后面的。从 DS1302中读出的数据均为BCD码,要使其在LCD上显示出来需要将其 转换成ASCII码

33、。在调时模式下,则需要将其转换为十进制数。相应的 要将一个数写入DS1302中则需要先将数据转换为BCD码。 在编程对芯片的了解后对其有以下总结: 1 )引脚的认识 1: VSS电源引脚 接+5V直流电源 2: VDD 接地引脚 3 : VEE 背光引脚 调节 lcd 亮度 4 : RS 数据/ 状态引脚 1 为数据; 0 为状态 5: RW 读/ 写引脚1 为读; 0 为写 6 :E 使能引脚 高电平有效 可对其读写数据) 7 14: D0 D7数据线 2 )控制字 0 x02 :光标、画面,及AC回首地址 0 x05 :画面平移 平移速度相当快) 0 x06 :AC自动加1,且画面不动 0

34、 x0c :显示开即可显示数据 0 x08 :显示关不可显示数据及光标,但屏亮 0 x0e :显示开且光标显示 0 x09 :显示开光标显示且闪烁 0 x18:画面右移一位*注此指令不可用,会使屏关) 0 x1c:画面左移一位 0 x10 :光标左移一位 0 x14 :光标右移一位 0 x38: lcd 双行显示 0 x30: lcd 单行显示 第一行显示) 第四章系统的软件设计 软件系统在本次设计中尤其重要,基本功能大部分是由软件完成 的,发挥功能的关键控制部分同样需要软件的密切配合才能顺利实现。 鉴于软件设计的复杂性和规模性,我们采用KEIL编译器支持的C语言 编程,放弃了效率高但可读性不

35、强的汇编语言。 整个软件系统采用规模化的程序设计方法,共分为时间设定、闹铃 设定、和温度检测系统。软件系统的主要特点是整个过程完全在键盘的 控制之下,实现了完全的友好的人机交互功能。主程序通过判断键盘的 输入情况调用不同的子程序。子程序的功能实现也是在键盘的配合下完 成的。 系统的程序流程图如下所示: 循环扫描 图 4-1 系统程序流程图 第五章 设计总结与心得体会 本系统以AT89S52为核心部件,使用串行时钟芯片 DS1302实现 时间和闹钟的功能设置。通过键盘和液晶显示屏可方便地校对时钟和设 置闹钟时间,本系统基本完成了实用电子钟的功能,尽量做到了硬件电 路简单稳定,减少电磁干扰和其他环

36、境干扰。在该系统设计,调试完成 之后,对最后的成功进行分析,同时结合在调试过程中出现的错误进行 综合分析,总结在实际系统设计和调试过程中的宝贵经验。 在系统硬件设计之前,要结合当前系统的发展趋势和现状对系统功 能进行定位,使系统在实际应用中具有竞争力。该系统最大的特点就是 界面友好,走时准确,和现在使用 LED显示数据的万年历相比,体积更 小,可以作为轿车车载显示装置,系统采用液晶显示器,可以使系统应 用到更加现代化的地方,使系统采用模块化程序设计犯法,同时保留了 很多的微控制器I/O 口,扩展十分方便,以往的采用 LED显示数据的万 年历要想实现的功能扩展,除需要对系统程序进行修改,还必须增

37、加或 减少LED数码管,同时要对LED图片界面进行更换,硬件改动较大,该 系统的显示部分除可以显示数据外,还可以显示图片,所以说,其界面 改动非常灵活,仅仅改动程序就能实现界面的修改,用户还可以选择自 己喜欢的界面,这是以LED作为显示装置的数字万年历所不能实现的。 系统具有温度检测功能,可以作为工业温度检测装置,同时可提供 温度报警,系统的按键输入功能,可以读取决策,我们可以通过按键发 送指令,控制工业现场机器的动作,实现远程控制。 可见,该系统本身不仅具有很大的灵活性,友好的界面,方便的可 扩展性,同时,在其基础上的系统市场需求也很客观,工业控制的很多 场合对时间要求比较严格,在实际系统中

38、,系统各装置按照预定的时间 动作,本系统可以很好的满足这些系统的要求。 在该系统进行软件设计的时候,采用模块化设计方法,除了便于升 级外,在调试过程中,模块化的程序设计将使系统更容易调试,我们在 调试的过程中,可以分块调试,最后总组装,如果不采用模块化设计方 法,将很难找出调试中的错误,无论是在系统硬件焊接还是在软件编程 时,都要细心,比如在开始的时候,时钟芯片主电源和别用电源焊接颠 倒,不能写入数据。这样很小的错误,却很大影响系统的性能,甚至导 致系统根本无法工作。 在本次单片机控制课程设计过程当中,指导老师张风涛和其他老师 以及同学们都给予了很大的帮助支持,张老师严谨的治学态度和务实的 求

39、知精神给我留下了很深的印象,他们鼓励我孜孜不倦,锐意进取,特 别是在困难的时候,他有意识地培养我独立思考和解决问题的能力。张 老师的严格要求,令我以后的工作和生活当中受益匪浅。在此,对他们 所给予的指导和帮助表示最衷心的感谢。 附录 源程序代码: #include #define uchar unsigned char #define uint unsigned int sbit rs=P2A4 。/以下三个是LCD1602的位 sbit rw=P2A5 。 sbit E=P2A6 。 sbit sclk=P3A6 。/ 时钟芯片 DS1302位 sbit data_io=P3A4 。 sbi

40、t rst=P3A5 。 sbit DQ=P1A3。 /ds18b20 与单片机连接口 sbit s7=P0A7 。 / 四个按键 sbit s0=P3A0 。 sbit s1=P3A1 。 sbit s2=P3A2 。 sbit s3=P3A3 。 sbit buzzer=P1A2 。 / 蜂鸣器 void write_com(unsigned char com 。/ 写指令到 lcd void write_dat(unsigned char dat / 写数据到 lcd uchar code table1= 20 / / 。 uchar code table2= : : 。 uchar c

41、ode weektable=Mon TuesWeb ThurFri Sat Sun unsigned char temp= 。 / 温度显示 uint tvalue。 / 温度值 uchar tflag 。 / 温度正负标志 uchar code alarmtable=Clock 23:59:55 。 uchar code temptable= TH: 90 TL: 10 。 uchar shi,fen,miao,month,day,week,year,qbyear=20 uchar Nshi=23,Nfen=59,Nmiao=55,NTH=90,NTL=10 。 uchar s0num,s3

42、num,flag,flaga,biaozhi 。 void scan_key( 。/ 键盘扫描函数 void naozhong( 。/ 键盘设置闹钟和温度上下限 void didi( 。 void shezhinaozhong( 。 void delay( 。 void ds1820rst( 。 void delay_ms(uint ms uint i,j 。 for (i=ms 。 i0。 i- for(j=124。 j0 。 j- 。 void delay_1s( /延迟大概 1suint a,b 。 a=20 。 b=5000。 while(a a-。 while(b b-。 往DS13

43、02写数据 void write_ds1302 (uchar addr ,uchar shu/ uchar temp,t 。 rst=0 。 sclk=0 。 rst=1 。 temp=addr 。 for(t=0 。 t if(temp&0 x01=1 data_io=1 。 else data_io=0 。 sclk=1 。 delay_ms(1 。 sclk=0 。 temp=temp1。 temp=shu 。 for(t=0 。 t if(temp&0 x01=1 data_io=1 。 else data_io=0 。 sclk=1 。 delay_ms(1 。 sclk=0 。 t

44、emp=temp1。 rst=0 。 uchar read_ds1302(uchar addr从 DS1302读取数据 uchar temp ,t 。 rst =0 。 sclk=0 。 rst=1 。 temp=addr 。 for(t=0 。 t if (temp&0 x01 data_io=1 。 else data_io=0 。 sclk=1 。 sclk=0 。 temp=temp1。 temp=0 。 for(t=0 。 t if(data_io=1 temp=temp|0 x80 。 else temp=temp&0 x7f 。 sclk=1 。 sclk=0 temp=temp

45、1 。 return temp 。 void write_com (uchar com/LCD1602 P0=com 。 rs=0 。 rw=0 。 E=1 。 delay_ms(1 。 E=0 。 void write_date (uchar date/LCD1602 P0=date 。 rs=1 。 rw=0 。 E=0 。 delay_ms(1 。 E=1 。 的写命令 的写数据 delay_ms(1 。 E=0 void init(/LCD1602 初始化 uchar i 。 EA=1 。 / 首先开启总中断 EX1=1 。 / 开启外部中断 1 IT1=1 。 write_com(0

46、 x38 。 delay_ms(2 。 write_com(0 x0c 。 delay_ms(2 。 write_com(0 x06 。 delay_ms(2 。 write_com(0 x80 。 delay_ms(1 。 for(i=0 o i 20 / / write_date (table1i 。/ table1= II 。 write_com(0 xc0 。 delay_ms(1 。 for(i=0 o i write_date (table2i 。 / table2= write_com(0 x80+0 x10 。/ TH: TL: delay_ms(1 。 for(i=0 。 i

47、 write_date (temptablei。 write_com(0 xc0+0 x10 。 / 闹钟的时间 delay_ms(16 。 for(i=0 。 i write_date (alarmtablei。 void write_sfm_10(uchar add,uchar date/在 LCD1602 写小时、 分、秒 uchar ten,ge 。 ten=date/10 。 ge=date%10 。 write_com(0 xc0+add 。 write_date(0 x30+ten 。 write_date(0 x30+ge 。 void write_nyr_10(uchar a

48、dd,uchar date/ uchar ten,ge 。 ten=date/10 。 ge=date%10 。 write_com(0 x80+add 。 write_date(0 x30+ten 。 write_date(0 x30+ge 。 void write_week(uchar add,uchar week/ uchar ge,i 。 ge=week&0 x0f 。 write_com(0 x80+add 。 写年、月、日 写星期 if(ge=1 for(i=0。 i write_date(weektablei if(ge=2 for(i=4。 i write_date(weekt

49、ablei if(ge=3 for(i=8。 i write_date(weektablei if(ge=4 for(i=12。 i write_date(weektablei if(ge=5 for(i=16。 i write_date(weektablei if(ge=6 for(i=20。i write_date(weektablei if(ge=7 for(i=24。 i write_date(weektablei void delay(void / uchar i=13 。 while(i i- 。 /* */ void scan_key( 空 5 个指令 扫描键盘部分的程序 / 扫

50、描键盘 关闭闹钟 s7=0 。 if(flaga=1 / if(s1=0 delay_ms(10 if(s1=0 while(!s1 。 flaga=0 。 if(s2=0 delay_ms(10 if(s2=0 while(!s2 flaga=0 。 if(s0=0 delay_ms(10 。 if(s0=0 buzzer=0 。 while(!s0 。 s0num+ 。 buzzer=1 。 if(s0num=1 flag=1 。 write_com(0 xc0+8 。 write_com(0 x0f 。 shi=read_ds1302(0 x85 。 fen=read_ds1302(0

51、x83 。 miao=read_ds1302(0 x81 。 day=read_ds1302(0 x87 。 month=read_ds1302(0 x89 。 year=read_ds1302(0 x8d 。 week=read_ds1302(0 x8b 。 miao=(miao/16*10+miao%16 。 fen=(fen/16*10+fen%16 shi=(shi/16*10+shi%16 。 day=(day/16*10+day%16 。 month=(month/16*10+month%16 。 year=(year/16*10+year%16 if(s0num=2 write_

52、com(0 xc0+5 。 if(s0num=3 write_com(0 xc0+2 。 if(s0num=4 write_com(0 x80+12 。 if(s0num=5 write_com(0 x80+10 。 if(s0num=6 write_com(0 x80+7 。 if(s0num=7 write_com(0 x80+4 。 if(s0num=8 s0num=0 。 write_com(0 x0c 。 miao=(miao/10*16+miao%10 。 /10 进制转 16 进制 fen=(fen/10*16+fen%10 。 shi=(shi/10*16+shi%10 。 d

53、ay=(day/10*16+day%10 。 month=(month/10*16+month%10 。 year=(year/10*16+year%10 。 write_ds1302(0 x80,miao 。 write_ds1302(0 x82,fen 。 write_ds1302(0 x84,shi 。 write_ds1302(0 x8a,week 。 write_ds1302(0 x86,day 。 write_ds1302(0 x88,month 。 write_ds1302(0 x8c,year 。 flag=0 。 / 减键 if(s0num!=0 if(s2=0 delay_

54、ms(10 。 buzzer=0 。 if(s2=0 while(!s2 。 buzzer=1 。 if(s0num=1 if(miao=0 miao=60 。 miao-。 write_sfm_10(7,miao write_com(0 xc0+8 if(s0num=2 if(fen=0 fen=60 。 fen-。 write_sfm_10(4,fen write_com(0 xc0+5 。 if(s0num=3 if(shi=0 shi=24 。 shi-。 write_sfm_10(1,shi write_com(0 xc0+2 。 if(s0num=4 week-。 if(week=

55、0 week=7 write_week(12,week 。 write_com(0 x80+12 。 if(s0num=5 day-。 if(year%4=0 & year%100!=0 | year%400=0 if(month=2 if(day=0 day=29 。 if(year%4!=0 | year%100=0 & year%400!=0 if(month=2 if(day=0 day=28 month=7 | if(month=1 | month=3 | month=5 | month=8 | month=10 | month=12 if(day=0 day=31 。 if(mon

56、th=4 | month=6 | month=9 | month=11 if(day=0 day=30 。 write_nyr_10(9,day write_com(0 x80+10 if(s0num=6 month- if(month=0 month=12 。 write_nyr_10(6,month write_com(0 x80+7 。 if(s0num=7 if(year=0 year=100 。 qbyear-。 write_nyr_10(1,qbyear year-。 write_nyr_10(3,year write_com(0 x80+4 。 if(s0num!=0 / 加键

57、if(s1=0 delay_ms(10 。 buzzer=0 。 if(s1=0 while(!s1 。 buzzer=1 。 if(s0num=1 miao+ 。 if(miao=60 miao=0 。 write_sfm_10(7,miao 。 write_com(0 xc0+8 。 if(s0num=2 fen+ 。 if(fen=60 fen=0 。 write_sfm_10(4,fen 。 write_com(0 xc0+5 。 if(s0num=3 shi+ 。 if(shi=24 shi=0 。 write_sfm_10(1,shi write_com(0 xc0+2 。 if(

58、s0num=4 if(week=7 week=0 。 week+ 。 write_week(12,week 。 write_com(0 x80+12 。 if(s0num=5 if(year%4=0 & year%100!=0 | year%400=0 if(month=2 if(day=29 day=0 。 if(year%4!=0 | year%100=0 & year%400!=0 if(month=2 if(day=28 day=0 。 month=7 | if(month=1 | month=3 | month=5 | month=8 | month=10 | month=12 if

59、(day=31 day=0 。 if(month=4 | month=6 | month=9 | month=11 if(day=30 day=0 。 day+ 。 write_nyr_10(9,day write_com(0 x80+10 。 if(s0num=6 if(month=12 month=0 。 month+ 。 write_nyr_10(6,month write_com(0 x80+7 。 if(s0num=7 if(year=99 year=-1 。 qbyear+ 。 write_nyr_10(1,qbyear year+ 。 write_nyr_10(3,year wr

60、ite_com(0 x80+4 void write_sfmnaozhong(uchar add,uchar date / 时间 uchar ten,ge 。 ten=date/10 。 ge=date%10 。 write_com(0 xc0+0 x10+add 。 write_date(0 x30+ten 。 write_date(0 x30+ge 。 void write_tempnaozhong(uchar add,uchar date / 下限温度 显示闹钟 显示 上限和 uchar wten,wge 。 wten=date/10 。 wge=date%10。 write_com(0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论