基于89C52的电子万年历.docx

上传人:b****3 文档编号:13216559 上传时间:2023-06-12 格式:DOCX 页数:15 大小:291.74KB
下载 相关 举报
基于89C52的电子万年历.docx_第1页
第1页 / 共15页
基于89C52的电子万年历.docx_第2页
第2页 / 共15页
基于89C52的电子万年历.docx_第3页
第3页 / 共15页
基于89C52的电子万年历.docx_第4页
第4页 / 共15页
基于89C52的电子万年历.docx_第5页
第5页 / 共15页
基于89C52的电子万年历.docx_第6页
第6页 / 共15页
基于89C52的电子万年历.docx_第7页
第7页 / 共15页
基于89C52的电子万年历.docx_第8页
第8页 / 共15页
基于89C52的电子万年历.docx_第9页
第9页 / 共15页
基于89C52的电子万年历.docx_第10页
第10页 / 共15页
基于89C52的电子万年历.docx_第11页
第11页 / 共15页
基于89C52的电子万年历.docx_第12页
第12页 / 共15页
基于89C52的电子万年历.docx_第13页
第13页 / 共15页
基于89C52的电子万年历.docx_第14页
第14页 / 共15页
基于89C52的电子万年历.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于89C52的电子万年历.docx

《基于89C52的电子万年历.docx》由会员分享,可在线阅读,更多相关《基于89C52的电子万年历.docx(15页珍藏版)》请在冰点文库上搜索。

基于89C52的电子万年历.docx

基于89C52的电子万年历

目录

1设计要求3

2方案论证与对比3

2.1液晶显示器控制方式选择3

2.2并行接口动态显示电路选择3

2.3LCD液晶显示器的接口方法选择4

2.4液晶显示器限流电阻选择5

3系统硬件电路的设计6

3.1主控模块AT89C526

3.2显示模块电路设计7

4系统软件设计8

4.1系统软件概述8

4.2主要子程序设计9

4.2.1时钟中断服务子程序设计9

4.2.2时间调整子程序设计10

4.2.3判断闰年子程序设计10

4.2.4精度分析分析与计算11

4.2.5第一次初值的设置11

4.2.6重载初值的方法11

5系统仿真与测试12

5.1系统仿真12

5.2功能测试12

6总结13

参考文献14

 

1设计要求

本课题以AT89C52单片机为核心,设计并制作出智能LCD电子钟,具有以下基本功能:

能进行时间、年份、日期、星期显示;能区分是否闰年;能检测室温并显示。

扩展功能部分可以通过控制按键使时间暂停、可以调整校正时间并通过按键切换轮流显示时间、年份、日期、星期。

2方案论证与对比

2.1液晶显示器控制方式选择

采用LCD液晶显示,具有超精致影像画质、十足平面显示、节省空间、节省能源等优点,但按控制方式不同,LCD可分为被动矩阵式LCD及主动矩阵式LCD两种。

可根据不同需要采用不同的方式。

方案一被动矩阵式LCD

被动矩阵式LCD在亮度及可视角方面受到较大的限制,反应速度也较慢。

由于画面质量方面的问题,使得这种显示设备不利于发展为桌面型显示器,但成本低廉。

方案二主动矩阵式LCD

目前应用比较广泛的主动矩阵式LCD,也称TFT-LCD(ThinFilmTransistor-LCD,薄膜晶体管LCD)。

TFT液晶显示器是在画面中的每个像素内建晶体管,可使亮度更明亮、色彩更丰富及更宽广的可视面积。

与CRT显示器相比,LCD显示器的平面显示技术体现为较少的零件、占据较少的桌面及耗电量较小,但CRT技术较为稳定成熟。

相比之下,本设计当中选用方案二主动矩阵式LCD方式。

2.2并行接口动态显示电路选择

可以采取串行接口动态显示电路或者并行接口动态显示电路,比较如下:

方案一串行接口动态显示电路

利用8051系列单片机内部的串行接口,也可以实现动态显示及键盘处理。

这样不但可以节省8051的并行I/O接口,而且在大多数不用单行口的情况下,可免于扩展接口。

在这种方法中,串行口工作在方式0状态,相当于一个移位寄存器,其输入/输出通过RXD引脚,移位脉冲则由TXD输出。

每次输入或输出8位数据(一个字节)。

