单片机电子时钟Word格式.docx

上传人:b****2 文档编号:1271155 上传时间:2023-04-30 格式:DOCX 页数:20 大小:219.73KB
下载 相关 举报
单片机电子时钟Word格式.docx_第1页
第1页 / 共20页
单片机电子时钟Word格式.docx_第2页
第2页 / 共20页
单片机电子时钟Word格式.docx_第3页
第3页 / 共20页
单片机电子时钟Word格式.docx_第4页
第4页 / 共20页
单片机电子时钟Word格式.docx_第5页
第5页 / 共20页
单片机电子时钟Word格式.docx_第6页
第6页 / 共20页
单片机电子时钟Word格式.docx_第7页
第7页 / 共20页
单片机电子时钟Word格式.docx_第8页
第8页 / 共20页
单片机电子时钟Word格式.docx_第9页
第9页 / 共20页
单片机电子时钟Word格式.docx_第10页
第10页 / 共20页
单片机电子时钟Word格式.docx_第11页
第11页 / 共20页
单片机电子时钟Word格式.docx_第12页
第12页 / 共20页
单片机电子时钟Word格式.docx_第13页
第13页 / 共20页
单片机电子时钟Word格式.docx_第14页
第14页 / 共20页
单片机电子时钟Word格式.docx_第15页
第15页 / 共20页
单片机电子时钟Word格式.docx_第16页
第16页 / 共20页
单片机电子时钟Word格式.docx_第17页
第17页 / 共20页
单片机电子时钟Word格式.docx_第18页
第18页 / 共20页
单片机电子时钟Word格式.docx_第19页
第19页 / 共20页
单片机电子时钟Word格式.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机电子时钟Word格式.docx

《单片机电子时钟Word格式.docx》由会员分享,可在线阅读,更多相关《单片机电子时钟Word格式.docx(20页珍藏版)》请在冰点文库上搜索。

单片机电子时钟Word格式.docx

完成显示由秒由00一直加1至59,再恢复为00;

分由00一直加1至59,再恢复00;

时由00一直加1到23,再恢复00。

5.为了保证计时的稳定及准确须计时采用时钟芯片1302

6.设计电子时钟原理图,学习用PROTEL画出该原理图,并用proteus进行仿真;

设计和绘制软件流程图,用C语言进行程序编写;

进行调试。

2.课程设计分析设计

2.1课程设计方案

AT89C52的P0口和P2口外接由6个LED数码管(LED7~LED0)构成的显示器,用P0口作LED的段码输出口,P2口作LCD的位控输出线,P1口外接三个按键S1、S2、S3构成键盘电路。

简易电子钟的功能不复杂,采用其现有的I/O便可完成。

按照系统设计功能的要求,确定系统由3个模块组成:

按键电路、复位电路、晶振电路、电源、显示电路、主控电路。

数字电子钟总体电路结构框图如下图所

图2.1硬件框图

2.2主要元器件的介绍

2.2.1AT89C52芯片的介绍

AT89C52是本设计最核心的软件,它是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8kbytes的可反复摖写的Flash只读程序存储器和256bytes的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器和Flash存储单元,功能强大。

AT9C52单片机适用于许多较为复杂的控制应用场合。

2.2AT89C52管脚图

AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

P0口:

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

  在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口:

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

  P2口:

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

  在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

Flash编程或校验时,P2亦接收高位地址和一些控制信号。

P3口:

P3口是一组带有内部上拉电阻的8位双向I/O口。

P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表1所示:

P3口各位的第二功能

P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

  对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

XTAL1:

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2:

振荡器反相放大器的输出端。

2.2.2DS1302

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×

8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由Vcc1或Vcc2两者中的较大者供电。

当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。

当Vcc2小于Vcc1时,DS1302由Vcc1供电。

X1和X2是振荡源,外接32.768kHz晶振。

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;

其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc>

2.0V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

