电子日历时钟_第1页
电子日历时钟_第2页
电子日历时钟_第3页
电子日历时钟_第4页
电子日历时钟_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计任务书学 院信息科学与工程学院专 业计算机科学与技术学生姓名朱伟杰班级学号1203050116课程设计题目电子日历时钟显示器设计实践教学要求与任务:1 学习Proteus仿真系统下的原理图设计方法和系统仿真调试方法;2 掌握简单的51单片机应用系统的软硬件设计方法;3 学习Keil C51集成开发环境的使用和程序调试方法。具体任务如下:(1)通过检索、查资料和研究学习,设计单片机应用系统原理图;(2)在Keil 51集成开发环境下编写应用系统程序;(3)在Proteus仿真环境下进行软硬件系统调试,实现应用系统设计目标;(4)写出课程设计报告。 工作计划与进度安排:第1619周:布置课

2、程设计任务;查阅资料;分组设计原理图;编写程序代码。第20周:系统仿真调试,验收,答辩,编写课程设计报告。指导教师:马秀丽 刘猛 2014年12月7日专业负责人: 2014年12月8日学院教学副院长: 2014年12月8日成绩评定表学生姓名朱伟杰班级学号1203050116专业计算机科学与技术课程设计题目电子日历时钟显示器设计评语组长签字:成绩日期 年 月 日目录1.设计目的及要求11.1课程设计目的11.2设计内容、技术条件和要求11.2.1设计内容11.2.2 设计要求12.系统的组成及工作原理22.1系统组成22.2 工作原理22.3 Protues简介32.4 Keil C51简介33

3、器件的功能和作用43.1 AT89C51简介43.2DS1302简介63.3 LM016L简介74系统硬件设计95.系统软件设计105.1程序流程图105.2 程序清单及程序功能注释106.系统仿真调试206.1程序调试过程206.2仿真调试过程227.结果分析248.体会与感想249.参考文献241.设计目的及要求1.1课程设计目的1. 培养学生文献检索的能力,如何利用Internet检索需要的文献资料。2. 培养学生综合分析问题、发现问题和解决问题的能力。3. 培养学生综合运用知识的能力和工程设计的能力。4. 培养学生理论联系实际的能力。5. 提高学生课程设计报告撰写水平。1.2设计内容、

4、技术条件和要求1.2.1设计内容电子日历时钟系统主要功能为实时时间的显示,以AT89C51单片机为核心芯片,通过DS1302时钟芯片的功能扩展;在共阴极LED数码管上或LM1602液晶显示屏上显示出来。(1)时钟芯片选用DS1302;(2)数码管选用4位共阴极动态显示的数码管;(3)能实时显示年、月、日和时、分、秒,用数码管显示时,要求年、月、日与时、分、秒交替显示,间隔1秒;(4)可通过按键调节、设置当前时间。1.2.2 设计要求DS1302时钟芯片的控制设计。时间调节按键的电路设计。绘制实现本设计内容的硬件电路(原理图),系统的组成框图。相应的控制状态表;编写本课程设计内容的软件设计(包含

5、程序流程图和对程序注释)。硬件实验部分可选用实验箱测试或Proteus仿真软件实现。2.系统的组成及工作原理2.1系统组成图2.1系统组成原理图2.2 工作原理设计的题目是电子时钟。根据设计要求显示正常的年、月、日、时、分、秒。要想实现上述功能,就必须将硬件系统和软件系统有机的结合在一起,方可实现我们设计任务中的各项要求。硬件系统主要有单片机AT89C51、DS1302、74LS154 等。AT89C51 主要功能是存储程序、根据程序的内容对各个端口进行判断并做出相应的处理。DS1302主要的功能是控制年、月、日、时、分、秒的显示效果。根据设计要求,电子日历要显示年、月、日、时、分、秒就需要1

