电子日历实习报告_第1页
电子日历实习报告_第2页
电子日历实习报告_第3页
电子日历实习报告_第4页
电子日历实习报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、重庆科技学院学生实习(实训)总结报告 学 院:_电气与信息工程学院_ 专业班级:_ _ _学生姓名:_ 百里潇湘_ 学 号:_201344XXXX_ _实习(实训)地点:_I512_ _ _报告题目:_ 关于多功能电子日历的实习报告_ 报告日期: 2015 年 07 月 10 日 指导教师评语: _ _ _ _ 成绩(五级记分制):_ _ 指导教师(签字):_目录一、实验目的意义和任务11.1 设计目的意义11.2任务1二、实习任务的方案22.1 单片机芯片的选择方案22.2 显示模块选择方案22.3 时钟芯片的选择方案22.4电路设计最终方案决定2三、系统硬件设计33.1 电路设计框图33.

2、2 系统硬件概述33.3 单片机的最小系统33.4 时钟电路 DS13024 3.5 显示电路的设计6四、系统软件设计84.1 主程序流程图84.2 DS132程序9五、 调试及性能分析125.1 调试步骤125.2性能分析13六、心得体会13参考文献13附录 1 系统总程序14附录2 系统电路图20一、实验目的意义和任务1.1 设计目的意义万年历是我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功 绩,便将这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录 一定时间范围内(比如100 年或更多)的具体阳历或阴历的日期的年历,方便有 需要的人查询使用,与原始历法并无直接联系。

3、 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不 断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年 补偿等多种功能,而且DS1302 的使用寿命长,误差小。对于数字电子万年历采用 直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时 间校准等功能。该电路采用AT89C51 单片机作为核心,功耗小,能在3V 的低压工 作,电压可选用35V 电压供电。 此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 二十一世纪是数字化技术高速发展的时代,而单片机在数字

4、化高速发展 的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦 是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历 的开发是国家之所需,社会之所需,人民之所需。由于社会对信息交换不断提高的 要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。1.2任务1.2.1 设计目的 培养片机系统的实际应用能力,掌握单片机系统设计、调试技能。通过实训,掌握单片机最小系统、定时器及中断的应用,掌握按键、LED显示等接口技术,完成一个单片机应用系统的设计,并写出设计报告。1.2.2

5、设计要求要求设计的多功能日历完成以下功能: 实时显示年、月、日实时显示星期实时显示时、分、秒(24小时计时法)扩展功能:设定时间修改功能,闹钟功能或具有报警提示功能(用蜂鸣器或LED提示均可)。二、实习任务的方案2.1 单片机芯片的选择方案 方案一: 采用 89C51 芯片作为硬件核心,采用 Flash ROM内部具有 4KB ROM 存储空间,能于 3V 的超低压工作,而且与 MCS-51 系列单片机完全兼容,但是运用于电路设计中时由于不具备 ISP 在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二: 采

6、用 STC89C52,片内 ROM 全都采用 Flash ROM能以 3V 的超底压工作,同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能且具有在线编程可擦除技术,对所下载的程序能够加密,比较安全。 当在对电路进行调试时由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插, 所以不会对芯片造成损坏。 所以选择采用 STC89C52 作为主控制系统。2.2 显示模块选择方案 方案一: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以不用

7、此种作为显示。方案二: 采用 LED 数码管动态扫描,虽然 LED 数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字,所以也不用此种作为显示。 方案三: 采用 LCD 液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,字符,显示多样,视觉效果较好,清晰可见外形美观,与普通数码管相比功耗较小,硬件连接简单。所以显示部分采用 1602 液晶。 2.3 时钟芯片的选择方案 方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本。但是,实现的时间误差较大。所以不采用此方案。 方案

8、二: 采用 DS1302 时钟芯片实现时钟,DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,31*8位的 RAM 做为数据暂存区,工作电压2.5V-5.5V 范围内,2.5V 时耗电小于300nA。 2.4电路设计最终方案决定 综上各方案所述,对此次课程设计作品的方案选定: 采用 STC89C52 作为主控制系统, DS1302提供时钟,1602 液晶作为显示。三、系统硬件设计3.1 电路设计框图按键控制模块LED显示控制模块DS1302实现时钟控制模块主控模块(89C52)图3.1 电路设计框图3.2 系统硬件概述本电路是由

