定时闹钟设计单片机系统课程设计论文.docx
《定时闹钟设计单片机系统课程设计论文.docx》由会员分享,可在线阅读,更多相关《定时闹钟设计单片机系统课程设计论文.docx(30页珍藏版)》请在冰豆网上搜索。
定时闹钟设计单片机系统课程设计论文
单片机系统
课程设计
成绩评定表
设计课题:
定时闹钟设计
学院名称:
专业班级:
学生姓名:
学号:
指导教师:
设计地点:
设计时间:
指导教师意见:
成绩:
签名:
年月日
单片机系统
课程设计
课程设计名称:
定时闹钟设计
专业班级:
学生姓名:
学号:
指导教师:
课程设计地点:
课程设计时间:
单片机系统课程设计任务书
学生姓名
专业班级
学号
题目
定时闹钟设计
课题性质
工程设计
课题来源
自拟
指导教师
主要内容
(参数)
利用89c51单片机设计一个定时闹钟,实现能如下:
1.能显示时时—分分—秒秒。
2.能够设定定时时间,修改定时时间。
3.定时时间到能够发出报警声并显示“Timeup”,从而控制电器的启停。
任务要求
(进度)
第1-2天:
熟悉课程设计任务及要求,查阅技术资料,确定设计方案。
第3-4天:
按照确定的方案设计单元电路。
要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。
第5-6天:
软件设计,编写程序。
第7-8天:
实验室调试。
第9-10天:
撰写课程设计报告。
要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。
主要参考
资料
[1]张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:
国防工业出版社,2004
[2]伟福LAB6000系列单片机仿真实验系统使用说明书
[3]阎石.数字电路技术基础(第五版).北京:
高等教育出版社,2006
审查意见
系(教研室)主任签字:
年月日
目录
1绪论………………………………………………………………………………4
1.1摘要………………………………………………………………………4
1.2单片机基本概念…………………………………………………………4
2设计的总体结构…………………………………………………………………4
2.1电路的总体原理框图……………………………………………………4
2.2工作原理…………………………………………………………………6
2.3元器件名称………………………………………………………………7
3各部分电路设计…………………………………………………………………9
3.1主电路……………………………………………………………………9
3.2显示电路…………………………………………………………………9
3.3内部时钟方式的电路……………………………………………………10
3.4按键及蜂鸣器电路………………………………………………………11
4整体电路图………………………………………………………………………11
5设计总结…………………………………………………………………………12
5.1设计过程中遇到的问题及解决方法……………………………………12
5.2设计体会…………………………………………………………………12
5.3对设计的建议……………………………………………………………13
参考文献……………………………………………………………………………14
附录…………………………………………………………………………………15
附录A整体电路图…………………………………………………………15
附录B源程序代码…………………………………………………………16
附录C调试…………………………………………………………………25
1绪论
本设计是简单定时闹钟系统,不仅能实现系统要求的功能:
(1)能显示时时-分分-秒秒,
(2)能设定和修改定时时间,(3)定时时间到后能发出报警声;而且还有附加功能,即还能设定和修改当前所显示的时间。
本设计采用单片机AT89C52作为核心元件,12MHZ晶振,由P0口输出所要显示的字形段码,由P2口输出字位信号。
在其基础上扩展外围芯片与电路,附加时钟电路及LCD电路。
单片机具有集成度高、功能强、通用性好、特别是它能耗低、价格便宜、可靠性高、抗干扰能力强和使用方便等独特的优点,所以单片机现在广泛的应用到家用电器、机电产品、儿童玩具、机器人、办公自动化产品等领域。
为了进一步的熟悉并掌握单片机的应用及开发,认真的做好此次课程设计非常必要。
一个单片机的定时闹钟系统离不开软件和硬件,硬件是软件的依托,软件是硬件的内核。
设计硬件电路时应该先设计一个单片机的最小系统,它是单片机应用系统的设计基础,然后在此基础上添加外围器件,如显示器、按键等构成闹钟的硬件电路图。
在设计应用程序时遵循模块化的设计方法,在明确了设计方向之后按照分成的几大模块分别画出流程图,然后根据流程图写出程序,在每个模块编写好之后分别调试、修改、完善。
最后在主程序下调用再次调试、修改。
通过这次设计让我更深入了解单片机基本电路、如何控制和定时器和中断编程的基本方法,从而锻炼了我学习、设计和开发软、硬件的能力。
2系统方案
2.1电路的总体原理框图
使用单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统进行不同状态的组合。
本系统采用单片机AT89C52作为本设计的核心元件,接入液晶显示器,可显示时,分钟,秒,单片机外围接有定时报警系统,定时时间到,扬声器发出报警声,并显示“Timeup”,提示预先设定时间电器的起停时间到,从而控制电器的起停。
电路由下列部分组成:
时钟电路、复位电路、控制电路、LCD显示,报警电路,芯片选用AT89C52单片机。
系统基本框图如图2.1所示:
2.2工作原理
当给电路足够的电源时,电路开始正常初始化,此时显示“00:
00:
00”,若不进行时间调整和定时,时钟将正常计时下去。
若按下按键1,由于按下次数的不同,出现光标闪烁的位置不同,即可进行时间的时分秒的调整和定时时间的时分秒的调整,按键2和3分别是进行时间的加和减,若确定好时间,时钟将正常运行,到达定时时间后蜂鸣器将会响一段时间后停止。
如果按复位键,时钟将重新初始化,需要重新定制时间。
如果不做任何改动,到下一个定时的时间,时钟将会继续鸣叫。
定时闹钟的基本功能如下:
首先,使用LCD液晶显示器来显示现在的时间。
其次,程序执行之后显示“Time:
00:
00:
00”;按键功能如下:
按键K1设置现在的时间和时调整;按键K2显示闹钟设置的时间和分调整;按键K3设置闹铃的时间和设置完成;按键K4闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声和闹铃时间到时,发出一阵声响,按下本键可以停止声响。
调整计时器时间如下:
按下K1键,然后按K1调整小时,K2调整分钟,按下K3表示时间设置完成。
调整闹钟时间设置如下:
再次按下K3开始闹中设置,LCD下一行显示“Alarm:
00:
00”按下K1设置小时,按一下K2设置分钟,再次按下K3设置完成,并且设置时间消失,当再次按一下K2时“Alarm:
00:
00再次显示并马上消失。
按一下K4关闭闹钟,再次按下打开闹钟。
2.3系统流程图
一个单片机的定时闹钟系统离不开软件和硬件,硬件是软件的依托,软件是硬件的内核。
系统软件设计总流程图如图2.2所示:
图2.2系统总流程图
定时闹钟设计,首先得对时钟闹铃有一个很好的设计和操作。
时钟闹铃设计流程图如图2.3所示:
3各部分电路设计
3.1主电路
主电路主要就是芯片的运行,加载程序后,在外部时钟的作用下,将按照程序运行,从而可以实现设计的要求,进行时钟时间和定时时间的调整,并且能够在到达定时时间后控制蜂鸣器发出声响。
如图3.1所示:
图3.1主电路
3.2显示电路
显示电路即可以让我们看到时间的调整和定时时间的调整,显示调整后的时间。
如图3.2所示的显示电路:
图3.2仿真过程中的显示电路
3.3内部时钟方式的电路
单片机内部有一个用于构成振荡器的高增益反向放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器。
时钟频率可以影响单片机的速度。
单片机的各功能部件的运行都以时钟控制信号为基准,如图3.3所示:
图3.3内部时钟方式的电路
3.4按键及蜂鸣器电路
有源蜂鸣器是一种一体化结构的电子讯响器,是内部自带振荡电路,只需电平动就可以发生的蜂鸣器,而与其对应的无源蜂鸣器内部则无振荡电路。
按键可以对时间进行调整,蜂鸣器可以在到达定时的时间时提醒我们。
按键及蜂鸣器电路如图3.4所示:
图3按键及蜂鸣器电路
4整体电路图
定时闹钟的设计,由单片机AT89C52芯片和LCD、,辅以必要的的电路,构成一个单片机定时闹钟。
电子钟可采用数字电路实现,也可以采用单片机来完成。
LCD显示“时”,“分”,“秒”,定时时间到能发出警报声或者启动继电器,从而控制电器的启停。
现在是自动化高度发达的时代,特别是电子类产品都是靠内部的控制电路来实现对产品的控制,达到自动运行的目的,这就需要我们这里要做的设计中的电器元件及电路的支持。
在这次设计中主要是用AT89S52来进行定时,也结合着其他辅助电路实施控制,在定时的时候,按一下控制小时的键对小时加一;按一下控制分钟的键对分钟加一;到达预设的时间,此电路就会发出报警声音提示已经到点。
总体电路图见附图A。
设计总结
5.1设计过程中遇到的问题及解决方法
在设计的过程中遇到问题是不可避免的,我遇到了很多问题,如下所示;
1)烧程序时没发烧进去,需要改变最高和最低波特率,才能按照步骤把程序烧进去。
2)仿真时没问题的电路,在做好实物时发现无法运行。
原因可能是程序出现问题,或者在连实物时线路连接错误等等都有可能。
这是很难的一部分,需要查找出原因。
在做实物的过程中我进行的很多检查,有很多连接错误,最终又重新焊接的。
3)复位电路在实物中可以运行,但是在仿真中不能正常运行。
目前还未找到原因。
5.2设计体会
这次设计中遇到了很多问题,例如刚开始我在在仿真时程序出现了每次按按钮时总是显示测量时需要关闭仿真的字样,试了很多方法都没有找到原因,最后才知道是因为按钮太近的缘故。
很多类似的经历让我明白:
1)在设计程序之前,务必要对所学单片机课程的内容有一个系统的了解,知道单片机片内片外的内容及其功能。
2)设计程序关键要有一个清晰的思路和一个完整的软件流程图。
模块化的设计思想在程序设计中的作用是重大的,它可以为你提供一个比较清晰的思路,并且很容易找到头绪,不至于在编写一个程序时感觉到无从下手。
3)在设计程序时,不能妄想一次就将整个程序设计好,"反复修改,不断改进"是程序设计的必经之路。
程序刚开始编好时,一般情况下会存在很多错误,要不断地修改,不断的改进才能达到预期的目的,编写程序的时间并不是很长,主要用于修改程序了。
4)要养成注释程序的好习惯,让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
刚开始我在编写程序时,很不习惯于写注释,感觉很麻烦,而且没用,但是在修改的过程中我就遇到了较大的麻烦,以至于不得不重新的作了注释,以增加程序的易读性,从而使修改过程变得容易一些。
总之,通过这次课程设计不仅使我巩固了本课程所学的基本知识,还使我具有了撰写科研报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,一切的辛苦和艰难都是值得的。
5.3对设计的建议
在设计前应该对所要实现的功能有一定的了解,定下有大概的流程图,把设计模块化,写程序时也应该一个模块一个模块的写,这样方便理解,也方便以后的检查。
在仿真和实物的过程中要了解所使用芯片的功能及引脚的排列方式,这样焊接时比较方便。
参考文献
[1]余发山.单片机原理及应用技术.中国矿业大学出版社,2003.21-45,98-118,185-198
[2]刘和平.单片机编程与入门.重庆大学出版社,2002.68-99,111-122
[3]陈明荧.89C51单片机课程设计实训教材.清华大学出版社,2003.38-67,102-118
[4]刘瑞新.单片机原理及应用教程.北京机械工业出版社,2005.78-109
[5]杨文龙.单片机原理及应用.西安电子科技大学出版社,2002.33-62
[6]董国增.单片机接口及应用实验和训练指导.北京机械工业出版社,1998.43-70
[7]付寿英,张登举,徐飞.单片机接口技术及在工业控制中的应用.陕西科学技术出版,2001.78-101
附录A整体电路图
附录B定时闹钟源程序代码
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIME
;×××××主程序部分:
×××××
ORG0100H
MAIN:
MOVSP,#50H
MOV20H,#00H;秒钟 BIN
MOV21H,#00H;分钟 BIN
MOV22H,#00H;小时 BIN
MOV23H,#01H
MOV24H,#01H
MOV25H,#00H
MOV30H,#00H
MOV31H,#00H
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
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.0,M1
LCALLSETTIME;调用设定时间程序
LJMPLOOP
M1:
JBP1.1,M2
LCALLSETATIME;调用设定时间程序
LJMPLOOP
M2:
JBP1.3,M4
LCALLLOOKATIME;调用设定闹钟时间程序
M4:
LJMPLOOP
DELAY:
MOVR4,#030H;延时时间
DL00:
MOVR5,#0FFH
DL11:
MOVR6,#9H
DL12:
DJNZR6,DL12
DJNZR5,DL11
DJNZR4,DL00
RET
;×××××设定时间程序:
×××××
SETTIME:
L0:
LCALLDISPLAY1;调用时间允许程序
MM1:
JBP1.1,L1
MOVC,P1.1
JCMM1
LCALLDELAY1;调用延时
JCMM1
MSTOP1:
MOVC,P3.0
JNCMSTOP1;判断P3.0是否释放?
释放则继续
LCALLDELAY1;调用延时
MOVC,P3.0
JNCMSTOP1
INC22H;小时增加1
MOVA,22H
CJNEA,#18H,GO12;判断小时是否到1时?
未到继续循环
MOV22H,#00H;小时复位
MOV34H,#00H
MOV35H,#00H
LJMPL0
L1:
JBP1.2,L2
MOVC,P1.2
JCL1
LCALLDELAY1;延时
JCL1
MSTOP2:
MOVC,P1.2
JNCMSTOP2;判断P1.2是否释放?
释放则继续
LCALLDELAY1;调用延时
MOVC,P1.2
JNCMSTOP2
INC21H;分钟增加一
MOVA,21H
CJNEA,#3CH,GO11
MOV21H,#00H;分钟复位
MOV32H,#00H
MOV33H,#00H
LJMPL0
GO11:
MOVB,#0AH;将A中的内容分成高低两部分
DIVAB
MOV32H,B
MOV33H,A
LJMPL0
GO12:
MOVB,#0AH
DIVAB
MOV34H,B
MOV35H,A
LJMPL0
L2:
JBP1.3,L0
MOVC,P1.3
JCL2
LCALLDELAY1;调用延时
MOVC,P1.3
JCL2
STOP1:
MOVC,P1.3;判断按键P1.3是否释放?
JNCSTOP1
LCALLDELAY1;调用延时
MOVC,P1.3
JNCSTOP1
LJMPLOOP
;×××××设置闹钟时间×××××
SETATIME:
LCALLDISPLAY2;调用时间运行
N0:
LCALLDISPLAY2
MM2:
JBP1.2,N1;判断P1.2是否按下?
MOVC,P1.2
JCMM2
LCALLDELAY1
JCMM2
MSTOP3:
MOVC,P1.2;判断P1.2是否释放?
JNCMSTOP3
LCALLDELAY1
MOVC,P1.2
JNCMSTOP3
INC24H;设定小时增加1
MOVA,24H
CJNEA,#24,GO22
MOV24H,#00H;时钟复位
MOV38H,#00H
MOV39H,#00H
LJMPN0
N1:
JBP1.0,N2;判断P1.0是否按下?
MOVC,P1.0
JCN1
LCALLDELAY1
JCN1
MSTOP4:
MOVC,P1.0;判断P1.0是否释放?
JNCMSTOP4
LCALLDELAY1
MOVC,P1.0
JNCMSTOP4
INC23H;设定闹钟分钟增加1
MOVA,23H
CJNEA,#60,GO21;判断A是否到60分?
MOV23H,#00H;分钟复位
MOV36H,#00H
MOV37H,#00H
LJMPN0
GO21:
MOVB,#0AH;将A中的内容分成高低两部分
DIVAB
MOV36H,B
MOV37H,A
LJMPN0
GO22:
MOVB,#0AH
DIVAB
MOV38H,B
MOV39H,A
LJMPN0
N2:
JBP1.3,N0;判断P1.3是否按下?
MOVC,P1.3
JCN2
LCALLDELAY1
MOVC,P1.3
JCN2
STOP2:
MOVC,P1.3;判断P1.3是否释放?
JNCSTOP2
LCALLDELAY1
MOVC,P1.3
JNCSTOP2
LJMPLOOP
TIMEPRO:
MOVA,21H
MOVB,23H
CJNEA,B,BK;判断分钟是否运行到设定的闹钟的分钟?
MOVA,22H
MOVB,24H
CJNEA,B,BK;判断时钟是否运行到设定的闹钟的时钟?
SETB25H.0
MOVC,25H.0
JCXX
XX:
LCALLTIMEOUT;调用时间闹钟响应程序
BK:
RET
TIMEOUT:
X1:
LCALLBZ;调用喇叭响应程序
LCALLDISPLAY2
CLR25H.0
JBP1.3,X1;判断P1.3是否按下?
LCALLDELAY
CLR25H.0
LJMPDISPLAY1
BZ:
CLRP3.7;喇叭响应程序
MOVR7,#250;响应延时时间
T2:
MOVR6,#124
T3:
DJNZR6,T3
DJNZR7,T2
SETBP3.7
RET
LOOKATIME:
LCALLDISPLAY2;调用时间运行程序
MM:
JBP1.3,LOOKATIME;判断按键P1.3是否按下
MOVC,P1.3
JCMM
LCALLDELAY1
MOVC,P1.3
JCMM
STOP3:
MOVC,P1.3
JNCSTOP3
LCALLDELAY1
MOVC,P1.3
JNCSTOP3
LJMPLOOP
DELAY1:
MOVR4,#14H;时间延时
DL001:
MOVR5,#0FFH
DL111:
DJNZR5,DL111
DJNZR4,DL001
RET
;×××××时间运行程序×××××
TIME:
PUSHACC;现场保护
PUSHPSW
MOVTH0,#03CH;赋初值
MOVTL0,#0B0H
DJNZR2,RET0
MOVR2,#14H
MOVA,20H
CLRC
INCA;秒钟自加1
CJNEA,#3CH,GO1;判断秒钟是否到60秒?
MOV20H,#0;到60秒复位
MOV30H,#0
MOV31H,#0
MOVA,21H
INCA;分钟自加1
CJNEA,#3CH,GO2;判断分钟是否到60分?
MOV21H,#0H;到60分复位
MOV32H,#0
MOV33H,#0
MOVA,22H
INCA;时钟自加1
CJNEA,#18H,GO3;判断时钟是否到24时?
MOV22H,#00H;到24时复位
MOV34H,#0
MOV35H,#0
AJMPRET0
GO1:
MOV20H,A
MOVB,#0AH
DIVAB
MOV31H,A
MOV30H,B
AJMPRET0
GO2:
MOV21H,A
MOVB,#0AH
DIVAB
MOV33H,A
MOV32H,B
AJMPRET0
GO3:
MOV22H,A
MOVB,#0AH
DIVAB
MOV35H,A
MOV34H,B
AJMPRET0
RET0:
POPPSW;恢复现场
POPACC
RETI
;×××××运行部分×××××
DISPLAY1:
MOVR0,#30H
MOVR3,#0FEH
MOVA,R3
PLAY1:
MOVP2,A
MOVA,@R0
MOVDPTR,#DSEG1;表首地址送DPTR
MOVCA,@A+DPTR
MOVP0,A
LCALLDL1
MOVP2,#0FFH;送高电平到P2
MOVA,R3