ds1302时钟数码管显示时分秒.docx

上传人:b****3 文档编号:3055243 上传时间:2022-11-17 格式:DOCX 页数:16 大小:366.03KB
下载 相关 举报
ds1302时钟数码管显示时分秒.docx_第1页
第1页 / 共16页
ds1302时钟数码管显示时分秒.docx_第2页
第2页 / 共16页
ds1302时钟数码管显示时分秒.docx_第3页
第3页 / 共16页
ds1302时钟数码管显示时分秒.docx_第4页
第4页 / 共16页
ds1302时钟数码管显示时分秒.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

ds1302时钟数码管显示时分秒.docx

《ds1302时钟数码管显示时分秒.docx》由会员分享,可在线阅读,更多相关《ds1302时钟数码管显示时分秒.docx(16页珍藏版)》请在冰豆网上搜索。

ds1302时钟数码管显示时分秒.docx

ds1302时钟数码管显示时分秒

ds1302时钟数码管显示时分秒

 

单片机原理课程设计

 

课题名称:

基于DS1302的数码管显示数字钟

专业班级:

电子信息工程

学生学号:

0414070126

 

基于DS1302的数码管显示数字钟设计

摘要

本次课程设计的是使用专门的时钟芯片DS1302在数码管上显示的数字电子钟,并能通过按键对其进行调时和校准。

DS1302是一种高性能、低功耗、带RAM的实时时钟芯片,它能够对时,分,秒进行精确计时,它与单片机的接口使用同步串行通信,仅用3条线与之相连接,就可以实现MCS-51单片机对其进行读写操作,把读出的时间数据送到数码管上显示。

程序运行时,数码管将从当前时间开始显示,通过调节K1键和K2键可以分别对小时和分钟进行调整,调整后,时钟以新的时间为起点继续刷新显示。

关键字:

MCS-51单片机、DS1302,数码管,按键,动态扫描,调时,校准;

1设计任务和要求

1.应用MCS-51单片机设计单片机实现数字钟(LED显示小时:

分:

秒)电路;

2.选用八位LED数码显示,实时显示时、分、秒,采用按键式实现时钟对表和快慢调整;

3.硬件设计部分,根据设计的任务选定合适的单片机,根据控制对象设计接口电路。

设计的单元电路必须有工作原理,器件的作用,分析和计算过程;

4.软件设计部分,根据电路工作过程,画出软件流程图,根据流程图编写相应的程序,进行调试并打印程序清单;

5.原理图设计部分,根据所确定的设计电路,利用Protel工具软件绘制电路原理图、PCB板图、提供元器件清单。

2方案论证

实现数字电子钟的设计有以下两种基本方案,现就两种基本方案的优劣进行具体论证,从而说明选择方案二的理由。

方案一:

直接用单片机的内部定时器来实现时间。

该方案以MCS-51单片机为主控芯片,以MCS-51的内部定时器产生的1s中断作为时钟的驱动,然后再通过8个74LS245缓冲器驱动8个独立的数码管来组成数字钟电路。

该电路由于数码管和缓冲器的数目较多,所以在连线方面比较复杂,而且用到的分压电阻也比较多。

但是此方案最大的缺点在于单片机89C51产生的1s中断存在误差,如果工作时间长的话,数字时钟显示的时间将会出现严重的偏差,不够精确。

方案二:

使用串行接口时钟芯片DS1302设计时钟电路。

该设计方案以MCS-51单片机为主控芯片,以串行时钟芯片DS1302为核心计时芯片,然后再通过一个74LS245缓冲器驱动两组数码管组(每个数码管组由四个数码管连在一起组成)组成数字时钟电路。

更重要的是,DS1302时钟芯片的加入大大提高了数字钟时间的准确性,而且该电路在断电后不丢失时间和数据信息时也使得该方案的研究与提升更具有开发的意义。

3系统硬件设计

3.1系统总原理图

 

图1数字钟总原理图

3.2元件清单

元件序号

型号或主要参数

数量

封装

元件序号

型号或主要参数

数量

封装

R1

100Ω

1

AXIAL0.3

U1

AT89C51

1

DIP40

R2

1kΩ

1

AXIAL0.3

U2

74S15

1

DIP14

RP1

1KΩ

1

SIP9

U4

DS1302

1

DIP8

C1

22pF

3

RAD2.54

U3

74LS245

1

DIP20

C4

104uF

1

RAD2.54

Y1

CRYSTAL

1

STAL3

DS

SM41C564

2

数码管*4

Y2

CRYSTAL

1

STAL2

K

按键

4

按键4.5*6.5

3.3PCB板图

 

图2总电路PCD板图

3.4Proteus仿真图

 

图3proteus仿真图

3.5分电路图及原理说明

本次设计的硬件电路由主控部分(单片机MCS-51)、计时部分(实时时钟芯片DS1302)、显示部分(数码管)、调时部分(按键)4个部分组成。

各部分之间相互协作,构成一个统一的有机整体,实现数字时钟的计时功能。

