基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx

上传人:b****4 文档编号:5459014 上传时间:2022-12-16 格式:DOCX 页数:27 大小:150.33KB
下载 相关 举报
基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx_第1页
第1页 / 共27页
基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx_第2页
第2页 / 共27页
基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx_第3页
第3页 / 共27页
基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx_第4页
第4页 / 共27页
基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx

《基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx》由会员分享,可在线阅读,更多相关《基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx(27页珍藏版)》请在冰豆网上搜索。

基于单片机AT89S51控制的数字时钟课程方案设计书报告.docx

基于单片机AT89S51控制的数字时钟课程方案设计书报告

课程设计报告

 

论文题目基于AT89S51控制的数字时钟

专业班级

学生姓名___

学号___

指导教师______________

 

宁波技师学院电气技术系

二零一三年九月

摘要

本系统采用MSC-51系列单片机以AT89S51为中心器件来设计多功能数字时钟。

文中详细介绍了51单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理。

该时钟系统能实现时钟日历的功能:

能进行时、分、秒的显示。

也具有日历计算、显示和时钟,日历的校准、定时时间的设定,实现秒表,整点报时等功能

关键词:

AT89S51;74LS245;原理;时钟;单片机

 

1引言

近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新.在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善.

本文通过用对一个能实现定时,日历显示功能的时间系统的设计学习,详细介绍了51单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理、从而达到学习,了解单片机相关指令在各方面的应用。

 

2总体设计方案

系统AT89S51、LED数码管、按键、电容,电阻,晶震等部分构成,能实现的功能有:

时间显示、日期显示、定时。

左键:

切换更改工程,按一下选择更改时钟秒位,再按为分位、小时位。

小时位置在按则跳出编辑时间功能。

中键:

给当前项进行加1的控制,使当前项在个位加1。

右键:

给当前项进行减1的控制,使当前项在个位减1。

 

2.1系统总体结构框图

针对于设计思想,做系统的结构框图如下图2-1所示:

图2-1总体方案方框图

 

3硬件设计

本数字时钟系统的硬件电路主要包括晶振电路、数码显示电路及其它外围电路等。

3.1复位电路【2】[9]

复位电路的基本功能是:

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

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

下图所示的RC复位电路可以实现上述基本功能,Sm为手动复位开关。

图3-0复位电路图

3.2晶振电路[1]

AT89S51中有一个构成内部震荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是放大器的输入端和输出端,这个放大器与作为反馈元件的石英晶体构成自激震荡电路。

外接石英晶体及电容C1,C2接在放大器的反馈回路中构成并联震荡电路。

图3-1晶体震荡电路

3.3数码管原理图[4][8][10]

图3-2数码管管脚图

3.3.1AT89S51的管脚说明[2]

图3-3AT89S51管脚图

VCC电源电压.

GND接地.

RST复位输入.当RST变为高电平并保持2个机器周期时,将使单片机复位.WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRTO位(地址8EH)可打开或关闭该功能.DISKRTO位缺省为RESET输出高电平打开状态.

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

XTAL2来自反向振荡放大器的输出.

P0口一组8位漏极开路型双向I/O口.也即地址/数据总线复用口.作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写"1"可作为高阻抗输入端用.在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻.在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻.

P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).Flash编程和程序校验期间,P1接收低8位地址.

P2口一个带内部上拉电阻的8位双向I/O口.P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据.在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变.Flash编程和程序校验期间,P2亦接收低8位地址.

P3口一个带内部上拉电阻的8位双向I/O口.P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对P3口写"1"时,它们被内部的上拉电阻把拉到高电并可作输入端口.作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流(IIL).P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下图所示.P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号.

PSEN/程序储存允许输出是外部程序存储器的读先通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲.当访问外部数据存储器,没有两次有效的PSEN/信号.

EA/VPP外部访问允许.欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态.Flash存储器编程时,该引脚加上+12V的编程电压VPP.

 

