单片机课程设计 电子日历时钟显示器设计讲解.pdf
-
资源ID:71732638
资源大小:1.01MB
全文页数:23页
- 资源格式: PDF
下载积分:11.9金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
单片机课程设计 电子日历时钟显示器设计讲解.pdf
沈阳理工大学课程设计专用纸No0目录目录1.题目设计要求.12.开发平台简介.13.系统硬件设计.23.1设计原理.23.2器件的功能与作用.23.2.1 MCS51 单片机 AT89C51.23.2.2 复位电路.33.2.3 晶振电路.43.2.4 DS1302 时钟模块.43.2.5 引脚功能及结构.43.2.6 DS1302 的控制字节.53.2.7 数据输入输出(I/O).53.2.8 DS1302 的寄存器.63.2.9液晶显示 LCD1602.63.2.10串行时钟日历片DS1302.84.系统软件设计.104.1程序流程.104.2程序代码.105.系统仿真调试.205.1仿真原理图设计.205.2仿真运行过程.215.3仿真运行结果.216.总结.217.参考文献.22沈阳理工大学课程设计专用纸No11.1.题目设计要求题目设计要求通过串行日历时钟芯片 DS1302 生成当前日期和是时间,通过 IO 口传输到 AT89c52 芯片中,然后再将 AT89c52 接收到的数据输出到 LCD 上。要求 LCD 上显示的日期和时间与当前系统时间保持一致。2.2.开发平台简介开发平台简介2.12.1 系统仿真平台系统仿真平台 ProteusProteus Proteus 软件是由英国 Labcenter Electronics 公司开发的 EDA 工具软件,已有近 20 年的历史,在全球得到了广泛应用。Proteus 软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩。和我们手头其他的电路设计仿真软件,他最大的不同即它的功能不是单一的。另外,它独特的单片机仿真功能是任何其他仿真软件都不具备的。2.22.2 软件开发平台软件开发平台 Keil CKeil CKeil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51 生成的目标代码效率之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。沈阳理工大学课程设计专用纸No23.3.系统硬件设计系统硬件设计3.13.1设计原理设计原理图 3.1电路原理图3.23.2器件的功能与作用器件的功能与作用3.2.1 MCS513.2.1 MCS51 单片机单片机 AT89C51AT89C51AT89C51是一种带 4K 字节 FLASH 存储器(FPEROMFlash Programmable and Erasable Read OnlyMemory)的低电压、高性能CMOS 8 位微处理器,俗称单片机。AT89C2051是一种带 2K 字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 1000 次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL的 AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。沈阳理工大学课程设计专用纸No3AT89S51 系列单片机中有 PDIP,PLCC,TQFP 多种封装形式。本设计采用的是 PDIP 封装 40 管脚的单片机。图 3.2 主控制模块 AT89C523.2.23.2.2 复位电路复位电路复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU 和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开 关或电源插头分-合过程中引起的抖动而影响复位。沈阳理工大学课程设计专用纸No4图 3.3 复位电路3.2.33.2.3 晶振电路晶振电路图 3.4 晶振电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz 的方波信号,可保证数字钟的走时准确及稳定。3.2.4 DS13023.2.4 DS1302 时钟模块时钟模块DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。DS1302内部有一个318的用于临时性存放数据的RAM 寄存器。DS1302是 DS1202的升级产品,与 DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。3.2.53.2.5 引脚功能及结构引脚功能及结构DS1302的引脚排列,其中 Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由 Vcc1或 Vcc2两者中的较大者供电。当Vcc2大于 Vcc1+0.2V 时,Vcc2给DS1302供电。当 Vcc2小于 Vcc1时,DS1302由 Vcc1供电。X1和 X2是振荡源,外接32.768kHz 晶振。沈阳理工大学课程设计专用纸No5RST 是复位/片选线,通过把 RST 输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。当RST 为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中 RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电运行时,在Vcc2.0V 之前,RST 必须保持低电平。只有在SCLK 为低电平时,才能将RST 置为高电平。I/O 为串行数据输入输出端(双向),后面有详细说明。SCLK 为时钟输入端。下图为 DS1302的引脚功能图:图 3.5 DS1302 封装图3.2.6 DS13023.2.6 DS1302 的控制字节的控制字节DS1302 的控制字节如下图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入 DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取 RAM 数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。3.2.73.2.7 数据输入输出数据输入输出(I/O)(I/O)在控制指令字输入后的下一个SCLK 时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK 脉冲的下降沿读出 DS1302的数据,读出数据时从低位0位到高位7。沈阳理工大学课程设计专用纸No6图 3.6 DS1302 的寄存器3.2.8 DS13023.2.8 DS1302的寄存器的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD 码形式,其日历、时间寄存器及其控制字见表1。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与 RAM 相关的寄存器分为两类:一类是单个RAM 单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的 RAM 寄存器,此方式下可一次性读写所有的RAM 的31个字节,命令控制字为 FEH(写)、FFH(读)。图 3.7 DS1302 的寄存器3.2.93.2.9液晶显示液晶显示 LCD1602LCD16021602 液晶也叫 1602 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。沈阳理工大学课程设计专用纸No71602LCD 是指显示的内容为 16X2,即可以显示两行,每行 16 个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于 HD44780 液晶芯片的,控制原理是完全相同的,因此基于HD44780 写的控制程序可以很方便地应用于市面上大部分的字符型液晶。管脚功能图3.8 LCD1602引脚图RT-1602 采用表中的 16 脚接口:第一脚:Vss,电源地。第二脚:VDD,+5V 电源。第三脚:VL,液晶显示偏压信号。第四脚:RS,数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。第五脚:R/W,读/写选择端。第六脚:E,使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第七14 脚:D0D7,为 8 位双向数据线。第 15 脚:BLA,背光源正极。第 16 脚:BLK,背光源负极。图 3.9 模块显示沈阳理工大学课程设计专用纸No83.2.103.2.10串行时钟日历片串行时钟日历片 DS1302DS1302系统的组成与工作原理:系统由单片机 AT89C52,串行日历时钟片 DS1302,液晶显示模组 LCD1602。DS1302 的 CLOCK 与 AT89C52 的 P1.6 相连,RST 与 P1.5 相连,IO 与 P1.7 相连。LCD1602 的 D0D7 与 AT89C51 的 P0.0P.7 相连,并接上拉电阻,RS 与 P2.0 相连,RW 与 P2.1相连,E 与 P2.2 相连。DS1302 是 DALLAS 公司拖出的涓流充电时钟芯片,内含有一个实时时钟/日历和 31 个季节静态RAM,通过简单地串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过 AM/PM 指示决定采用 24 小时或12 小时格式,DS1302 与单片机之间能简单地采用同步串行方式进行通信,仅需用到RES 复位、I/O数据线、SCLK 串行时钟 3 个口线。对时钟、RAM 的读/写,可以改用单字节方式或多达 31 个字节的字符组方式。DS1302 工作时功耗很低,保持数据和时钟信息是功率小于1mW。DS1302 广泛应用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。RT-1602 字符型液晶模块是以两行16 个子的 5*7 点阵吐信来显示字符的液晶显示器。DS1302 有 8 个引脚:X1、X2:32.768kHz 晶振介入引脚。GND:地。RST:复位引脚,低电平有效。I/O:数据输入/输出引脚,具有三态功能。SCLK:串行时钟输入引脚。Vcc1:工作电源引脚。Vcc2:备用电源引脚。DS1302 有一个控制寄存器,12 个日历,时钟寄存器和31 个 RAM。控制寄存器控制寄存器用于存放 DS1302 的控制命令字,DS1302 的 RST 引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302 读写过程进行控制,它的格式如下:表 3.1控制寄存器的格式D7D6D5D4D3D2D1D01各项功能说明如下。RAM/CKA4A3A2A1A0RD/W沈阳理工大学课程设计专用纸No9D7:固定为 1D6:RAM/CK 位,片内RAM 或日历、时钟寄存器选择位,当RAM/CK=1 时,对片内RAM 进行读写,当 RAM/CK=0 时,对日历、时钟寄存器进行读写。D5D1:地址位,用于选择进行读写的日历、时钟寄存器或片内 RAM。对日历、时钟寄存器或片内 RAM 的选择。D0:读写位,当RD/W=1 时,对日历、时钟寄存器或片内RAM 进行读操作,当RD/W=0 时,对日历、时钟寄存器或片内RAM 进行写操作。日历、时钟寄存器DS1302 共有 12 个寄存器,其中有 7 个与日历、时钟相关,存放的数据为BCD 码形式。日历、时钟寄存器的格式。说明:数据都以 BCD 码形式表示。小时寄存器的 D7 位为 12 小时制/24 小时制的选择位,当为 1 时选择 12 小时制,当为 0 时选 24小时制。当12 小时制时,D5 位为 1 是上午,D5 位为 0 是下午,D4 位小时的十位。当24 小时制时,D5、D4 位为小时的十位。秒寄存器中的 CH 位为时钟暂停位,当为1 时,时钟暂停,为0 时,时钟开始启动。写保护寄存器中的 WP 为写保护位,WP=1 时,写保护,当WP=0 时,未写保护,当对日历、时钟寄存器或片内 RAM 进行写时,WP 应清零,当对日历、时钟寄存器或片内RAM 进行读时,WP 一般置 1.慢充电寄存器的 TCS 位为控制慢充电的选择,当它为 1010 时才能是慢充电工作。DS 为二极管选择位。DS 为 01 选择一个二极管,DS 为 10 选择两个二极管,DS 为 11 或 00 充电器被禁止,与 TCS无关。RS 用于选择连接在 Vcc2与 Vcc1之间的电阻,RS 为 00,充电器被禁止,与 TCS 无关。沈阳理工大学课程设计专用纸No104.4.系统软件设计系统软件设计4 4.1.1程序流程程序流程开始LCD 初始化函数Lcdlnitiate;()写数据的显示地址函数WriteAddress显示 Date 和 Time调用 ReadSet1302(unsigned char Cmd)结束图 4.1程序流程图调用 DisPlay(),分别显示年、月、日、时、分、秒4.24.2程序代码程序代码#include/包含单片机寄存器的头文件#include/包含_nop_()函数定义的头文件/*沈阳理工大学课程设计专用纸No11以下是 DS1302 芯片的操作程序*/unsigned char code digit10=0123456789;/定义字符数组显示数字sbit DATA=P17;/位定义 1302 芯片的接口,数据输出端定义在P1.7 引脚sbit RST=P15;/位定义 1302 芯片的接口,复位端口定义在P1.5 引脚sbit SCLK=P16;/位定义 1302 芯片的接口,时钟输出端口定义在P1.6 引脚/*函数功能:延时若干微秒入口参数:n*/void delaynus(unsigned char n)unsigned char i;for(i=0;in;i+);/*函数功能:向 1302 写一个字节数据入口参数:x*/void Write1302(unsigned char dat)unsigned char i;SCLK=0;/拉低 SCLK,为脉冲上升沿写入数据做好准备delaynus(2);/稍微等待,使硬件做好准备for(i=0;i=1;/将 dat 的各数据位右移 1 位,准备写入下一个数据位/*函数功能:根据命令字,向1302 写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据*/void WriteSet1302(unsigned char Cmd,unsigned char dat)RST=0;/禁止数据传递SCLK=0;/确保写数居前 SCLK 被拉低RST=1;/启动数据传输delaynus(2);/稍微等待,使硬件做好准备Write1302(Cmd);/写入命令字Write1302(dat);/写数据SCLK=1;/将时钟电平置于已知状态RST=0;/禁止数据传递/*函数功能:从 1302 读一个字节数据入口参数:x*/unsigned char Read1302(void)unsigned char i,dat;delaynus(2);/稍微等待,使硬件做好准备for(i=0;i=1;/将 dat 的各数据位右移 1 位,因为先读出的是字节的最低位if(DATA=1)/如果读出的数据是 1dat|=0 x80;/将 1 取出,写在 dat 的最高位沈阳理工大学课程设计专用纸No13SCLK=1;/将 SCLK 置于高电平,为下降沿读出delaynus(2);/稍微等待SCLK=0;/拉低 SCLK,形成脉冲下降沿delaynus(2);/稍微等待return dat;/将读出的数据返回/*函数功能:根据命令字,从1302 读取一个字节数据入口参数:Cmd*/unsigned char ReadSet1302(unsigned char Cmd)unsigned char dat;RST=0;/拉低 RSTSCLK=0;/确保写数居前 SCLK 被拉低RST=1;/启动数据传输Write1302(Cmd);/写入命令字dat=Read1302();/读出数据SCLK=1;/将时钟电平置于已知状态RST=0;/禁止数据传递return dat;/将读出的数据返回/*以下是对液晶模块的操作程序*/sbit RS=P20;/寄存器选择位,将 RS 位定义为 P2.0 引脚sbit RW=P21;/读写选择位,将 RW 位定义为 P2.1 引脚sbit E=P22;/使能信号位,将 E 位定义为 P2.2 引脚sbit BF=P07;/忙碌标志位,将 BF 位定义为 P0.7 引脚/*沈阳理工大学课程设计专用纸No14函数功能:延时 1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是 1 毫秒*/void delay1ms()unsigned char i,j;for(i=0;i10;i+)for(j=0;j33;j+);/*函数功能:延时若干毫秒入口参数:n*/void delaynms(unsigned char n)unsigned char i;for(i=0;i4)*10+(ReadValue&0 x0F);/将读出数据转化Display(second,0 x4c);/显示秒ReadValue=ReadSet1302(0 x83);/从分寄存器读minute=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/将读出数据转化Display(minute,0 x49);/显示分ReadValue=ReadSet1302(0 x85);/从小时寄存器读hour=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/将读出数据转化Display(hour,0 x46);/显示小时ReadValue=ReadSet1302(0 x87);/从分寄存器读day=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/将读出数据转化Display(day,0 x0c);/显示日ReadValue=ReadSet1302(0 x89);/从分寄存器读month=(ReadValue&0 x70)4)*10+(ReadValue&0 x0F);/将读出数据转化Display(month,0 x09);/显示月ReadValue=ReadSet1302(0 x8d);/从分寄存器读year=(ReadValue&0 xf0)4)*10+(ReadValue&0 x0F);/将读出数据转化Display(year,0 x06);/显示年沈阳理工大学课程设计专用纸No205.5.系统仿真调试系统仿真调试5.15.1仿真原理图设计仿真原理图设计图 5.1仿真原理图5.25.2仿真工具栏仿真工具栏图5.2仿真控制按钮功能:1.运行 2.单步运行 3.暂停 4.停止沈阳理工大学课程设计专用纸No215.25.2仿真运行过程仿真运行过程在 Keil 下,将所编制的 C 语言程序编译后,生成 9.HEX 文件;再在 PROTEUS 环境下,将.HEX文件加到编制的仿真原理图中进行仿真调试,从而生成正确的日期和时间,该日期和时间与当前系统的日期和时间相符。5.35.3仿真运行结果仿真运行结果图 5.3仿真运行结果图6.6.总结总结单片机作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在几天里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到沈阳理工大学课程设计专用纸No22问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。另外,要非常感谢我的指导老师,是她指引我克服一个由一个的困难,让我学会对困难无所畏惧,以及对问题的一些很重要的思考方法。并且让我学会对困难无所畏惧,以及对问题的一些很重要的思考方法。7.7.参考文献参考文献1谢维成著单片机原理与应用及C51 程序设计,清华大学出版社,20092马秀丽,周越,王红著单片机原理与应用系统设计,清华大学出版社,20143马秀丽等著 C 语言设计(第 2 版)。北京,清华大学出版社,2008