ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:621.73KB ,
资源ID:11608799      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11608799.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机系统的电子钟设计与仿真.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机系统的电子钟设计与仿真.docx

1、基于单片机系统的电子钟设计与仿真 基于AT89C51单片机系统的电子钟设计与仿真 摘 要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此越来越广泛地应用各个领域. 本文的电子钟系统是以单片机(AT89C51)为核心,时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件组成。具体介绍应用Proteus的ISIS软件进行单片机系统的电子钟设计与仿真的实现方法。该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。关键词:单片

2、机; 时钟芯片 ;数码管显示驱动芯片 ;Proteus;电子钟目 录第一章 绪 论. 21.1引 言 21.2 Proteus软件简介 2第二章 系统设计 32.1电子钟系统器件选择 32.1.1 AT89C51单片机简介. 32.1.2 实时时钟电路DS1302工作原理. 62.1.3 MAX7219工作原理简介. 82.2 电子钟系统设计流程. 11第三章 硬件电路设计. 123.1 Protel DXP电路图设计. 123.2 Proteus 电路图设计 12第四章 软件设计. 144.1 程序流程图设计. 144.2 源程序设计. 144.3 KeilC51进行程序调试 18第五章 系

3、统调试与仿真 . 195.1 Proteus中Hex 文件选择. 195.2 Proteus进行电子钟系统仿真. 20结束语 21参考文献. 21致 谢. 21第一章 绪 论1.1引 言随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的

4、电子设备外,开发过程也较繁琐。来自英国Labcenter Electronics公司的Proteus软件很好地诠释了利用现代EDA工具方便快捷开发单片机系统的优势。它包括PROTEUS VSM(Virtual System Modelling)、PROTEUS PCB DESIGN两大组成部分,在PC机上就能实现原理图电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证以及形成PCB文件的完整嵌入式系统设计与研发过程。单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面, 其调试过程一般分为软件调试、硬件测试、系统调试3个过程。如果采用单片机系统

5、的虚拟仿真软件Proteus,则不用制作具体的电路板也能够完成以上工作。1.2 Proteus软件简介PROTEUS软件由Labcenter公司开发,是目前世界上最先进、最完整的嵌入式系统设计与仿真平台,可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。微控制器系统相关的仿真需建立编译和调试环境,可选择Keil C51uVision2 软件。该软件支持众多不同公司的芯片,集编辑、编译和程序仿真等于一体,同时还支持PLM、汇编和C语言的程序设计。它的界面友好易学,在调试

6、程序、软件仿真方面有很强大的功能。 其革命性的功能是:将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,实时看到运行后的输入、输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等, Proteus为我们建立了完备的电子设计开发环境。第二章 系统设计2.1电子钟系统硬件组成电子钟系统硬件主要由AT89C51单片机、时钟芯片DS1302、数码管显示驱动芯片MAX7219等元器件组成。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机DS1302 是美

7、国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时。MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片。图2.1 电子钟系统硬件电路组成框图2.1.1 AT89C51单片机简介AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器

8、件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。图2.11 AT89C51单片机1.主要特性与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置

9、和掉电模式 片内振荡器和时钟电路 2.管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,

10、P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流

11、。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:P3.0 RXD串行输入口P3.1 TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1P3.4 T0记时器0外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部数据存储器读选通RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚

12、用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程

13、序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2

14、.1.2 实时时钟电路DS1302工作原理 1.DS1302的结构及工作原理 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。2.引脚功能及结构图2.12 DS1302芯片图示表

15、出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行

16、操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK始终是输入端。3.DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式, 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31

17、个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。2.1.3 MAX7219工作原理简介MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。它的操作很简单,MCU只需通过模拟SPI三线接口

18、就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。 图2.1.3.1 DS1302芯片MAX7219的外部引脚分配1.引脚分配及功能图2.1.3.2 MAX7219的内部引脚分配各引脚的功能为:DIN:串行数据输入端DOUT:串行数据输出端,用于级连扩展LOAD:装载数据输入CLK:串行时钟输入DIG0DIG7:8位LED位选线,从共阴极LED中吸入电流SEG ASEG G DP 7段驱动和小数点驱动ISET: 通过一个1

19、0k电阻和Vcc相连,设置段电流2.寄存器介绍MAX7219内部的寄存器如图所示,主要有:译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。编程时只有正确操作这些寄存器,MAX7219才可工作。图2.1.3.3 MAX7219内部的相关寄存器分别介绍如下:(1) 译码控制寄存器(X9H)如图所示,MAX7219有两种译码方式:B译码方式和不译码方式。当选择不译码时,8个数据为分别一一对应7个段和小数点位;B译码方式是BCD译码,直接送数据就可以显示。实际应用中可以按位设置选择B译码或是不译码方式。图2.1.3.4 MAX7219的译码控制寄存器(2) 扫描界限寄存

