电子日历实习报告.docx

上传人:b****7 文档编号:10613461 上传时间:2023-02-21 格式:DOCX 页数:29 大小:953.52KB
下载 相关 举报
电子日历实习报告.docx_第1页
第1页 / 共29页
电子日历实习报告.docx_第2页
第2页 / 共29页
电子日历实习报告.docx_第3页
第3页 / 共29页
电子日历实习报告.docx_第4页
第4页 / 共29页
电子日历实习报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

电子日历实习报告.docx

《电子日历实习报告.docx》由会员分享,可在线阅读,更多相关《电子日历实习报告.docx(29页珍藏版)》请在冰豆网上搜索。

电子日历实习报告.docx

电子日历实习报告

 

重庆科技学院

学生实习(实训)总结报告

学院:

_电气与信息工程学院__专业班级:

______

学生姓名:

_百里潇湘__________学号:

__201344XXXX__

实习(实训)地点:

_I512_________________________

报告题目:

_关于多功能电子日历的实习报告_____________

报告日期:

2015年07月10日

指导教师评语:

_______________________________________

_____________________________________________________________________________________________________________________________________________________________________________________________________________

成绩(五级记分制):

_____________

指导教师(签字):

_____________________

目录

一、实验目的意义和任务1

1.1设计目的意义1

1.2任务1

二、实习任务的方案2

2.1单片机芯片的选择方案2

2.2显示模块选择方案2

2.3时钟芯片的选择方案2

2.4电路设计最终方案决定2

三、系统硬件设计3

3.1电路设计框图3

3.2系统硬件概述3

3.3单片机的最小系统3

3.4时钟电路DS13024

3.5显示电路的设计6

四、系统软件设计8

4.1主程序流程图8

4.2DS132程序9

五、调试及性能分析12

5.1调试步骤12

5.2性能分析13

六、心得体会13

参考文献13

附录1系统总程序14

附录2系统电路图20

一、实验目的意义和任务

1.1设计目的意义

万年历是我国古代传说中最古老的一部太阳历。

为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。

而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。

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

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

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

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

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

 

二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。

电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。

所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。

由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。

1.2任务

1.2.1设计目的

培养片机系统的实际应用能力,掌握单片机系统设计、调试技能。

通过实训,掌握单片机最小系统、定时器及中断的应用,掌握按键、LED显示等接口技术,完成一个单片机应用系统的设计,并写出设计报告。

1.2.2设计要求

要求设计的多功能日历完成以下功能:

①实时显示年、月、日

②实时显示星期

③实时显示时、分、秒(24小时计时法)

④扩展功能:

设定时间修改功能,闹钟功能或具有报警提示功能(用蜂鸣器或LED提示均可)。

二、实习任务的方案

2.1单片机芯片的选择方案

方案一:

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

方案二:

采用STC89C52,片内ROM全都采用FlashROM能以3V的超底压工作,同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能且具有在线编程可擦除技术,对所下载的程序能够加密,比较安全。

当在对电路进行调试时由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。

所以选择采用STC89C52作为主控制系统。

2.2显示模块选择方案

方案一:

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

方案二:

采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字,所以也不用此种作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,字符,显示多样,视觉效果较好,清晰可见外形美观,与普通数码管相比功耗较小,硬件连接简单。

所以显示部分采用1602液晶。

2.3时钟芯片的选择方案

方案一:

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

采用此种方案虽然减少芯片的使用,节约成本。

但是,实现的时间误差较大。

所以不采用此方案。

方案二:

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

2.4电路设计最终方案决定

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

采用STC89C52作为主控制系统,DS1302提供时钟,1602液晶作为显示。

三、系统硬件设计

3.1电路设计框图

图3.1电路设计框图

3.2系统硬件概述

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

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

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

可产生年、月、日、周日、时、分、秒,具有使用寿命长精度高和低功耗等特点,同时具有掉电自动保存功能,本电路采用DS1302单字节传送方式实现与主控机之间数据的传送,显示部份由LED1602构成。

3.3单片机的最小系统

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

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一8端,在片内它是振荡器倒相放大器的输出,第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。

图3.2主控制系统

3.4时钟电路DS1302

3.4.1.DS1302的性能特性

图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始终是输入端。

图3.3DS1302引脚图

 

3.4.2 DS1302的控制字节 

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

控制字总是从最低位开始输出。

在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。

图3.4DS1302控制字节

3.4.3DS1302时钟寄存器

图3.5时钟寄存器图

时钟/日历包含在7个寄存器中,数据在时钟/日历寄存器中是二进制编码的十进制格式存储的,也就是常说的BCD码存储的。

