基于单片机AT89C52的电子万年历的设计—毕业设计

上传人:沈*** 文档编号:40731876 上传时间:2021-11-17 格式:DOC 页数:57 大小:3.23MB
收藏 版权申诉 举报 下载
基于单片机AT89C52的电子万年历的设计—毕业设计_第1页
第1页 / 共57页
基于单片机AT89C52的电子万年历的设计—毕业设计_第2页
第2页 / 共57页
基于单片机AT89C52的电子万年历的设计—毕业设计_第3页
第3页 / 共57页
资源描述:

《基于单片机AT89C52的电子万年历的设计—毕业设计》由会员分享,可在线阅读,更多相关《基于单片机AT89C52的电子万年历的设计—毕业设计(57页珍藏版)》请在装配图网上搜索。

1、 本本科科毕毕业业设设 计计(论论 文文)题目题目电子万年历的设计电子万年历的设计学生姓名学生姓名学学号号教学院系教学院系电气信息学院电气信息学院专业年级专业年级电气信息学院电气信息学院 20082008 级级指导教师指导教师职职称称单单位位西南石油大学西南石油大学辅导教师辅导教师职职 称称单单位位完成日期完成日期2012年年6月月6日日Southwest Petroleum University Graduation ThesisThe design of electronic calendarGrade:Grade: 2008Name:Name: Liu CongSpeciality:Sp

2、eciality: Electronic and Information EngineeringInstructor:Instructor: Qiu HongbingSchoolSchool ofof ElectricalElectrical andand InformationInformation 2012-62012-6电子万年历的设计3摘摘 要要在当代繁忙的工作与生活中,时间与每一个人都有非常密切的关系,每个人都受到时间的影响,电子万年历的出现给人们的工作与生活带来了福音。电子万年历是实现对阳历的日期和时间以及阴历的日期显示的计时装置。随着科技的发展,电子万年历也有了巨大的进步和发展,

3、目前已经广泛应用于家庭、车站、码头、办公室以及银行等各种场所。已经成为人们日常生活和工作中必不可少的电子产品,具有广阔的发展空间和市场前景。本文介绍了基于单片机 AT89C52 的电子万年历的设计,该设计结合时钟芯片DS1302 以及显示器件 LCD12864,能够直观的显示阳历年、月、日、星期、时、分、秒,以及通过程序算法转换阳历的日期,得到阴历的年、月、日。在显示阴历时间时,能标明是否为闰年、闰月,同时完成对它们的自动校正,全部信息均受单片机AT89C52 的控制,并由液晶显示器件 LCD12864 显示。人机口由 4 个按键来实现,通过这四个按键可对时间、日期进行人为的自由调整。本设计采

4、用单片机为核心器件,软硬件结合,使硬件部分大为简化,提高了系统稳定性,设计出的电子万年历可以显示阳历的日期和时间以及阴历的日期。其软硬件设计简单,时间记录准确,有较强的实用性。关键关键词词:万年历;AT89C52;DS1302;LCD12864 AbstractAbstractIn contemporary busy work and life, time and every one has a very close relationship, everyone is the influence of the time, the emergence of electronic calendar

5、 to peoples work and life bring the Gospel. Electronic calendar is the realization of the solar calendar date and time and date of the display of the timing device. With the development of science and technology, electronic calendar also had great progress and development, now has been used widely i

6、n the family, station, wharf, office and of the bank and other various places. Has become people daily life and work necessary in electronic products, have wide development space and the market prospect.This paper introduces the AT89C52 single chip microcomputer based on the electronic calendar desi

7、gn, the design with the clock chip DS1302 and display devices LCD12864, can intuitive shows YangLiNian, month, day, week, when, minutes and seconds, and through the process of converting solar calendar date algorithm, get the lunar calendar year, month, day. In the display lunar calendar time, can i

8、ndicate whether for a leap year, intercalary moon, finish at the same time to their automatic adjustment, all information by AT89C52 single chip microcomputer control of both, and the liquid crystal display device LCD12864 display. The man-machine mouth by four pressing buttons, through the four but

9、tons on time, date of people free adjustment.This design uses the MCU as the core, the hardware and software combination to make hardware part greatly simplified and improve the stability of the system, design of electronic calendar can display the solar calendar date and time, and the date of the l

10、unar calendar. Its software and hardware design simple, time to record and accurate, with strong practicability.KeywordsKeywords: electronic calendar;AT89C52;DS1302;LCD12864目目 录录1绪论.11.1 本设计的研究背景和研究意义 .11.2 设计任务及任务分析 .12. 本设计总体设计方案.22.1 方案论证与比较 .22.1.1 方案一:基于 AT89C52 的电子万年历的设计 .22.1.2 方案二:基于 PLD 的电子