20、器(XBH)如图所示,此寄存器用于设置显示的LED的个数(18),比如当设置为0xX4时,LED 05显示。图2.1.3.4 MAX7219的扫描界限控制寄存器(3) 亮度控制寄存器(XAH)共有16级可选择,用于设置LED的显示亮度,从0xX00xXF(4) 关断模式寄存器(XCH)共有两种模式选择,一是关断状态,(最低位 D0=0)一是正常工作状态(D0=1)。2.2 电子时钟系统设计流程图2.2 基于Proteus的单片机系统设计流程第三章 硬件电路设计3.1 电路原理图设计图3.1 Protel DXP设计的电子钟电路原理图主要元器件功能介绍:AT89C51是一种带4K字节闪烁可编程可

21、擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时。具有调时功能。时钟操作可通过AMPM指示决定采用24或12小时格式。MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片。采用三线制串行接口技术进行数据传送,可直接与单片机连接,用户能方便地修改内部参数实现多位LED数码管显示。内含有硬件动态扫描显示控制,每块芯片可驱动8个LED数码管。3.2 Proteus 电路图设计运行Proteus的ISIS 后出现程序主窗口界面,鼠标左键

22、单击窗口左侧的元器件工具栏的component.按钮, 接着再点击窗口左侧的元器件选择区的Pick Divices.按钮,弹出如图1所示的Pick Devices窗口,再在Categ栏里点击MicroprocessorICs项后,在Results栏里会出现各种类型的CPU器件,找到 AT89C51后双击,AT89C51就被添加到当前窗口左侧的元器件列表区了。用同样的方法依次把 DS130、MAX7219、数码管、晶振以及多个电阻、电容也添加到器件列表区里。然后再依次点击列表区里的器件,单击左键把他们放到绘图区,右键选中元件,并编辑其属性,合理布局后,进行连线。连线时当鼠标的指针靠近一个对象的引

23、脚时,跟着鼠标的指针r ICs就会出现一个“”提示符号,点击鼠标左键即可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,点击工具栏的 Inter-sheeTerminal.按钮,添加上电源和接地符号,原理图的绘制就完成了。图3.2.2 Proteus中设计的电子时钟系统原理图第四章 软件设计4.1 程序流程图设计图4.1 系统程序流程图4.2 源程序设计以下为部分源程序:#include AT89X51.H#include delay.h#include max7219.c#include music.c#define uchar unsigned cha

24、r#define uint unsigned int idatasbit ADD=P11;sbit SUB=P10;sbit ACC0 = ACC0;sbit ACC7 = ACC7;void showDay(void);/显示时间void showData(void);/显示日期void showDishi(void);/显示定时void int_0(void);/中断0void int_1(void);/中断1void flash_max7219(unsigned char n);/闪一个位max7219/*/* 实时时钟模块 时钟芯片型号:DS1302 */*/*/sbit T_CLK

25、= P23; /*实时时钟时钟线引脚 */sbit T_IO = P24; /*实时时钟数据线引脚 */sbit T_RST = P25; /*实时时钟复位线引脚 */*/void v_RTInputByte(uchar ucDa); /往DS1302写入1Byte数据uchar uc_RTOutputByte(void);/ 从DS1302读取1Byte数据void v_W1302(uchar ucAddr, uchar ucDa);/往DS1302写入数据uchar uc_R1302(uchar ucAddr);/读取DS1302某地址的数据/void v_BurstW1302T(ucha

26、r *pSecDa);/往DS1302写入时钟数据(多字节方式)/void v_BurstR1302T(uchar *pSecDa);/读取DS1302时钟数据/void v_BurstW1302R(uchar *pReDa);/往DS1302寄存器数写入数据(多字节方式)/void v_BurstR1302R(uchar *pReDa);/读取DS1302寄存器数据void v_Set1302(uchar *pSecDa) ;/设置初始时间,输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 void v_Get1302(uchar ucCurtime) ;

27、/读取DS1302当前时间uchar showTime8=0,0,10,0,0,10,0,0;/显示的时间*全局变量uchar setTime2=0,0;/定时的设定uchar time7=0,0x59,0x19,0x24,0x7,0x01,0x08;/秒 分 时 日 月 星期 年uchar Tmod=7;/此时的调节模式void main() delay_ms(200); /sound(); initMAX7219();/初始化max7219 cls();/清屏max7219 /v_Get1302(& time); /v_Set1302(& time); EX0=1; EX1=1; IT1=

28、1;/下降沿触发 IT0=1; EA=1;/开中断 v_Get1302(& time); showDay(); /int_1(); /int_0(); while(1) v_Get1302(& time); showDay(); if (setTime0=time2)&(setTime1=time1)sound(); /*显示时间void showDay(void) /将数据转化为显示格式 showTime7=time0 & 0x0f;/个位 showTime6=time04;/十位 showTime4=time1 & 0x0f; showTime3=time14; showTime1=time2 & 0x

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

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