时钟寄存器的第8个字节是写保护寄存器。

当WP为“1”的时候是开启写保护,这个时候是禁止对DS1302进行写操作的。

当WP为“0”的时候是关闭写保护,这个时候才能对DS1302进行写操作。

3.4.3DS1302电路

图3.6DS1302电路图

从电路图中我们可以看到,RST片选使能引脚接到了单片机的P3.0引脚,SCLK时钟引脚接到而来单片机的P3.3引脚,IO引脚接到了单片机的P2.4引脚。

3.5显示模块的设计。

3.5显示电路的设计

3.5.1LED1602介绍

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。

LED1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

3.5.2LED1602的引脚功能

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.1所示:

 

表3.1引脚接口说明表

第1脚:

VSS为地电源。

第2脚:

VDD接5V正电源。

 

第3脚:

VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

 

第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

 

第5脚:

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

 

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

 

第15脚:

背光源正极。

 

第16脚:

背光源负极。

3.5.3电路图

LED1602液晶显示模块可以和单片机直接接口电路如下图所示

图3.7显示电路图

四、系统软件设计

4.1主程序流程图

 

图4.1主程序流程图

 

主程序如下:

voidmain(void)

{

ucharyear=0x15,

month=0x06,

day=0x30,

hour=0x23,

min=0x24,

sec=0x55;

PSB=0;

InitLCD();

DisableWP();

WriteControl(0xa6);

WriteSec(sec);

WriteMin(min);

WriteHr(hour);

WriteWeek(week);

WriteDay(day);

WriteMonth(month);

WriteYear(year);

TMOD=0x11;

TH0=THCO;

TL0=TLCO;

TR0=1;

ET0=1;

EA=1;

4.2DS132程序

voidwrite(ucharucDa)

{

uchari;

ACC=ucDa;

for(i=8;i>0;i--)

{

T_IO=ACC_0;

T_CLK=1;

T_CLK=0;

ACC=ACC>>1;

}

}

ucharread(void)

{

uchari;

for(i=8;i>0;i--)

{

ACC=ACC>>1;T_IO=1;

ACC_7=T_IO;

T_CLK=1;

T_CLK=0;

}

return(ACC);

}

voidWriteRTC_Byte(ucharucAddr,ucharucDa)

{

T_RST=0;;

T_CLK=0;;

T_RST=1;;

write(ucAddr);

write(ucDa);;;;

T_CLK=1;;

T_RST=0;

}

ucharReadRTC_Byte(ucharaddress)

{

T_RST=0;

T_CLK=0;;

T_RST=1;;

write(address);

read();

return(ACC);

}

ucharReadSec(void)

{

ucharx;

x=ReadRTC_Byte(0x81);

returnx;

}

ucharReadMin(void)

{

ucharx;

x=ReadRTC_Byte(0x83);

returnx;

}

ucharReadHr(void){

ucharx;

x=ReadRTC_Byte(0x85);

returnx;

}

ucharReadDay(void)

{

ucharx;

x=ReadRTC_Byte(0x87);

returnx;

}

ucharReadMonth(void)

{

ucharx;

x=ReadRTC_Byte(0x89);

returnx;

}

ucharReadYear(void)

{

ucharx;

x=ReadRTC_Byte(0x8d);

returnx;

}

voidWriteSec(ucharucDa)

{

WriteRTC_Byte(0x80,ucDa);

}

voidWriteMin(ucharucDa)

{

WriteRTC_Byte(0x82,ucDa);

}

voidWriteHr(ucharucDa)

{

WriteRTC_Byte(0x84,ucDa);

}

voidWriteDay(ucharucDa)

{

WriteRTC_Byte(0x86,ucDa);

}

voidWriteMonth(ucharucDa)、{

WriteRTC_Byte(0x88,ucDa);

}

voidWriteYear(ucharucDa)

{

WriteRTC_Byte(0x8c,ucDa);

}

voidWriteControl(ucharucDa)

{

WriteRTC_Byte(0x90,ucDa);

}

voidDisableWP(void)

{

WriteRTC_Byte(0x8E,0);

}

 

5、调试及性能分析

5.1调试步骤

打开Proteus软件,按照方案所选的电路元件来设计整体电路,线把个芯片按一定的位置放好,然后对相应的对象进行连接,连接时需仔细,以免调试时发生错误。

做好之后把编程所生成的。

HEX文件加载到AT89C51中,运行仿真软件,查看运行效果。

如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。

对于硬件,在电子日历的设计调试中遇到了这类的问题。

 例如:

(1)单片机晶振不起振 

(2)LCD1602液晶的VDD 与VSS 引脚接反了,当时也没接保护电阻,      

电容,结果把液晶发热烧坏了。

 解决:

①:

根据仪器的测试,发现电路引脚有接错的现象,重新焊接后晶振, 复位正常,程序能够下载。

②:

重新买了个液晶,把VDD与VSS重新接到 正确的引脚。

5.2性能分析

经过多次的反复测试与分析,实习的最后成品符合了任务所给的要求,并且实现了显示年,月,日,星期,时,分,秒等功能,

六、心得体会

通过接近两个星期的单片机课程设计实训,让我感触颇深。

这次我们组选择了一个比较实用的课题——可调的电子万年历与温度显示设计,在本次设计中,设计到了我们以前从没接触到的一些新的芯片,一块是实时时钟DS1302芯片,一块是液晶显示器LCD1602不得不说这是一个具有挑战性的设计,在这短暂的两个星期内既要掌握两、一块芯片的工作原理,各个引脚的功能,连接方法,还要掌握初始化等。

因此两个星期的时间是非常的紧迫,但是通过我们的不断努力在两个星期之内还是非常圆满的设计出来了,当然在设计过程中也遇到了一些困难,不过我们在网上下载了一些资料、视频等材料,通过仔细查阅把这些问题都给解决了,在设计过程中主要遇到的一些难道在,第一:

是在液晶显示的设计上面出现的问题,我们采用的芯片是LCD1602是2行16列的芯片,由于是自己动手编的程序,在初始化上需要注意第一行和第二行的首地址,而且在编源程序代码的过程中,显示时,总是在两行显示同样的字符,但是我们借助于图书馆、网络等资源将该问题解决了。

第二:

对于时间和日期修改时所用的按键编程上出现了一点小问题,主要原因是因为C语言编程方面还不是很熟悉,才会出现这些问题。

第三:

老师要求我们改为串行通信,由于时间的问题我们就没有再改了。

不过,总的来说经过谢老师的指导与组员的努力还是能够完满的完成了这次的课程设计。

不能绝对的说整个系统的每一个部件每一个功能都完全掌握了,只能说我们对它表面的功能、工作原理和各个引脚的功能等都是比较清楚的。

通过此次课程设计让我学到了很多新的知识点,同时也让我学会了自主学习和团队精神,并且将理论用实践来证明。

如果此次课程设计不是用软件proteus和keil仿真我相信我们会学到更多,因为很多方面在仿真是看不出来问题的,只有自己动手焊板子,一步一步脚踏实地才能学得会。

 

参考文献

[1]张毅刚.单片机原理及接口技术.人民邮电出版社,2011.08

[2]张毅辉.李家庆.单片机系统综合训练指导书.重庆科技学院

 

附录1系统总程序

#include"reg52.h"

#include"12864.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineTHCO0xf8//11.0592MHZ晶振,定时2ms时间常数值

#defineTLCO0xcb

ucharData_Buffer[]={0,0,0,0,0,0,0,0,0,0,0,0};//Äê?

¢ÔÂ?

¢ÈÕ?

¢Ê±?

¢·Ö?

¢Ãë?

÷Á?

λÊý

sbitT_CLK=P3^6;

sbitT_IO=P3^7;

sbitT_RST=P2^3;

sbitACC_0=ACC^0;

sbitACC_7=ACC^7;

bitflag=0;

///***************************************/

///以下为DS1302驱动程序

//********************************************/

//写一字节

voidwrite(ucharucDa)

{

uchari;

ACC=ucDa;

for(i=8;i>0;i--)

{

T_IO=ACC_0;

T_CLK=1;

T_CLK=0;

ACC=ACC>>1;

}

}

//读一字节

ucharread(void)

{

uchari;

for(i=8;i>0;i--)

{

ACC=ACC>>1;T_IO=1;

ACC_7=T_IO;

T_CLK=1;

T_CLK=0;

}

return(ACC);

}

//写数据

voidWriteRTC_Byte(ucharucAddr,ucharucDa)

{

T_RST=0;;

T_CLK=0;;

T_RST=1;;

write(ucAddr);

write(ucDa);;;;

T_CLK=1;;

T_RST=0;

}

//读数据

ucharReadRTC_Byte(ucharaddress)

{

T_RST=0;

T_CLK=0;;

T_RST=1;;

write(address);

read();

return(ACC);

}

ucharReadSec(void)//从DS1302中读出秒字节

ucharx;

x=Rea

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

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1