11、万年历的设计 .22.1.3 方案三:基于凌阳单片机的电子万年历的设计 .32.2 本设计方案选择 .43硬件电路的设计与计算.53.1 控制电路的设计与计算 .53.1.1 电路选择 .53.1.2 元器件的选型及参数计算 .53.2 时钟电路的设计与计算 .83.2.1 电路选择.83.2.2 元器件的选型及参数计算 .93.3 显示电路的设计与计算 .113.3.1 电路选择.113.3.2 元器件的选型及参数计算 .113.4 硬件总电路图 .134软件设计及编程.144.1 软件设计功能图 .144.2 软件设计流程图 .144.3 阳历程序设计及功能实现 .154.4 时间调整程序

12、设计及功能实现 .154.5 阴历程序设计及功能实现 .175系统调试及分析.195.1 硬件电路调试及结果分析 .195.1.1 单片机最小系统电路的测试结果及其分析 .195.1.2 DS1302 时钟电路的测试结果及其分析.195.1.3 LCD12864 显示电路的测试结果及其分析.205.2 软件调试及功能分析 .205.2.1 阳历显示程序功能实现及其分析 .205.2.2 时间调整程序功能实现及其分析.215.2.3 阴历显示程序功能实现及其分析 .216结论与展望.226.1 结论 .22电子万年历的设计76.2 展望 .22谢 辞.23参考文献.24附录一:系统整体电路图.2

13、5附录二:PCB 电路图 .26附录三:实物图.27附录四:系统完整程序.28电子万年历的设计11 1绪论绪论1.11.1 本设计的研究背景和研究意义本设计的研究背景和研究意义随着电子技术的迅速发展,时间的流逝,从观察太阳、摆钟到现在的电子钟,人类在不断的研究、不断的创新。电子万年历是实现对年、月、日、时、分、秒、农历等显示的计时装置,广泛应用与家庭、车站、码头、办公室、银行等各种场所,成为人们日常生活中的必需品。数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生活带来了极大的方便,在此基础上完成的电子万年历精度高,功能易于扩展,可扩展为诸如整

14、点报时、定时自动报警、按时自动打铃、自动启闭路灯等等具有多种功能的产品。电子万年历的出现给人们的生活与工作带来了诸多的方便,具有读取方便、显示直观,功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。1.21.2 设计任务设计任务及任务分析及任务分析设计任务:设计一个电子万年历,要求能显示阳历年、月、日、星期、时、分、秒和阴历年、月、日,在显示农历时间时,能标明是否为闰年。主控芯片使用AT89C52 单片,时钟芯片使用美国 DALlAS 公司推出的一种高性能、低功耗、带 RAM的实时时钟 DS1302。任务分析:实现对阳历时间、日期及阴历日期的显示,需要单片机的控制,并通过显示模块进行

15、显示。能对时间、日期进行调节,就需要按键模块。西南石油大学本科毕业设计(论文)22.2. 本设计总体设计方案本设计总体设计方案2.12.1 方案论证与比较方案论证与比较2.1.12.1.1 方案一:基于方案一:基于 AT89C52AT89C52 的电子万年历的设计的电子万年历的设计 采用 AT89C52 芯片作为硬件核心,采用 Flash ROM,内部具有 4KB ROM 存储空间,能于 3V 的超低压工作,而且与 MCS-51 系列单片机完全兼容,编程也简单,而且价格便宜,使整体的设计成本降低。采用 LCD12864 液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰

16、可见,显示美观,方便查看。采用 DS1302 时钟芯片实现时钟,DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高, RAM做为数据暂存区,工作电压 2.5V5.5V 范围内,2.5V 时耗电小于 300nA。本方案的系统框图如图 2.1 所示。图 2.1 方案一系统框图2.1.22.1.2 方案二:基于方案二:基于 PLDPLD 的电子万年历的设计的电子万年历的设计采用 ALTERA 公司的 FLEX10K 系列 PLD 器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接比较方便。采用点阵式数码管

17、显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合。采用 DS1302 时钟芯片实现时钟,DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高, RAM主控模块(AT89C52)时钟电路(DS1302)键扫描电路LCD12864显示电路电子万年历的设计3做为数据暂存区,工作电压 2.5V5.5V 范围内,2.5V 时耗电小于 300nA。本方案的系统框图如图 2.2 所示。图 2.2 方案二系统框图2.1.32.1.3 方案三:基于凌阳单片机的电子万年历的设计方案三:基于凌阳单片机的电子万年历的设计凌阳 16 位单片

18、机有丰富的中断源和时基。它的准确度相当高,并且 C 语言和汇编兼容的编程环境也很方便来实现一些递归调用。I/O 口功能也比较强大,方便使用。用凌阳 16 位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善,成本也相对低一些。采用 LED 数码管动态扫描,LED 数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是实现的时间误差较大。本方案的系统框图如图 2.3 所

