毕业设计(论文)基于AT89C51单片机万年历的设计_第1页
毕业设计(论文)基于AT89C51单片机万年历的设计_第2页
毕业设计(论文)基于AT89C51单片机万年历的设计_第3页
毕业设计(论文)基于AT89C51单片机万年历的设计_第4页
毕业设计(论文)基于AT89C51单片机万年历的设计_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、四川省高等教育自学考试电子工程专业毕业论文 论文题目_基于at89c51单片机万年历的设计专 业_电子工程_学生姓名_准考证号_指导老师_ 2011年 08 月 23 日摘要自古人们就懂得了怎么样算时间,打草结、挂麻絏、划笔画等。现在社会的日益进步时间变得更加的珍贵。传统的钟表误差大、使用寿命不长、要经常的更改时间。显示不直观,给人们带来了许多的不便。科技的快速发展,很好的解决的问题。而多功能电子万年历能很好的解决这些问题,万年历采用软、硬件结合,误差小、使用寿命长,采用直观的数字显示,简捷明了。本文介绍了基于at89c52单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以at89c5

2、2单片机为控制器,以串行时钟日历芯片ds1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。运用单片机实现公历农历之间的转换,电子闹钟,计时器和对指定日期的查询等功能。万年历采用液晶显示lcd-12864显示,可以同时显示年、月、日、周几、时、分、秒,农历。综上所述此电子晚年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景关键字:at89c51;电子万年历;ds1302 ;公农历转换;电子闹钟;计时器;日期查询目 录1 绪论51.1课题研究的背景.51.2课题的研究目的与意.51.3课题解决的

3、主要内容.52 系统的总体设计.62.1系统方案的构想与确定.62.2 器件的选用.72.2.1 单片机的选用.72.2.2 lcd 液晶显示器12864 选用及工作原理.82.2.2.1 lcd液晶显示概述.82.2.2.2 lcd模块接口说明.92.2.2.3 lcd 模块主要硬件构成说明.92.2.2.4 lcd 指令说明.112.2.2.5 lcd 读写时序图.112.2.2.6 lcd 软件初始化.132.2.2.7 应用举例.152.2.3 公农历转换.173 系统硬件的设计.203.1系统硬件电路设计.203.1.1系统硬件框图.20 3.1.2 at89c51单片机.2031.

4、3 at89c51单片机与mcs-51完全兼容.233.1.4 实时时钟芯片 ds1302 .254 系统的软件设.294.1 程序流程图.304.2 主程序.314.3 读取日期和时间程序.324.4 显示子程序.334.5闹钟子程序.345 proteus使用.345.1编程环境proteus.345.2用proteus isis对电子万年历的硬件电路设计.355.3用proteus isis进行电子万年历的仿真测试.38结论.39致谢.40参考文献.41程序.42一 绪论1.1 课题研究的背景随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对

5、年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且ds1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用at89c51单片机作为核心,功耗小,能在3v的低压工作,电压可选用35v电压供电。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2课题的研究目的与意义二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在

