基于单片机的电子日历的毕业设计.docx

上传人:b****0 文档编号:10113028 上传时间:2023-05-23 格式:DOCX 页数:36 大小:166.43KB
下载 相关 举报
基于单片机的电子日历的毕业设计.docx_第1页
第1页 / 共36页
基于单片机的电子日历的毕业设计.docx_第2页
第2页 / 共36页
基于单片机的电子日历的毕业设计.docx_第3页
第3页 / 共36页
基于单片机的电子日历的毕业设计.docx_第4页
第4页 / 共36页
基于单片机的电子日历的毕业设计.docx_第5页
第5页 / 共36页
基于单片机的电子日历的毕业设计.docx_第6页
第6页 / 共36页
基于单片机的电子日历的毕业设计.docx_第7页
第7页 / 共36页
基于单片机的电子日历的毕业设计.docx_第8页
第8页 / 共36页
基于单片机的电子日历的毕业设计.docx_第9页
第9页 / 共36页
基于单片机的电子日历的毕业设计.docx_第10页
第10页 / 共36页
基于单片机的电子日历的毕业设计.docx_第11页
第11页 / 共36页
基于单片机的电子日历的毕业设计.docx_第12页
第12页 / 共36页
基于单片机的电子日历的毕业设计.docx_第13页
第13页 / 共36页
基于单片机的电子日历的毕业设计.docx_第14页
第14页 / 共36页
基于单片机的电子日历的毕业设计.docx_第15页
第15页 / 共36页
基于单片机的电子日历的毕业设计.docx_第16页
第16页 / 共36页
基于单片机的电子日历的毕业设计.docx_第17页
第17页 / 共36页
基于单片机的电子日历的毕业设计.docx_第18页
第18页 / 共36页
基于单片机的电子日历的毕业设计.docx_第19页
第19页 / 共36页
基于单片机的电子日历的毕业设计.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的电子日历的毕业设计.docx

《基于单片机的电子日历的毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子日历的毕业设计.docx(36页珍藏版)》请在冰点文库上搜索。

基于单片机的电子日历的毕业设计.docx

基于单片机的电子日历的毕业设计

河南工业职业技术学院

HenanPolytechnicInstitute

毕业设计(论文)

题目:

电子日历

班级:

姓名:

指导教师:

摘要

随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。

美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。

它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。

在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。

在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。

具体实现功能:

(1)显示年月日时分秒及星期信息

(2)具有可调整日期和时间功能

(3)与即时时间同步

3.2时间调整程序流程图....................................

5.1ProteusISIS简介.............................12

5.2Proteus运行流程.............................13

5.3Proteus功能仿真..............................14

1方案论证

1.1单片机芯片的选择方案和论证

方案一:

采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:

采用AT89S52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89S52作为主控制系统。

1.2显示模块选择方案和论证

方案一:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,虽然占用的单片机口线少,但连线还需要花费一点时间,所以也不用此种作为显示。

方案二:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,并且我做的最小系统上带一个TS1620-1,和AT89S52已经接好,省了很多麻烦,所以在此设计中采用LCD液晶显示屏。

1.3时钟芯片的选择方案和论证

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。

采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。

方案二:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。

1.4电路设计最终方案决定

综上各方案所述,对此次作品的方案选定:

采用AT89S52作为主控制系统;DS1302提供时钟;LCD液晶显示屏作为显示。

 

2系统的硬件设计与实现

2.1电路设计框图

LCD液晶显示屏显示模块

AT89S52

主控制模块

键盘模块

DS1302时钟模块

图1系统原理图

2.2系统硬件概述

本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。

可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;显示部份由LCD液晶显示屏显示。

2.3主要单元电路的设计

2.3.1单片机主控制模块的设计

AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。

第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。

如图2所示:

图2主控制系统

2.3.2时钟电路模块的设计

图.3示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

X1和X2是振荡源,外接32.768KHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc大于等于2.5V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。

SCLK始终是输入端。

图3DS1302的引脚图

2.3.3电路原理及说明

(1)时钟芯片DS1302的工作原理:

DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。

DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。

对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。

位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。

控制字节总是从最低位开始输入/输出的。

表.2为DS1302的日历、时间寄存器内容:

“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。

“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。