19、示。主控模块(PLD)时钟电路(DS1302)键扫描电路点阵数码管主控模块(凌阳)键扫描电路LED数码管西南石油大学本科毕业设计(论文)4图 2.3 方案三系统框图2.22.2 本设计方案本设计方案选择选择在方案二中,但是考虑到本设计的特点,PLD 在功能扩展上比较受局限,而且占用的资源也相对多一些。显示模块使用的点阵式数码管的价格相对较高。在方案三中,凌阳单片机在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高。显示模块使用的数码管编程繁琐,操作比液晶显示复杂,也不便于直观的查看。综上各所述,本次设计将选择方案一:基于 AT89C52 的电子万年历的设计。采用AT

20、89C52 作为控制系统; DS1302 提供时钟;LCD12864 作为显示。电子万年历的设计53 3硬件电路的设计与计算硬件电路的设计与计算3.13.1 控制电路的设计与计算控制电路的设计与计算3.1.13.1.1 电路选择电路选择最小控制系统由单片机、晶振电路和复位电路组成。晶体振荡器的两端分别接两个电容,来对晶振信号退耦。单片机复位采用的上电复位的方式。如图 3.1 所示为控制系统电路图。图 3.1 控制系统电路图3.1.23.1.2 元器件的选型及参数计算元器件的选型及参数计算1 1、单片机、单片机 AT89C52AT89C52 AT89C52 是一种低功耗、高性能 CMOS8 位微

21、控制器,具有 8K 在系统可编程Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU和在系统可编程 Flash,使得 AT89C52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89C52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32西南石油大学本科毕业设计(论文)6位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C52 可降至

22、0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89C52 的引脚图如图 3.2 所示。图 3.2 AT89C52 引脚图P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0 具有内部上拉电阻。 在 flash 编程

23、时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。如图 3.3 所示为 P0 口的上拉电阻电路连接图。图 3.3 P0 口上拉电阻电子万年历的设计7P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个 TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。 此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和时器/计数器 2 的触发输入(P1.1/T2EX)

24、,具体如下表所示。 在 flash 编程和校验时,P1 口接收低 8 位地址字节。 RST复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个 ALE 脉冲。对 FLASH 存储器编程期间,该引脚还用于输入编程脉冲(PROG) 。PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C5

25、2 由外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN 有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次 PSEN 信号。EA/VPP外部访问允许,欲使 CPU 仅访问外部程序存储器,EA 端必须保持低电平。需注意的是:如果加密位 LB1 被编程,复位时内部会锁存 EA 端状态。如 EA 端为高电平(接 Vcc 端) ,CPU 则执行内部程序存储器的指令。2 2、单片机晶振电路、单片机晶振电路晶振电路采用的是频率为 12MHz 的晶体振荡器。在晶振的两端接两个电容值为30pF 电容的目的是为晶振输出信号滤波。如图 3.4 所示为晶振电路连接图。图 3.4 单片机晶振

26、电路西南石油大学本科毕业设计(论文)83 3、单片机复位电路、单片机复位电路复位电路采用的复位方式为上电复位。复位电路中使用的电容 C2 的值为 30pF,电阻 R11 的值为 10K。上电瞬间,电容充电电流最大,电容相当于短路, RST 端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容相当于开路, RST 端为低电平,程序正常运行。 如图 3.5 所示为复位电路图。图 3.5 单片机复位电路3.23.2 时钟电路时钟电路的设计与计算的设计与计算3.2.13.2.1 电路选择电路选择时钟电路的晶体振荡器与单片机的晶振一样,两端分别接两个电容,来对晶振信号退耦。如图 3

27、.6 所示为时钟电路连接图。图 3.6 时钟芯片电路图电子万年历的设计93.2.23.2.2 元器件的选型及参数计算元器件的选型及参数计算1 1、时钟芯片、时钟芯片 DS1302DS1302DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个 318 的用于临时性存放数据的 RAM 寄存器。DS1302 是 DS1202 的升级产品,与 D

28、S1202 兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。如图 3.7 所示为 DS1302 引脚图,其中 Vcc1 为后备电源,Vcc2 为主电源。X1和 X2 是振荡源,外接 32.768KHz 晶振。图 3.7 DS1302 引脚图控制字节的最高有效位(位 7)必须是逻辑 1,如果它为 0,则不能把数据写入DS1302 中,位 6 如果为 0,则表示存取日历时钟数据,为 1 表示存取 RAM 数据;位 5至位 1 指示操作单元的地址;最低有效位(位 0)如为 0 表示要进行写操作,为 1 表示进行读操作,控制字节总是从最低位开始输出。 在控制指令字

