最新范文 方案 计划 总结 报告 体会 事迹 讲话 倡议书 反思 制度 入党

对时功能电子钟设计报告

日期:2021-01-31  类别:最新范文  编辑:一流范文网  【下载本文Word版

对时功能电子钟设计报告 本文关键词:功能,报告,电子钟,设计

对时功能电子钟设计报告 本文简介:设计报告题目完成人:张欣,杜枫一、系统概述使用AT89C51单片机结合段码LED显示器,键盘设计一个具有对时功能的电子钟。1、设计要求:l采用8个LED数码管,显示格式为“时时-分分-秒秒”,采用24小时制。l“时/分/秒”相应LED闪动,表示相应的部分处于对时状态。l用5个功能键操作来设置当前时间

对时功能电子钟设计报告 本文内容:

设计报告

完成人:张欣,杜枫

一、

系统概述

使用AT89C51单片机结合段码LED显示器,键盘设计一个具有对时功能的电子钟。

1、设计要求:

l

采用8个LED数码管,显示格式为“时时-分分-秒秒”,采用24小时制。

l

“时/分/秒”相应LED闪动,表示相应的部分处于对时状态。

l

用5个功能键操作来设置当前时间:

功能键K1~K5功能如下。

l

K1—进入时间设置状态,且“时时-分分-秒秒”LED闪动。

l

K2—设置小时。

l

K3—设置分钟。

l

K4—设置秒钟。

l

K5—确认完成设置,“时时-分分-秒秒”LED停止闪动,继续计时。

l

未进入计时状态时,K2-K5键的操作被忽略。

程序执行后LED显示“00:00:00”,然后开始计时。

2、用汇编语言编写相应软件;

3、系统软、硬件联调。

二、

方案设计

本次设计是基于AT89C51单片机电子钟的设计,对时、分、秒的显示的控制,时、分、秒用六位数码管显示LED数码管时钟电路采用24小时计时方式。该电路采用AT89C51单片机,使用5V电池供电,只使用一个按键进行复位状态的控制以及正常显示等状态。LED显示采用静态扫描方式实现,采用6M晶振。

该电子钟使用单片机模块控制,用单片机原理实现时、分、秒计时的装置。本次设计通过用单片机为主控制,通过电路仿真而实现。首先使用Proteus

Professional软件进行绘制硬件电路图,用keil软件进行编程与调试,最终生成hex文件,传入单片机内部,从而实现仿真效果。

三、

硬件设计

根据AT89C51单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。将AT89C51的P3.0~P3.1分别与74LS164的数据输入口和时钟信号输入口相连,74LS164是8位串入并出移位寄存器,负责将P3.0输出的串行数据转换成并行信号。显然,这种方式显示同样的位数使用单片机的口线大大减少,即可以让LED当前时间数值,数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。为节省端口,本系统采用静态扫描显示方式。系统的时分显示部件由6只7段共阳LED数码管构成,前两只用于时的显示,中间两只用于分的显示,最后两只用于秒的显示。每个LED数码管由相对应的74LS164驱动,数码管的a,b,c,d,e,f,g,h,分别分别74LS164的QA,QB,QC,QD,QE,QF,QH相连。

3.1

AT89C51引脚及其功能

引脚功能:

Vcc(40):电源电压

GND(20):接地

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

RST(9):复位信号输入端。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1(18):振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2(19):振荡器反相放大器的输出端。通过XTAL1、XTAL2外接晶振后,即可构成自激振荡器,驱动内部时钟发生器向主机提供时钟信号。

3.2

时钟电路

单片机必须在时钟的驱动下才能进行工作。MCS-51系列单片机内部有一时钟振荡电路,只需外接振荡电源,就能产生一定频率的时钟信号到单片机内部的各个单元,决定单片机的工作速度。电路如下图:

3.3驱动部件

74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。图3(a)为74LS245的管脚图。

图3(a)74LS245管脚图

3.4显示部分