6、学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。1.3课题解决的主要内容本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面:(1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。(2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。(3)在硬件设计时,结构要尽量简单实用易于实现,使系统电路尽量简单。(4)根据硬

7、件电路图,在电路板上完成器件的焊接。(5)根据设计的硬件电路,编写控制at89c51芯片的单片机程序。(6)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。(7)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。(8)软件设计时必须要有完善的思路,要做到程序简单,调试方便。二系统的总体设计单片机电子万年历的制作有多种方法,可供选择的器件和运用的技术也有很多种。所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单实用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。2.1系统方案的构

8、想与确定系统的功能往往决定了系统采用的结构,经过成本,性能,功耗等多方面的考虑决定用液晶显示12864显示器显示,5v直流电源对单片机at89c51进行供电,时间芯片ds1302连接单片机at89c51。从而实现电子万年历的功能。2.2 器件的选用单片机at89c515v直流电源液晶显示器fyd12864-0402b传感器ds13022.2.1单片机的选择单片机自70年代问世以来以微处理器(mpu)技术及超大规模集成电路技术的发展为先导,用广泛的应用领域拉动得到蓬勃发展,单片机功能正日渐完善。单片机的应用,使许多领域的技术水平和自动化程度大大提高,可以说当今世界正在经受一场以单片机技术为标志的

9、新技术革命浪潮的冲击。主要单片机类型如下:(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单片机的主要特性如下:l 与mcs-51产品指令系统完全兼容l 4k字节的在线编程flash存储器,1000次擦写周期l 4.05.5v的工作电压范围l 全静态工作模式:033mhz

10、l 三级程序存储器锁l 1288字节内部ram l 32个可编程i/o口线l 2个16位定时/计数器l 6个中断源l 全双工串行uart通道l 低功耗空闲和掉电模式l 中断可从空闲模式唤醒系统l 掉电标识和快速编程特性l 具有掉电状态下的中断恢复功能l 灵活的在系统编程(isp字节或页写模式)由于at89c51单片机片内有4k字节的在线编程flash存储器,可以擦写1000次,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用。所以选用at89c51单片机作为电子万年历芯片的控制单片机。2.2.2 lcd 液晶显示器12864 选用及工作原理.1、概述fyd12864-0402

11、b 是一种具有 4 位/8 位并行、2 线或 3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为 12864, 内置 8192 个 16*16 点汉字,和 128 个 16*8 点 ascii 字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示 84 行 1616 点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。基本特性:1) 低电源电压(vdd

12、:+3.0-+5.5v) 2)显示分辨率:12864 点3) 内置汉字字库,提供 8192 个 1616 点阵汉字(简繁体可选)4) 内置 128 个 168 点阵字符5)2mhz 时钟频率6)显示方式:stn、半透、正显7)驱动方式:1/32duty,1/5bias8) 视角方向:6 点9) 背光方式:侧部高亮白色 led,功耗仅为普通 led 的 1/51/1010) 通讯方式:串行、并口可选11) 内置 dc-dc 转换电路,无需外加负压12)无需片选信号,简化软件设计13)工作温度: 0 - +55 ,存储温度: -20 - +602 模块接口说明2.1 并行接口2.2 串口接口管脚信

13、号3.模块主要硬件构成说明控制器接口信号说明:1、 1、rs,r/w 的配合选择决定控制界面的 4 种模式:2、e 信号忙标志:bfbf 标志提供内部工作情况.bf=1 表示模块在进行内部操作,此时模块不接受外部指令和数据.bf=0 时,模块为准备状态,随时可接受外部指令和数据.利用 status rd 指令,可以将 bf 读到 db7 总线,从而检验模块之工作状态.字型产生 rom(cgrom)字型产生ro(mcgrom)提供8192个此触发器是用于模块屏幕显示开和关的控制。dff=1为开显示(display on),ddram的内容就显示在屏幕上,dff=0 为关显示(display of

14、f)。dff 的状态是指令 display on/off 和 rst 信号控制的。显示数据 ram(ddram)模块内部显示数据 ram 提供 642 个位元组的空间,最多可控制 4 行 16 字(64 个字)的中文字型显示,当写入显示数据 ram 时,可分别显示 cgrom 与 cgram 的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、cgram字型及 cgrom 的中文字型,三种字型的选择,由在 ddram 中写入的编码选择,在 0000h0006h 的编码中(其代码分别是 0000、0002、0004、0006 共 4 个)将选择 cgram 的自定义字型,02h7fh

15、的编码中将选择半角英数字的字型,至于a1 以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码 big5(a140d75f),gb(a1a0-f7ffh)。字型产生 ram(cgram)字型产生 ram 提供图象定义(造字)功能, 可以提供四组 1616 点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到 cgram 中,便可和 cgrom 中的定义一样地通过 ddram 显示在屏幕中。地址计数器 ac地址计数器是用来贮存 ddram/cgram 之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入ddram/cgram 的值时,地址计数器的值就