29、输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302,数据输入从低位即位 0 开始。同样,在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据,读出数据时从低位 0 位到高位 7。读写时序如下图 3.8所示。西南石油大学本科毕业设计(论文)10图 3.8 DS1302 读/写时序图DS1302 有 12 个寄存器,其中有 7 个寄存器与日历、时钟相关,存放的数据位为 BCD 码形式,其日历、时间寄存器及其控制字见表 3-。表 3-1 DS1302 的日历、时间寄存器2 2、DS1302DS1302 晶振电路晶振电路DS1302 的晶振电路与单片机

30、的晶振电路相似,唯一不同之处在晶振的频率,DS1302 所选晶振频率为 32.768KHz。如图 3.9 所示为 DS1302 的晶振电路。图 3.9 DS1302 晶振电路电子万年历的设计113.33.3 显示显示电路的设计与计算电路的设计与计算3.3.13.3.1 电路选择电路选择图 3.10 显示电路连接图LCD12864 的引脚直接接在单片机的引脚上面,RE、RW、E、PSB 依次接在单片机P1.0 至 P1.3 口上,数据口 D0-D7 依次接在单片机 P0 口上。A 引脚上接一个 10K 的滑动变阻器来调节显示屏的亮度。显示部分电路图如图 3.10 所示。3.3.23.3.2 元器

31、件的选型及参数计算元器件的选型及参数计算1 1、LCD12864LCD12864 液晶显示液晶显示12864 是一种具有 4 位/8 位并行、2 线或 3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为 12864, 内置 8192 个 16*16 点汉字,和 128 个 16*8 点 ASCII 字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示 84行 1616 点阵的汉字。 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构

32、或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。各管脚功能如表 32 所示。表 32 12864 管脚功能表管脚号 管脚名称电平管脚功能描述1-地VSS0V电源地2-+5VVCC3.0+5V电源正3-中V0-对比度(亮度)调整(可以接 Vcc)西南石油大学本科毕业设计(论文)124-单 1RS(CS)H/LRS=“H”,表示 DB7DB0 为显示数据RS=“L”,表示 DB7DB0 为显示指令数据5-单 2R/W(SID)H/LR/W=“H”,E=“H”,数据被读到 DB7DB0R/W=“L”,E=“HL”, DB7DB0 的数据被写到 IR或 DR6-单 3E(SCLK

33、)H/L使能信号7-单 39DB0H/L三态数据线8-单 38DB1H/L三态数据线9-单 37DB2H/L三态数据线10-单 36DB3H/L三态数据线11-单 35DB4H/L三态数据线12-单 34DB5H/L三态数据线13-单 33DB6H/L三态数据线14-单 32DB7H/L三态数据线15-单 4PSBH/LH:8 位或 4 位并口方式,L:串口方式(见注释 1)16 空NC-空脚17 空/RESETH/L复位端,低电平有效(见注释 2)18 空VOUT-LCD 驱动电压输出端19-+5VAVDD背光源正端(+5V) (见注释 3)20-地KVSS背光源负端(见注释 3)LCD12

34、864 的数据传输过程如图图 3.11 所示。图 3.11 写数据(8 位数据线模式)电子万年历的设计13LCD12864 读数据的时序图如图 3.12 所示。图 3.12 读数据(8 位数据线模式)3.43.4 硬件总电路图硬件总电路图系统总电路图见附录一,PCB 板见附录二。西南石油大学本科毕业设计(论文)144 4软件设计软件设计及编程及编程4.14.1 软件设计软件设计功能图功能图软件系统功能图如图 4.1 所示。AT89C52DS1302键扫描LCD12864图 4.1 软件系统功能图4.24.2 软件设计流程图软件设计流程图软件系统流程图如图 4.2 所示。开始初始化读写时间、日期

35、分离日期、时间显示值显示子程序时间、日期修改子程序农历自动匹配闰月显示结束图 4.2 软件流程图电子万年历的设计154.34.3 阳历程序设计阳历程序设计及功能实现及功能实现因为使用了时钟芯片 DS1302,阳历程序只需从 DS1302 各个寄存器中读出年、月、日、星期、时、分、秒等数据,在处理即可。在首次对 DS1302 进行操作前,必须对它进行初始化,然后从 DS1302 中读出数据,再经过处理后,送给显示模块单元。阳历程序设计系统流程图如图 4.3 所示。图4.3 计算阳历程序流程图4.44.4 时间调整程序时间调整程序设计及功能实现设计及功能实现调整时间用 4 个按钮调整,1 个用于控