由8个共阴极的数码管组成时、分、秒和分隔符的显示P0口的8条数据线P0.0至P0.7分别与74LS245的A口对应相接,增大AT89C51的带负载能力;P3口对应接八个数码管的公共端,通过程序控制数码管的亮与灭,这样通过P0口送出一个存储单元的高位、低位BCD显示代码,通过P3口送出

扫描选通代码轮流点亮LED1至LED8,就会将要显示的数据在数码管中显示出来,从P0口输出的代码是BCD码,从P3口输出的就是位选码。这是扫描显示原理。

LED显示段码

字型

共阳极段码

共阴极段码

字型

共阳极段码

共阴极段码

0

C0H

3FH

9

90H

6FH

1

F9H

06H

A

88H

77H

2

A4H

5BH

B

83H

7CH

3

BOH

4FH

C

C6H

39H

4

99H

66H

D

A1H

5EH

5

92H

6DH

E

86H

79H

6

82H

7DH

F

84H

71H

7

F8H

07H

空白

FFH

00H

8

80H

7FH

P

8CH

73H

注:(1)本表所列各字符的显示段码均为小数点不亮的情况。

(2)“空白”字符即没有任何显示。

四、

软件设计

本次设计的软件部分由主程序,静态显示子程序,中断服务程序,时、分、秒加1子程序,时、分、秒单元清零子程序组成。

4.1

电子钟的主程序

本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。其主程序执行流程见下图。

开始

设堆栈指针

秒分时计数单元清零

设定时器工作方式

设定时器初值

设中断方式

中断初始化

调显示子程序

TMOD=01为工作方式1

4.2定时器中断服务程序

定时器TO用于时间计时,定时溢出中断周期设为100ms,中断进入后,判断是否到1秒钟,到了,则调用加法子程序对秒进行加1处理,处理完后返回断点地址,同时判断秒是否到了60秒,到了则对秒单元清零,同时对分进行加1操作,同样对分进行判断,到60分则对分单元清零,同时对时加1,同样也对时进行判断,到24小时,则对时单元清零,最后中断返回。

T0中断服务程序执行流程见下图:

保护现场

赋初值

10数是否到?

N

Y

秒值加1

是否到60秒?

N

Y

秒清0

分加1

是否到60分?

N

Y

分清0

小时加1

是否到24小时?

N

Y

小时清0

恢复现场

返回中断

4.3电子钟的显示子程序

4.4延时子程序

※附:程序片段如下:

S_SETBITP1.0

M_SETBITP1.1

H_SETBITP1.2

SECONDEQU30H

MINUTEEQU31H;定义MINUTE为31H单元标号,分计数单元

HOUREQU32H;定义HOUR为32H单元标号,时计数单元

TCNTEQU34H;定义TCNT为34H单元标号定时器TO计数

ORG00H;程序开始地址

SJMPSTART

;跳转到START执行

ORG0BH;定时器TO中断入口地址

LJMP

INT_T0;跳转到INT-TO执行

START:MOV

DPTR,#TABLE;指针指向TABLE首地址

MOVHOUR,#0;初始化秒计数单元

MOVMINUTE,#0;初始化分计数单元

MOVSECOND,#0;初始化时计数单元

MOVTCNT,#0;初始化T0计数单元

MOVTMOD,#01H;工作方式1

MOVTH0,#(65536-50000)/256;定时

50

毫秒

MOVTL0,#(65536-50000)MOD

256

MOVIE,#82H;允许定时器TO中断

SETBTR0;启动定时器T0

;判断是否有控制键按下,是哪一个键按下

A1:LCALLDISPLAY;跳转到DISPLAY执行

JNBS_SET,S1;检查

P1.0

电平

JNBM_SET,S2;检查

Pl.l

口电平

JNBH_SET,S3;检查

P1.2

电平

LJMPA1;返回

S1:LCALLDELAY;去抖动

JBS_SET,A1;确认

P1.0

口电平

INCSECOND;秒值加1