16、会自动加一,当 rs 为“0”时而 r/w 为“1”时,地址计数器的值会被读取到db6db0 中。 光标/闪烁控制电路此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定 ddram 中的光标或闪烁位置。4、指令说明模块控制芯片提供两套控制命令,基本指令和扩充指令如下:指令表 :5、读写时序图5.1 数据传输过程8 位和 4 位数据线的传输过程串口数据线模式数据传输过程5.2 时序图mpu 写资料到 st7920(8 位数据线模式)mpu 从 st7920 读资料(8 位数据线模式)5.3 串口读写时序:6、软件初始化7应用举例:1 )、使用前的准备先给模块加上工作电压,再按照下图的连接方

17、法调节 lcd 的对比度,使其显示出黑色的底影。此过程亦可以初步检测 lcd 有无缺段现象。2)、字符显示fyd12864-0402b 每屏可显示 4 行 8 列共 32 个 1616 点阵的汉字,每个显示 ram 可显示 1 个中文字符或 2 个 168 点阵全高 ascii 码字符,即每屏最多可实现 32 个中文字符或 64 个 ascii 码字符的显示。fyd12864-0402b 内部提供 1282 字节的字符显示 ram 缓冲区(ddram)。字符显示是通过将字符显示编码写入该字符显示 ram 实现的。根据写入内容的不同,可分别在液晶屏上显示 cgrom(中文字库)、hcgrom(a

18、scii 码字库)及 cgram(自定义字形)的内容。三种不同字符/字型的选择编码范围为:00000006h(其代码分别是 0000、0002、0004、0006共 4 个)显示自定义字型,02h7fh 显示半宽 ascii 码字符,a1a0hf7ffh 显示 8192 种 gb2312 中文字库字形。字符显示 ram 在液晶模块中的地址 80h9fh。字符显示的 ram 的地址与 32 个字符显示区域有着一一对应的关系,其对应关系如下表所示。3) 、图形显示先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)垂直地址范围 ac5.ac0水平地址范围 ac3ac0绘图

19、ram 的地址计数器(ac)只会对水平地址(x 轴)自动加一,当水平地址=0fh 时会重新设为 00h 但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。gdram 的坐标地址与资料排列顺序如下图:2.2.3公农历转换1)概述、公历是全世界通用的历法以地球绕太阳的一周为一年,一年365 天,分为12 个月: 1 3 5 7 8 10 12 月为31 天, 2 月为28 天,其余月份为30 天。事实上地球绕太阳一周共365 天5 小时48 分46 秒,比公历一年多出5 小时48分46 秒。为使年误差不累积,公历年用闰年法来消除年误差 ,由于每年多出5

20、 小时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 天,通过设置大小月使农历日始终与月亮与地球的位置相对

21、应,为了使农历的年份与公历年相对应,农历通过设置闰月的办法使它的平均年长度与公历年相等,农历是中国传统文化的代表之一并与农业生产联系密切,中国人民特别是广大农民十分熟悉并喜爱农历。、公历与农历是我国目前并存的两种历法各有其固有的规律,农历与月球的运行相对应其影响因素多,它的大小月和闰月与天体运行有关,计算十分复杂且每年都不一致,因此要用单片机实现公历与农历的转换用查表法是最方便实用的办法。、51 系列单片机因其在功能上能满足大部份对速度要求不高的应用场合,且价格低廉开发工具普及程度高,是目前应用最多的单片机之一,本文介绍一种用51 单片机实现从1901 年到2099 年,199 年公历日到农历

22、日及星期的转换方法,并向读者提供完整的51 汇编程序。2)基本原理、实现公历与农历的转换一般采用查表法,按日查表是速度最快的方法,但51 单片机寻址能力有限不可能采用按日查表的方法,除按日查外我们可以通过按月查表和按年查表的方法,再通过适当的计算来确定公历日所对应的农历日期,本文采用的是按年查表法最大限度地减少表格所占的程序空间。、对于农历月来说大月为30 天小月为29 天,这是固定不变的,这样我们就可用1 个bit 位来表示大小月信息,农历一年如有闰月为13 个月,否则是12 个月,所以一年需要用13 个bit 。闰月在农历年中所在的月份并不固定大部分闰月分布在农历2 8 月但也有少量年份在