36、制,1 个用于移位,两外 2 个作为加、减调节按钮。在调节时间过程中,逃调整的位与其他的位应该有区别,所以增加了汉字显示提示功能,即调整的位有相应的汉字提示。当按下一位按钮时,即进入下一位的调整,并有相应汉字提示。时间调整程序流程图如图 4.4 所示。西南石油大学本科毕业设计(论文)16图 4.4 时间调整程序流程图电子万年历的设计174.54.5 阴历程序设计阴历程序设计及功能实现及功能实现阴历程序的实现是靠阳历日期来推算。要根据阳历日期来推算阴历日期,首先要设计算法。推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。阳历一个月不是 30 天就是 31 天(2 月除外,闰年 2 月为

37、 29 天,平年 2 月为 28 天) 。阴历一年有 12 个月或 13 个月(含闰月) ,一个月为 29 天或 30 天。如果把一个只有29 天的月称为小月,用 1 标志,把 30 天的月称为大月,用 0 标志,那么 12 位二进制就能表示一年 12 个月的大小。如果有闰月,则把闰月的月份作为一字节的高 4 位,低 4 位表示闰月大小,大月为 0,小月为 1。这样一字节就包含了所有闰月信息。阴历春节和阳历元旦相差天数也用一字节表示。总共用 4 字节就可以存储一年中任何一天阳历与阴历对应关系的有关数据,例如 2004 年的阴历与阳历对应关系如表 4-1所示。表 4-1 2004 年的阴历与阳历

38、对应关系表月份123456789101112闰 2 月大小小大大大小大小大小大小大小二进制1000101010101天数29303030293029302930293030十六进制4252212004 年春节和元旦相差 21 天,这样 2004 年的信息表示为:21,42H,52H,21H。其中表示 12 个月大小信息的字节,第 4 位和第 7 位不用。第一字节位十进制,其他的都为十六进制。按此方法,100 年的阳历和阴历对应关系表共使用 400 字节。先要根据当前阳历的日期,算出阳历为该年中的第几天,计算出当前阳历日期为该年的第几天后,再减去该年春节和元旦的日差,如果够减,则相减的结果就是阴

39、历在该年中的总第几天,根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历为阳历的前一年,在这种情况下,根据实际,当前阴历日期会处于阴历的 11 月或 12 月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历中的第几天的数据,其结果表示当前阴历日期距离春节的天数。再根据查表所得的该年的阴历的闰月和大小月信息,就可以推算出该天的阴历日期。阴历程序算法流程图如图 4.5 所示。西南石油大学本科毕业设计(论文)18图 4.5 阴历程序流程图电子万年历的设计195 5系统调试及分析系统调试及分析5.15.1 硬件电路调试及结果分析硬件电路调试及结果分析电子万年历的电路系统比较简

40、单,但对于焊接方面不可轻视,电路系统中只要出于一处的错误,就会对检测造成很大的不便,电路中的交线较多,对于各种锋利的引脚要注意处理,否则会刺穿被带有包皮的导线,对电路造成短路现象。硬件电路实物图见附录三。5.1.15.1.1 单片机最小系统电路的测试结果及其分析单片机最小系统电路的测试结果及其分析焊接好单片机最小系统电路后,测试是否有虚焊、短路等问题以及单片机是否正常工作。用万用表的二极管档测试,若有吱吱吱的响声则表示有短路,这种方法也可以检查线路是否连接通。给单片机最小系统上电,用万用表电压档测试单片机各引脚输出电压是否正常,电压表的读数如图 5.1 所示。用示波器检测单片机晶振是否起振,晶

41、振的波形输出如图 5.2 所示。图 5.1 电压表测试读数图 5.2 单片机晶振输出波形图西南石油大学本科毕业设计(论文)205.1.25.1.2 DS1302DS1302 时钟电路的测试结果及其分析时钟电路的测试结果及其分析时钟芯片 DS1302 与单片机的连接比较简单,电路焊接好后,检测电路是否有虚焊、短路的问题,用万用表测试时钟芯片各脚电压,用示波器检测时钟芯片的晶振是否起振。在测试时钟电路的时候,发现时钟电路的输出波形不正常,经过检查和测试,发现晶振没有添加去耦电容,在添加了电容之后,时钟电路输出波形工作正常了。如图 5.3 所示为 DS1302 的实物连接图。图 5.3 DS1302

42、 实物图5.1.35.1.3 LCD12864LCD12864 显示电路的测试结果及其分析显示电路的测试结果及其分析液晶显示电路的连接很简单,很容易焊接。但需要需要注意的是,由于液晶屏是接在 AT89S52 的 P0 口,所以必须要接上拉电阻。焊接好后,检测电路是否有虚焊、短路的问题,用万用表测试各脚的电压。测试滑动变阻器能否调节显示屏亮度。在芯片中烧入一个简单的液晶屏显示程序,测试液晶屏能否显示。如图 5.4 所示为 LCD12864 的实物连接图。图 5.4 LCD12864 实物图电子万年历的设计215.25.2 软件调试及功能分析软件调试及功能分析5.2.15.2.1 阳历显示程序功能