现就各部分的硬件电路设计作出如下论述:

3.5.1主控部分(单片机MCS-51)

MCS-51单片机作为主控芯片,控制整个电路的运行。

其外围电路主要有两部分:

复位电路和晶体振荡器。

复位电路的功能是:

系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。

为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。

该设计采用含有二极管的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降(电池电压不足)等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。

晶体振荡电路:

MCS-51单片机中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为该反向放大器的输入端和输出端。

这个反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。

外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。

对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。

如果使用石英晶体,电容应该使用30pF

10pF。

电路图如下:

 

图4主控部分电路图

3.5.2计时部分(实时时钟芯片DS1302)

时钟芯片DS1302与外围电路的连接:

与MCS-51单片机的接口是由3条线来完成的,MCS-51单片机的P1.0与时钟芯片的数据传输端I/O相连,P1.1用来作为DS1302输入时钟SCLK控制端,P1.2控制DS1302的复位输入端RST。

DS1302的X1和X2管脚外接标DS1302的复位引脚通过把

输入驱动置高电平来启动所有的数据传送。

输入有两种功能:

首先,

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

提供了终止单字节或多字节数据的传送手段。

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

如果在传送过程中置

为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。

上电运行时,在Vcc≥2.5V之前,

必须保持低电平。

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

 

图5计时部分电路图

3.5.3显示部分(共阳极数码管)

八段数码显示管有两种,一种是共阳数码管,其内部是由八个阳极相连接的发光二极管组成;另一种是共阴数码管,其内部是由八个阴极相连接的发光二极管组成。

二者原理不同但功能相同。

本设计的时间显示选用6个共阴八段数码管LED,其外形和内部结构如图10所示:

 

图6八段共阴数码管LED

3.5.4调时部分(按键)

按键电路有K1,K2,K3三个按键和一个74S15组成,只有其中任意一个按键按下,电路都会通过74S15向单片机INT0引脚发送一次中断请求信号。

按键K1用来调整小时,按键K2用来调整分钟,按键K3用来结束调时,数字开始继续走表。

 

 

图7按键电路

4系统软件设计

4.1程序流程图

 

 

 

图8主程序流程图

 

启动

读数据字节一位

复位端变高启动一次数据传送工作

结束

SCLK发脉冲

复位端变低

SCLK发脉冲

写命令字节一位

够8次吗?

够8次吗?

N

Y

Y

N

启动

写数据字节一位

复位端变高启动一次数据传送工作

结束

SCLK发脉冲

复位端变低

SCLK发脉冲

写命令字节一位

够8次吗?

够8次吗?

N

Y

Y

N

 

图9写DS1302流程图图10读DS1302流程图

4.2源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitsda=P1^1;//ds1302的数据线

sbitclk=P1^0;//ds1302的时钟线

sbitrst=P1^2;//ds1302的复位线

sbitk1=P1^5;//调时

sbitk2=P1^6;//调分

sbitk3=P1^7;//开始走秒

ucharcodeduan_code[]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码表

uchardisplay_code[]={

0x00,0x00,0xbf,0x00,0x00,0xbf,0x00,0x00};//显示格式,中间两个横杠

ucharbit_code[]={

0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管位选

ucharcurrent_time[7];//所读取的日期和时间

charadjust_flag=0;//调节标志

voiddelayms(uintx)//延时函数ms级

{

uchari;

while(x--)for(i=0;i++;i<120);

}

voidwrite_byte(ucharx)//写一个字节函数

{

uchari;

for(i=0;i<8;i++)

{

sda=x&1;

clk=1;

clk=0;

x>>=1;

}

}

ucharread_byte(void)//读一个字节函数

{

uchari,b,t;

for(i=0;i<8;i++)

{

b>>=1;

t=sda;

b|=t<<7;

clk=1;

clk=0;

}

returnb/16*10+b%16;

}

ucharread_data(ucharaddr)//读取数据函数

{

uchardat;

rst=0;

clk=0;

rst=1;

write_byte(addr);

dat=read_byte();

clk=1;

rst=0;

returndat;

}

voidwrite_data(ucharaddr,uchardat)//写入控制字和输入函数

{

clk=0;

rst=1;

write_byte(addr);

write_byte(dat);

clk=0;

rst=0;

}

voidset_1302()//设置ds1302函数

{

write_data(0x8e,0x00);//关闭写保护。

write_data(0x82,(current_time[1]/10<<4)|(current_time[1]%10));//初始化分

write_data(0x84,(current_time[2]/10<<4)|(current_time[2]%10));//初始化时

write_data(0x8e,0x80);//打开写保护。

}

voidgettime()//单片机从ds1302读取的时间数据

{

current_time[0]=read_data(0x81);

current_time[1]=read_data(0x83);

current_time[2]=read_data(0x85);

}

voidint0()interrupt0//中断函数

{

if(k1==0)//小时调整

{

adjust_flag=1;//正在调整

current_time[2]=(current_time[

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

当前位置:首页 > 法律文书 > 调解书

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

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