单片机多功能电子钟.docx
- 文档编号:23531998
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:26
- 大小:280.54KB
单片机多功能电子钟.docx
《单片机多功能电子钟.docx》由会员分享,可在线阅读,更多相关《单片机多功能电子钟.docx(26页珍藏版)》请在冰豆网上搜索。
单片机多功能电子钟
多功能数字电子钟的设计与实现
作者xx
学号:
xxxxxx
学院:
工程与技术学院
指导老师:
xx
1引言4
1.1多功能电子钟的研究背景和选题意义4
2方案设计与选择:
5
3整体设计思路6
4、主要元件介绍7
4.1AT89C51单片机芯片7
4.2数码管8
4.37407驱动器9
5电路设计10
5.1整体设计10
5.2分块设计10
5.2.1输入模块10
5.2.2输出模块11
5.2.3晶振与复位电路:
12
5.3整体电路图12
6.1程序思路14
6.2程序设计步骤15
6.3程序的主要模块15
6.3.1延迟程序15
6.3.2中断服务子程序:
15
6.3.3主程序16
6.3.4显示程序17
6.3.5闹铃程序和定时程序18
6.4程序调试18
7日历功能的实现18
8电子钟设计中遇到的问题及其解决方法20
参考文献22
致谢25
声明26
摘要:
本文所要论述的课题,主要使用以AT89C51芯片作为核心,运用12MHZ晶振与单片机AT89C51相连接,采用动态扫描方式显示作为主要论述中心。
通过使用单片机和在显示电路加上7407驱动电路,以达到实现在6个LED数码管上显示出时间,日期,定时,闹钟四大功能,并通过键位操作,达到日期设定,时间调整,闹钟设定,倒计时的功能。
在实现各个功能的时候数进行相对应的显示,蜂鸣器的启动和键位控制声音停止。
b5E2RGbCAP
软件部分,本设计主要采用微机汇编语言进行实现,其中分为显示,调时,延迟,闹钟,日起调整等部分。
关键词:
多功能电子钟;单片机技术;微机汇编语言;动态扫描技术
DesignofLEDShowElectricClockBasedon
Microprocessor
Thisdesignusesa12MHZcrystaltoconnectwiththemachineAT89C51,takesAT89C51chipsascore.Itadoptsthedynamicstateofthescanningmethodtoshow.UsingthisMCUand7407driveelectriccircuit,weareabletoshowdate,time,fixthetime,makebellon6LEDfigurestubes.Wecanuse6keytoconstitutedate,adjusttime,enactthebellandsetthecountdowntimer.Whentheelectriccarryingouteachfunction,thefigurestubeshowthetightfunction.Whenthealarmclockandthecountdowntimerwerereached,thevoicebegins.While3or4ispressed,thevoicestops.Thesoftwarepartisrealizedbyassemblerlanguage.Itwasdividedintotoshow,delay,adjust,makebell,infixedtime,adjustdateetc.part.Wegettheendpurposecombiningthesoftwareandthehardware.p1EanqFDPw
Keyword:
ElectricclockMCUDynamicstatescaningassemblerlanguageDXDiTa9E3d
1引言
1.1多功能电子钟的研究背景和选题意义
时间对于人类的重要意义不言而喻,正如郭沫若老先生曾经说过的一样:
时间就是生命,时间就是速度,时间就是力量。
RTCrpUDGiT
而伴随这人类发展的历史,我们可以发现人们对于时间的认识和利用。
从远古时代的日月交替,影长变化到封建时期的圭表,水漏计时,从18世纪的机械钟表时代到现在被广泛应用的电子钟时代,人们对于时间的认识和利用都在不断的深化。
5PCzVD7HxA
从十八世纪初期开始的工业革命时代到今天的数字电子时代,一直被誉为人类历史上的又一大重要革命,对于钟表的发展来说,从机械手表进入到数字电子时钟时代,这也同样是一场伟大的变革。
jLBHrnAILg
伴随着十九世纪末,二十世纪初电子技术作为一门新兴技术的发展,电子钟的问世成为了必然。
机械式钟表虽然同样能告诉我们时间,但是因为其自身的发展因素,在对于时间精准度的把握和多样性的应用中受到极大的限制,而电子钟自问世以来正以前所未有的速度不断优化和创新,向着时间精准化,功能多样化,体积最小化和能耗最低化的方向迅速发展。
xHAQX74J0X
到了今天,电子钟采用数字电子电路的技术实现对时、分、秒的数字化显示被广泛应用于个人生活,家庭室内,室外广场,各大交通车站等公共场所,成为人们日常生活中必不可少的生活必需品。
因为数字集成电路的发展和石英晶体震荡技术的广泛使用,使得数字电子钟对于时间要求的精准度远远超过历史所有计时工具,并且其新增的各种报时功能、响应功能、日历功能、定时功能给人们日常生活带来了极大的便利,所以,多功能数字电子钟在以后的社会生活市场中具有广泛的应用前景和极大的竞争力。
LDAYtRyKfE
本文选题以多功能电子钟为切入点,才用电路集成技术,以单片机和微机汇编语言作为软硬件的技术基础,采用AT89C51芯片作为核心不仅保障了时间精准度,而且可以不断进行更新换代,加入更多的生活需求功能,降低了数字电子钟的开发和制造成本,大大提高了其社会竞争能力。
Zzz6ZB2Ltk
2方案设计与选择:
方案一:
脉冲信号源的选择。
用555定时器制作的多谐振荡器,信号发生器,脉冲芯片等方式都可以作为脉冲信号源,在此我选择的是多谐振荡器,主要考虑的是它的易于制作和很好的稳定性。
方案二:
以石英晶体振荡器和分频器组成脉冲发生器,以六十进制秒,分计数器及二十进制时计数器组成校对电路,辅以使用晶体管显示电路,通过脉冲波分别控制时,分,秒,日期四个计数器,分别显示组成电子钟电路。
dvzfvkwMI1
方案三:
以AT89C51为芯片,采用单片机技术,作为核心,以7407驱动器为输入标准装置,用数码管显示电路,组成电路。
该电路连接清晰,方便,同时对于各功能的具体使用可以采用汇编程序,分块编程,对于功能处理方便,本次设计主要选用的主要方案。
rqyn14ZNXI
3整体设计思路
本文主要的介绍对于文章的整体设计思路,具体如下:
↓
认真复习单片机原理和微机汇编语言参阅资料
↓
选择最佳元件,熟悉各部件的功能和使用
分析各部分电路主要功能和实现可能性
↓
设计各部分电路并进行整合
↓
完成整体电路图
↓
确定各软件编程结构思路
↓
编辑各个功能的单元编辑模块
↓
整合各个单元模块,编辑完成整体程序
↓
对主体程序进行调试,及时修改
↓
实际动手组装实物
↓
完成实物,进行实物测试,进行最后调整
↓
完成任务书撰写论文
↓
完成
要实现上述功能,本文主要采用单片机中AT89C51芯片作为主要处理器。
AT89C51芯片是一款低功耗,高性能的CMOS8位单片机,其中含有4KB可以在线编程的可反复擦写的Flash只读程序存储器,使用高密度,非易失性存储技术,兼容标准MCS-51指令系统及80C51引脚结构,既能够达到需求目标,又可以大大降低经济成本。
EmxvxOtOco
关于软件方面,本次主要采用单元模块程序设计方法,将主要功能分解,这样能够大大减小其编写难度,使程序各功能有条不紊,又便于添加各种需求功能。
将程序单元主要分解为显示单元,调时单元,闹钟单元,定时单元,此方法关键在于各功能单元之间的兼容性和配合,认真处理此处为软件部分的重中之重。
SixE2yXPq5
本次设计主要依照此流程图操作,能够保证有条不紊的执行。
首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。
这是前期准备工作。
第二部分是硬件部分:
依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。
第三部分是软件部分:
先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。
第四部分是软件画图部分:
设计好电路后进行画图,包括电路图和仿真图的绘制。
第五部分是软件仿真部分:
软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。
第六部分是硬件实现部分:
连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。
最后进行功能扩展,本设计加进了日期显示与调整功能。
6ewMyirQFL
4、主要元件介绍
关于本文中需要使用到的主要元器件进行简单介绍,了解包括AT89C51单片机、74LS07芯片、以及数码管在内的各元件功能特性。
kavU42VRUs
4.1AT89C51单片机芯片
作为本次设计中使用的核心元件,其结构如下:
图4.1.1单片机引脚图
引脚介绍:
VCC为电源电压引脚
GED为接地引脚
P0,P1,P2,P3为输入输出端口引脚
RST为复位引脚
XTAL1和XTAL2为复位电路引脚
4.2数码管
图4.2数码管
使用共阴极数码管时将6个数码管按相同功能连接起来,3与8相连,当选通端所接管脚为低电平时该数码管选通。
y6v3ALoS89
单片机的P2口作为选通端,连接各数码管的3、8引脚轮流显示,连接时要加7407和上拉电阻。
单片机的P1口作为功能段,通高电平的引脚会使相应段亮起,同样的也要与7407和电阻连接使用。
4.37407驱动器
此驱动器是集电极开路六正相高压驱动器,1入2出,3进4出,5进6出,9进8出,11进10出,13进12出,7接地,14接高电平。
M2ub6vSTnP
其引脚图如下:
其逻辑图如下:
5电路设计
5.1整体设计
此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:
显示电路用六个数码管分别显示小时<年份)、分钟<月份)和秒<日),通过动态扫描进行显示,从而避免了译码器的使用,使电路更加简单。
单片机采用AT89C51系列,这种单片机应用简单,适合电子钟设计。
0YujCfmUCw
电路的总体设计框架如下:
图4.1.1电路模块图
5.2分块设计
这部分主要对总体电路设计中各模块电路的分析和分块电路设计。
5.2.1输入模块
在电子钟的设计与实现中,时间调整,日期调整和闹铃调整都需要手动输入,需要一定的外部设备来与之匹配,譬如,使用手动按键调整。
在选用输入端口时可以与主芯片的P3引脚进行输入连接。
eUts8ZQVRd
图4.21输入电路设计
5.2.2输出模块
显示电路主要是讲六个数码管与主芯片的输出引脚连接,在实际电路中采用单个数码管相连进行显示,先把数码管的1、2、4、5、6、7、9、10对应相连,然后把各晶体管的3和8引脚各自相连,P1.6~P1.0分别接a~g,P2作为选通端P2.0~P2.5分别从左到右接各数码管的3、8端。
采用动态显示,即一位一位地轮流点亮各位显示器[18],因此P2.0~P2.5轮流置0。
持续时间为1ms,这点在程序部分还会讲到。
sQsAEJkW5T
具体电路连接如下:
图4.2.2显示模块电路
5.2.3晶振与复位电路:
晶振与复位电路主要作用是保证电子钟时间的走时精准度和其复位,是电子钟使用与设计中最主要的模块,也是校验时钟是否合格的硬性标准。
GMsIasNXkA
具体电路如下:
图4.2.3晶振与复位电路
5.3整体电路图
将以上三部分模块电路整合,以AT89C51主芯片为核心进行总体连接,组成本次整体电路图。
具体电路如下:
图4.4整体电路图
6程序设计
6.1程序思路
TIrRGchYzg
图5.1.1程序设计思路
以电路为基准,程序的总体思路是:
1、按键复位,将时间清零,以0时0分0秒作为操作起点。
2、将复位下分三个功能键,键1为时间调整,键2为闹铃调整,键3为定时调整。
进行时间调整时在键1功能下细分两个功能键,键4为调时,键5为调分,若3秒钟没有进行键位的继续操作,则自动去取消键位操作,恢复走时,下同。
7EqZcWLZNX
3、在键位操作时启用键2进行闹铃调整,键4与键5同样为时,分调整。
此时只有前四位进行显示,即闹铃功能精确到分,2秒钟无按键则返回时间显示,时间到达闹铃所定时间时P0.7输出高电平,蜂鸣器响,按下按键2或3时蜂鸣器停止。
lzq7IGf02E
4、按3键时进行定时的设定,同样,分别通过4、5调整分和秒,若两秒未按键则不进行定时,设定之后再次按下3键则进行倒计时,倒计时时间未到时若按下1键则进行时间显示;若倒计时时间到则P0.7为高电平,蜂鸣器响。
定时的最大值为59分59秒。
zvpgeqJ1hk
在程序设计时,尽量改进算法,算法的改进可以使相对误差减小,或者可以使占用空间减小。
另外,分块的设计思想要贯穿始终,整个程序较为繁杂,某些程序段会反复用到,因此采取的方法是写出多个程序段,通过跳转指令进行调用。
NrpoJac3v1
6.2程序设计步骤
首先,在定时器设计之中,计数器作为重要组成部分,本次主要选择计时器T0作为主计时器。
T0的主要工作方式:
方式0:
不推荐
方式1:
16位计数器,常用
方式2:
自动重装初值的8位定时/计数器
方式3:
T0相当于两个独立的8位定时/计数器
其次,此程序采用方式1,方式1的定时时间t为t=(216-M>*12/fosc。
其中M为定时器初值,fosc为12MHz,若M为0则t=65536*12/2*106=65.536ms。
因此可取50ms为计时单位[16],初值M应为50*10-3*106=216-M。
M=15536=11110010110000=3CB0。
即定时器初值为TH0=03CH,TL0=0B0H。
定时器中断20次为一秒,这部分在中断程序中用到。
1nowfTG4KI
第三步就是进行具体的程序编写工作。
6.3程序的主要模块
6.3.1延迟程序
在动态扫描时,必然用到延迟程序,这里使用延迟1ms的程序,此程序需要反复调用。
此段程序是很简单的,但就是在这段简单的程序上,也会出现问题,若用fjnFLDa5Zo
D_1MS:
MOVR7,#500
DJNZR7,$
RET
则会出现警告,因为R7是8位寄存器,所能存储的最大值应为255,所以应改为:
D_1MS:
MOVR7,#2
D_5:
MOVR2,#250
DJNZR2,$
DJNZR7,D_5
RET
6.3.2中断服务子程序:
中断服务程序中,总体思路是:
由于初值是3CB0H,所以装满定时器需要50ms的时间,从而20次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。
包括日期显示的功能也是如此。
另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。
基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。
再显示走时部分。
tfnNhnE6e5
流程框图如下:
HbmVN777sL
图5.3.1中断程序思路
6.3.3主程序
主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则调用声音程序,该段程序如下:
MAIN:
JNBP3.0,DATETZ。
按下0键时,显示日期并可对日期进行调整
JNBP3.1,ZSTZ1。
按下1键时,显示时间,并可调时
JNBP3.2,NLTZ1。
按下2键进行闹铃设置
JNBP3.3,DSTZ。
按下3键进行定时设置
ACALLDISP。
MOVA,HOUR。
SUBBA,38H。
JZFEN。
AJMPDSPD2。
FEN:
MOVA,MINUTE。
SUBBA,37H。
JZSHENGYIN1。
DSPD2:
MOVA,R4。
JZS_PD。
AJMPMAIN。
S_PD:
MOVA,R3。
JZSHENGYIN1。
AJMPMAIN。
6.3.4显示程序
6个晶体管轮流进行显示,分别显示1ms,这依赖的是人们视觉的惰性,该段程序如下:
DISP:
。
走时的显示程序,包括调时时的显示
MOVDPTR,#LEDTAB
MOVA,SECOND
MOVB,#10
DIVAB。
A存十位B存个位
MOVCA,@A+DPTR
MOVP1,A
CLRSEC_S
ACALLD_1MS。
显示秒十位
SETBSEC_S
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
CLRSEC_G
ACALLD_1MS。
显示秒个位
SETBSEC_G
……
以此类推,进行时和分的显示
RET
另外,调闹铃和定时时间、进行日期显示时,有各自的显示程序,但不能成为独立子程序,分别柔和在闹铃、定时、和日期程序中。
V7l4jRB8Hs
6.3.5闹铃程序和定时程序
这两段程序分别包含了各自的显示、调整程序。
程序思路是对照,走时部分的程序,进行编写,包括显示程序,与显示时间的程序是相似的,闹铃和定时的调整程序与走时调整程序相似。
83lcPA59W9
6.4程序调试
程序写完以后必须进行调试,以验证程序是否正确。
在程序调试时,出现了很多问题,比如跳转距离过长、打错字母、逻辑有错等,发现问题后,利用两天时间进行了改正,但即使编译通过,最后也不一定能够实现功能。
以为程序的调试只能检查出语法错误,而不能检查出逻辑的错误。
要真正把程序写对,要通过仿真发现并且改正错误。
mZkklkzaaP
7日历功能的实现
在加入其它功能时,我想到了很多可能达到的功能,比如加入备用电源、夜间亮灯功能、多个闹铃的功能、显示日期功能等。
然后我进行了理论上的验证,加入备用电源可避免因停电而造成的电路全部失灵,但受到实验条件的影响未选择对这个功能进行实现。
夜间亮灯功能对程序要求不高,但在电路中要加入传感器,把光的照度测出来后,低于某一值时,灯亮,从而使得夜间时也能看到时间显示,虽然程序简单,但由于要加入传感器,容易受到干扰,各项工作投入时间较长,考虑到时间有限,也没有采纳这个方案。
闹铃的功能和日期的功能的实现都是比较容易的,做了权衡之后我选择了后者,因为日期功能主要涉及算法和程序的跳转、调用等,更能加深对单片机的认识和理解。
AVktR43bpw
在设计的开始阶段,我主要考虑了日期的逻辑算法[19]。
首先,要考虑年份是不是闰年,闰年的判断方法是:
将年份除以100,若能整除,则将年份除以400,若还能整除,则为闰年,若不能,则为平年;若不能被100整除,则判断是否能被4整除,若能,则为闰年,若不能则为平年。
只有2月与平、闰年相关,因此在闰年和平年的子程序中,要判断是不是2月,若是则在相应的年中进行日期的增加,若不是则转入平时的月份。
其中1、3、5、7、8、10、12月是每月31天,4、6、9、11月为每月30天。
ORjBnOwcEd
在电路方面有两种方法:
<1)可以增加6个数码管用来显示日期,但这样显然电路更复杂;<2)用按键的输入决定6个数码管显示日期还是时间,这种情况下,只需加一个按键即可,不用增加数码管。
最终的按键控制为:
按下1键时,显示日期,并且用4、5、6键分别调整年、月、日;按下2键时,进行走时和时间调整;3键位闹铃键;4键为定时键。
2MiJTy0dTT
这样实现功能的好处是:
<1)电路简单,若同时显示日期和时间,则需要的引脚很多,需要加入译码器对引脚进行扩展。
采用按键决定显示时间或日期的方法避免了这个问题;<2)节约空间,节约成本。
gIiSpiue7A
程序思路如下:
uEh0U1Yfmh
图8.1扩展部分思路
由于在前面的工作中积累了较多的经验,对汇编语言已经相当熟悉,因此在实现日历功能时,程序设计显得相当容易。
IAg9qLsgBX
按键如图8.2所示,按键功能如下:
按下按键1时,显示日期并且允许对日期进行调整;
按下按键2时,显示时间并且允许对时间进行调整;
按下按键3时,显示闹钟所设定的时间并允许通过5、6键对闹钟进行设定;
按下按键4时,显示定时功能所设定的时间并允许对其进行设定,再次按下时,开始倒计时过程,并进行倒计时过程的显示,在显示日期时,该键可对年份进行调整;WwghWvVhPE
按键5、6可对时间显示时的时、分或日期显示时的月、日进行调整。
按键形式:
图8.2按键图示
8电子钟设计中遇到的问题及其解决方法
在电子钟设计中程序比较长,遇到了各种各样的问题,比如跳转距离过长出现语法错误。
因此修改程序的时间很长,有很多语法错误,在此不能一一说明,只能对个别问题加以阐述。
asfpsfpi4k
由于在走时调整、闹铃调整及定时设定时,按下键时每0.2秒步进1,这就需要每0.2秒对按键输入进行一次扫描,因此开始时,我用的是延迟0.2秒再返回按键扫描程序的方法,但是可以想到,进行单纯的延迟时,不会有显示,后来我采用的是反复调用若干次显示程序以实现延迟,较好地解决了这个问题。
虽然现在回过头来发现这个问题很简单,但当时是百思不得其解。
我从中学到:
任何简单的事情都会有出错的可能,有些时候人的思路中的一些错误是自己难以发现的,在工作和生活中要多对自己的想法提出质疑。
ooeyYZTjj1
不光是这种明显的问题很多,有些细微的问题也一样出现了,但解决起来并不容易。
在最后的硬件实现阶段发现蜂鸣器不响,此时连接方法是蜂鸣器直接连接在了P0.7引脚。
考虑到单片机的输出电流比较小,虽然P0.7引脚的电平已经达到2V以上,也无法驱动蜂鸣器。
于是我设想加上驱动电路。
BkeGuInkxI
作此修改之后,蜂鸣器发出响声,但是又遇到了新的问题:
蜂鸣器无法停止响声!
看上去这个问题很简单,只要有停止闹铃的按键输入时,在程序中加一句将P0.7置零的语句就可以了。
但事实并不是这么简单。
通过苦思冥想,发现在主程序中,对“定时时间是否已到”是不断进行扫描的,而倒计时是在中断服务子程序中进行的,当倒计时为0分0秒时,主程序判断出来后会不停地调用声音程序:
PgdO0sRlMo
MAIN:
JNBP3.0,DATETZ。
按下0键时,显示日期并可对日期进行调整
JNBP3.1,ZSTZ1。
按下1键时,显示时间,并可调时
JNBP3.2,NLTZ1。
按下2键进行闹铃设置
JNBP3.3,DSTZ。
按下3键进行定时设置
ACALLDISP。
MOVA,HOUR。
SUBBA,38H。
JZFEN。
AJMPDSPD2。
FEN:
MOVA,MINUTE。
SUBBA,37H。
JZSHENGYIN1。
DSPD2:
MOVA,R4。
JZS_PD。
AJMPMAIN。
S_PD:
MOVA,R3。
JZSHENGYIN1。
AJMPMAIN。
蜂鸣器响声不停是不可避免的,因为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 多功能 电子钟