MOVA,SECOND;秒数值送入A比较

CJNE

A,#60,J0;判断是否加到60秒

MOVSECOND,#0;SECOND

单元清零

LJMPK1;转到K1执行

S2:LCALLDELAY;长调用DELAY指令

JBM_SET,A1;确认Pl.l

口电平

K1:INCMINUTE;分钟值加1

MOVA,MINUTE;分数值送入A比较

CJNEA,#60,J1;判断是否加到60分

MOVMINUTE,#0;秒单元清零

LJMPK2;调用K2指令

S3:LCALLDELAY;调用延时子程序

JBH_SET,A1;确认?1.2

口电平

K2:INCHOUR;小时值加1

MOVA,HOUR;时数值送入A比较

CJNEA,#24,J2;判断是否加到24小时

MOVHOUR,#0;时单元清零

MOVMINUTE,#0;分单元清零

MOVSECOND,#0;秒单元清零

LJMPA1;跳转到程序A1

;等待按键抬起

J0:

JBS_SET,A1;调用A1指令

LCALLDISPLAY;调用显示子程序

SJMPJ0;返回J0指令

J1:

JBM_SET,A1;数值比较

LCALLDISPLAY;调用显示子程序

SJMPJ1;返回J1指令

J2:

JBH_SET,A1;数值比较

LCALLDISPLAY;调用显示子程序

SJMPJ2;返回J2指令

;定时器TO中断服务子程序,对秒,分钟和小时的计数

INT_T0:MOVTH0,#

(65536-50000)/256;定时

50ms

MOVTL0,#

(65536-50000)

MOD

256

INCTCNT;定时器TO计数单元中的数值加1

MOVA,TCNT;定时器T0计数单元中的数值送入A比较

CJNEA,#20,RETUNE

;计时

1

秒,

INCSECOND;秒计数单元中的数值加1

MOVTCNT,#0;定时器TO计数单元归零

MOVA,SECOND;秒计数单元中的数值送入A比较

CJNEA,#60,RETUNE;记时

1

分,

INCMINUTE;分计数单元中的数值加1

MOVSECOND,#0;秒计数单元归零

MOVA,MINUTE;分计数单元中的数值送入A比较

CJNEA,#60,RETUNE;记时

1

时,

INCHOUR;时计数单元中的数值加1

MOVMINUTE,#0;分计数单元归零

MOVA,HOUR;时计数单元中的数值送入A比较

CJNEA,#24,RETUNE;记时

1

天,

MOVHOUR,#0;时计数单元归零

MOVMINUTE,#0;分计数单元归零

MOVSECOND,#0;秒计数单元归零

MOVTCNT,#0;定时器T0计数单元清零

RETUNE:

RETI;中断返回

;显示控制子程序

DISPLAY:

MOVA,SECOND;显示秒

MOVB,#10;B寄存器赋值为10

DIVAB;(A)/(B),商存入A,余数存入B,分别处理A与B中数

CLRP3.6;数码管7开始工作

MOVCA,@A+DPTR;数据指针指向数值地址并送入A输出显示

MOVP0,A;在数码管7输出显示秒单元的十位数值

LCALLDELAY;调用延时子程序

SETBP3.6;数码管7停止工作

MOVA,B;将B寄存器中的数送入A处理显示

CLRP3.7;数码管8开始工作

MOVCA,@A+DPTR;数据指针指向数值地址并送入A输出显示

MOVP0,A;在数码管8输出显示秒单元的个位数值

LCALLDELAY;调用延时子程序

SETBP3.7;数码管8停止工作

CLRP3.5;数码管6开始工作

MOVP0,#40H;显示分隔符

LCALLDELAY;调用延时子程序

SETBP3.5;数码管6停止工作

MOVA,MINUTE;显示分钟

MOVB,#10;B寄存器赋值为10

DIVAB

CLRP3.3;数码管4开始工作

MOVCA,@A+DPTR;数据指针指向数值地址并送入A输出显示