I/O为串行数据输入输出端(双向),后面有详细说明。

SCLK为时钟输入端。

下图为DS1302的引脚功能图:

3.系统硬件设计

采用AT89C52芯片作为硬件核心,以AT89C52最小系统为基础。

时钟电路由高精度低功耗的DS1302提供,输入部分采用四个独立式按键S1、S2、S3。

显示部分为6个LED数码管。

其详细线路连接如下图。

3.1晶振电路

每个单片机系统里都有晶振,全程是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。

晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。

高级的精度更高。

有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。

晶振的作用是为系统提供基本的时钟信号。

通常一个系统共用一个晶振,便于各部分保持同步。

3.2复位电路

为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。

一般微机电路正常工作需要供电电源为5V±

5%,即4.75~5.25V。

由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。

复位电路工作原理如右图所示,VCC上电时,C充电,在10K电阻上出现电压,使得单片机复位;

几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。

工作期间,按下S,C放电。

S松手,C又充电,在10K电阻上出现电压,使得单片机复位。

几个毫秒后,单片机进入工作状态。

3.3按键电路

为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间.用户可以通过按键来实现计时中断,当需要调整时间时按下按键A进入调试状态,B按键为上调(+)C按键为下调(-)可以依次对秒、分、时进行调整。

3.4LED数码管显示接口电路的设计

在液晶显示屏占领了一定地位时,数码管仍具有其不可磨灭的光芒。

其具有低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度比较高,精确可靠,操作简单。

数码管采用BCD编码显示数字,程序编译容易,资源占用较少。

故选择了数码管。

数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。

实验中通过控制各个LED的亮灭来显示数字。

3.5蜂鸣器

该电路采用晶体管Q7来驱动蜂鸣器,BUZZER与P3.0口相连,当P3.0口输出高电平时,蜂鸣器不响;

当P3.0输出低电平时,蜂鸣器发出响声。

控制P3.0口输出高、低电平的时间变化频率,可以改变蜂鸣器发出声音。

4.软件流程图

5程序的源代码清单

源代码见附录。

6调试运行结果及分析

软件调试:

打开软件建立NewProject,打开一个新项目,保存此项目,输入工程文件名后,并保存工程文件的目录。

为项目文件选择一个目标器件,即AT89C52。

上述设置好以后,创建源程序文件代码并保存。

把源文件添加的项目中,用鼠标指在目标工作区,选择需要添加到项目的文件。

开始编译。

调试结果总体比较满意,基本上实现了本次课程设计的基本要求。

但是在一些地方还是不太理想。

比如在DS1302器件上使用不同的上拉电阻,会导致数码管显示的时间走得或快或慢,时间不准。

在进行调试的时候,发现数码管与单片机之间用分线的形式连接三极管及电阻,数码管不会显示,而用总线则没有问题。

调试结果如下图。

7.课程设计总结

本次课程从基本方案的制定,再到硬件电路的选择,到制作电路完成,最后进行程序调试。

在此期间我遇到很多困难,尤其是在做仿真时结果经常出不来。

经过仔细检查,仿真线路是没有错的,可结果就是不行。

这说明了可能是仿真软件的。

经过一次又一次品尝到了解决问题的喜悦,最终提前完成了要求的全部功能,并在空闲的时间里加入了一些创新的部分。

在此次课程设计中我发现了自己知识的不足,通过一周的学习、实践,我学到了很多东西。

通过此次课程设计的教学实践,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。

初步掌握简单单片机应用系统的设计、制作、调试的方法。

提高动手实践能力。

通过这次对数字时钟的设计,让我系统的了解和学会应用单片机C语言来对所需实现的功能进行编程。

我会在以后的学习生活中弥补我所缺少的知识。

本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。

在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。

8参考文献

倪晓军,单片机原理与接口技术教程,清华大学出版社,2009年.

王昊天,李海涛,王志强等.《PIC单片机原理与应用》.机械工业出版社,2010.