4软件设计

4.1主程序流程图

 

5制作和调试中的一些问题和解决办法

数字时钟设计刚完成时,我经过检查,发现了一些问题[1][4][7]:

1.刚弄好电路板并烧写程序进去后发现数码管不能正确显示时间,每个数码管中显示的数字几乎一样。

经过询问老师,自己查阅资料,终于找出问题的原因:

由于我在电路中采用的是动态数码管显示,需准确地调整延时子程序DEL1MS。

我在程序中采取的延时时间为1毫秒。

2.复位电路中的开关不能使电路复位到初始状态即12:

00:

00,经过认真检查电路后我发现我是开关的管脚没接对。

测试后重新接下开关的管脚就可以了。

6结论

经过调试之后,我发现我做的基于AT89S51设计的数字时钟,经过调试,一天的时间里面,差不多在1秒,计时是相对准确。

而且该设计的成本不高,硬件电路简单,可以用在对时间精度要求不高的场合.由于时钟电路的重要性,时钟电路在很多应用系统中必不可少,用软件方法可以实现,但误差很大。

在对时间精度要求很高的情况下,通常采用时钟芯片来实现。

典型的时钟芯片有:

DS1302,DS12887,X1203等都可以满足精度要求。

致谢辞

在论文完成之际,谨向关心我、支持我的师长、朋友和亲人表示最衷心的感谢。

首先要感谢我尊敬的指导老师陈弢和唐幼君,本论文的工作得到了陈老师悉心的指导和启发,从论文的选题和具体实现都给予极大的帮助。

唐老师平易近人,我非常感两位老师。

本设计的完成,当然也少不了同学的帮助,感谢他们对我的帮助,没有他们的帮助,设计的任务是不可能这么快顺利完成的。

同时,也要感谢我的爸爸妈妈,感谢他们这么多年来默默地支持着我的学业,我会再接再厉,以更加饱满的热情投入到今后的学习和工作中去。

参考文献:

[1]曹巧媛单片机原理与应用[M].京:

电子工业出版社,2002

[2]何立民MCS-51系列单片机应用系统设计.北京航空航天大学出版社,2000

[3]丁元杰单片微机原理及应用第2版[M].北京机械工业出版社,2001

[4]郁凯平MCS-51单片机串口一口两用在LED显示屏的一例应用《电子与电脑》2008年第1期

[5]陈忠平P89LPC935驱动数码管显示时钟的设计《湖南工业职业技术学院学报》2007年第02期

[6]林成武等MCS-51单片机PO口扩展技术研究.《电子元器件应用》2007年第4期

[7]谢自美《电子线路设计、实验、测试》.华中理工大学出版社,2000

[8]李正浩等51单片机在LED数码管显示中的应用.《实验科学与技术》2006年第z1期

[9]包国宾、张建民单片机复位电路的设计与分析.《光电技术应用》2005年第03期

[10]唐光明基于中断技术的开关软件消抖算法《现代机械》2006年第03期

[11]N.Ambramson,Editor,MultipleAcessCommunication-FoundationofEmergingTecnologies,IEEEPress,1992

附录1C语言程序

附录

ORG0000H

LJMPMAIN。

跳到主程序

ORG0003H

LJMPINT0。

跳到外部中断0

ORG000BH

LJMPT0。

跳到定时器0

ORG0013H

LJMPINT1。

跳到外部中断1

ORG001BH

LJMPT1。

跳到定时器1

ORG0100H

MAIN:

主函数

CLRP3.0。

关蜂鸣器

ACALLINITIAL。

调用初始化函数

DONE:

JNB00H,DONE1。

是否显示时间

MOVR0,#73H。

显示时间

ACALLCONVERT。

把时间存储器转化到显示存储器

AJMPTEST。

是否处于调整状态

DONE1:

JNB01H,DONE2。

是否显示日期

MOVR0,#70H。

显示日期

