定时闹钟设计.docx
《定时闹钟设计.docx》由会员分享,可在线阅读,更多相关《定时闹钟设计.docx(26页珍藏版)》请在冰豆网上搜索。
定时闹钟设计
摘要
本设计是以AT89S51单片机为核心,设计并制作定时闹钟,在此设计的定时闹钟基础上,能显示时时分分秒秒,能够设定定时时间以及修改定时时间,定时时间到能发出警报声或者启动继电器,从而控制电器的启停。
现在是自动化高度发达的时代,特别是电子类产品都是靠内部的控制电路来实现对产品的控制,达到自动运行的目的,这就需要我们这里要做的设计中的电器元件及电路的支持了。
AT89S51是此次课程设计的核心部件,利用共阴极显示器件,用LED来显示数字。
AT89S51单片机属于MCS-51单片机的一种,采用单总线结构。
在显示发面用计数器和七段显示数码管组成闹钟电路的基本电路和显示电路,由4个开关来控制闹钟的显示及定时,一个开关控制小时一个控制分钟一个控制秒钟,通过4个按键调节,也采用中断的方式进行溢出数据
在这次设计中主要是用AT89S51来进行定时,也结合着其他辅助电路实施控制,在定时的时候,按一下控制小时的键对小时加一;按一下控制分钟的键对分钟加一;按一下控制秒钟的键对秒钟加一,秒计时器和分计时器都是满60加一,到达预设的时间,此电路就会发出报警声音提示已经到点,俗话说时间就是生命,有了定时闹钟,让人们的时间观念更强更优质。
1概述…………………………………………………………………………………3
1.1定时闹钟课程设计的意义……………………………………………………3
1.2总体设计过程的概述…………………………………………………………3
1.3系统的主要功能简介…………………………………………………………3
2系统总体方案及硬件设计…………………………………………………………5
2.1系统核心AT89S51单片机概述………………………………………………5
独立式键盘电路………………………………………………………………6
LED结构与原理………………………………………………………………7
定时控制寄存器………………………………………………………………7
3软件设计……………………………………………………………………………8
3.1系统流程图……………………………………………………………………8
3.2键盘及按键功能设定…………………………………………………………8
3.3动态数码显示及其处理………………………………………………………9
……………………………………………………………………10
4Proteus软件仿真………………………………………………………………11
5课程设计体会……………………………………………………………………13
参考文献……………………………………………………………………………14
附1:
源程序代码…………………………………………………………………15
附2:
系统原理图…………………………………………………………………23
1概述
现在是一个高度发达的高科技时代,目前单片机正朝向高性能和多品种方向发展,并且进一步向低功耗,小体积,大容量,高性能,低价格和外围电路内装化等几个方向发展。
单片机的应用还从根本上改变了传统的控制系统设计思想和方法。
从前必须由模拟电路和数字电路实现的大部分功能,现在已经能够用单片机运用软件方法来实现了,因此称之为软件代替硬件的控制技术。
定时闹钟是用数字电路技术实现时分秒计时的装置,有更高的准确性和直观性,寿命更长,得到了广泛的应用。
定时闹钟是采用数字电路实现对时分秒数字显示的计时装置,广泛应用于家庭,车站,办公室等场所,成为人们日常生活不可缺少的必需品,它给人们带来了很大的方便
在此次设计中,AT89S51单片机是主要的元器件,通过它来控制电路的各个元器件以及显示器件的工作,本次设计用到了AT89S51单片机,LED七段显示器,RP电阻及一些小电阻,电容,开关,电源,接地线以及一个LS小发声喇叭组成,通过对对应端口的连接来实现其功能,在电路设计中还运用到了保护电路,起到保护元器件的目的,
首先就是选择器件,在选材方面一定要仔细,有些器件之间只有一点点区别,即便是那一点点区别就会导致整个电路不可用,因此要慎重选材。
在材料选好之前,要好好的规划一下设计的电路,设计的思想,总体的思路。
在这之后,就是开始怎么来组织设计的时候了,运用逻缉的思维来组织。
我们运用AT89S51这个主要的单片机器件,它是核心,它有40个引脚,分别有I/O接口,电源接口等等,分别从那引出接线,然后分别与各部件连接,发出控制信号对各个部件进行控制,让各部件都工作起来,实现各自的功能。
对于在连接接口时注意一一对应,不要接反了。
在总体设计好之后进行调试,避免错误的产生。
定时闹钟是采用数字电路实现对时分秒数字显示的控制装置,在电路中,有中断电路,保护电路,触发电路,显示电路等,它们各显其功能,然后通过自己的功能来组合成一个整体的功能,也就是此次设计的定时闹钟的功能,通过这些元器件组成的电路,定时闹钟有了自己的本领。
在整体电路中,保护电路起着保护各元器件不会因为接错线或者是电源电压不合理而导致的对器件的损坏,保护各电路的正常工作。
触发电路起着给出触发信号的作用,显示电路是起着显示的作用。
定时闹钟可以显示时分秒,并且在同时可以进行定时,分别对时分秒的设计来定时,在时间到了后可以发出声音提示,起着报警提示的目的。
现在是个高度发达的社会,时间很重要,对时间的控制是自古以来都是棘手的问题,现在有了定时闹钟,就大大的提高人们的时间观。
显示电路及LED显示器是其中最重要的部分之一,有动态显示和静态显示两种方式,通过它来观察时间数,很直观,方便。
2系统总体方案及总体设计
图2-1单片机AT89S51的引脚图
本系统的核心元件为单片机AT89S51,利用共阴显示器件。
在此设计中接入一个共阴LED显示器,其中2个用于显示时钟,其中2个用于显示分钟,2个用于显示秒钟。
AT89S51属于MCS-51单片机系列中的其中一种,单片机内部总线是单总线结构,即数据总线和地址总线是公用的。
该芯片具有40引脚,这40条引脚可分为I/O接口线、电源线、外接晶振线4部分。
8051单片机为双列直插式封装结构,本设计利用的核心元件便是它了。
其引脚功能说明:
VCC:
+5V电源线;
XTAL1:
片内振荡器反向放大器的输入端和内部时钟工作的输入端;
XTAL2:
片内振荡器反向放大器的输出端;
P0口:
是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口对端口P0写‘1’时,可作为高阻抗输入端用,在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻;
P1口:
是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输出口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流;
P2口:
是一个带内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流;
P3口:
是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流。
RST——复位输入;
ALE/PROG——当访问外部程存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节;
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号;
EA/VPP:
外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态;
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令
独立式键盘电路
在单片机系统的输入电路中,经常需要独立式键盘。
a.独立式键盘的接口电路:
在单片机应用系统中,有时只需要几个简单的按键向系统输入信息。
这时,可将每个按键接在一根I/O接口线上,这种方式的连接称为独立式键盘。
每个独立式按键单独占有一根I/O接口线,每根I/O接口线的工作状态不会影响到其他I/O接口线。
这种按键接口电路配置灵活,硬件结构简单,但每个按键必须占用一根I/O接口线,I/O接口线浪费较大。
故只在按键数量不多时采用这种按键电路。
在此电路中,按键输入都采用低电平有效。
上拉电阻保证了按键断开时,I/O接口线有确定的高电平。
当I/O接口内部有上拉电阻时,外电路可以不配置上拉电阻。
b.独立式键盘的编程:
独立式键盘的编程常采用查询式结构。
先逐位查询每根I/O接口线的输入状态,如某一根I/O接口线输入为低电平,则可确定该I/O接口线所对应的按键以按下,然后,再转向按键的功能处理程序。
图2-2定时闹钟的键盘电路图
LED结构与原理
图2-3LED元件引脚图
a~g为数字和字符显示段,h段为小数点显示,通过a~g为7个发光段的不同组合,可以显示0~9和A~F共16个数字和字母,本设计采用的是共阴极接法。
点亮LED显示器有两种方式:
一是静态显示:
二是动态显示。
所谓静态显示,就是当显示器显示某一个字符时,相应的发光二极管恒定的导通或截止。
所谓动态显示,就是将要显示的多位LED显示器采用一个8位的段选端口,然后采用动态扫描方式一位一位地轮流点亮各位显示器。
定时控制寄存器
TCON:
该寄存器单元地址为88H,位地址为88H-8FH;其内容及位地址见表
表2-1TCON寄存器的内容及位地址
位地址
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
位符号
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
该寄存器具有定时器/计数器的控制功能和中断控制功能,其中与中断有关的控制位共有6位:
TF1:
定时器/计数器T1溢出中断标志。
TF1:
定时器/计数器T0溢出中断标志。
其功能类似于TF1。
IT1:
外部中断1触发方式标志。
IE0:
外部中断0中断请求标志。
其功能类似于IE1。
IT0:
外部中断1触发方式标志。
其功能类似于IT1。
IE1:
外部中断1中断请求标志。
3软件设计
3.1系统流程图
图3-1系统流程图
3.2键盘及按键功能设定
图3-2开关电路图
在此开关电路路图中,一共用了4个开关K1,K2,K3,K4。
在开关上也同时接了4个上拉电阻R5,R6,R1,R2。
同时开关左边接了地,上拉电阻一端接了电源。
4个开关和上拉电阻同时起了不同的作用。
在整个定时闹钟电路运行时,先按下K1,然后再按K2,因此就可以给时钟加1;按K3是给分钟加1。
开关K2控制定时状态,K1控制分钟,K3控制时钟,K4是退出键。
3.3动态数码显示及其处理
此电路中就是靠LED数码管来显示时间的,LED数码管一般采用的是7段显示,可以显示0-9的数字,它是从a~g的7段管显示数字的,分别控制这7段的亮与灭来显示0-9这几个数字。
动态数码管是靠动态驱动来使其发光的,动态驱动是将所有数码管使用一个专门的译码驱动器,使各位数码管逐个轮流受控显示。
显示子程序为:
DISPLAY1:
MOVR0,#30H
MOVR3,#0FEH
MOVA,R3
PLAY1:
MOVP2,A
MOVA,@R0
MOVDPTR,#DSEG1
MOVCA,@A+DPTR
MOVP0,A
LCALLDL1;调用延时
MOVP2,#0FFH
MOVA,R3
RLA
JNBACC.6,LD1;判位并进行下一位操作
INCR0
MOVR3,A
LJMPPLAY1
LD1:
RET
DISPLAY2:
PUSHACC;保护现场
PUSHPSW
MOVR0,#36H
MOVR3,#0FBH
MOVA,R3
PLAY2:
MOVP2,A;轮流选通显示
MOVA,@R0
MOVDPTR,#DSEG1
MOVCA,@A+DPTR
MOVP0,A
LCALLDL1
MOVP2,#0FFH
MOVA,R3
RLA
JNBACC.6,LD2
INCR0
MOVR3,A
LJMPPLAY2
LD2:
POPPSW
POPACC
RETI
DL1:
MOVR7,#02H;延时程序2
DL:
MOVR6,#0200H
DL6:
DJNZR6,$
DJNZR7,DL
RETI
DSEG1:
DB3FH,06H,5BH,4FH,66H;//字符转换显示//
DB6DH,7DH,07H,7FH,6FH
3.4简单的运算
在开关电路中,存在着上拉电阻,它们同时对时间进行着控制。
在运行时,按下K1,然后再按下K2,这就可以对时钟加1,按下K3可以对分钟加1,但这两个都不是对闹钟定时所做的操作。
先按下K2就可以对闹钟进行定时了,按下K1,对分钟进行加1,按下K3对时钟进行加1,因此就可以想定多少时间就行。
就比如说我们将定到11点11分报时,那我们就先按K2,再按K1,按十一下K1,把分钟调到11;然后再按十一下K3,把时钟调到11,然后按K4退出就可以了,这个简单的操作就这样完成了。
举例如下:
GO22:
MOVB,#0AH
DIVAB
MOV38H,B
MOV39H,A
4Proteus软件仿真
在软件设计中提到的定时操作,我选择了定时到11点11分,一下为定时后的截图
图4-1设定定时后的电路图
上述为结果图,以下为具体操作的过程:
点了电路运行按钮后,就可以开始对其进行设定了。
先按K2,进入定时状态,然后再按下K1,可以在分钟上加1,其运行效果图为:
图4-2运行效果图
再按K3,对时钟加1,其运行效果图为:
图4-3运行效果图
。
5课程设计体会
我们每天都在为起床起不来而发愁,因此就我就打算设计了这个定时闹钟来提醒我们早早起床,这样我们就有了个提醒我们起床的东西了。
经过一周的忙碌,这次课程设计也到了尾声,在做设计的过程中也遇到了不少的困难,但我们都没被打倒,还经常跑图书馆去查阅一些相关的资料,经过老师的细心指导和同学们的热情帮助,经过仔细的检查和修改把过程中遇到的种种故障排除,过程中遇到了其他的一些困难也解决掉。
总体来说,设计这个东西需要的是各个学科的综合知识,不是单靠一科就能解决得了的,因此对我们的综合知识是很大的考验,现在才深有体会的,学好一门课程是很不容易的事情。
平常上课时可能没太在意,学这些东西的重要性,实用性,因此就没认真的去听,现在做这个设计才发现这些学科的重要性,并且在做这个设计后我们能更好的把所学的知识更系统的连续起来、结合起来,已达到突出运用的目的。
从开始不断的需要去图书馆跑找资料,不仅使自己长了知识也使我明白了一些道理。
设计当中不仅运用了在大学几年所学的东西,而且还运用了从未接触过的一些东西。
学习不认真,就不会很好的完成这次设计。
此次设计也使我明白,它可能需要多方面的东西,是通过各个方面的知识积累以及动手实践做出来,而绝非凭空想出来的,它是实实在在不打水瓢的,只有自己掌握了各方面的知识才能更好的去设计,才能走到成功的目的地。
参考文献
[1]余发山.单片机原理及应用技术.中国矿业大学出版社,2003.21-45,98-118,185-198
[2]刘和平.单片机编程与入门.重庆大学出版社,2002.68-99,111-122
[3]陈明荧.89C51单片机课程设计实训教材.清华大学出版社,2003.38-67,102-118
附1源程序代码
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIME
;************MAINPROGRAM***************
ORG0100H
MAIN:
MOVSP,#50H
MOV20H,#00H;BINSECOND//程序赋初值//
MOV21H,#00H;BINMINUTE
MOV22H,#00H;BINHOUR
MOV23H,#01H
MOV24H,#01H
MOV25H,#00H
MOV30H,#00H;BCDSECOND
MOV31H,#00H;
MOV32H,#00H;BCDMINUTE
MOV33H,#00H;
MOV34H,#00H;BCDHOUR
MOV35H,#00H
MOV36H,#01H
MOV37H,#00H
MOV38H,#01H
MOV39H,#00H
MOVTMOD,#01H;16位计数器//工作方式选择//
MOVTH0,#03CH;//赋初值//
MOVTL0,#0B0H
MOVIE,#10000111B
SETBTR0;T0启动计数
MOVR2,#14H
MOVP2,#0FFH
LOOP:
LCALLTIMEPRO;//子程序调用//
LCALLDISPLAY1;//显示程序调用//
JBP1.1,M1;消除按键抖动
LCALLSETTIME
LJMPLOOP
M1:
JBP1.2,M2
LCALLSETATIME
LJMPLOOP
M2:
JBP1.4,M4
LCALLLOOKATIME
M4:
LJMPLOOP
DELAY:
MOVR4,#030H;//延时程序//
DL00:
MOVR5,#0FFH
DL11:
MOVR6,#9H
DL12:
DJNZR6,DL12
DJNZR5,DL11
DJNZR4,DL00
RET
SETTIME:
L0:
LCALLDISPLAY1
为1时跳转到L1子程序//
JCMM1
LCALLDELAY1
JCMM1
JNCMSTOP1
LCALLDELAY1
JNCMSTOP1
INC22H
MOVA,22H
CJNEA,#18H,GO12
MOV22H,#00H;重新赋值
MOV34H,#00H
MOV35H,#00H
LJMPL0
L1:
JBP1.3,L2
JCL1
LCALLDELAY1
JCL1
JNCMSTOP2
LCALLDELAY1
JNCMSTOP2
INC21H
MOVA,21H
CJNEA,#3CH,GO11;判断分值是否到进位
MOV21H,#00H
MOV32H,#00H
MOV33H,#00H
LJMPL0
GO11:
MOVB,#0AH
DIVAB
MOV32H,B;保存当前显示输出值
MOV33H,A
LJMPL0
GO12:
MOVB,#0AH
DIVAB
MOV34H,B
MOV35H,A
LJMPL0
L2:
JBP1.4,L0;进位判断
JCL2
LCALLDELAY1
JCL2
STOP1:
MOVC,P1.4;暂停状态
JNCSTOP1
LCALLDELAY1
JNCSTOP1
LJMPLOOP
SETATIME:
LCALLDISPLAY2;加位操作程序
N0:
LCALLDISPLAY2
MM2:
JBP1.3,N1
JCMM2
LCALLDELAY1
JCMM2
MSTOP3:
MOVC,P1.3;条件判断是否成立
JNCMSTOP3
LCALLDELAY1
JNCMSTOP3
INC24H;执行操作并保存相应状态
MOVA,24H
CJNEA,#24,GO22
MOV24H,#00H
MOV38H,#00H
MOV39H,#00H
LJMPN0
N1:
JBP1.1,N2
JCN1
LCALLDELAY1
JCN1
MSTOP4:
MOVC,P1.1;中转位状态保存
JNCMSTOP4
LCALLDELAY1
JNCMSTOP4
INC23H
MOVA,23H
CJNEA,#60,GO21
MOV23H,#00H
MOV36H,#00H
MOV37H,#00H
LJMPN0
GO21:
MOVB,#0AH;十六进制转化为十进制
DIVAB
MOV36H,B
MOV37H,A
LJMPN0
GO22:
MOVB,#0AH
DIVAB
MOV38H,B
MOV39H,A
LJMPN0
N2:
JBP1.4,N0
JCN2
LCALLDELAY1
MOVC,P1.4;进位标志位判断
JCN2
JNCSTOP2
LCALLDELAY1
JNCSTOP2
LJMPLOOP
TIMEPRO:
MOVA,21H;数据保存与转换
MOVB,23H
CJNEA,B,BK
MOVA,22H
MOVB,24H
CJNEA,B,BK
JCXX
XX:
LCALLTIMEOUT
BK:
RET
TIMEOUT:
X1:
LCALLBZ;时间完成处理程序
LCALLDISPLAY2
JBP1.4,X1
LCALLDELAY
CLR25H.0;清除标志位状态
LJMPDISPLAY1
MOVR7,#250
T2:
MOVR6,#124
T3:
DJNZR6,T3
DJNZR7,T2
RET
LOOKATIME:
LCALLDISPLAY2
MM:
JBP1.4,LOOKATIME;重新设置时间
JCMM
LCALLDELAY1
JCMM
JNCSTOP3
LCALLDELAY1
JNCSTOP3
LJMPLOOP
DELAY1:
MOVR4,#14H//延时程序1//
DL001:
MOVR5,#0FFH
DL111:
DJNZR5,DL111
DJNZR4,DL001
RET
;***********TIMEPROCESS**************定时器中断程序
TIME:
PUSHACC//保存现场,进行压栈操作//
PUSHPSW
MOVTH0,#03CH
MOVTL0,#0B0H
DJNZR2,RET0;有效操作判