李群芳,单片机微型计算机与接口技术.2版.北京:

电子工业出版社,2005.

刘守义,王静霞,单片机应用技术,西安电子科技大学出版社,2002.

崔凤波.《数字电子技术》.大连理工大学出版社,2007.7.

附录

主要源代码如下:

#include"

reg51.h"

#include<

intrins.h>

sbitDS1302_CLK=P3^6;

sbitDS1302_IO=P3^5;

sbitDS1302_RST=P3^7;

sbits1=P1^2;

sbits2=P1^5;

sbits3=P1^7;

chardisp1,disp2,disp3,disp4,disp5,disp6,tiao,tt,flag;

Unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

unsignedcharsecond,minute,hour,week,day,month,year;

//秒、分、时、

Unsignedchartime[]={0x06,0x03,0x14,0x03,0x72,0x00,0x00,0x12,0x06,0x06/*,14,32,55*/};

//初始时间数组

voiddelay1(void)

{

intk;

for(k=0;

k<

400;

k++);

}

voiddisplay(void)

disp2=second/16;

disp1=second%16;

disp4=minute/16;

disp3=minute%16;

disp6=hour/16;

disp5=hour%16;

P2=0x01;

P0=tab[disp6];

delay1();

P2=0x02;

P0=tab[disp5];

P2=0x04;

P0=tab[disp4];

P2=0x08;

P0=tab[disp3];

P2=0x10;

P0=tab[disp2];

P2=0x20;

P0=tab[disp1];

voidInputByte(unsignedcharbyte1)

chari;

for(i=8;

i>

0;

i--)

{

DS1302_IO=(bit)(byte1&

0x01);

DS1302_CLK=1;

_nop_();

DS1302_CLK=0;

byte1>

>

=1;

}

return;

unsignedcharoutputbyte(void)

unsignedchari;

unsigneducdat=0;

DS1302_IO=1;

ucdat>

if(DS1302_IO)ucdat|=0x80;

return(ucdat);

voidwrite_ds1302(unsignedcharaddr,unsignedcharTDat)

DS1302_RST=0;

_nop_();

DS1302_CLK=0;

DS1302_RST=1;

InputByte(addr);

InputByte(TDat);

DS1302_CLK=1;

unsignedcharread_ds1302(unsignedcharaddr)

unsignedchartimedata;

InputByte(addr);

timedata=OutputByte();

return(timedata);

voidinitial_ds1302()

write_ds1302(0x8e,0x00);

//写保护寄存器,在对时钟或RAM写前WP一定要为0

write_ds1302(0x84,time[7]);

//时

write_ds1302(0x82,time[6]);

//分

write_ds1302(0x80,time[5]);

//秒

write_ds1302(0x8e,0x80);

//写保护寄存器//写

voidread_time()

second=read_ds1302(0x81);

//秒寄存器

minute=read_ds1302(0x83);

hour=read_ds1302(0x85);

//时

voidkey()

tt=0;

flag=0;

tiao=0;

while(s1==0||tt==1)//判断调节按钮是否按下

{

tt=1;

if(flag==0){tiao++;

flag=1;

if(tiao==1)

{

while(s1==0);

display();

if(s2==0)

{while(s2==0);

write_ds1302(0x80,++second);

if(s3==0)

{while(s3==0);

write_ds1302(0x80,--second);

}//调秒

if(s1==0)flag=0;

if(tiao==2)

{

while(s1==0);

display();

if(s2==0)

{while(s2==0);

write_ds1302(0x82,++minute);

{while(s3==0);

write_ds1302(0x82,--minute);

}

if(tiao==3)

write_ds1302(0x84,++hour);

write_ds1302(0x84,--hour);

}

if(tiao==4)tt=0;

}

voidmain(void)

inti=10;

initial_ds1302();

//初始化DS1302

while

(1)

read_time();

//读取时间

display();

//显示时间

key();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2