每输出一个字节,8051的硬件即自动使SCON寄存器中的中断TI置位,通过测试TI的状态,即可确定一个字节是否发送完毕。

见图2-1。

图2-1串行接口动态显示电路框图

方案二并行接口动态显示电路

直接用P0口作线选,P2作位选连接数码显示管。

见图2-2

图2-2动态显示电路框图

方案一中的串行接口动态显示电路显示方法有个很大的缺点,一旦计算机不执行显示程序,则显示立即停止。

如要维持显示,则须花费计算机很多时间。

而且在本次课程设计中,我们也有足够的I/O口,因此,选择并行接口动态显示电路较好。

2.3LCD液晶显示器的接口方法选择

方案一以硬件为主的LCD显示接口电路

这种接口方法的电路图见图2-3,可以看出,在数据总线和LCD之间,必须有锁存器或I/O接口电路,此外,还应有专门的译码/限流电阻。

通过译码器把1位十六进制或BCD码译为相应的显示段码,然后由限流电阻限制电流防止显示器因电流过大而烧坏。

这种接口方法仅用一条输出指令,就可以进行LCD显示。

但是所使用的硬件电路较多,而硬件译码缺乏灵活性,只能显示十进制数或十六进制。

图2-3硬件为主的LED显示接口电路框图

方案二以软件为主的LCD显示接口电路

这种接口方法的电路如图2-4,它以软件查表代替硬件译码的方法,不但省去了译码器,而且还能显示更多的字符,但是电阻限流是必不可少的。

本次设计采用这种接口电路。

图2-4以软件为主的LCD显示接口电路框图

2.4液晶显示器限流电阻选择

由于LCD的电流参数较小,为了防止因电流过大而被烧坏,能够帮助内存起到稳压作用,让内存工作更稳定,因此必须加入限流电阻。

限流电阻有两种实现方式,比较如下:

方案一直接用单个电阻限流

直接用单个电阻进行限流,散热快,但是既占空间又接线麻烦。

方案二用排阻进行限流

用多个电阻排列而成的排阻能减少占用的空间,易于连线。

综上分析,本设计采用方案二排阻限流。

3系统硬件电路的设计

经上述比较,本次作品采用以AT89C52为核心的单片机最小系统板,显示模块采用数码管动态扫描显示。

经过方案论证与比较,选择出最优方案的系统总体方案框图如图3-1所示。

 

 

3.1主控模块AT89C52

主控模块采用的是AT89C52单片机芯片。

AT89C52是一个低电压,高性能CMOS8位单片机,片内8KBROM全部采用FLASHROM技术,晶振时钟为12MHz。

器件采用ATMEL公司的高密度,肥易失性存储技术生产,兼容标准MCS-51指令系统,骗内置通用8位中央处理器和Flash存储单元。

AT89C52是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向I/O端口,分别记作P0、P1、P2、P3。

3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线。

第31引脚需要接高电位使单片机选用内部程序存储器。

P0-P3为可编成通用输入输出引脚,其功能用途由软件定义。

第9引脚是复位引脚,要接一个上电手动复位电路;第40脚为电源端VCC,接+5V电源,第20引脚为接地端VSS,通常在VCC和VSS引脚之间接0.1μF高频滤波电容。

第18、19脚之间接上一个12MHz的晶振为单片机提供时钟信号。

主控模块电路图见图3-2。

图3-2AT89C52单片机芯片

3.2显示模块电路设计

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

Flash编程或校验时,P2亦接收高位地址和一些控制信号。

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

本设计中要对时间、温度进行显示。

单片机AT89C52的P2口分别接LCD控制屏幕的显示。

而P0口用来显示信息的输入,为了防止电流过大而烧坏LCD,所以用排阻RESPACK-8来限流。

液晶显示电路图见图3-3。

图3-3显示模块电路

4系统软件设计

4.1系统软件概述

在编程上,首先进行了初始化,定义程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的分、秒、年、月、日、星期的存储单元。

调用闰年判断程序后,进入主程序中循环。

在主程序中,对不同的按键进行扫描,实现秒表,时间调整、开关屏设置等扩展功能。

时钟计时利用定时器T0中断子程序实现,秒表和时间调整闪烁程序由定时器T1的中断服务子程序实现。

考虑到实用性,在该电子钟的时间调整时采用了闪烁,而开关屏设置采用了符号标志。