6、6个显示数码管,由于数码管的数量较多,必须采用动态显示扫描的方法。例如07-12-01,首先日分为个位和十位,个位显示到09时,应向日的十位自动进位,即个位清0,十位置1,显示为10,继续累计;当显示为31时,日的十位就应自动向月的个位进位,显示为01,当月显示到09时,月的个位自动向月的十位进位,个位清0,十位置1,即为10,当月至12时,月向年的个位进位,即显示08,同时月、日开始从01月01日继续显示,依次周而复始的循环运行。根据按键电路可实现年、月、日、时、分、秒的调整,当K1键按下时,可以调整时间,K2、K3键分别对时间进行加或减,K4键可以切换正常模式与省电模式。利用单片机将RC复

7、位电路、动态显示电路、电源电路、去抖电路等正确的连接在一起,并通过单片机的编程来实现本次设计任务中的要求。2.3 Protues简介Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。迄

8、今为止是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译2.4 Keil C51简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编

9、、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。3器件的功能和作用3.1 AT89C51简介AT89C51各引脚结构如图3.1所示:图3.1AT89C51引脚图VCC:电源电压 GND:接地 P0口:P0口是一组8位漏极开路双向I/O口,即地址/数据总线复用口。作为输出口时,每一个管脚都能够驱

10、动8个TTL电路。当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端。P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部的上拉电阻。P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻。 P1口:P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL电路。对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。因为内部有电阻,某个引脚被外部信号拉低时输出一个电流。闪烁编程时和程序校验时,P1口接收低8位地址。 P2口:P2口是一个内部带有上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL电路。

11、对端口写“1”,通过内部的电阻把端口拉到高电平,此时,可作为输入口。因为内部有电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个运行期间不变。闪烁编程或校验时,P2口接收高位地址和其它控制信号。 P3口:P3口是一组带有内部电阻的8位双向I/O口,P3口输出缓冲故可驱动4个TTL电路。对P3口写如“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低的P3口将用电阻输出电流。P3口除了作为一般的I/O口外,更重要的用途是它的第二功能,具体如下:P3.0-RX

12、D,P3.1-TXD,P3.2-INT0,P3.3-INT1,P3.4-T0,P3.5-T1,P3.6-WR,P3.7-RD。P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。 RST:复位输入。当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。 ALE/ :当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可对输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。如果必要,可对特殊寄存器

13、区中的8EH单元的D0位置禁止ALE操作。这个位置后只有一条MOVX和MOVC指令ALE才会被应用。此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无效。 PSEN:程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器时,这两次有效的PSEN 信号不出现。 EA/VPP:外部访问允许。欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平。需要注意的是:如果加密位LBI被编程,复位时内部会锁存EA端状态。如EA端为高电平,CPU则执行内部程序存储器中的指令。闪烁存储

14、器编程时,该引脚加上+12V的编程允许电压VPP,当然这必须是该器件是使用12V编程电压VPP。 XTAL1:片内振荡器反相放大器和时钟发生线路的输入端。使用片内振荡器时,连接外部石英晶体和微调电容。XTAL2:片内振荡器反相放大器的输出端。当使用片内振荡器时,外接石英晶体和微调电容。3.2DS1302简介DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。结构如图3.2所示:图3.2 DS1302引脚图采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节

15、的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。DS1302 的管脚排列及描述如下图及表所示X1、X2:32.768KHZ晶振接入引脚。GND:地。RST:复位引脚,低电平有效。IO:数据输入输出引脚,具有三态功能。SCLK:串行时钟输入引脚。VCC1:工作电源引脚。VCC2:备用电源引脚。3.3 LM016L简介1602采用标准的16脚接口,结构如图3.3所示:图3.3 LMO16L其中:VSS:为电源地VDD:接5

16、V电源正极VEE:为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS:为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。RW:为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。E(或EN):为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。D0D7:为8位双向数据端。表3.1指令集表指令码功能指令RSR/WD7D6D5D4D3D2D1D0清除显示0000000001将DDRAM填满20H,并且设定DDRAM的地址计数器(AC)到00H地址归位00