ACALLCONVERT。

转化

AJMPTEST。

是否处于调整状态

DONE2:

JNB02H,DONE3。

是否显示定时时间

MOVR0,#63H。

显示定时时间

ACALLCONVERT。

转化

AJMPTEST。

DONE3:

MOVR0,#60H。

显示秒表

ACALLCONVERT。

转化

LJMPDISP。

跳到显示函数

TEST:

判断是否处于调整状态

JNB18H,TEST10。

是否按键已经按下

JNBP3.5,TEST7。

按键是否已经释放

AJMPTEST11

TEST10:

JB16H,TEST8。

判断是否有按键按下

JBP3.5,TEST7

SETB16H

AJMPTEST7

TEST8:

JBP3.5,TEST9

SETB18H

AJMPTEST7

TEST11:

CLR18H

CPL17H

MOVC,17H

MOVP0.0,C

CLR16H

CLR12H。

定时结束

CLRTR1。

关定时器1

CLRP3.0。

关蜂鸣器

CLR13H。

MOV59H,#00H。

MOV58H,#01H

AJMPTEST7

TEST9:

CLR16H

TEST7:

JNB12H,TEST6

JBP3.4,TEST6

CLR12H。

定时结束

CLRTR1。

关定时器1

CLRP3.0。

关蜂鸣器

CLR13H。

MOV59H,#00H。

MOV58H,#01H。

TEST6:

JNB01H,TEST5。

是否处于日期状态

JBP3.4,TEST4。

案键3是否按下

MOV20H,#01H。

返回时间状态

MOV21H,#00H

LJMPDISP

TEST5:

JNB02H,TEST4。

是否处于定时时间状态

JBP3.4,TEST4。

按键3是否按下

MOV20H,#01H。

返回时间状态

MOV21H,#00H

LJMPDISP

TEST4:

JNB15H,DO。

闪烁标志是否有效

LJMPDISP。

无效则进入显示函数

DO:

MOVA,21H。

CJNEA,#00H,TEST2。

是否在调整状态

LJMPDISP。

不处于调整状态则进入显示函数

TEST2:

JBP3.4,TEST3

MOV20H,#01H

MOV21H,#00H

LJMPDISP

TEST3:

JNB08H,DONE4。

是否秒位置处于调整状态

MOV78H,#11。

不显示

MOV79H,#11。

不显示

LJMPDISP。

进入显示函数

DONE4:

JNB09H,DONE5。

是否分位置处于调整状态

MOV7BH,#11。

不显示

MOV7CH,#11。

不显示

LJMPDISP。

进入显示函数

DONE5:

MOV7EH,#11。

时位置不显示

MOV7FH,#11。

时位置不显示

LJMPDISP。

进入主函数

CONVERT:

转化成数码管显示所对应的存储器

MOVA,@R0。

把R0存储的地址所对应的存储器的内容转化到秒位置的存储器

MOVB,#10。

DIVAB。

MOV79H,A。

高位存储?

MOV78H,B。

地位存储

INCR0。

地址加一

MOVA,@R0。

取数据

MOVB,#10。

DIVAB。

MOV7CH,A。

高位存储

MOV7BH,B。

低位存储

INCR0。

地址加一

MOVA,@R0。

取数据

MOVB,#10。

DIVAB。

MOV7FH,A。

高位存储

MOV7EH,B。

低位存储

RET

INITIAL:

MOV7FH,#1。

数码管显示12:

00:

00

MOV7EH,#2

MOV7DH,#10

MOV7CH,#0

MOV7BH,#0

MOV7AH,#10

MOV79H,#0

MOV78H,#0

MOV75H,#12。

初始化时间12:

00:

00

MOV74H,#0

MOV73H,#0

MOV72H,#08。

初始化日期08.3.20

MOV71H,#3

MOV70H,#20

MOV65H,#12。

初始化定时时间12:

00:

20

MOV64H,#0

MOV63H,#20