在自动开、关屏设置子程序中,另外开辟内存单元用来存放开、关屏设置时间,而在另外的子程序中不断比较当前时间是否和设置时间相等并设置标志位,然后程序中检测标志位,从而实现开、关屏操作。

系统总体流程图见图4-1。

 

4.2主要子程序设计

显示完毕后,P2口和P1口复位,准备下一轮的显示。

在系统总体流程设计思想的指导下,分模块对程序进行设计,主要模块设计有时钟中断服务子程序设计、时间调整子程序设计、判断闰年子程序设计等。

各子程序分析如下:

4.2.1时钟中断服务子程序设计

首先设定定时器T0的初值,T0的最大定时不足1s,为便于计算,取定时50ms。

这样每50ms中断1次,中断20次为1s。

50ms的定时初值的计算如下:

0.05/(1/12*10^6/12))=C350H,补码为3CB0H。

启动定时器后,运行中断服务程序。

在中断服务程序中,由秒信号来计数,当达到60后向“分”进位;分计数,当达到60后向“时”进位;时计数,当达到24后向“日”进位;日计数,日超出当月上限后进位到“月”;月计数,当月计数到达12后向“年”进位……,在日计数程序中,日每增加一天,都对星期进行调整,具体为:

若上一天不是星期日,则直接在星期上加一,若上一天是星期日,则当前星期变为星期一。

4.2.2时间调整子程序设计

在主程序中通过按键进入时间调整界面,可实现年、月、日、星期及时间的调整。

每次调整时,调用闪烁程序,使相应的位闪烁,再通过按键进行加减调整。

闪烁程序也采用定时器T1中断实现,每次计时50ms,中断6次也就是0.3秒过后,闪烁标志位取反,显示熄灭。

在时间显示子程序中,单片机向P0口送段选信号,向P2口送位选信号,数码管采用动态扫描方式,位选信号每次左移一位,每次点亮一个数码管,一轮

4.2.3判断闰年子程序设计

程序中年每加一,则调用一次判断闰年子程序,再通过置标志平20H.3,以便于以后的程序识别(如在月加一程序中,就需要知道是否是闰年的2月还是平年的2月)。

判断闰年子程序的设计思想是:

不能被4整除的年份不是闰年;能被100整除但不能被400整除的年份不是闰年。

闰年判断流程图见图4-2。

 

4.2.4精度分析分析与计算

在MCS-51单片机中,脉冲源是由系统的晶振经过12分频后获得的,故定时器计数脉冲[4]周期为:

T=12/fosc

(1)

4.2.5第一次初值的设置

根据

(1)式可以分别算出定时器四种工作方式的最大计时时间。

但实际应用中,经常会有不同定时值的要求,可以采用预置数的方法来实现。

例如,方式1的最大计数为65536,现在假设需要定时计数100,那么我们可以设预置数为65436,让定时器经过100个脉冲周期后,就可达到65536。

我们称定时器中这种预置数为定时器的第一次初值。

下面推导第一次初值设置的公式。

设定时器在某种工作方式下计数的最大值为M(见表1),X0为第一次初值,T为

(1)式的计数周期,t为要求定时的溢出时间,则有:

t=(M-X0)*T

(2)

上式可化为:

X0=M-t/T(3)

4.2.6重载初值的方法

设置定时器第一次初值后并启动定时器,定时器开始计数。

若定时器中断处于开放状态,当定时器计满后,将会引发定时中断(T0中断入口地址为000BH),执行相应的中断处理程序。

定时器只有工作在方式2下方可自动重载前次初值,其余三种方式都不能自动重载。

因此,当希望定时器继续定时,需要在中断处理程序中重新赋定时器初值。

我们称这种在中断处理程序中重新赋定时器的初值为定时器的重载初值。

在定时精度要求不高的系统中,定时器的重载初值可以与第一次的初值相同,即可按(3)式重载。

但在定时精度要求较高的场合,就不能简单地按(3)式重载。

因为从定时器计满发出溢出中断请求到重载初值,存在一定的时间间隔,造成定时的延迟。

这个时间间隔包含两部分的延迟,第一是中断响应所需的延迟,包括执行转向中断服务程序的跳转指令所需要的2个机器周期和等待正在执行的指令执行完毕所需要1~4个机器周期;第二是重载初值所需的延迟,包括从中断服务程序第一条指令到重载初值之间所有指令的执行机器周期数。