17、0000001X设定DDRAM的地址计数器(AC)到00H,并且将游标移到开头原点位置;显示状态开/关0000001DCBD=1: 整体显示 ONC=1: 游标ONB=1:游标位置反白允许进入点设定00000001I/DS指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位游标或显示移位控制000001S/CR/LXX设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容功能设定00001DLXREXXDL=0/1:4/8位数据RE=0/1:基本指令操作 / 扩充指令操作设定CGRAM地址0001AC5AC4AC3AC2AC1AC0设定CGRAM 地址设定DDRAM地址00

18、10AC5AC4AC3AC2AC1AC0设定DDRAM 地址(显示位址)第一行:80HA7H第二行:C0HE7H读取忙标志和地址01BFAC6AC5AC4AC3AC2AC1AC0读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值写数据到RAM10数据将数据D7D0写入到内部的RAM 读出RAM的值11数据从内部RAM读取数据D7D04系统硬件设计电子日历时钟系统主要功能为实时时间的显示,以AT89C51单片机为核心芯片,通过DS1302时钟芯片的功能扩展;在共阴极LED数码管上或LM1602液晶显示屏上显示出来。原理图如图4.1所示:图4.1 系统原理图5.系统软件

19、设计5.1程序流程图软件设计分为:动态扫描、主程序、系统资源分配和软件模块几部分,在此设计中采用定时器来完成动态扫描显示。用定时器T0定20ms的时间间隔,每次定时时间到时就输出一个LED信号,即显示一位。主程序初始化后,就开始进行对DS1302的读时间;读完后送显示缓冲区,同时并对定时时间进行判断比较。DS1302的地址由114字节的用户RAM存放。10字节的存放实时时钟时间日历和定闹RAM及用于控制和状态的4字节特殊寄存器组成,几乎所有的128个字节直接读写。设计程序有:主程序、读取时间的子程序和显示刷新程序。图5.1程序流程图5.2 程序清单及程序功能注释#include /包含单片机寄

20、存器的头文件#include /包含_nop_()函数定义的头文件/*以下是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*/ voiddelaynus(unsigned char n)unsigned char i;fo

21、r(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;

22、/禁止数据传递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) /

23、如果读出的数据是1dat|=0x80; /将1取出,写在dat的最高位SCLK=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

24、(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引脚/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms

25、()unsigned char i,j; for(i=0;i10;i+)for(j=0;j33;j+); /*函数功能:延时若干毫秒入口参数:n*/voiddelaynms(unsigned char n)unsigned char i;for(i=0;i4)*10 + (ReadValue&0x0F);/将读出数据转化Display(second,0x4c); /显示秒ReadValue = ReadSet1302(0x83); /从分寄存器读minute=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 Display(minute,0x

26、49); /显示分ReadValue = ReadSet1302(0x85); /从小时寄存器读hour=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化Display(hour,0x46); /显示小时ReadValue = ReadSet1302(0x87); /从分寄存器读day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化Display(day,0x0c); /显示日ReadValue = ReadSet1302(0x89); /从分寄存器读month=(ReadValue&0x

27、70)4)*10 + (ReadValue&0x0F); /将读出数据转化Display(month,0x09); /显示月ReadValue = ReadSet1302(0x8d); /从分寄存器读year=(ReadValue&0xf0)4)*10 + (ReadValue&0x0F); /将读出数据转化Display(year,0x06); /显示年 6.系统仿真调试6.1程序调试过程(1)在keilC51中建立project,在keilc51界面上点击菜单栏的“Project”,选择“New Project”,在界面会显示出如图6.1所示的窗口,保存路径自己定义,在文件名上输入自己给工程起的名字,然后点击保存图6.1创建工程文件(2)

温馨提示

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

评论

0/150

提交评论