23、9 月以后,所以要表示闰月的信息至少要4 个bit。 在这里我们用4 个bit的值来表示闰月的月份值,为0 表示本年没有闰月,有了以上信息还不足以判断公历日对应的农历日,因为还需要一个参照日,我们选用农历正月初一所对应的公历日期作参照日,公历日最大为31 日,需要5 个bit 来表示,而春节所在的月份不是1 月就是2 月,用1bit 就够了考虑到表达方便我们用2bit 来表示春节,月2bit 的值直接表示月份,这样一年的农历信息只用3 个字节就全部包括了。、计算公历日对应的农历日期的方法,先计算出公历日离当年元旦的天数,然后查表取得当年的春节日期,计算出春节离元旦的天数,二者相减即可算出公历日

24、离春节的天数以后只要根据大小月和闰月信息减一月天数,调整一月农历月份即可推算出公历日所对应的农历日期,如公历日不到春节日期农历年要比公历年小一年,农历大小月取前一年的信息,农历月从12 月向前推算。、公历日是非常有规律的所以公历日所对应的星期天可以通过计算直接得到,理论上公元0 年1 月1 日为星期日,只要 求得公历日离公元0 年1 月1 日的日子数除7 后的余数就是星期几,为了简化计算采用月校正法,根据公历的年月日可直接计算出星期天,其算法是日期年份所过闰年数,月校正数之和除7 的余数就是星期几,但如果是在闰年又不到3 月份,上述之和要减一天再除7 ,其1 12 月的校正数据为6 2 2 5

25、 0 3 5 1 4 6 2 4 在本程序中采用1 个字节表示年份闰年数也只计算1900 年以后的闰年数所以实际校正数据也和上述数据不同。三 系统硬件的设计3.1系统硬件电路设计3.1.1系统硬件框图如图时钟芯片ds1302串口at89c51p2口led显示器驱动电路键盘输入3.1.2 at89s51单片机本系统采用的是美国atmel公司生产的at89c51单片机,首先我们来熟悉一下at89c51单片机的外部引脚和内部结构。1).单片机的引脚功能at89c51单片机有40个引脚。l vcc:电源电压+5vl gnd:接地l p0口:p0口是一组8位漏极开路型双向i/o口,也即地址/数据总线复用

26、口。作为输出口用时,每位能驱动8个ttl逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线服用,在访问期间激活内部上拉电阻。在flash编程时,p0口接收指令字节,而在程序校验时,输出指令字节,校验时要求外接上拉电阻。l p1口:p1口是一个带内部上拉电阻的8位双向i/o,p1的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。 flash 编程和程序校验期间,p1接收低

27、8位地址。l p2口:p2口是一个带内部上拉电阻的8位双向i/o,p2的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行movxdptr指令)时,p2口送出高8位地址数据。在访问8位地址的外部数据存储器(movx ri指令)时,p2口线上的内容(也即特殊功能寄存器(sfr)区中p2寄存器的内容),在整个访问期间不改变。flash 编程和程序校验期间,p2亦接收低高位地址和其他控制信号。

28、l p3口:p3口是一组带内部上拉电阻的8位双向i/o,p3的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对p3口写入“1”时,它们被内部的上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的p3口将用上拉电阻输出电流。p3口除了作为一般的i/o口线外,更重要的用途是它的第二功能,见表3-1所示:p3口还接收一些用于flash闪速存储器编程和程序校验的控制信号。表3-1 p3口的第二功能图端口引脚第二功能p3.0rxd(串行输入口)p3.1txd(串行输出口)p3.2int0(外中断0)p3.3int1(外中断1)p3.4t0(定时/计时器0外部输入)p3.5t1(定时/计时器1

29、外部输入)p3.6wr(外部数据存储器写选通)p3.7rd(外部数据存储器读选通)l rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将使单片机复位。wdt溢出将使引脚输出高电平,设置sfr auxr的disrt0(地址8eh)可打开或关闭该功能。disrt0位缺省为reset输出高电平打开状态。l ale/prog:当访问外部程序存储器或数据存储器时,ale(地址锁存器允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ale仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ale脉

30、冲。对flash存储器编程期间,该引脚还用于输入编程脉冲(prog)。如有必要,可通过多特殊功能寄存器(sfr)区中的8eh单元的d0位置,可禁止ale操作。该位置后,只有一条movx和movc指令ale才会被激活。另外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ale无效。l psen:程序存储允许(psen)输出是外部程序存储器的读选通信号,当at89c51由外部程序存储器取指令(或数据)时,每个机器周期两次psen有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的psen信号。l ea/vpp:外部访问允许。欲使cpu仅访问外部程序存储器(地址为0000hffffh),ea

31、端必须保持低电平(接地)。需要注意的是:如果加密位lb1被编程,复位时内部会锁存ea端状态。如ea端为高电平(接vcc端),cpu则执行内部程序存储器中的指令。flash存储器编程时,该引脚加上+12v的变成电压vpp.l xtal1:振荡器反相放大器及内部时钟发生器的输入端。l xtal2:振荡器反相放大器的输出端。at89c51单片机内部结构31.3).at89c51单片机与mcs-51完全兼容 l 看门狗(wdt):wdt是一种需要软件控制的复位方式。wdt 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(wdtrst)构成。wdt 在默认情况下无法工作;为了激活wdt,用户必

