单片机电子钟论文.docx
《单片机电子钟论文.docx》由会员分享,可在线阅读,更多相关《单片机电子钟论文.docx(29页珍藏版)》请在冰豆网上搜索。
单片机电子钟论文
河北工业大学
毕业设计说明书
作者:
李若津学号:
062068
学院:
信息工程学院
系(专业):
电子科学与技术
题目:
基于单片机设计LED显示电子钟
指导者:
张存善教授
评阅者:
2010年6月7日
毕业设计中文摘要
基于单片机设计LED显示电子钟
摘要:
本设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用7407驱动电路,实现在6个LED数码管上显示日期、时间、定时、闹铃,通过6个按键实现设置日期、进行调时、设定闹铃、倒计时等功能,在实现各功能时数码管进行相应显示,闹铃或定时时间到时蜂鸣器响,按下闹铃键或定时键时,声音停止。
软件部分用汇编实现,分为显示、延迟、调时、闹铃、定时、调整日期等部分。
通过软硬件结合达到最终目的。
关键词:
电子钟单片机动态扫描汇编语言
毕业设计外文摘要
TitleDesignofLEDShowElectricClockBasedon
Microprocessor
Abstract
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.
Keywords:
ElectricclockMCUDynamicstatescaningassemblerlanguage
目次
1引言1
2整体设计思路3
3主要元件的使用方法4
3.1AT89C51单片机:
4
3.27407驱动器:
5
3.3数码管:
6
4电路设计7
4.1整体设计7
4.2分块设计7
4.2.1输入部分7
4.2.2输出部分(显示电路)8
4.2.3晶振与复位电路:
9
5程序设计9
5.1程序思路9
5.2程序设计步骤10
5.3程序的主要模块11
5.3.1延迟程序11
5.3.2中断服务子程序:
11
5.3.3主程序13
5.3.4显示程序13
5.3.5闹铃程序和定时程序14
5.4程序调试14
6功能仿真15
6.1软件介绍15
6.1.1PROTEUS15
6.1.2MedWin15
6.2仿真过程:
16
6.2.1仿真图的绘制16
6.2.2功能的实现17
7实际电路的实现18
8日历功能的实现20
9电子钟设计中遇到的问题及其解决方法23
结论25
参考文献26
致谢28
附录A整体电路图29
附录B完整程序30
1引言
单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上[1]。
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
单片机具有体积小、功能多、价格低廉、使用方便、系统设计灵活等优点[2]。
因此,它应用广泛前景美好,它的实用性大大地提高了我对毕业设计的兴趣。
在我国,单片机的开发应用已有15年左右,已经形成一支庞大的技术开发队伍,为我国单片机应用积累了丰富的经验。
随着电子技术、计算机芯片技术和微电子技术的飞速发展促进了单片机技术一日千里的变化[3]。
随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。
单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。
然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。
来自英国LabcenterElectronics公司的Proteus软件很好地诠释了利用现代EDA工具方便快捷开发单片机系统的优势。
它包括PROTEUSVSM(VirtualSystemModelling)、PROTEUSPCBDESIGN两大组成部分,在PC机上就能实现原理图电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证以及形成PCB文件的完整嵌入式系统设计与研发过程。
单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。
如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。
数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。
数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便[4]。
不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
而且是控制的核心部分。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。
而且向着精确、低功耗、多功能发展。
基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。
从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。
另外,程序较为简洁,具有可靠性和较好的可读性。
如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。
数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。
这些方法都各有特点,其中,利用单片机实现的电子钟具有编程灵活,便于功能扩充,精确度高等特点[5]。
基于以上分析,在此次设计中,我选择的是利用单片机制作电子钟。
电子钟的设计本身包括程序的设计和硬件电路的设计[6]。
我的思路是,先进行电路的整体设计,再根据电路进行编程,在编程的过程中,对电路进行微调,以更好地配合程序。
在设计完成后,进行程序调试,调试软件选择MedWin,调试成功后,再根据电路图画出仿真图,将软件装入单片机芯片,利用Proteus软件进行仿真,仿真中的错误通过改正程序中的逻辑错误和电路中的设计不当进行排除,这个过程是很艰难的但也是很重要的。
若仿真可以实现,则硬件电路的实现就可以有条不紊地进行。
2整体设计思路
这部分主要介绍工作安排和整体设计的思想。
工作过程规划如下:
图2.1整体设计思路
针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[7]。
这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。
运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。
本电子钟设计主要是依照图2.1中的流程做出来的,时间分配比较均匀。
首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。
这是前期准备工作。
第二部分是硬件部分:
依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。
第三部分是软件部分:
先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。
第四部分是软件画图部分:
设计好电路后进行画图,包括电路图和仿真图的绘制。
第五部分是软件仿真部分:
软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。
第六部分是硬件实现部分:
连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。
最后进行功能扩展,本设计加进了日期显示与调整功能。
3主要元件的使用方法
下面就本次设计中用到的主要元件的所有功能进行简单的介绍,包括AT89C51单片机、74LS07芯片、以及数码管的特性和用法。
3.1AT89C51单片机[8]:
该单片机功能强大,不仅能满足设计的需要,也可以在设计要求的基础上进行一些扩展。
单片机的结构如下:
图3.1.1单片机引脚图
在使用时VCC接电源电压,GND接地。
P0,P1,P2,P3可作为输入或输出端口,RST是复位输入,接复位电路。
XTAL1和XTAL2接复位电路。
这些可以在硬件设计部分体现出来。
3.27407驱动器[9]:
7407是集电极开路六正相高压驱动器,1入2出,3进4出,5进6出,9进8出,11进10出,13进12出,7接地,14接高电平。
7407引脚图:
图3.2.17407引脚图
7407逻辑图:
图3.2.27407逻辑图
3.3数码管:
图3.3.1数码管
使用共阴极数码管时将6个数码管按相同功能连接起来,3与8相连,当选通端所接管脚为低电平时该数码管选通。
单片机的P2口作为选通端,连接各数码管的3、8引脚轮流显示,连接时要加7407和上拉电阻。
单片机的P1口作为功能段,通高电平的引脚会使相应段亮起,同样的也要与7407和电阻连接使用。
4电路设计
4.1整体设计
此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:
显示电路用六个数码管分别显示小时(年份)、分钟(月份)和秒(日),通过动态扫描进行显示,从而避免了译码器的使用,使电路更加简单。
单片机采用AT89C51系列,这种单片机应用简单,适合电子钟设计。
电路的总体设计框架如下:
图4.1.1电路模块图
4.2分块设计
这部分介绍各模块电路的设计方法和成果,主要分为:
输入部分、输出部分、复位和晶振电路。
4.2.1输入部分
在电子钟的输入部分,设置相应的置数功能,通过外部设备的输入,如按键,实现时间的修改[10-11]。
除此之外,调整闹铃、定时、日期时也需要按键进行输入。
在选用输入端口时,将P3引脚与按键相连进行输入[12]。
设计的输入部分如下:
图4.2.1输入部分
各按键功能在后面的部分将会介绍到
4.2.2输出部分(显示电路)
该部分电路图如下所示:
图4.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,这点在程序部分还会讲到。
4.2.3晶振与复位电路:
图4.2.3晶振与复位电路
5程序设计
5.1程序思路
图5.1.1程序设计思路
结合电路,程序的总体思路是[17]:
1、点复位键后,进行时间显示,从0时0分0秒开始。
2、按下按键1时,进行调时,此时按下4调整时,按下5调整分,若2秒钟未按键,则不再等待,恢复走时,持续按键时大约0.3秒步进1,下同。
3、按下2键时进行闹铃调整,用4、5键分别调时和分,此时只有前四位进行显示,即闹铃功能精确到分,2秒钟无按键则返回时间显示,时间到达闹铃所定时间时P0.7输出高电平,蜂鸣器响,按下按键2或3时蜂鸣器停止。
4、按3键时进行定时的设定,同样,分别通过4、5调整分和秒,若两秒未按键则不进行定时,设定之后再次按下3键则进行倒计时,倒计时时间未到时若按下1键则进行时间显示;若倒计时时间到则P0.7为高电平,蜂鸣器响。
定时的最大值为59分59秒。
在程序设计时,尽量改进算法,算法的改进可以使相对误差减小[12],或者可以使占用空间减小[14]。
另外,分块的设计思想要贯穿始终,整个程序较为繁杂,某些程序段会反复用到,因此采取的方法是写出多个程序段,通过跳转指令进行调用。
5.2程序设计步骤
在程序设计过程中,我遇到了很多困难,这部分也是让我学到很多东西的地方。
首先,我学习了定时器的相关知识,计数器的使用是很重要的组成部分[15],在这个设计中选择计数器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次为一秒,这部分在中断程序中用到。
其次,我参看了文献中的设计思路,做到胸有成竹后再进行具体的程序书写工作。
认真学习了教科书中关于汇编语言编程的问题,熟悉了汇编语言的编程方法和语法习惯。
第三步就是进行具体的程序编写工作。
5.3程序的主要模块
5.3.1延迟程序
在动态扫描时,必然用到延迟程序,这里使用延迟1ms的程序,此程序需要反复调用。
此段程序是很简单的,但就是在这段简单的程序上,也会出现问题,若用
D_1MS:
MOVR7,#500
DJNZR7,$
RET
则会出现警告,因为R7是8位寄存器,所能存储的最大值应为255,所以应改为:
D_1MS:
MOVR7,#2
D_5:
MOVR2,#250
DJNZR2,$
DJNZR7,D_5
RET
5.3.2中断服务子程序:
中断服务程序中,总体思路是:
由于初值是3CB0H,所以装满定时器需要50ms的时间,从而20次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。
包括日期显示的功能也是如此。
另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。
基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。
再显示走时部分。
流程框图如下:
图5.3.1中断程序思路
5.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;
5.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
另外,调闹铃和定时时间、进行日期显示时,有各自的显示程序,但不能成为独立子程序,分别柔和在闹铃、定时、和日期程序中。
5.3.5闹铃程序和定时程序
这两段程序分别包含了各自的显示、调整程序。
程序思路是对照,走时部分的程序,进行编写,包括显示程序,与显示时间的程序是相似的,闹铃和定时的调整程序与走时调整程序相似。
5.4程序调试
程序写完以后必须进行调试,以验证程序是否正确。
在程序调试时,出现了很多问题,比如跳转距离过长、打错字母、逻辑有错等,发现问题后,利用两天时间进行了改正,但即使编译通过,最后也不一定能够实现功能。
以为程序的调试只能检查出语法错误,而不能检查出逻辑的错误。
要真正把程序写对,要通过仿真发现并且改正错误。
6功能仿真
这部分工作可能遇到的困难是很多的,程序庞大很可能出现各种问题。
在仿真工作中,首先要对仿真软件有足够的了解并能够正确熟练地运用
6.1软件介绍
在这部分工作中用到了medwin3和Proteus两个软件,其中Medwin3用来编译程序并生成hex文件,装入Proteus仿真图的芯片中,通过仿真结果一步步进行调整最后达到预期的功能。
6.1.1PROTEUS
PROTEUS软件是目前世界上最先进、最完整的嵌入式系统设计与仿真平台,可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。
微控制器系统相关的仿真需建立编译和调试环境,可选择MedWinV3软件。
该软件支持众多不同公司的芯片,集编辑、编译和程序仿真等于一体,同时还支汇编和C语言的程序设计。
Proteus的界面友好易学,在调试程序、软件仿真方面有很强大的功能。
其革命性的功能是:
将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,实时看到运行后的输入、输出的效果。
Proteus为我们建立了完备的电子设计开发环境。
6.1.2MedWin
MedWin可以用来编写汇编语言程序并进行编译、产生代码并装入仿真器以便于仿真,在输出文件夹中会产生hex文件,将该hex文件导入仿真图的单片机芯片中即可进行仿真。
使用时点击“项目管理—新建项目”就可以建立编程的平台,然后选择项目管理中的新建文件就可以建立asm文件,在这个文件中可以进行程序的编写,程序编写完毕后可点击“项目管理—编译\汇编”看其是否有错,有错时,在下面的窗口会提示出错的行以及错误原因。
改正无误后可产生代码并装入,将hex文件导入单片机中即可进行仿真
6.2仿真过程:
通常在仿真过程中会遇到很大的麻烦。
在程序汇编通过之后程序不一定是正确的,比如我刚开始进行仿真时数码管并不进行显示,结果发现应该是置零的置一了,应该置一的置零了。
改正之后发现虽然走时程序正常了,但是调时中出现了大量的问题,更不要说闹铃和定时程序了。
在整个毕业设计的过程中程序的修改贯穿始终,在修改的过程中一定要条理清晰,认真细心。
6.2.1仿真图的绘制
在使用Proteus进行仿真时,仿真图不用画出数码管驱动程序,其他部分与设计的硬件图相仿。
绘制结果如下:
图6.2.1仿真图
6.2.2功能的实现
在绘制仿真图之后,要向单片机装入程序,从而使单片机开始工作并带动整个电路工作,装入过程为:
点击单片机,选择所编译程序的输出hex文件,确定即可。
此时单片机会按照程序所设定的功能进行工作,在仿真过程中会遇到各种问题,在第九章会具体讲到。
这里列出仿真结果:
(1)走时仿真:
图6.2.2走时状态下的仿真结果
(2)闹钟设定的仿真:
图6.2.3闹铃仿真结果
可见所定闹钟时间为10点15分。
(3)定时钟倒计时的仿真:
图6.2.3倒计时仿真
可见,倒计时进行到3分3秒。
7实际电路的实现
在仿真无误后,开始进行实际电路的搭接。
搭接时先不用芯片实物,而用仿真器替代。
按照电路图,先把数码管按照对应的管脚连接起来,然后接驱动电路等,接好之后把程序装入仿真器,通电运行,再对电路进行调试。
在根据电路图搭接好各个器件后,一个很重要的问题就是检查各器件是否完全工作。
下面介绍检验方法:
导线看似不用太费力气去检验,但一个成功的实验需要前期充分的准备,比如在我的实验过程中,由于导线繁多,而且使用旧导线进行实际电路的连接,所以就出现了导线不通的情况,因此验证过程中不要放过小问题。
数码管的检测:
拆除89C51芯片,先分别给芯片P2对应的导线加低电平,再分别给P1对应的导线加高电平,使每个数码管的每一笔段都能亮。
若出错,先检查电路的连接再换一下器件试试,对于此电路问题出在7407的连接方法的问题比较大。
这部分需要重