9、STC89C52 单片机为控制核心,具有在线编程功能,低功耗,能在 3V 超低压工作;时钟电路由 DS1302 提供,它是一种高性能、低功耗、带 RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个 31*8 的用于临时性存放数据的 RAM 寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长精度高和低功耗等特点,同时具有掉电自动保存功能,本电路采用 DS1302 单字节传送方式实现与主控机之间数据的传

10、送,显示部份由 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 引脚为电

11、源端。图3.2 主控制系统3.4 时钟电路 DS13023.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 输入有两种功能:首

12、先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器:其次,RST 提供终止单字节或多字节数据的传送手段。当 RST 为高电平时所有的数据传送被初始化,允许对 DS1302 进行操作。如果在传送过程中 RSTS 置为低电平, 则会终止此次数据传送,I/O 引脚变为高阻态。上电动行时,在Vcc大于等于 2.5V 之前,RST 必须保持低电平。中有在 SCLK 为低电平时,才能将 RST 置为高电平,I/O 为串行数据输入端(双向), SCLK 始终是输入端。 图3.3 DS1302引脚图3.4.2  DS1302的控制字节  控制字节的最高有效位(位7)必须是逻辑1,如

13、果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。图3.4 DS1302控制字节3.4.3 DS1302 时钟寄存器图3.5 时钟寄存器图 时钟/日历包含在7个寄存器中,数据在时

14、钟/日历寄存器中是二进制编码的十进制格式存储的,也就是常说的BCD码存储的。时钟寄存器的第8个字节是写保护寄存器。当WP为“1”的时候是开启写保护,这个时候是禁止对DS1302进行写操作的。当WP为“0”的时候是关闭写保护,这个时候才能对DS1302进行写操作。3.4.3 DS1302电路图3.6 DS1302电路图从电路图中我们可以看到,RST片选使能引脚接到了单片机的P3.0引脚,SCLK时钟引脚接到而来单片机的P3.3引脚,IO引脚接到了单片机的P2.4引脚。3.5 显示模块的设计。3.5 显示电路的设计3.5.1 LED1602介绍 字符型液晶显示模块是一种专门用于显示字母、数字、符号

15、等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。LED1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控

16、制程序可以很方便地应用于市面上大部分的字符型液晶。3.5.2 LED1602的引脚功能1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.1所示:表3.1 引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共

17、同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。3.5.3 电路图 LED1602液晶显示模块可以和单片机直接接口电路如下图所示图3.7 显示电路图四、系统软件设计开始4.1 主程序流程图按键扫描子程序DS1302设置初始时间显示初始化 显示子程序 送到89C52中 图4.1主程序流程图主程序如下: void main(void)

18、uchar year=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.2 DS132程序void wri

19、te(uchar ucDa)uchar i;ACC = ucDa;for(i=8; i>0; i-)T_IO = ACC_0;T_CLK =1;T_CLK =0;ACC = ACC >>1;uchar read(void)uchar i;for(i=8; i>0; i-)ACC = ACC >>1;T_IO=1;ACC_7 = T_IO;T_CLK = 1;T_CLK = 0;return(ACC);void WriteRTC_Byte(uchar ucAddr, uchar ucDa)T_RST = 0;T_CLK = 0;T_RST = 1;write(

20、ucAddr);write(ucDa);T_CLK = 1;T_RST =0;uchar ReadRTC_Byte(uchar address)T_RST = 0;T_CLK = 0;T_RST = 1;write(address);read();return (ACC);uchar ReadSec(void) uchar x;x=ReadRTC_Byte(0x81);return x;uchar ReadMin(void)uchar x;x=ReadRTC_Byte(0x83);return x;uchar ReadHr(void)uchar x;x=ReadRTC_Byte(0x85);r