MOVP0,A;在数码管4输出显示分单元的十位数值

LCALLDELAY;调用延时子程序

SETBP3.3;数码管4停止工作

MOVA,B;将B寄存器中的数送入A处理显示

CLRP3.4;数码管5开始工作

MOVCA,@A+DPTR;数据指针指向数值地址并送入A输出显示

MOVP0,A;在数码管5输出显示分单元的个位数值

LCALLDELAY;调用延时子程序

SETBP3.4;数码管5停止工作

CLRP3.2;数码管3开始工作

MOVP0,#40H;显示分隔符

LCALLDELAY;调用延时子程序

SETBP3.2;数码管3停止工作

MOVA,HOUR;显示小时

MOVB,#10;B寄存器赋值为10

DIVAB;商存入A,余数存入B,分别处理A与B中数

CLRP3.0;数码管1开始工作

MOVCA,@A+DPTR;数据指针指向数值地址并送入A输出显示

MOVP0,A;在数码管1输出显示时单元的十位数值

LCALL

DELAY;调用延时子程序

SETBP3.0;数码管1停止工作

SETB

P3.0;数码管1停止工作

MOVA,B;将B寄存器中的数送入A处理显示

CLRP3.1;数码管2开始工作

MOVCA,@A+DPTR;数据指针指向数值地址并送入A输出显示

MOVP0,A;在数码管2输出显示时单元的个位数值

LCALLDELAY;调用延时子程序

SETBP3.1;数码管2停止工作

RET;子程序返回

TABLE:DB

3FH,06H,5BH,4FH,66H;*W

LED

显示器段选码

0,1,2,3,4

DB6DH,7DH,07H,7FH,6FH;共阴极

LED

显示器段选码

5,6,7,

;延时子程序

DELAY:

MOVR6,#10;R6

赋值为

10

Dl:

MOVR7,#250;R7

赋值为

250

DJNZR7,$;原地踏步

DJNZR6,Dl;返回D1循环

RET;子程序返回

END;结束程序

五、仿真实验结果

5.1软件调试

打开程序调试软件keil

uVision4,在里面新建一个工程,命名为:数字时

钟“2345”。接着新建文件,编写相应程序。编写好的各个程序进行编译与连接。在调试过程中,程序有错误,我们根据相应的提示进行了多次修改,直到该程序能够正确编译。之后,我们在点击相关栏目,让它生成我们在硬件仿真时所需要的“.HEX”文件。到此,我们的软件调试就完成了。下面是我们软件调试的部分贴图。

程序运行成功,并生成HEX文件,如图1。

1

将生成的HEX文件,加载到单片机中。如图2。

图2

生成HEX文件

5.2硬件调试

打开Proteus

7

Professional软件,按照方案所选的电路元件来设计整体电路,先把个芯片按一定的位置放好,然后对相应的接口进行连接。做好之后把编程所生成的HEX文件加载到AT89C51中,运行仿真软件,查看运行效果。仿真结果未达到设计要求,目前我们仍在查找原因。

下图5(a)--图5(e)是未连驱动电路时的硬件仿真结果部分贴图;

图5(f)--图5(g)是连了驱动电路后的硬件调试部分贴图。

5(a)

5(b)

5(c)

5(d)

5(e)

5(f)

5(g)

六、参考文献

①《单片机程序设计实例》

清华大学出版社

②《单片机原理及接口技术》

高等教育出版社

③《单片机课程设计实例指导》

北京航空航天大学出版社

    以上《对时功能电子钟设计报告》范文由一流范文网精心整理,如果您觉得有用,请收藏及关注我们,或向其它人分享我们。转载请注明出处 »一流范文网»最新范文»对时功能电子钟设计报告
‖大家正在看...
设为首页 - 加入收藏 - 关于范文吧 - 返回顶部 - 手机版
Copyright © 一流范文网 如对《对时功能电子钟设计报告》有疑问请及时反馈。All Rights Reserved