32、须往wdtrst 寄存器(地址:0a6h)中依次写入01eh 和0e1h。当wdt激活后,晶振工作,wdt在每个机器周期都会增加。wdt计时周期依赖于外部时钟频率。除了复位(硬件复位或wdt溢出复位),没有办法停止wdt工作。当wdt溢出,它将驱动rsr引脚输出一个高电平。l 可编程串口(uart)在at89c51中,uart 的操作与at89c51 和at89c52 一样。at89c51系列单片机的串行通信口可以工作于同步和异步通信方式。当工作于异步方式时,它具有全双工的操作功能,也就是说,它可以同时进行数据的发送和接收。串行口内的接收器采用的是双缓冲结构,能够在接收到的第一个字节从接收寄存

33、器读走之前就开始接收第二个字节(当然,如果第二个字节接收完毕,而第一个字节仍然没有被读走,那将会丢掉一个字节)。串行口的发送和接收操作都是通过特殊功能寄存器中的数据缓冲寄存器sbuf进行的,但在sbuf的内部,接收寄存器和发送寄存器在物理结构上是完全独立的。如果将数据写入sbuf,数据会被送入发送寄存器准备发送。如果执行sbuf指令,则读出的数据一定来自接收缓存器。因此,cpu对sbuf的读写,实际上是分别访问2个不同的寄存器。这2个寄存器的功能决不能混淆。l 振荡电路:at89c51系列单片机的内部振荡器,由一个单极反相器组成。xtal1反相器的输入,xtal2为反相器的输出。可以利用它内部

34、的振荡器产生时钟,只要xtal1和xtal2引脚上一个晶体及电容组成的并联谐振电路,便构成一个完整的振荡信号发生器,此方式称为内部方式。另一种方式由外部时钟源提供一个时钟信号到xtal1端输入,而xtal2端浮空。在组成一个单片机应用系统时,多数采用这种方式,这种方式结构紧凑,成本低廉,可靠性高。在电路中,对电容c1和c2的值要求不是很严格,如果使用高质的晶振,则不管频率为多少,c1、c2通常都选择30pf。l 定时/计数器:at89c51单片机内含有2个16位的定时器/计数器。当用于定时器方式时,定时器的输入来自内部时钟发生电路,每过一个机器周期,定时器加1,而一个机器周期包含有12个振荡周

35、期,所以,定时器的技术频率为晶振频率的1/12,而计数频率最高为晶振频率的1/24。为了实现定时和计数功能,定时器中含有3种基本的寄存器:控制寄存器、方式寄存器和定时器/计数器。控制寄存器是一个8位的寄存器,用于控制定时器的工作状态,方式寄存器是一个8位的寄存器,用于确定定时器的工作方式,定时器/计数器是16位的计数器,分为高字节和低字节两部分。l ram:高于7fh内部数据存储器的地址是8位的,也就是说其地址空间只有256字节,但内部ram的寻址方式实际上可提供384字节。的直接地址访问同一个存储空间,高于7fh的间接地址访问另一个存储空间。这样,虽然高128字节区分与专用寄器 ,即特殊功能