综合以上两个延迟因素,考虑到计数的方便性,我们可以在中断服务程序中加入一条定时器停止计数指令,待重载初值后,再加入一条定时器启动计数指令,使定时器重新计数。

通过这样的技术处理后,以上的延迟时间等效于两个部分,即从定时器计数溢出后自动从0开始计数到关闭定时器计数所消耗的时间和关闭定时器到打开定时器所消耗的时间。

前部分时间可从定时器读出,后部分时间为从关闭定时器到打开定时器之间所有指令的执行时间。

综上所述,设Z定时器计数溢出后自动从0开始计数到关闭定时器计数所需要的时间,Y关闭定时器到打开定时器所需要的时间,X1为重载初值,则:

(M-X1+Y+Z)*T=t(4)

上式可化为:

X1=M-t/T+Y+Z(5)

5系统仿真与测试

5.1系统仿真

在仿真过程中,软件运用到Wave6000和Proteus7.12,先用Wave6000进行编程测试再通过Proteus7.12进行硬件仿真。

本单片机课程设计仿真效果如图5-1。

图5-1系统仿真效果图

5.2功能测试

表1功能测试

计时功能

LCD能显示当前的时、分、和秒,具体是时跟分一起显示,分跟秒一起显示,通过按键来切换

星期显示功能

通过按键可以切换到星期显示的界面,按返回键则重新回到主界面显示

时间调整功能

通过按键可以调整或设定年、月、日、星期、时、分,且能实现秒的微调功能

室温检测并显示功能

通过智能传感器DS18B20能够实现检测功能,并通过LCD能完成液晶显示功能

闰年功能

能计时到万年,且能自动判断闰年与平年,并实现正确的计时操作

经过反复测试,本系统已能达到设计所要求的所有功能。

6总结

通过十天的设计和调试,终于完成了设计任务,系统测试后,各项指标都达到了规定要求。

我的设计,在完成了预期功能的同时,另外我新增了时间暂停功能。

设计过程中也遇到过很多困难,特别是调试,花去了大量的时间,出不来预期的效果。

刚开始,在软件的编写与修改过程中也花费了大量的时间,主要是在平时的学习过程中,对程序的编写不熟练,许多问题凸现出来,成了拦路虎。

由此可知自己的水平还是相当有限,在以后的专业学习当中应该更加认真,更加深入地学习,在这次的设计中,经过自己的多次选材与调试,多参与实践,多通过实例来锻炼自己的实际操作和解决问题的能力。

后来出现问题时,我总是误以为是软件问题,查了好久才查出是一个小小的硬件连线错误,其实测试是应该从硬件起逐项排查到软件。

还有,测试时也最好是先一个模块地测试,都通过了才组合到一起再从整体上进行调试,否则一个小问题也会变得错综复杂。

整个设计与调试过程是一个让人兴奋与激动的过程,尽管有时也会因为调试不顺利而有点烦躁,但每次调试成功的喜悦又会马上冲刷掉原来的不快。

在本次设计过程中,我深深地体会到了纸上得来终觉浅的道理,不管是在学习态度还是专业技能方面都有了很大的改进和提高。

通过本次单片机的课程设计收获颇大。

通过十多天的学习和实践,这次设计终于取得了圆满成功。

设计过程中,遇到了很多困难,但是在老师和同学们的热忱帮助下,都得以顺利解决,在此对我可亲可敬的老师们和亲如兄弟的同学们表示衷心的感谢。

我定将这份深厚的感情永远铭记在心里,以此为动力,不断鞭策自己,激励自己,不断提高,不断进步,以后一定更加努力地学好每门课程,以此来报答大家。

 

参考文献

[1]李广弟.单片机基础(修订本).北京:

北京航空航天大学出版社,2004

[2]赵志刚,吴海彬编著.ProtelDXP实用教程.北京:

清华大学出版社;北京交通大学出版社,2004.11

[3]朱定华,戴汝平编著.单片微机原理与应用.北京:

清华大学出版社;北京交通大学出版社,2003.8

[4]楼然苗,李光飞编著.单片机课程设计指导.北京:

北京航空航天大学出版社,2007.7

[5]蔡明文,冯先成主编.单片机课程设计.武汉:

华中科技大学出版社,2007.3

[6]周立功等编著.单片机实验与实践.北京:

北京航空航天大学出版社,2004

指导教师评语:

 

成绩:

指导教师签字:

年月日

.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2