首页 数字时钟设计报告

数字时钟设计报告

举报
开通vip

数字时钟设计报告数字时钟设计报告 数字时钟设计报告 XX工程学院 班级 姓名 TOC \o "1-3" \h \z \u 一、设计电路 2 1、 设计要求 2 2、设计目的 2 二、设计原理 2 1、 设计模块图 2 2、 振荡器(DS18B20) 3 3、 单片机AT89C51 4 三、原理图 7 1、 核心原理图 7 2、 数码管显示模块 7 3、 电源模块 7 4、 按键模块 8 四、PCB图 8 五、程序 9 六、实物展示 15 1、 完成品 15 2、接电展示 15 七、元器件清单 16 八、总结 16 一、设计电路 1...

数字时钟设计报告
数字时钟 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 数字时钟设计报告 XX工程学院 班级 姓名 TOC \o "1-3" \h \z \u 一、设计电路 2 1、 设计要求 2 2、设计目的 2 二、设计原理 2 1、 设计模块图 2 2、 振荡器(DS18B20) 3 3、 单片机AT89C51 4 三、原理图 7 1、 核心原理图 7 2、 数码管显示模块 7 3、 电源模块 7 4、 按键模块 8 四、PCB图 8 五、程序 9 六、实物展示 15 1、 完成品 15 2、接电展示 15 七、元器件清单 16 八、总结 16 一、设计电路 1、​ 设计要求 1)、时间以二十四小时为周期。 2)、能够显示时、分。 3)、有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间。 4)、为了保证计时的稳定及准确须由晶体振荡器提供 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 针时间基准信号。 2、设计目的 1)、在学完了《电子设计与制作》课程的基本理论,基本知识后,能够综合运用所学理论知识、拓宽知识面,系统地进行电子电路的工程实践训练,锻炼动手能力,培养工程师的基本技能,提高 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 和解决问题的能力。 2)、熟悉集成电路的引脚安排,掌握各芯片的逻辑功能及使用方法了解面包板结构及其接线方法,了解数字钟的组成及工作原理 3)、培养独立思考、独立准备资料、独立设计规定功能的数字系统的能力。 4)、培养书写综合设计实验报告的能力 二、设计原理 1、​ 设计模块图 2、​ 振荡器(DS18B20) 1)、 DS1302 简介: DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图2及内部结构如图3所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 图2 DS1302的外部引脚分配 图3 DS1302的内部结构 各引脚的功能为: Vcc1:主电源; Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟,输入,控制数据的输入与输出; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。 DS1302有下列几组寄存器: ① DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 ②DS1302有关RAM的地址 ③DS1302的工作模式寄存器 所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。 突发模式寄存器如图4所示。 图4 ④此外,DS1302还有充电寄存器等。 读写时序说明: DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如图6。 图5 控制字(即地址及命令字节) 控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4~A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。 3、​ 单片机AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。 功能特性概述: AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 引脚功能说明: 1、Vcc:电源电压 2、GND:地 3、P0 口:P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FIash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 4、P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。FIash编程和程序校验期间,P1接收低8位地址。 5、P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX@RI 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。 6、P3口:P3口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。 P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示: 图6 P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。 7、RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。 8、ALE/PROG: 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的l/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉(PROG )。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的DO 位置位,可禁止ALE 操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。 9、PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现。 10、EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 11、XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 12、XTAL2:振荡器反相放大器的输出端。 图7 AT89C51引脚图 三、原理图 1、​ 核心原理图 图8 核心原理图 2、​ 数码管显示模块 图9 数码管显示模块 3、​ 电源模块 图9 电源模块 4、​ 按键模块 图10 按键模块 四、PCB图 图11 PCB封装图 五、程序 /* ds1302实时时钟C程序 */ /*******************/ #include #include #include #include #define uchar unsigned char sbit CLK = P3^1; /*实时时钟时钟线引脚 */ sbit IO = P3^2; /*实时时钟数据线引脚 */ sbit RST = P3^3; /*实时时钟复位线引脚 */ /*********************************/ sbit hu =P2^0; sbit hd =P2^2; sbit mu =P2^1; sbit md =P2^3; sbit com1=P2^4; sbit com2=P2^5; sbit com3=P2^6; sbit com4=P2^7; uchar flag=0,ss,timecount=0; char a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void Set_id(unsigned char sel,unsigned char sel_1) ; void id_case1_key(void); uchar min=0,hou=0,sec=0,lastsec=0,mflag=0; inttoBCD(unsigned char t); /*********************************/ delay(unsigned int n) { unsigned int i=0; for(i=0;i>1); } } void Write_DS1302(unsigned char DS_Addr,unsigned char DS_Data) { RST=0; CLK=0; RST=1; Write_DS_Byte(DS_Addr); Write_DS_Byte(DS_Data); CLK=1; RST=0; } unsigned char Read_DS_Byte() //只负责8位数据的位移读取 { unsigned char i=0; unsigned char ClockValue=0; IO=1; CLK=0; for(i=0;i<8;i++) { ClockValue=(ClockValue>>1); if(IO==1) { ClockValue=(ClockValue|0x80); } CLK=1; delay(1); CLK=0; } return (ClockValue); } unsigned char ReadTimeValue(unsigned char DS_Addr) //读指定地址的寄存器数据 { unsigned char Value; RST=0; CLK=0; RST=1; Write_DS_Byte(DS_Addr); IO=0; Value=Read_DS_Byte(); CLK=1; RST=0; return(Value); } BCDtoint(unsigned char t) { unsigned char s,h; s=(t&0x70)>>4; h=t&0x0f; s=s*10+h; return s; } /*****************************************************************************/ void display(void) { sec= BCDtoint(ReadTimeValue(0x81)); hou=BCDtoint(ReadTimeValue(0x85)); min=BCDtoint(ReadTimeValue(0x83)); if((hou>=23)&&(min>=59)&&(sec==10)) { sec=sec+0x04; Write_DS1302(0x8e,0x00); Write_DS1302(0x80,inttoBCD(sec)); //调整秒 Write_DS1302(0x8e,0x80); } //min=12; if(!flag) { com1=1;com2=1;com3=1; com4=1;P0=0x80;delay(80); com1=1;com2=1; com4=0;com3=0;P0=0x7f;delay(80); } com1=0;com2=1;com3=1;com4=1;P0=a[hou/10]|0x80;delay(200); com1=1;com2=0;com3=1;com4=1;P0=a[hou%10]|0x80;delay(200); com1=1;com2=1;com3=0;com4=1; P0=a[min/10]|0x80; delay(200); com1=1;com2=1;com3=1;com4=0; P0=a[min%10]|0x80; delay(200); } /*********************************/ inttoBCD(unsigned char t) { unsigned char s,g; s=t/10; s=s<<4&0xf0; g=t%10; s=s|(g&0x0f); return s; } /*********************************/ settime(unsigned char DS_Addr, char time,unsigned char fl,unsigned char t) { if(fl)time++; else time--; if(time>=t)time=0; else if(time<0)time=t-1; /********设置时间**************/ Write_DS1302(0x8e,0x00); Write_DS1302(DS_Addr,inttoBCD(time)); Write_DS1302(0x8e,0x80); /************秒清0***************/ Write_DS1302(0x8e,0x00); Write_DS1302(0x80,00); Write_DS1302(0x8e,0x80); } Scan_Key() { display(); if (hu==0) //减少 { while(!hu)display(); //等待按键释放,如一直按下一直调用显示函数,防止显示中断 flag=1; //清除记数,重新开始10s定时 settime(0x84,hou,1,24); delay(100); //跳到加减判断函数,下同, } if (hd==0) //增加 { while(!hd)display(); flag=1; settime(0x84,hou,0,24); delay(100); } if (mu==0) //减少 { while(!mu)display(); //等待按键释放,如一直按下一直调用显示函数,防止显示中断 flag=1; //清除记数,重新开始10s定时 settime(0x82,min,1,60); delay(100); //跳到加减判断函数,下同, } if (md==0) //增加 { while(!md)display(); flag=1; settime(0x82,min,0,60); delay(100); } } /*********************************/ void Init1302(void) { Write_DS1302(0x8e,0x00); Write_DS1302(0x82,0x00); //min Write_DS1302(0x84,0x00); //hou Write_DS1302(0x80,0x00); Write_DS1302(0x8e,0x80); } /***************秒闪烁******************/ void Int0() interrupt 1 { timecount++; ss++; if((ss>100)&flag){ss=0;flag=0;} if(timecount>19) { timecount=0; flag=~flag; } } /*********************************/ main() { EA=1; ET0=1; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TR0=1; Init1302(); while(1){ display(); Scan_Key(); } } 六、实物展示 1、​ 完成品 图12 图13 2、接电展示 图14 接电实际展示 七、元器件清单 八、总结 通过对数字时钟的设计和制作,我觉得自己学习到了很多,我对数字时钟的结构与原理有了很好的理解,知道了AT89C51,DS18B20等芯片的基本应用和原理,并能进行一些简单的使用。加深了对数字电路的认识和理解,能将过去学到的理论知识进行运用。再次,加强了对PROTEL 等软件的应用。在导入PCB板时遇到了问题。就是双面布线的时候,元器件会产生错误(元器件变绿)。通过同学和老师的讲解,把PCB设置Design——Options——System中的DRC Errors 选项勾去掉即可。还有一种方法,是Tools——Design rule check——On-line 中的Component Clearance勾去掉,然后再次点Tools——Reset Error Markers就可以解决这个问题。 在焊接电路板过程中,加强了对贴片焊接技术,以及加强我的细心和耐心。电路板焊接要求很高,不能出错。这点很重要。因为贴片焊接查错的话会非常不方便。所以最好是一步到位。
本文档为【数字时钟设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_362711
暂无简介~
格式:doc
大小:743KB
软件:Word
页数:18
分类:互联网
上传时间:2013-12-30
浏览量:124