43、实现及其分析阳历显示程序功能实现及其分析阳历程序的设计很简单,编写好 DS1302 读写程序和阳历和时间显示程序,在主函数中调用,很容易就能实现阳历和时间的显示功能。在编写程序时,由于没有掌握好 DS1302 的读写时序,导致 DS1302 不能正常读数。经过认真分析时序,最后终于编写出了 DS1302 的正确程序。如图 5.5 所示为12864 显示出的时间日期。图 5.5 阳历时间日期显示5.2.25.2.2 时间调整程序功能实现及其分析时间调整程序功能实现及其分析时间调整程序比较复杂,程序多了,就很容易出错,所以在编写过程中要很细心。将编写好的程序烧入单片机中进行检查。在写这部分程序时,

44、感觉不是很困难,只要认真按照逻辑顺序编写就行了。如图 5.6 所示是时间日期的调节部分。图 5.6 月份的调节显示5.2.35.2.3 阴历显示程序功能实现及其分析阴历显示程序功能实现及其分析阴历程序的编写难点主要在算法上,在有了算法和阴历与阳历转阴历的关系表的情况下,阴历程序也很容易编写。编写好程序,烧入开发板检测。在程序加入了农历子程序后,农历不能正常显示。在仔细查看程序,发现返回的农历是 16 进制数。而我把它当成了十进制数,以至于不能正常显示。修改后,显示正常,如图 5.7 所示。西南石油大学本科毕业设计(论文)22图 5.7 阳历与阴历显示6 6结论结论与展望与展望6.16.1 结论

45、结论通过本次设计,本系统能完成以下功能:(1)显示公历日期功能(年、月、日、时、分、秒以及星期)(2)可通过按键调节年、月、日、时、分、秒以及星期(3)可动态完整显示年本设计的亮点是在显示阴历日期时,使用汉字的显示,显示农历的年份采用的天干地支的表现方式。例如,在 2012 年的农历闰四月初一时,显示格式为“壬辰年闰四月初一” ,使显示更为美观。本设计硬件电路较简单,所以器件较少,电路中使用了 AT89C52 单片机、DS1302 时钟芯片和 LCD12864 液晶显示器,实现了预计功能。6.26.2 展望展望在本次设计中仍然存在着不足之处。1、显示的年限过短,只能显示 2000 年2100

46、年之间的部分。2、通过按键调节年、月、日后,如果不调节星期,星期的显示就会出现与正常的星期不匹配,目前还没办法自动校正,只能通过手动调节星期,才能使所显示的星期与正常星期匹配。由3、于未来的阴历日期是不能准确预测出的,所以,所显示的阴历日期有可能与其他版本的电子万年历在未来的阴历日期显示上出现不匹配的情况。4、由于使用的是 C 语言进行的编程,所以整个程序显得很臃肿,在现有的程序设计基础上,还可以进行精简。5、本设计的功能还可以在现有基础上再次扩展,还可以添加闹铃功能,跑马表功能,以及整点报时功能等等,还有很大的扩展空间。电子万年历的设计23谢谢 辞辞首先我必须感谢院领导对我们毕业生在毕业设计

47、过程中的支持与关怀!其次我要特别感邱红兵老师,不管在选题阶段,还是在设计阶段、在制作阶段,正是他给予我不断的指导与帮助,导师渊博的学识、严谨的治学态度、求实创新的工作作风、对事业和科学的执着追求,以及对我谆谆教诲给我留下了深刻的印象,使我受益终身。在课题的研究设计过程中,我不仅从邱老师那里学到许多专业知识,更重要的是学会了学习新知识并将其巩固的方法,这无疑是一把开启未来生活的钥匙,特此向邱老师表示衷心的感谢!最后我要感谢我的同学们,在设计和焊接过程遇到困难时,正是由于同学们的帮助我才能顺利的克服困难,毕业设计的完成离不开同学们的帮助!在大学四年的学习生活中,还得到了许多领导和老师的热情关心和帮

48、助,在此,向所有关心和帮助过我的领导、老师、同学和朋友们表示由衷的谢意! 衷心的感谢在百忙之中评阅论文和参加答辩的各位教授、老师! 西南石油大学本科毕业设计(论文)24参考文献参考文献1康光华电子技术基础(数字部分) 北京:电子工业出版社,2006.022李建忠.单片机原理及应用 陕西:西安电子科技大学出版, 2006.02 3张俊谟.单片机中级教程.北京:北京航空航天大学出版, 2006.034李飞光.单片机课程设计实例指导.北京:北京航空航天大学出版社, 20045李振声 实验电子技术 (P182193).国防工业大学出版社,20016何立民.单片机应用技术选编.北京:北京航空航天大学出版

