实时时钟设计报告Word格式文档下载.docx

上传人:b****5 文档编号:20295171 上传时间:2023-01-21 格式:DOCX 页数:17 大小:30.36KB
下载 相关 举报
实时时钟设计报告Word格式文档下载.docx_第1页
第1页 / 共17页
实时时钟设计报告Word格式文档下载.docx_第2页
第2页 / 共17页
实时时钟设计报告Word格式文档下载.docx_第3页
第3页 / 共17页
实时时钟设计报告Word格式文档下载.docx_第4页
第4页 / 共17页
实时时钟设计报告Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

实时时钟设计报告Word格式文档下载.docx

《实时时钟设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实时时钟设计报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

实时时钟设计报告Word格式文档下载.docx

3.设计方案

根据系统设计的功能的要求,初步确定设计系统由主控模块、时钟电路、

显示电路、键盘输入电路及蜂鸣器电路组成。

电路系统框图如图 

所示。

键盘输入电路

显 

示 

电 

蜂 

鸣 

器 

图 

系统设计框图

其中,主控芯片使用 

51 

系列 

AT89C52 

单片机,时钟芯片使用 

DS1302,晶

振为 

11.0592MHz,显示电路由四位共阳 

LED 

数码管完成,键盘采用线性连接,

使用查询法实现调整功能,蜂鸣器电路由有源蜂鸣器完成。

▪ 

原理简述

1. 

主控模块

管脚图

是低功耗、高性能的 

CMOS8 

位单片机。

片内带有 

8KB 

的 

Flash

存储器,且允许在系统内改写或用编程器编程。

另外,AT89C52 

的指令系统和

引脚与 

80C52 

完全兼容。

管脚功能如下:

VCC:

供电电压;

GND:

接地;

P0 

口:

口为一个 

漏级开路双向 

I/O 

口,每脚可吸收 

8TTL 

门电流。

P1 

口是一个内部提

供上拉电阻的 

位双向 

口,P1 

口缓冲器能接收输出 

4TTL 

门电流;

P2 

口为一个内部上拉电阻的 

口,P2 

口缓冲器可接收,输出 

TTL 

门电流,当 

口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2 

口的管脚被外部拉低,将输出电流;

P3 

口管脚

是 

个带内部上拉电阻的双向 

口,可接收输出 

个 

当 

写入“1”后,它们被内部上拉为高电平,并用作输入;

口管脚功能:

P3.0

RXD(串行输入口);

P3.1 

TXD(串行输出口);

P3.2 

是/INT0(外部中

断 

0);

P3.3 

是/INT1(外部中断 

1);

P3.4 

T0(记时器 

外部输入);

P3.5