MOV62H,#00。

初始化秒表00:

00.00

MOV61H,#00

MOV60H,#00

MOV50H,#100。

1s定时100*10ms

MOV51H,#20。

200ms闪烁计时

MOV52H,#10。

秒表计数器

MOV53H,#5。

每放一个音时延时5ms

MOV58H,#1。

存放音乐表的指针

MOVTH0,#0D8H。

T0定义为10ms中断

MOVTL0,#0F0H

MOVTMOD,#11H。

定时器工作在方式1

MOVIP,#2。

定时器0高优先级

MOVIE,#8FH。

开中断

SETBIT0。

外部中断为边缘触发

SETBIT1。

外部中断为边缘触发

SETBTR0。

开定时器0

MOV20H,#0。

SETB00H。

设置成处在时间显示状态00H为时间显示标志,01h为日期显示标志,02h为定时时间显示标志,03h秒表显示标志。

08h为秒位置选择标志,09h为分位置选者标志,0ah为时位置选择标志。

10h为秒表开始或暂停标志,11h为,12h为是否正在放音乐标志,13h为是否延时标志,15h为闪烁标志,16h,17h为判断定时按键标志

MOV21H,#0。

位存储器初始化

MOV22H,#0。

SETB17H。

开定时器

SETBP0.0。

开定时器指示灯

RET

DISP:

显示函数

MOVR0,#78H。

显示第一个位置

MOVDPTR,#TAB。

MOVR7,#0FEH。

第一位有效

NEXT:

MOVA,@R0。

MOVCA,@A+DPTR。

把十进制数转化成数码管对应的数据

MOVP1,A。

数据送出端口

MOVP2,R7。

地址送出端口

ACALLDEL1MS。

延时一毫秒

MOVA,R7。

RLA。

地址位左移到下一位

MOVR7,A。

INCR0。

数据地址加1

CJNER0,#80H,NEXT。

是否已经显示完

LJMPDONE

TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,00H

0123456789-空

DEL1MS:

延时1毫秒函数

MOVR6,#2

DEL1:

MOVR5,#250

DJNZR5,$

DJNZR6,DEL1

RET

T0:

定时器0函数

PUSHDPH

PUSHDPL

PUSHPSW

PUSHACC

MOVTH0,#0D8H。

定时时间设置为10毫秒

MOVTL0,#0F0H

DJNZ50H,MIAO1。

是否已经延时1秒

AJMPNEXT5。

MIAO1:

LJMPMIAOBIAO。

一秒还没到,进入秒表

NEXT5:

MOV50H,#100。

重新循环100次,即一秒

INC73H。

秒加一

MOVA,73H。

CJNEA,#60,MIAO2。

是否已经加到60

AJMPNEXT6。

MIAO2:

LJMPMIAOBIAO。

没到60,进入秒表

NEXT6:

MOV73H,#0。

已经加到60,秒清0

INC74H。

分加一

MOVA,74H。

CJNEA,#60,MIAO3。

分是否已经加到60

AJMPNEXT7。

MIAO3:

LJMPMIAOBIAO。

没到60,进入秒表

NEXT7:

MOV74H,#0。

已经到60,分清0

INC75H。

时加1

MOVA,75H。

CJNEA,#24,MIAO4。

是否已加到24

AJMPNEXT8。

MIAO4:

LJMPMIAOBIAO。

没到24则进入秒表

NEXT8:

MOV75H,#0。

时清0

INC70H。

日加1

MOVA,70H。

CJNEA,#29,MONTH。

是否是29

MOVA,71H。

CJNEA,#2,MIAO5。

是否是2月

AJMPNEXT9。

MIAO5:

LJMPMIAOBIAO。

不是2月,进入秒表

NEXT9:

MOV71H,#3。

月份为3

MOV70H,#1。

日为1

LJMPMIAOBIAO。

MONTH:

MOVA,70H。

CJNEA,#31,MONTH1。