当“WP”为1时,写保护位防止对任一寄存器的写操作。

(2)DS1302的控制字节:

DS1302控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出

(3)数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

(4)DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。

此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。

时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。

DS1302与RAM相关的寄存器分为两类:

一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

2.3.4显示模块的设计

如图.4为LCD显示模块,和最小系统上的连线一样,无需修改

3系统的软件设计

3.1主程序流程框图

以AT89S52为核心,处理外转电路传进来的信号,实现时钟数据读取,保存,显示其及键盘操作。

 

开关控制子程序

 

 

图5主程序流程图

图6时间调整程序流程图

4测试与结果分析

4.1硬件测试

电子万年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。

在本成电子万年历的设计调试中遇到了很多的问题。

回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:

(1)LCD液晶显示屏显示部分已经连在最小系统上,节省了不少时间和精力。

(2)对万年历修改时间或日期时,有时LCD液晶显示屏被屏蔽掉,造成不亮现象。

解决:

根据仪器的测试,发现电路的驱动能力不足,最后在DS1302时钟芯片的/CS、SCLK、RET端接入5.1K的上拉电阻后,电路的驱动能力才能满足,即可解决不亮现象。

4.2软件测试

电子成年历是多功能的数字型,可以看当前日期,时间。

电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。

最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。

在软件的调试过程中遇到的主要问题是:

烧入程序后,LCD液晶显示屏显示亮度不好。

解决:

一遍旋转10K欧的滑动变阻器,一遍观看LCD显示屏,知道看到合适的亮度为止。

4.3测试结果分析与结论

4.3.1测试结果分析

1.在测试中遇到LCD液晶显示屏为不显示时,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏,滑动变阻器器没有调好:

查看烧写的程序是否正确无误,对程序进行认真修改。

4.3.2测试结论

经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。

同时在软件的编程方面得到更到的提高,对编程能力得到加强,同时对所学的知识得到很大的提高与巩固。

5Proteus软件仿真

5.1ProteusISIS简介

ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。

它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。

该软件的特点是:

(1)全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。