T1(记时器 

P3.6 

是/WR(外部数据存储器写选通);

P3.7 

/RD(外部数据存储器读选通);

口同时为闪烁编程和编程校验接收一些控

制信号。

RST:

复位输入。

当振荡器复位器件时,要保持 

RST 

脚两个机器周期

的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许输出电平用

于锁存地址的地位字节。

/PSEN:

外部程序存储器的选通信号。

在由外部程序

存储器取指期间,每个机器周期两次/PSEN 

有效。

但在访问外部数据存储器时,

这两次有效的/PSEN 

信号将不出现。

/EA/VPP:

当/EA 

保持低电平时,则在此

期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反

向振荡器的输出。

2. 

时钟电路

硬件时钟 

电路

时钟芯片包括实时时钟/日历和 

31 

字节的静态 

RAM。

它经过一个 

单的串行接口与微处理器通信。

实时时钟/日历提供秒、分、时、日、周、月和

年等信息。

对于小于 

天的月和月末的日期自动进行调整,还包括闰年校正的

功能。

时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。

采用

三线接口与 

CPU进行同步通信,并可采用突发方式一次传 

送多字节的时钟信号

或RAM数据。

在任何数据传送 

时必须 

先初始 

化, 

把 

脚置为高电平, 

然后 

8位地址和命令字装入移位寄存器,数据在 

SCLK 

的上升沿被输入。

无论是读周

期还是写周期,开始 

位指定 

40 

个寄存器中哪个被访问到。

在开始 

个时钟周期,

把命令装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时

写入数据。

时钟脉冲在单字节方式下 

为 

加 

8,在多字节方式下为 

8加字节数,

最大可达248个字节数。

如果在传送 

过程中 

置 

脚为低电平 

,则 

会中 

止本 

数 

据传送 

,并 

且 

I/O引脚变为高阻态。

相关代码如下:

/***********************ds1302 

与 

at89s52 

引脚连接******************/

sbit 

T_RST=P3^6;

//RST 

脚接 

P3^6

T_CLK=P3^4;

//CLK 

P3^4

T_IO=P3^5;

//IO 

P3^5

ACC0=ACC^0;

//定义标志位

ACC7=ACC^7;

/**********************DS1302:

写入操作(上升沿)******************* 

/

void 

write_byte(unsigned 

char 

da)

{

unsigned 

i;

ACC=da;

for(i=8;

i>

0;

i--)

T_IO=ACC0;

T_CLK=0;

T_CLK=1;

ACC=ACC>

>

1;

}

读取操作(下降沿)*****************/

read_byte(void)

for(i=0;

i<

8;

i++)

T_CLK 

ACC7 

T_IO;

return(ACC);

/***************DS1302:

写入数据(先送地址,再写数据)***************/

write_1302(unsigned 

addr,unsigned 

T_RST=0;

//停止工作

T_RST=1;

//重新工作

write_byte(addr);

//写入地址

write_byte(da);

/******************DS1302:

读取数据(先送地址,再读数据)************/

read_1302(unsigned 

addr)

temp;

temp=read_byte();

return(temp);

3. 

显示电路

4四位共阳数码管电路

显示部分采用普通的共阳数码管显示,使用动态扫描,以便减少硬件电路。

数码管里面有 

只发光二极管,与实验板 

端口所接的二极管是相同的。

分别记作 

a﹑b﹑c﹑d﹑e﹑f﹑g﹑dp,其中 

dp 

为小数点,每一只发光二极管都

有一根电极引到外部引脚上,而另外一只引脚就连接在一起同样也引到外部引

脚上。

该数码管为共阳极,且通过 

P0=P2 

直接把按键状态给到 

上,并没有

中间变量,通过按键控制数码管的各管脚的高低电平接入情况。

当数码管里面

的发光二极管的阳极接在一起作为公共引脚,在正常使用时此引脚接电源正极。

发光二极管的阴极接低电平时,发光二极管被点亮,从而相应的数码段显示数

字。

接到单片机的 

口,若为低电平,可使 

亮起。

发光二极管的亮、

灭由内部程序控制,因为流水灯与数码管同时接在 

端口,所以流水灯的 

8

发光二极管与 

数码管亮暗相同。

相关程序如下:

/*****************************定义数码管显示引脚*****************************/

LED_0=P1^4;

//数码管 

个控制引脚定义

LED_1=P1^5;

LED_2=P1^0;

LED_3=P1^1;

LED_4=P1^2;

LED_5=P1^3;

LED_6=P1^6;

LED_7=P1^7;

unsignedcharseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//0~~9 

段码

/*********************************显示程序************************************/

/* 

动态扫描条件(单个 

在 

秒内):

count 

=50 

次//点亮次数*/

/*time 

=2ms//持续时间*/

秒,分,时寄存器是 

BCD 

码形式:

用 

16 

求商和余进行"

高 

位"

和"

低 

分离

*/

/****************************************************************************/

led_disp(unsigned 

*poi)

P0=seg[*(poi+1) 

16];

//第 

个数码管:

显示分(个位);

LED_5=0;

delay(3);

LED_5=1;

显示分(十位);

LED_4=0;

LED_4=1;

P0=seg[*(poi+2) 

16]-(((*poi%16)%2)<

<

7);

显示时(个位);

LED_3=0;

LED_3=1;

/16];

显示时(十位);

LED_2=0;

LED_2=1;

led_disp1(unsigned 

显示时(个位);

4. 

58 

路独立按键电路

单片机的按键各自独立,按下归零,抬起置一。

sw0=P2^7;

//按键 

sw1=P2^6;

7

sw2=P2^0;

1

5. 

蜂鸣器电路

6有源蜂鸣器电路

蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜

发声的。

因此需要一定的电流才能驱动它,单片机 

口输出的电流较小,其

电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。

程序中

通过改变单片机对应 

口输出波形的频率,就可以调整控制蜂鸣器音调,产

生各种不同音色、音调的声音。

另外,改变其占空比,也可以控制蜂鸣器的声

音大小。

可以有两种驱动方式,即用 

PNP 

或 

NPN 

三极管电流放大电路驱动。

本电路通过一个 

三极管 

9012 

来放大驱动蜂鸣器,当输出高电平时,三极

管 

Q1 

截止,没有电流流过线圈,蜂鸣器不发声;

当输出低电平时,三极管导

通,这样蜂鸣器的电流形成回路,发出声音。

因此,我们可以通过程序控制

口输出的电平来使蜂鸣器发出声音和关闭,从而实现各种可能音响的产生。

#include 

AT89X52.H>

//包含头文件

buz=P3^7;

//定义蜂鸣器引脚是 

P33

Delay(unsigned 

int 

i)//最常用的延时函数,已经反复使用过

while(i--);

main(void)//主函数开始

for(;

;

//以下实现 

buzzer 

和 

relay 

以一定频率改变状态

buz=0;

//蜂鸣器响 

继电器开

Delay(60000);

//延时

buz=1;

//蜂鸣器不响 

继电器关

调试过程

硬件调试

使用烙铁、焊锡、镊子等工具,根据原理图,将各种电子元件正确装配到

电阻板上。

焊接过程中注意电路板与原理图连接一致,分清电解电容、二极管、

芯片、排阻、蜂鸣器、单片机 

接口等元件的引脚正反,避免虚焊、引脚短

路现象。

为了避免较低的元件焊接不便,焊接时元件需要从低往高焊,较低的

元件如电阻、单排圆孔、排阻、晶振等,普通高度元件有瓷片电容、按键、

LED、芯片座、USB 

头、数码管、柱状晶振等,较高的元件有串口头、排针排

孔、电源头等。

完成电路板的焊接工作并检查无误后,借助测试程序测试电路板的好坏。

在板子上正确下载 

实时时钟测试程序后,经测试电路板能够正确完成

程序的功能,说明电路板焊接正确无误,可放心地进行下一步软件调试。

软件调试

实时时钟测试程序可以完成从 

12:

00 

开始计时,并在数码管上显

示相应时间,在此程序基础上进行修改,即可完成本项目的预期功能。

在完成按键设置时间功能时,发现数码管显示数据出现时而正常,时而乱

码该情况。

研究程序代码后发现,由于 

中秒、分、时寄存器是 

形式的,所以在进行加法运算时需要对 

码进行修正,当结果大于 

时,要

进行加 

操作,另外时和分的个位满 

10 

进一,分满 

60 

进一归零,时满 

24 

归零

的判断分支语句顺序不是任意的,必须遵守一定的顺序。

在修改了上述错误后,

发现由于按键消抖动不彻底,也导致了显示时间存在一定问题。

通过修改延迟

时间,发现设置为 

20000 

时按键不灵活,设置为 

15000 

时按键存在抖动。

再通

过一定调试后,最终将数值设置为 

18000。

在完成整点报时功能时,会出现蜂鸣器鸣叫持续一分钟的情况,这与鸣叫

次数与小时相同的设计初衷违背。

研究发现是由于蜂鸣器相关语句位置太后,

其中参数的值已经改变原有的值的原因,通过反复测试及分析,最终将蜂鸣器

代码位置放在修改进位语句后面,从而完成了蜂鸣器整点报时的功能。

主要程序

************************************主程序**********************************/

delaysw(unsigned 

i)

main(void)

clk_time[3]={0x00,0x00,0x12};

//秒,分,时寄存器初始值

temp=0x80;

//数组序号

delay(300);

write_1302(0x8e,0x00);

//WP=0 

写操作

3;

write_1302(temp,clk_time[i]);

temp+=2;

//delay(300);

write_1302(0x8e,0x80);

//WP=1 

写保护

while

(1)

if(sw0==0)//按键 

按下,时加 

delaysw(18000);

if(sw0==0)

clk_time[2]=read_1302(0x85);

clk_time[2]=clk_time[2]+1;

dflag=1;

//标志位置 

if(sw1==0)//按键 

按下,分加 

if(sw1==0)

clk_time[1]=read_1302(0x83);

clk_time[1]=clk_time[1]+1;

if(dflag==1)//标志位为 

if(clk_time[1]%16==10)

clk_time[1]=clk_time[1]+6;

//分的个位满 

10,分的十位加 

if(clk_time[1]%96==0)

clk_time[1]=0 

clk_time[2]+=1;

}//分满 

归零,时加 

if(clk_time[2]%16==10)

clk_time[2]=clk_time[2]+6;

//时的个位满 

10,时的十位加 

if(clk_time[2]%36==0)

clk_time[2]=0 

// 

时满 

if(clk_time[1]==0)//整点报时

clk_time[2];

led_disp(clk_time);

delay(60000);

write_1302(0x8e,0x00);

11 

dflag=0;

if(sw2==0)//按键 

按下

if(sw2==0)

dflag=~dflag;

if(dflag==0)//发送时间到数码管显示

else

led_disp1(clk_time);

temp=0x81;

clk_time[i]=read_1302(temp);

//实现每秒读时间

心得体会

本次课程设计是对我们单片机学习的检验及对实际动手能力的又一次提高。

回顾此次单片机课程设计,真是感慨颇多。

期间不仅巩固了以前所学过的

知识,还学到了很多在书本上所没有学到过的知识。

在实际设计中才发现,书

本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但

要深入地理解,而且要不断地更正以前的错误思维。

一切问题必须要靠自己一

点一滴地解决,而在解决的过程当中你会发现自己在飞速地提升。

对于单片机

设计,其硬件电路是比较简单的,只要实验板焊接正确就问题不大了,主要的

还是解决程序设计中的问题。

而程序设计是一个很灵活的东西,它反映了你解

决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。

因此可以说单片

机的设计是软件和硬件的结合,二者是密不可分的。

通过这次课程设计我发现单片机原理应用性极强,只有老师的讲解不行,

光看不试也没用,只有自己动手去做才会发现自己确实有太多的不足。

许多的

原理、程序看似简单,真正去做之后才会了解专业知识并没有自己想象中的那

12 

样扎实,从而明白理论与实际相结合是很重要的。

只有理论知识是远远不够的,

只有将所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社

会服务,从而提高自己的实际动手能力和独立思考能力,树立起对自己工作能

力的信心,相信这会对今后的生活有非常重要的影响,而且大大提高了动手的

能力,使我们充分体会到了在创造过程中探索的艰难和成功时的喜悦。

当然这次课程设计会提高我们独立思考完成任务的能力,但同组之间遇到

实在没有办法解决的问题时,也会相互咨询和讨论,这样加强了大家的合作精

神及团结能力,对未来的学习工作也有着极大的帮助。

在本次课程设计中,我们感到过程决定结果,细节决定成败。

整个过程中,

从一开始的实验板焊接,到软件编程,再最后到程序调试,每一步我们都相当

认真地去对待,每个细节都经过再三地分析确认。

从中我们学会了很多,我们

要对自己所正在进行的事情有着充分的耐心,因为程序的编写和调试会经历很

多的挫折和困难,如果不够坚持,最终是不会得到预期的项目成果的,同时也

了解到了一个项目的设计完成并不是将简单的理论知识的拼凑和组合,是需要

将理论和实际有机结合的过程。

在大学的这几年,我们接触到的都是基本的理论知识,极少会有机会在实

践中运用这些知识,而本次课程就给我们这样的一次机会。

通过此次课程设计

中遇到的问题也让我们认识到了自己知识的欠缺,所以以后的时间要好好利用

图书馆、专业网站等途径来学习更多知识武装自己,为以后走上工作岗位打下

坚实的基础。

我相信,在以后的单片机学习与使用中,本次课程设计学到的东西将会起

着不可代替的作用。

此次设计的顺利如期完成也给了我们很大的信心,让我们

在了解专业知识的同时也对本专业的发展前景充满了信心。

13 

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

当前位置:首页 > 人文社科 > 法律资料

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

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