36、寄存器区的地址是重合的,但实际上它们是分开的。究竟访问哪一区,存是通过不同的寻址方式加以区分的。l sfr:sfr是具有特殊功能的所有寄存器的集合,共含有22个不同寄存器,它们的地址分配在80hffh中。虽然如此,不是所有的单元都被特殊功能寄存器占用,未被占用的单元,其内容是不确定的。如对这些单元进行读操作,得到的是一些随机数,而写入则无效,所以在编程时不应该将数据写入这些未确定的地址单元中,特殊功能寄存器主要有累加器acc、b寄存器、程序状态字寄存器psw、堆栈指针sp、数据指针dptr、i/o端口、串行口数据缓冲器sbuf、定时器寄存器、捕捉寄存器、控制寄存器。l 中断系统:at89c51

37、单片机有6个中断源,中断系统主要由中断允许寄存器ie、中断优先级寄存器ip、优先级结构和一些逻辑门组成。ie寄存器用于允许或禁止中断;ip寄存器用于确定中断源的优先级别;优先级结构用于执行中断源的优先排序;有关逻辑门用于输入中断请求信号。在整个中断响应过程中cpu所执行的操作步骤如下:(1)完成当前指令的操作(2)将pc内容压入堆栈(3)保存当前的中断状态(4)阻止同级的中断请求(5)将中断程序入口地址送pc寄存器(6)执行中断服务程序(7)返回3.1.4 实时时钟芯片 ds1302 现在流行的串行时钟电路很多,如ds1302、 ds1307、pcf8485等。这些电路的接口简单、价格低廉、使

38、用方便,被广泛地采用。本文介绍的实时时钟电路ds1302是dallas公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768khz晶振。 ds1302 是美国dallas公司推出的一种高性能、低功耗、带ram的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5v5.5v。采用三线接口与cpu进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或ram数据。ds1302内部有一个318的用于临时性存放数据的ram寄存器。ds1302是ds1202的升级产品,

39、与ds1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 ds1302的引脚排列,其中vcc1为后备电源,vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302由vcc1或vcc2两者中的较大者供电。当vcc2大于vcc10.2v时,vcc2给ds1302供电。当vcc2小于vcc1时,ds1302由vcc1供电。x1和x2是振荡源,外接32.768khz晶振。rst是复位/片选线,通过把rst输入驱动置高电平来启动所有的数据传送。rst输入有两种功能:首先,rst接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,rst提供

40、终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电运行时,在vcc2.5v之前,rst必须保持低电平。只有在sclk为低电平时,才能将rst置为高电平。i/o为串行数据输入输出端(双向),后面有详细说明。sclk始终是输入端。ds1302有下列几组寄存器: ds1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8dh,写时80h8ch),存放的数据格式为 bcd 码形式,如图所示。ds1302有关日历、时间的寄存器小时寄存器(85h、84

41、h)的位7用于定义 ds1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示 pm。在24小时模式时,位5是第二个10小时位。秒寄存器(81h、80h)的位7定义为时钟暂停标志(ch)。当该位置为1时,时钟振荡器停止,ds1302处于低功耗状态;当该位置为0时,时钟开始运行。控制寄存器(8fh、8eh)的位7是写保护位(wp),其它7位均置为0。在任何的对时钟和 ram 的写操作之前,wp 位必须为0。当wp 位为1时,写保护位防止对任一寄存器的写操作。 ds1302有关 ram 的地址ds1302中附加31字节静态 ram 的地

42、址如图所示。 ds1302的工作模式寄存器所谓突发模式是指一次传送多个字节的时钟信号和 ram 数据。突发模式寄存器如图所示。此外,ds1302还有充电寄存器等。2 读写时序说明ds1302是 spi 总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与 ds1302通信,首先要先了解 ds1302的控制字。ds1302的控制字如图。控制字(即地址及命令字节)控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到 ds1302中。位6:如果为0,则表示存取日历时钟数据,为1表示存取 ram 数据;位5至位1(a4a0):指示操作单元的地址;位0(最低有效

43、位):如为0,表示要进行写操作,为1表示进行读操作。控制字总是从最低位开始输出。在控制字指令输入后的下一个sclk 时钟的上升沿时,数据被写入 ds1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个 sclk 脉冲的下降沿读出 ds1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图数据读写时序3 电路原理图:电路原理图如图8,ds1302与单片机的连接也仅需要3条线:ce 引脚、sclk 串行时钟引脚、i/o 串数据引脚,vcc2为备用电源,外接32.768khz 晶振,为芯片提供计时脉冲。四 系统的软件设计电子万年历的功能是在程序控制下实现的。该系统