21、eturn x;uchar ReadDay(void)uchar x;x=ReadRTC_Byte(0x87);return x;uchar ReadMonth(void)uchar x;x=ReadRTC_Byte(0x89);return x;uchar ReadYear(void)uchar x;x=ReadRTC_Byte(0x8d);return x;void WriteSec(uchar ucDa) WriteRTC_Byte(0x80,ucDa);void WriteMin(uchar ucDa)WriteRTC_Byte(0x82,ucDa);void WriteHr(ucha

22、r ucDa) WriteRTC_Byte(0x84,ucDa);void WriteDay(uchar ucDa) WriteRTC_Byte(0x86,ucDa);void WriteMonth(uchar ucDa) 、WriteRTC_Byte(0x88,ucDa);void WriteYear(uchar ucDa) WriteRTC_Byte(0x8c,ucDa);void WriteControl(uchar ucDa) WriteRTC_Byte(0x90,ucDa);void DisableWP(void) WriteRTC_Byte(0x8E,0);5、 调试及性能分析5.

23、1 调试步骤打开Proteus软件,按照方案所选的电路元件来设计整体电路,线把个芯片按一定的位置放好,然后对相应的对象进行连接,连接时需仔细,以免调试时发生错误。做好之后把编程所生成的。HEX文件加载到AT89C51中,运行仿真软件,查看运行效果。如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。对于硬件,在电子日历的设计调试中遇到了这类的问题。 例如:(1)单片机晶振不起振 (2)LCD1602液晶的VDD 与VSS 引脚接反了,当时也没接保护电阻,      电容,结果把液晶发

24、热烧坏了。 解决:根据仪器的测试,发现电路引脚有接错的现象,重新焊接后晶振, 复位正常,程序能够下载。:重新买了个液晶,把VDD与VSS重新接到 正确的引脚。5.2性能分析经过多次的反复测试与分析,实习的最后成品符合了任务所给的要求,并且实现了显示年,月,日,星期,时,分,秒等功能,六、心得体会 通过接近两个星期的单片机课程设计实训,让我感触颇深。这次我们组选择了一个比较实用的课题可调的电子万年历与温度显示设计,在本次设计中,设计到了我们以前从没接触到的一些新的芯片,一块是实时时钟DS1302芯片,一块是液晶显示器LCD1602不得不说这是一个具有挑战性的设计,在

25、这短暂的两个星期内既要掌握两、一块芯片的工作原理,各个引脚的功能,连接方法,还要掌握初始化等。因此两个星期的时间是非常的紧迫,但是通过我们的不断努力在两个星期之内还是非常圆满的设计出来了,当然在设计过程中也遇到了一些困难,不过我们在网上下载了一些资料、视频等材料,通过仔细查阅把这些问题都给解决了,在设计过程中主要遇到的一些难道在,第一:是在液晶显示的设计上面出现的问题,我们采用的芯片是LCD1602是2行16列的芯片,由于是自己动手编的程序,在初始化上需要注意第一行和第二行的首地址,而且在编源程序代码的过程中,显示时,总是在两行显示同样的字符,但是我们借助于图书馆、网络等资源将该问题解决了。第

26、二:对于时间和日期修改时所用的按键编程上出现了一点小问题,主要原因是因为C语言编程方面还不是很熟悉,才会出现这些问题。第三:老师要求我们改为串行通信,由于时间的问题我们就没有再改了。不过,总的来说经过谢老师的指导与组员的努力还是能够完满的完成了这次的课程设计。不能绝对的说整个系统的每一个部件每一个功能都完全掌握了,只能说我们对它表面的功能、工作原理和各个引脚的功能等都是比较清楚的。通过此次课程设计让我学到了很多新的知识点,同时也让我学会了自主学习和团队精神,并且将理论用实践来证明。如果此次课程设计不是用软件proteus和keil仿真我相信我们会学到更多,因为很多方面在仿真是看不出来问题的,只

27、有自己动手焊板子,一步一步脚踏实地才能学得会。参考文献1张毅刚.单片机原理及接口技术.人民邮电出版社,2011.082张毅辉.李家庆.单片机系统综合训练指导书.重庆科技学院附录 1 系统总程序#include "reg52.h"#include "12864.h"#define uchar unsigned char#define uint unsigned int#define THCO 0xf8 /11.0592MHZ晶振,定时2ms时间常数值#define TLCO 0xcbuchar Data_Buffer=0,0,0,0,0,0,0,0,0,0

