万年历 论文初稿.docx
《万年历 论文初稿.docx》由会员分享,可在线阅读,更多相关《万年历 论文初稿.docx(41页珍藏版)》请在冰豆网上搜索。
万年历论文初稿
四川省高等教育自学考试电子工程专业
毕业论文
论文题目_基于AT89C51单片机万年历的设计
专业________电子工程_______________
学生姓名________________________
准考证号__________________
指导老师_______________________
2011年08月23日
摘要
自古人们就懂得了怎么样算时间,打草结、挂麻絏、划笔画等。
现在社会的日益进步时间变得更加的珍贵。
传统的钟表误差大、使用寿命不长、要经常的更改时间。
显示不直观,给人们带来了许多的不便。
科技的快速发展,很好的解决的问题。
而多功能电子万年历能很好的解决这些问题,万年历采用软、硬件结合,误差小、使用寿命长,采用直观的数字显示,简捷明了。
本文介绍了基于AT89C52单片机的多功能电子万年历的硬件结构和软硬件设计方法。
系统以AT89C52单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。
运用单片机实现公历农历之间的转换,电子闹钟,计时器和对指定日期的查询等功能。
万年历采用液晶显示LCD-12864显示,可以同时显示年、月、日、周几、时、分、秒,农历。
综上所述此电子晚年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景
关键字:
AT89C51;电子万年历;DS1302;公农历转换;电子闹钟;计时器;日期查询
目录
1绪论……………………………………………………………………5
1.1课题研究的背景……………………………………….……………5
1.2课题的研究目的与意…………………………………..………….5
1.3课题解决的主要内容.....................................5
2系统的总体设计..........................................6
2.1系统方案的构想与确定...................................6
2.2器件的选用............................................7
2.2.1单片机的选用........................................7
2.2.2LCD液晶显示器12864选用及工作原理..................8
2.2.2.1LCD液晶显示概述..................................8
2.2.2.2LCD模块接口说明...................................9
2.2.2.3LCD模块主要硬件构成说明..........................9
2.2.2.4LCD指令说明....................................11
2.2.2.5LCD读写时序图..................................11
2.2.2.6LCD软件初始化..................................13
2.2.2.7应用举例........................................15
2.2.3公农历转换…………………………………………..……….17
3系统硬件的设计.........................................20
3.1系统硬件电路设计......................................20
3.1.1系统硬件框图.......................................20
3.1.2AT89C51单片机....................................20
3.1.3AT89C51单片机与MCS-51完全兼容………..……………..23
3.1.4实时时钟芯片DS1302……………………………………..25
4系统的软件设...........................................29
4.1程序流程图...........................................30
4.2主程序...............................................31
4.3读取日期和时间程序...................................32
4.4显示子程序...........................................33
4.5闹钟子程序............................................34
5PROTEUS使用............................................34
5.1编程环境PROTEUS......................................34
5.2用PROTEUSISIS对电子万年历的硬件电路设计.............35
5.3用PROTEUSISIS进行电子万年历的仿真测试...............38
结论………………………………….…………………………………39
致谢…………………………………………………………………….40
参考文献……………………………………………………………….41
程序.....................................................42
一绪论
1.1课题研究的背景
随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。
该电路采用AT89C51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
1.2课题的研究目的与意义
二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。
电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。
所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。
由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。
1.3课题解决的主要内容
本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面:
(1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。
(2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。
(3)在硬件设计时,结构要尽量简单实用易于实现,使系统电路尽量简单。
(4)根据硬件电路图,在电路板上完成器件的焊接。
(5)根据设计的硬件电路,编写控制AT89C51芯片的单片机程序。
(6)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。
(7)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。
(8)软件设计时必须要有完善的思路,要做到程序简单,调试方便。
二.系统的总体设计
单片机电子万年历的制作有多种方法,可供选择的器件和运用的技术也有很多种。
所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单实用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。
2.1系统方案的构想与确定
系统的功能往往决定了系统采用的结构,经过成本,性能,功耗等多方面的考虑决定用液晶显示12864显示器显示,5V直流电源对单片机AT89C51进行供电,时间芯片DS1302连接单片机AT89C51。
从而实现电子万年历的功能。
2.2器件的选用
单片机AT89C51
5V直流电源
液晶显示器FYD12864-0402B
传感器DS1302
2.2.1单片机的选择
单片机自70年代问世以来以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,用广泛的应用领域拉动得到蓬勃发展,单片机功能正日渐完善。
单片机的应用,使许多领域的技术水平和自动化程度大大提高,可以说当今世界正在经受一场以单片机技术为标志的新技术革命浪潮的冲击。
主要单片机类型如下:
(1)MCS-51系列单片机
MCS-51系列单片机主要是指Intel公司生产的以51位内核的单片机芯片,具有8位CPU、4K字节ROM、128字节RAM、可扩展外部64K字节RAM和ROM、2个16位的定时器/计数器、4个8位并行I/O口、1个全双工串行I/O口、21字节的专用寄存器、5个中断源、片内自带振荡器、片内单总线等功能部件。
(2)AT89C51单片机
AT89C51单片机的主要特性如下:
●与MCS-51产品指令系统完全兼容
●4K字节的在线编程Flash存储器,1000次擦写周期
●4.0~5.5V的工作电压范围
●全静态工作模式:
0~33MHz
●三级程序存储器锁
●128×8字节内部RAM
●32个可编程I/O口线
●2个16位定时/计数器
●6个中断源
●全双工串行UART通道
●低功耗空闲和掉电模式
●中断可从空闲模式唤醒系统
●掉电标识和快速编程特性
●具有掉电状态下的中断恢复功能
●灵活的在系统编程(ISP字节或页写模式)
由于AT89C51单片机片内有4K字节的在线编程Flash存储器,可以擦写1000次,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用。
所以选用AT89C51单片机作为电子万年历芯片的控制单片机。
2.2.2LCD液晶显示器12864选用及工作原理.
1、概述
FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库
的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利
用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵
的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶
显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
基本特性:
1)低电源电压(VDD:
+3.0--+5.5V)
2)显示分辨率:
128×64点
3)内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
4)内置128个16×8点阵字符
5)2MHZ时钟频率
6)显示方式:
STN、半透、正显
7)驱动方式:
1/32DUTY,1/5BIAS
8)视角方向:
6点
9)背光方式:
侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
10)通讯方式:
串行、并口可选
11)内置DC-DC转换电路,无需外加负压
12)无需片选信号,简化软件设计
13)工作温度:
0℃-+55℃,存储温度:
-20℃-+60℃
2模块接口说明
2.1并行接口
2.2串口接口管脚信号
3.模块主要硬件构成说明
控制器接口信号说明:
1、
1、RS,R/W的配合选择决定控制界面的4种模式:
2、E信号
●忙标志:
BF
BF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0时,模块为准备
状态,随时可接受外部指令和数据.
利用STATUSRD指令,可以将BF读到DB7总线,从而检验模块之工作状态.
●字型产生ROM(CGROM)
字型产生RO(MCGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。
DFF=1为开显示(DISPLAYON),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAYOFF)。
DFF的状态是指令DISPLAYON/OFF和RST信号控制的。
●显示数据RAM(DDRAM)
模块内部显示数据RAM提供64×2个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入
显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM
字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H—0006H的编码中(其代码分别
是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于
A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB
(A1A0-F7FFH)。
●字型产生RAM(CGRAM)
字型产生RAM提供图象定义(造字)功能,可以提供四组16×16点的自定义图象空间,使用者可以将内部字型没有
提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。
●地址计数器AC
地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入
DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6——DB0中。
●●光标/闪烁控制电路
此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。
4、指令说明
模块控制芯片提供两套控制命令,基本指令和扩充指令如下:
指令表:
5、读写时序图
5.1数据传输过程
8位和4位数据线的传输过程
串口数据线模式数据传输过程
5.2时序图
MPU写资料到ST7920(8位数据线模式)
MPU从ST7920读资料(8位数据线模式)
5.3串口读写时序:
6、软件初始化
7.应用举例:
1)、使用前的准备
先给模块加上工作电压,再按照下图的连接方法调节LCD的对比度,使其显示出黑色的底影。
此过程亦可以初步检测LCD有无缺段现象。
2)、字符显示
FYD12864-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中
文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。
FYD12864-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。
字符显示是通过将字符显示编码写入该字符显
示RAM实现的。
根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM
(自定义字形)的内容。
三种不同字符/字型的选择编码范围为:
0000~0006H(其代码分别是0000、0002、0004、0006
共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。
字符
显示RAM在液晶模块中的地址80H~9FH。
字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关
系如下表所示。
3)、图形显示
先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)
垂直地址范围AC5...AC0
水平地址范围AC3…AC0
绘图RAM的地址计数器(AC)只会对水平地址(X轴)自动加一,当水平地址=0FH时会重新设为00H但并不会对垂直地址
做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。
GDRAM的坐标地址与资料
排列顺序如下图:
2.2.3公农历转换
1)概述
、、、公历是全世界通用的历法以地球绕太阳的一周为一年,一年365天,分为12个月:
135781012月为31天,2月为28天,其余月份为30天。
事实上地球绕太阳一周共365天5小时48分46秒,比公历一年多出5小时48分46秒。
为使年误差不累积,公历年用闰年法来消除年误差,由于每年多出5小时48分46秒每4年累计多出23小时15分4秒接近1天,天文学家就规定每4年有一个闰年,把2月由28天改为29天,凡是公历年代能被4整除的那一年就是闰年,但是这样一来每4年又少了44分56秒,为了更准确地计时,天文学家又规定凡能被100整除的年份,只有能被400整除才是闰年,即每400年要减掉3个闰年经过这样处理后实际上每400年的误差只有2小时53分20秒已相当准确了。
、、农历与公历不同农历把月亮绕地球一周作为一月,因为月亮绕地球一周不是一整天,所以农历把月分为大月和小月,大月30天小月29天,通过设置大小月使农历日始终与月亮与地球的位置相对应,为了使农历的年份与公历年相对应,农历通过设置闰月的办法使它的平均年长度与公历年相等,农历是中国传统文化的代表之一并与农业生产联系密切,中国人民特别是广大农民十分熟悉并喜爱农历。
、、、公历与农历是我国目前并存的两种历法各有其固有的规律,农历与月球的运行相对应其影响因素多,它的大小月和闰月与天体运行有关,计算十分复杂且每年都不一致,因此要用单片机实现公历与农历的转换用查表法是最方便实用的办法。
、、、51系列单片机因其在功能上能满足大部份对速度要求不高的应用场合,且价格低廉开发工具普及程度高,是目前应用最多的单片机之一,本文介绍一种用51单片机实现从1901年到2099年,199年公历日到农历日及星期的转
换方法,并向读者提供完整的51汇编程序。
2)基本原理
、、、实现公历与农历的转换一般采用查表法,按日查表是速度最快的方法,但51单片机寻址能力有限不可能采用按日查表的方法,除按日查外我们可以通过按月查表和按年查表的方法,再通过适当的计算来确定公历日所对应的农历日期,本文采用的是按年查表法最大限度地减少表格所占的程序空间。
、、、对于农历月来说大月为30天小月为29天,这是固定不变的,这样我们就可用1个BIT位来表示大小月信息,农历一年如有闰月为13个月,否则是12个月,所以一年需要用13个BIT。
闰月在农历年中所在的月份并不固定大部分闰月分布在农历28月但也有少量年份在9月以后,所以要表示闰月的信息至少要4个BIT。
在这里我们用4个BIT的值来表示闰月的月份值,为0表示本年没有闰月,有了以上信息还不足以判断公历日对应的农历日,因为还需要一个参照日,我们选用农历正月初一所对应的公历日期作参照日,公历日最大为31日,需要5个BIT来表示,而春节所在的月份不是1月就是2月,用1BIT就够了考虑到表达方便我们用2BIT来表示春节,月2BIT的值直接表示月份,这样一年的农历信息只用3个字节就全部包括了。
、、、计算公历日对应的农历日期的方法,先计算出公历日离当年元旦的天数,然后查表取得当年的春节日期,计算出春节离元旦的天数,二者相减即可算出公历日离春节的天数以后只要根据大小月和闰月信息减一月天数,调整一月农历月份即可推算出公历日所对应的农历日期,如公历日不到春节日期农历年要比公历年小一年,农历大小月取前一
年的信息,农历月从12月向前推算。
、、、公历日是非常有规律的所以公历日所对应的星期天可以通过计算直接得到,理论上公元0年1月1日为星期日,只要求得公历日离公元0年1月1日的日子数除7后的余数就是星期几,为了简化计算采用月校正法,根据公历的年月日可直接计算出星期天,其算法是日期年份所过闰年数,月校正数之和除7的余数就是星期几,但如果是在闰年又不到3月份,上述之和要减一天再除7,其112月的校正数据为622503514624在本程序中采用1个字节表示年份闰年数也只计算1900年以后的闰年数所以实际校正数据也和上述数据不同。
三系统硬件的设计
3.1系统硬件电路设计
3.1.1系统硬件框图如图
3.1.2AT89S51单片机
本系统采用的是美国ATMEL公司生产的AT89C51单片机,首先我们来熟悉一下AT89C51单片机的外部引脚和内部结构。
1).单片机的引脚功能
AT89C51单片机有40个引脚。
●Vcc:
电源电压+5V
●GND:
接地
●P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线服用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时要求外接上拉电阻。
●P1口:
P1口是一个带内部上拉电阻的8位双向I/O,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
Flash编程和程序校验期间,P1接收低8位地址。
●P2口:
P2口是一个带内部上拉电阻的8位双向I/O,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
Flash编程和程序校验期间,P2亦接收低高位地址和其他控制信号。
●P3口:
P3口是一组带内部上拉电阻的8位双向I/O,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部的上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用