44、的软件设计方法与硬件设计相对应,按整体功能分成多个不同的程序模块,分别进行设计、编程和调试,最后通过主程序将各程序模块连接起来。这样有利于程序修改和调试,增强了程序的可移植性。4.1 主程序2)主程序流程图如图4-1所示:12864初始化1302初始化闹钟计数器开始从1302读取数据键盘扫描2)从1302中取数据读取1302时间、日期开始系统初始化是否时间调整调整时间、日期4.2主程序void main()/初始化year=11;month=8;day=15;hour=22;minute=47;second=55;fgf=-;data1=0; init(); /1602初始化调用 init_1

45、302(); /1302初始化调用 while(1) display1(); /从1302中取数据 display2(); /12864显示 key1(); /键盘扫描 key2(); aclock();/闹钟refer();/查询 counter(); /计数器 4.3 读取日期和时间程序/1302取数 void display1(void) uchar read; read=readset1302(0x81); second=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x83); minute=(read&0x70)4)*10+(read

46、&0x0f); read=readset1302(0x85); hour=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x87); day=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x89); month=(read&0x70)4)*10+(read&0x0f); read=readset1302(0x8d); year=(read&0xf0)4)*10+(read&0x0f); 4.4 显示子程序.void display2(void)/年月日 year=(2000+year); lcd_

47、writecom(0x80);delay(1); lcd_writedate(table3year/1000);delay(1);lcd_writedate(table3(year%1000)/100);delay(1);lcd_writedate(table3(year%1000)%100)/10);delay(1); lcd_writedate(table3year%10);delay(1);lcd_writedate(fgf);delay(1); lcd_writedate(table3month/10);delay(1); lcd_writedate(table3month%10);d

48、elay(1); lcd_writedate(fgf);delay(1); lcd_writedate(table3day/10);delay(1);lcd_writedate(table3day%10 ); /时分秒 lcd_writecom(0x80+0x40);delay(1); lcd_writedate(table3hour/10);delay(1); lcd_writedate(table3hour%10);delay(1);lcd_writedate(fgf);delay(1); lcd_writedate(table3minute/10);delay(1); lcd_write

49、date(table3minute%10);delay(1); lcd_writedate(fgf);delay(1); lcd_writedate(table3second/10);delay(1);lcd_writedate(table3second%10);4.5 闹钟子程序if(year1=year)if(month1=month)if(day1=day)if(hour1=hour)if(minute1=minute)if(second1=second)voice(); else五 proteus使用5.1编程环境proteusproteus软件是由英国labcenter electr

50、onics 公司开发的eda工具软件,由isis和ares两个软件构成,其中isis是一款便捷的电子系统仿真平台软件,ares是一款高级的布线编辑软件,它集成了高级原理布线图、混合模式spice电路仿真、pcb设计以及自动布线来实现一个完整的电子设计。5.2用proteus isis对电子万年历的硬件电路设计通过proteus isis软件的vsm(虚拟仿真技术),用户可以对模拟电路、数字电路、模数混合电路,以及基于微控制器的系统连同所有外围接口电子元器件一起仿真。用proteus isis设计硬件电路的过程: 选择设计图纸的到小根据设计所使用到元器件的多少,选择合适大小的设计图纸,操作是单击菜单栏上的systemset sheet size ,然后弹出如图5-1所示的对话框,从中选择合适大小的图纸,也可以选择user进行图纸的自定义设置。在设计过程中也可以通过此方法调整图纸的大小。图 5-1 选取仿真所需的元器件 选取元器件的方式是,单击如图5-2所示的按钮“p”。会弹出如图5-3所示从此窗口的左上角的“keywords”中输入电子万年历设计用到的器件,如输入“at89c51

温馨提示

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

评论

0/150

提交评论