28、,0,0;/Äê¡¢Ô¡¢ÈÕ¡¢Ê±¡¢·Ö¡¢Ãë ¸÷Á½Î»Êýsbit T_CLK=P36;sbit T_IO=P37;sbit T_RST=P23;sbit ACC_0 = ACC0;sbit ACC_7 = ACC7;bit flag=0;/*/以下为DS1302驱动程序/*/写一字

29、节void write(uchar ucDa)uchar i;ACC = ucDa;for(i=8; i>0; i-)T_IO = ACC_0;T_CLK =1;T_CLK =0;ACC = ACC >>1;/读一字节uchar read(void)uchar i;for(i=8; i>0; i-)ACC = ACC >>1;T_IO=1;ACC_7 = T_IO;T_CLK = 1;T_CLK = 0;return(ACC);/写数据void WriteRTC_Byte(uchar ucAddr, uchar ucDa)T_RST = 0;T_CLK =

30、0;T_RST = 1;write(ucAddr);write(ucDa);T_CLK = 1;T_RST =0;/读数据uchar ReadRTC_Byte(uchar address)T_RST = 0;T_CLK = 0;T_RST = 1;write(address);read();return (ACC);uchar ReadSec(void) /从DS1302中读出秒字节uchar x;x=ReadRTC_Byte(0x81);return x;uchar ReadMin(void) /从DS1302中读出分字节uchar x;x=ReadRTC_Byte(0x83);return

31、 x;uchar ReadHr(void) /从DS1302中读出时字节uchar x;x=ReadRTC_Byte(0x85);return x;uchar ReadDay(void)/从DS1302中读出 日 字节uchar x;x=ReadRTC_Byte(0x87);return x;uchar ReadMonth(void)/从DS1302中读出 月 字节uchar x;x=ReadRTC_Byte(0x89);return x;uchar ReadYear(void)/从DS1302中读出 年 字节uchar x;x=ReadRTC_Byte(0x8d);return x;void

32、 WriteSec(uchar ucDa) /向DS1302写入秒字节WriteRTC_Byte(0x80,ucDa);void WriteMin(uchar ucDa) /向DS1302写入分字节WriteRTC_Byte(0x82,ucDa);void WriteHr(uchar ucDa) /向DS1302写入时字节WriteRTC_Byte(0x84,ucDa);void WriteDay(uchar ucDa) /向DS1302写入日字节WriteRTC_Byte(0x86,ucDa);void WriteMonth(uchar ucDa) /向DS1302写入月字节WriteRTC

33、_Byte(0x88,ucDa);void WriteYear(uchar ucDa) /向DS1302写入年字节WriteRTC_Byte(0x8c,ucDa);void WriteControl(uchar ucDa) /向慢速充电控制寄存器写入控制WriteRTC_Byte(0x90,ucDa);void DisableWP(void) /禁止写保护WriteRTC_Byte(0x8E,0);void main(void) /主程序uchar year=0x15,month=0x06,day=0x30,hour=0x23,min=0x24,sec=0x55;/初始时间PSB=0;Init

34、LCD();/不需设置初始时间的时候使用/year=ReadYear();/month=ReadMonth(); /day=ReadDay();/hour=ReadHr();/ min=ReadMin();/sec=ReadSec();DisableWP(); /禁止写保护WriteControl(0xa6); /向慢速充电控制寄存器写入控制字节WriteSec(sec); /向DS1302写入秒字节WriteMin(min); /向DS1302写入分字节WriteHr(hour); /向DS1302写入时字节WriteDay(day); /向DS1302写入日字节ÚWriteMonth(month); /向DS1302写入月字节WriteYear(year); /向DS1302写入月字节TMOD=0x11; /设置定时器o工作模式,16位计数模式TH0=THCO; TL0=TLCO;TR0=1; /启动定时器ET0=1;/使能定时器中断 EA=1;/开总中断while(1) PSB=0;if(flag=1)flag=0;year=ReadYear();month=ReadMonth(); day=ReadDay();hour=ReadHr(); min=ReadMin();sec=ReadSe

温馨提示

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

评论

0/150

提交评论