(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS-232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

(3)目前支持的单片机类型有:

ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

(4)支持大量的存储器和外围芯片。

总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,可仿真ARM、51、AVR、PIC。

 

5.2Proteus运行流程

ProteusISIS的工作界面是一种标准的Windows界面,如图所示。

包括:

标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。

运行Proteus程序后,进入软件的主界面。

通过左侧工具栏中的P(从库中选择元件命令)命令,在PickDevices左侧窗口中选择所需元件的关键字,然后放置元件并调整方向和位置以及参数设置,最后进行连线。

ProteusISIS的工作界面:

图8ProteusISIS的工作界面

5.3Proteus功能仿真

Proteus仿真效果

最后载入hex文件后可以进行模拟仿真,可以全速运行也可以单步调试运行。

 

图9运行按键

上电后后LED显示:

 

调节秒钟:

 

调节分钟:

 

图12

调节时钟:

 

图13

调节星期:

 

图14

调节日期:

 

图15

调节月份:

 

图16

调节年份:

 

图17

 

点击确定键显示:

 

图18

按键功能自上而下依次为:

选择修改项键、增大键、减小键、确定键。

图19

 

6课程设计总结与体会

制作这次课程设计一切都是从零开始,从最简单的画流程图起步,这次毕业设计可以圆满完成,跟单片机课程里面的课外作业是离不开的。

这次毕业设计从开始到制作成功前后超过了一个星期。

当电子万年历可以成功实现时,那种激动和喜悦只有自己可以体会。

在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。

较好的完成了设计,达到了预期的目的,完了最初的设想。

对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。

程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学讨论,理清了思路,反而得心应手。

在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。

也练就了我的耐心,做什么事都在有耐心。

此次课程设计中学到了很多很多东西,这是最重要的。

总之,此次课设使我的能力得到了全方位的提高,使得我的操作能力和专业技能都有了很大的提高。

在做课程设计的日子里得到了刘彦华老师的悉心指导和同学的帮助,在此向他们致以诚挚的谢意。

感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我对这次的设计完成有了信心和动力,我在此深表谢意。

 

参考文献

1.陈景初,《单片机应用系统设计与实践[M]》北京航空航天大学出版社。

2006

2.徐爱钧,彭秀华.《单片机高级语言编程与uVision2应用实践》电子工业出版社.2004

3.刘勇,《数字电路》.电子工业出版社.2004

4.王法能,《单片机原理及应用》科学出版社.2004

5.何立民.《MCS-51系列单片机应用系列设计[M]》北京航空航天大学出版社2006

6.李广弟,朱月秀,王秀山.《单片机基础[M]》北京航空航天大学出版社.2004

7.马家辰,《MCS-51单片机原理与接口技术[M]》哈尔滨工业大学出版社。

2005

8.陈正振,《电子电路设计与制作》广西交通职业技术学院信息工程系.2007

9.杨子文,《单片机原理及应用》西安电子科技大学出版社.2006

10.何立民.《MCS-51系列单片机应用系列设计[M]》航空航天大学出版社2004

附录一:

系统电路图

 

附录二:

系统程序

#include

#include

//#include"LCD1602.h"

//#include"DS1302.h"

#defineuintunsignedint

#defineucharunsignedchar

sbitDS1302_CLK=P1^7;//实时时钟时钟线引脚

sbitDS1302_IO=P1^6;//实时时钟数据线引脚

sbitDS1302_RST=P1^5;//实时时钟复位线引脚

sbitACC0=ACC^0;

sbitACC7=ACC^7;

charhide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;//秒,分,时到日,月,年位闪的计数

sbitSet=P2^0;//模式切换键

sbitUp=P2^1;//加法按钮

sbitDown=P2^2;//减法按钮

sbitout=P2^3;//立刻跳出调整模式按钮

chardone,count,temp,flag,up_flag,down_flag;

ucharTempBuffer[5],week_value[2];

voidshow_time();//液晶显示程序

/***********1602液晶显示部分子程序****************/

//PortDefinitions**********************************************************

sbitLcdRs=P2^5;

sbitLcdRw=P2^6;

sbitLcdEn=P2^7;

sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

//内部等待函数

**************************************************************************

unsignedcharLCD_Wait(void)

{LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;returnDBPort;}

//向LCD写入命令或数据

************************************************************

#defineLCD_COMMAND0//Command

#defineLCD_DATA1//Data

#defineLCD_CLEAR_SCREEN0x01//清屏

#defineLCD_HOMING0x02//光标返回原点

voidLCD_Write(bitstyle,unsignedcharinput)

{LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意顺序

LcdEn=1;_nop_();//注意顺序

LcdEn=0;_nop_();LCD_Wait();

}

//设置显示模式************************************************************

#defineLCD_SHOW0x04//显示开

#defineLCD_HIDE0x00//显示关

#defineLCD_CURSOR0x02//显示光标

#defineLCD_NO_CURSOR0x00//无光标

#defineLCD_FLASH0x01//光标闪动

#defineLCD_NO_FLASH0x00//光标不闪动

voidLCD_SetDisplay(unsignedcharDisplayMode)

{LCD_Write(LCD_COMMAND,0x08|DisplayMode);}

//设置输入模式************************************************************

#defineLCD_AC_UP0x02

#defineLCD_AC_DOWN0x00//default

#defineLCD_MOVE0x01//画面可平移

#defineLCD_NO_MOVE0x00//default

voidLCD_SetInput(unsignedcharInputMode)

{LCD_Write(LCD_COMMAND,0x04|InputMode);}

//初始化LCD************************************************************

voidLCD_Initial()

{LcdEn=0;

LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵

LCD_Write(LCD_COMMAND,0x38);

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动}

//液晶字符输入的位置************************

voidGotoXY(unsignedcharx,unsignedchary)

{if(y==0)LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}

//将字符输出到液晶显示

voidPrint(unsignedchar*str)

{while(*str!

='\0')

{LCD_Write(LCD_DATA,*str);str++;}}

/***********DS1302时钟部分子程序******************/

typedefstruct__SYSTEMTIME__

{

unsignedcharSecond;

unsignedcharMinute;

unsignedcharHour;

unsignedcharWeek;

unsignedcharDay;

unsignedcharMonth;

unsignedcharYear;

unsignedcharDateString[11];

unsignedcharTimeString[9];

}SYSTEMTIME;//定义的时间类型

SYSTEMTIMECurrentTime;

#defineA

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

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

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

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