49、社, 2000.087万光毅.单片机实验与实践教程.北京:北京航空航天大学出版社, 2005.018周航慈.单片机程序设计基础.北京:北京航空航天大学出版社, 1991.119黄遵熹.单片机原理接口与应用.陕西:西北工业大学出版社, 1997.0510Kuglanp,kriegerE,SantiagoE. The 8051 microcontronller.2009:P110122电子万年历的设计25附录一:系统整体电路图附录一:系统整体电路图P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RES9P3.0(RXD)10P3.1(TXD)11P3.2(INT0)

50、12P3.3(INT1)13P3.4(T0)14P3.5(T1)15P3.6(WR)16P3.7(RD)17XTAL218XTAL119GND20P2.1(A9)22P2.2(A10)23P2.3(A11)24P2.4(A12)25P2.5(A13)26P2.6(A14)27P2.7(A15)28PSEN29ALE/PROG30EA/VPP31P0.7(AD7)32P0.6(AD6)33P0.5(AD5)34P0.4(AD4)35P0.3(AD3)36P0.2(AD2)37P0.1(AD1)38P0.0(AD0)39VCC40P2.0(A8)21U1AT89C51C4CapC5CapC2Cap

51、OSC212MGNDR3ResVCCGNDX12X23VCC21GND4RST5I/O6SCLK7VCC18U2DS1302VCCGNDOSC1132.768KHzR1ResR2ResVCCVSS1VDDNCRSRWED0D1D2D3D4D5D6D7PSBNCRSTNCAKJ1LCD12864R4K1KK2KK3KK4KVCCVCCGNDGNDGNDVCCVCCVCCC1CapC3CapGND西南石油大学本科毕业设计(论文)26附录二:附录二:PCBPCB 电路图电路图电子万年历的设计27附录三:实物图附录三:实物图西南石油大学本科毕业设计(论文)28附录四:附录四:系统完整程序系统完整程序显

52、示子程序:#define data_bus P0#define RS P1_1#define R_W P1_3#define E P1_2#define PSB P1_0void delay(unsigned int cont)unsigned char j;unsigned int i;for(i=0;icont;i+)for(j=0;j10;j+);void cheak_busy(void)RS=0;R_W=1;E=1; while(data_bus&0X80); E=0; void write_order(unsigned char command)cheak_busy();RS

53、=0;R_W=0;E=1; data_bus=command; delay(50);E=0; void write_data(unsigned char datas)cheak_busy();RS=1;R_W=0;E=1; data_bus=datas; delay(50); E=0;void screen_int(void)PSB=1; /-并行数据传输delay(50); write_order(0X30);/- 8 位数据,基本指令delay(50); write_order(0X02); /-地址归位delay(50); write_order(0X0C); /-整体显示。关闭游标电子

54、万年历的设计29delay(50); write_order(0X80); /-设定起始显示位置delay(50); write_order(0X01); /-清屏delay(50); write_order(0X06); /-进入设定点void clear_screen(void) /-需要修改部分write_order(0X01);delay(50); write_order(0X06); /-进入设定点delay(50);delay(5000);void puts_char(unsigned char row,unsigned char line,unsigned char *p)/-字

55、符或者汉字输出unsigned char star_site=0X80;unsigned char *q=0;unsigned char over_flag=0;if(row1|line1)return ;if(row=3)row=1;line=line+8;else if(row=4)row=2;line=line+8;row=row-1;line=line-1;row=row16)break;void puts_data(unsigned char row,unsigned char line,unsigned char cont,unsigned int number)/输出数据(暂为四

56、位)code unsigned char *p=0123456789; unsigned char temp4;unsigned char *q;unsigned char i;unsigned char star_site=0X80;if(cont=5)return;if(row1|line1)return;elseif(row=3)row=1;line=line+8;else if(row=4)row=2;line=line+8;row=row-1;line=line-1;row=row4;star_site=star_site|row;star_site=star_site|line;t

57、emp0=number/1000;temp1=number%1000/100;temp2=number%100/10;temp3=number%10;write_order(star_site);for(i=4-cont;i 0; i-);/BCD 码转十进制unsigned char DS1302_BCD_to_DEC(unsigned char BCD)unsigned char temp;temp = BCD / 16;temp *= 10;temp += BCD % 16;return (temp); /DS1302 初始化void DS1302_start()RST = 1;SCL