是否是日是31

MOVA,71H。

CJNEA,#4,MONTH6。

是否是4月

MOV71H,#5。

月份为5

MOV70H,#1。

日为1

AJMPMIAOBIAO。

MONTH6:

MOVA,71H。

CJNEA,#6,MONTH9。

是否是6月

MOV71H,#7。

月份为7

MOV70H,#1。

日为1

AJMPMIAOBIAO。

MONTH9:

MOVA,71H。

CJNEA,#9,MONTH11。

是否是9月

MOV71H,#10。

月分为10

MOV70H,#1。

日为1

AJMPMIAOBIAO。

MONTH11:

MOVA,71H。

CJNEA,#11,MIAOBIAO。

是否是11月

MOV71H,#12。

月份为12

MOV70H,#1。

日为1

AJMPMIAOBIAO。

MONTH1:

MOVA,70H。

CJNEA,#32,MIAOBIAO。

是否日是32

MOVA,71H。

CJNEA,#12,MONTH0。

是否是12月

INC73H。

年加1

MOV70H,#1。

月为1

MOV71H,#1。

日为1

AJMPMIAOBIAO。

MONTH0:

INC71H。

不是12月,月加1

MOV70H,#1。

日为

AJMPMIAOBIAO。

MIAOBIAO:

秒表函数

JNB03H,DINGSHI。

是否进入计时

JNB10H,DINGSHI。

是否开始计时

DJNZ52H,DINGSHI。

是否100毫秒已到

MOV52H,#10。

JNBP3.4,CLEAR。

按键按下时清0

INC60H。

0.1秒位加1

MOVA,60H。

CJNEA,#10,DINGSHI。

是否已加到10

MOV60H,#0。

0.1秒位清0

INC61H。

秒位加1

MOVA,61H。

CJNEA,#60,DINGSHI。

秒是否已经加到60

MOV61H,#0。

秒位清0

INC62H。

分加1

MOVA,62H。

CJNEA,#60,DINGSHI。

是否是60分

MOV62H,#0。

分为清0

AJMPDINGSHI。

CLEAR:

MOV60H,#0。

清0

MOV61H,#0。

MOV62H,#0。

CLR10H。

停止计数

AJMPDINGSHI。

DINGSHI:

定时函数

JB17H,YSTART。

定时器有效

LJMPBAOSHI。

定时器无效

YSTART:

JB12H,START。

是否已经在放音乐

MOVA,63H。

CJNEA,73H,BAO1。

是否时已到

AJMPNEXT10。

BAO1:

LJMPBAOSHI。

NEXT10:

MOVA,64H。

CJNEA,74H,BAO2。

是否分已到

AJMPNEXT11。

BAO2:

LJMPBAOSHI。

NEXT11:

MOVA,65H。

CJNEA,75H,BAO3。

是否秒已到

AJMPNEXT12。

BAO3:

LJMPBAOSHI。

NEXT12:

SETB12H。

设置定时已到

MOV55H,#10H。

第一个节拍

MOV57H,#0FBH。

第一个音调高位

MOV56H,#8BH。

第一个音调低位

SETBTR1。

启动定时器1

START:

DJNZ55H,BAO4。

节拍是否已结束

AJMPNEXT13。

BAO4:

LJMPBAOSHI。

NEXT13:

CPL13H。

JB13H,DELAY50MS。

进入延时50毫秒

MOVA,58H。

INCA。

表地址加1

MOV58H,A。

GETNEXT:

MOVDPTR,#DAT。

MOVCA,@A+DPTR。

取音调

CJNEA,#00H,DSQ1。

是否已经结束

CLR12H。

定时结束

CLRTR1。

关定时器1

CLRP3.0。

关蜂鸣器

CLR13H。

MOV59H,#00H。

MOV58H,#01H。

AJMPBAOSHI

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

当前位置:首页 > 表格模板 > 调查报告

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

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