58、= 0;SDA = 0;/DS1320 结束void DS1302_stop()RST = 0;SCL = 0;SDA = 0;/DS1602 写一个字节void DS1302_writebyte(unsigned char da)unsigned char i;电子万年历的设计33RST = 1;delay(5);for(i = 0; i = 1;SDA = CY;delay(2);SCL = 1; delay(8);SDA = 0;delay(8);/读一个字节unsigned char DS1302_readbyte()unsigned char i, temp=0;SDA=1;for(

59、i=0;i1; return(DS1302_BCD_to_DEC(temp);void set_ds1302(unsigned char dat,unsigned char adress)DS1302_start();DS1302_writebyte(adress); delay(100);DS1302_writebyte(dat/10*16|dat%10);DS1302_stop();delay_ms(10);unsigned char read_ds1302(unsigned char adress)unsigned char dat=0;DS1302_start(); /miaoDS13

60、02_writebyte(adress);delay(10);dat = DS1302_readbyte();DS1302_stop();delay(50);return dat; 西南石油大学本科毕业设计(论文)34void main()unsigned char i,m,sign=0,scan=0;unsigned int num=0,temp1=0,temp2=0; clear_screen();screen_int();for(i = 0; i guanxibiaoyear0)switch(yinli_mon)case 1: puts_char(4,4, 一 ov);break;cas

61、e 2: puts_char(4,4, 二 ov);break;case 3: puts_char(4,4, 叁 ov);break;case 4: puts_char(4,4, 四 ov);break;西南石油大学本科毕业设计(论文)36case 5: puts_char(4,4, 五 ov);break;case 6: puts_char(4,4, 六 ov);break;case 7: puts_char(4,4, 七 ov);break;case 8: puts_char(4,4, 八 ov);break;case 9: puts_char(4,4, 九 ov);break;case

62、10: puts_char(4,4, 十 ov);break;case 11: puts_char(4,4, 冬 ov);break;case 12: puts_char(4,4, 腊 ov);break;default: break;temp1=guanxibiaoyear1;temp2=guanxibiaoyear2;a=num-guanxibiaoyear0; /a 为当前日期在阴历中的第几天for(i=6;i0;i-)temp1=1;shuzu1i=CY;for(i=6;i0;i-)temp2=1;shuzu1i+6=CY; if(guanxibiaoyear3/16=0)i=1;m=

63、1;while(m)if(shuzu1i=1) if(a=29)yinli_day=a; yinli_mon=i; m=0;else a=a-29;电子万年历的设计37if(shuzu1i=0)if(a=30)yinli_day=a; yinli_mon=i; m=0;else a=a-30;i+;if(guanxibiaoyear3/16!=0)i=1;m=1;while(m)if(i=guanxibiaoyear3/16) if(shuzu1i=1)if(a=29)yinli_day=a; yinli_mon=i; m=0;else a=a-29;if(shuzu1i=0)if(a=30)

64、yinli_day=a; yinli_mon=i; m=0;else a=a-30;西南石油大学本科毕业设计(论文)38if(i=guanxibiaoyear3/16+1) /闰月显示 if(guanxibiaoyear3%16=1) if(a=29) yinli_day=a; yinli_mon=i-1;puts_char(4,4,闰 ov);m=0;else a=a-29; if(guanxibiaoyear3%16=0) if(aguanxibiaoyear3/16+1)if(shuzu1i-1=1)if(a=29)yinli_day=a; yinli_mon=i-1; m=0;else

65、 a=a-29;电子万年历的设计39if(shuzu1i-1=0)if(a0;i-)temp1=1; shuzu1i=CY; for(i=6;i0;i-)temp2=1; shuzu1i+6=CY; if(shuzu112=1)if(b29) b=b-29;if(shuzu111=1) yinli_day=29-b;else yinli_day=30-b;yinli_mon=11;西南石油大学本科毕业设计(论文)42if(shuzu112=0)if(b=30)yinli_day=30-b; yinli_mon=12;elseb=b-30;if(shuzu111=1)yinli_day=29-b

66、;else yinli_day=30-b;yinli_mon=11;switch(yinli_day/10)case 0: puts_char(4,7,初 ov);break;case 1: puts_char(4,7,一 ov);break;case 2: puts_char(4,7,廿 ov);break;case 3: puts_char(4,7,叁 ov);break;case 4: puts_char(4,7,四 ov);break;case 5: puts_char(4,7,五 ov);break;case 6: puts_char(4,7,六 ov);break;case 7: puts_char(4,7,七 ov);break;case 8: puts_char(4,7,八 ov);break;case 9: puts_char(4,7,九 ov);break;default: break;switch(yinli_day%10)电子万年历的设计43case 0: puts_char(4,8,十 ov);break;case 1: puts_char(4,8,一 ov);bre

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

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

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


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