基于89C51单片机的多功能时钟设计.docx
《基于89C51单片机的多功能时钟设计.docx》由会员分享,可在线阅读,更多相关《基于89C51单片机的多功能时钟设计.docx(49页珍藏版)》请在冰点文库上搜索。
基于89C51单片机的多功能时钟设计
课程设计成果说明书
题目:
基于89C51单片机多功能时钟的设计
学生姓名:
学号:
学院:
机电工程学院
班级:
指导教师:
李良儿
浙江海洋学院教务处
2012年12月16日
摘要
本设计是基于89C51单片机,主要以51单片机为控制核心,采用汇编语言进行编程。
设计的单片机多功能时钟系统由1块AT89C51芯片,1个7SEG八位LED数码管,2块74HC244列驱动及按键电路和闹铃电路组成。
具有正常的时钟显示,秒表计时和时钟校时等基本功能,同时发挥部分的功能也得到了实现,并且还具有一定的创新功能。
关键词单片机;多功能时钟;AT89C51;51单片机;
一、设计任务及主要技术指标和要求………………………………………………………6
1.1设计任务………………………………………………………………………………6
1.2主要技术指标和要求…………………………………………………………………6
二、引言…………………………………………………………………………………………6
三、设计方案……………………………………………………………………………………6
3.1系统方案的选定………………………………………………………………………6
3.2系统总体设计框图……………………………………………………………………6
四、系统硬件的设计……………………………………………………………………………7
4.1系统总电路……………………………………………………………………………7
4.2显示器…………………………………………………………………………………7
4.3按键电路………………………………………………………………………………7
五、系统软件的设计……………………………………………………………………………8
5.1主程序…………………………………………………………………………………8
5.2显示子程序……………………………………………………………………………8
5.3定时器T0中断服务程序………………………………………………………………8
5.4T1中断服务程序………………………………………………………………………9
5.5调时功能程序…………………………………………………………………………9
5.6秒表功能程序…………………………………………………………………………9
5.7闹钟时间设定功能程序………………………………………………………………9
六、系统调试……………………………………………………………………………………10
6.1硬件调试………………………………………………………………………………10
6.2软件调试………………………………………………………………………………10
6.3综合调试………………………………………………………………………………10
七、指标测试……………………………………………………………………………………10
7.1测试仪器………………………………………………………………………………10
7.2指标测试………………………………………………………………………………10
八、设计总结……………………………………………………………………………………10
九、参考文献……………………………………………………………………………………11
一、设计任务及主要技术指标和要求
1.1设计任务:
单片机多功能时钟的设计。
1.2主要技术指标和要求:
基本要求:
(1)、能实现正常的时钟功能。
分别由6个数码管显示实时的时、分、秒。
时、分后面加小数点区分。
(2)、能实现秒表的功能。
以0.01秒为计数单位,显示范围在0——9999.99秒。
有秒表的开始、停止和清零功能。
(3)具有时钟校时功能:
能对时、分按实际时间进行手动校正。
发挥部分:
(1)被校时段有闪烁功能。
(2)开机能显示班级、学号等信息,并能滚屏显示。
创新部分:
(1)具有定时闹铃功能。
(2)具有整点报时功能。
二、引言
单片机,是集CPU,RAM,ROM,计数和多种接口于一体的微控制器。
自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。
可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。
51单片机通过软件编程,在LED液晶屏上实现小时,分,秒的显示,经过对比测试,发现计时的走时精度较高,可满足多种场合的应用需求,另外上电时具有滚动显示子程序,可以方便显示制作日期等信息。
本文详细介绍了AT89C51单片机的基本原理,本文论述了7SEG-MPX6-CA-BLUE液晶屏和74HC244缓冲器的工作原理及其软件设计过程。
三、设计方案
3.1系统方案的选定
为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等硬件,接口比较复杂,考虑时钟显示只有六位,且系统没有其他复杂的处理任务,所以采用动态扫描法实现LED的显示。
单片机采用89C51系列,这样单片机就具有足够的空余硬件资源实现其他的扩充功能。
3.2、系统总体设计框图
四、系统硬件的设计
图4.2单片机时钟硬件仿真电路
单片机时钟硬件仿真电路见图8.2。
采用单片机最小化应用设计,采用共阳七段LED显示器,p0口输出段码数据,p2.0-p2.7口作列扫描输出,p1、p3口串联16个按钮开关后接led发光管,p3.7端口接5v的小峰鸣器用于按键发音及定时提醒、整点到时提醒等。
为了提醒共阳LED数码管的列扫描驱动电压,用74HC244同相驱动器作LED数码管的电源驱动。
采用12MHZ晶振可提高秒计时的精准性。
4.1显示器
利用一块7SEG-MPX8-CA-BLU共阳八位LED数码管作为显示屏,如下图4.3
4.2按键电路
利用七个开关分别接控制芯片的P1.0~P1.6口,分别对应所要求的功能。
五、系统软件的设计
5.1主程序的设计
主程序流程图如下图5.1
本设计中计时采用定时器T0中断完成,秒表使用定时器T1中断完成,主程序循环调用显示子程序及查键,当端口有开关按下时,转入相应功能程序。
5.2显示子程序
时间显示子程序每次显示6个连续内存单元的十进制BCD码数据,首地址在调用显示程序时先指定。
内存中50H~55H为闹钟定时单元,60H~65H为秒表计时单元,70H~75H为时钟显示单元。
由于采用七段共阳LED数码管动态扫描实现数据显示,显示用十进制BCD码数据的对应段码存放在ROM表中,显示时,先取出内存地址中的数据,然后查得对应的显示用段码从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。
为了显示小数点及“—”、“A”等特殊字符,在开机显示班级信息和计时使用时采用不同的显示子程序。
5.3定时器T0中断服务程序
定时器T0用于时间计时。
定时溢出中断周期设为50ms,进入中断后先进行定时中断初值校正,中断累计20次(即50ms×20=1s)时对秒计数单元进行加1操作。
时钟计数单元地址分别在70H~71H(秒)、76H~77H(分)、78H~79H(时),最大计时值为23小时59分59秒。
7AH单元内存放“熄灭符”数据(#0AH),用于时间调整时的闪烁功能。
在计数单元中采用十进制BCD码计数,满10进位,T0中断计时程序执行流程见图5.3.
5.4T1中断服务程序
T1中断程序用于指示时间调整单元数字的闪亮或秒表计数,在时间调整状态下,每过0.3a左右,将对应调整单元的显示数据换成“熄灭符”数据(#0AH)。
这样在调整时间时,对应调整单元的显示数据会间隔闪亮。
在作秒表计时时,每10s中断1次,计数单元加1,每100次为1s。
秒表计数单元地址在60H~61H(10毫秒)、62H~63H(秒)、64H~65H(分),最大计数值为99分59.99秒。
T1中断程序流程图见图5.4.
5.5调时功能程序
调时功能程序的设计方法是:
按下P1.0口按键,若按下时间小于1s,进入省电状态(数码管不亮,时钟不停),否则进入调分状态,等待操作,此时计时器停止走动。
当再按下P1.0按钮时,若按下时间小于0.5s,则时间加1min,若按下时间大于0.5s,则进入小时调整状态,按下P1.1按钮时可进行减1调整。
在小时调整状态下,当按键按下的时间大于0.5s时退出时间调整状态,时钟从0s开始计时。
5.6秒表功能程序
在正常时钟状态下若按下P1.1口按键,则进行时钟/秒表显示功能的转换,秒表中断计时程序启动,显示首址改为60H,LED将显示秒表计时单元60H~65H中的数据。
按下P1.2口的按键开关可实现秒表清零、秒表启动、秒表暂停功能,当再按下P1.1口按键时关闭T1秒表中断计时,显示首址又改为70H,恢复正常时间的显示功能。
5.7闹钟时间设定功能程序
在正常时钟状态下若按下P1.3口的按键开关,则进入设定闹时调分状态,显示首址改为50H。
LED将显示50H~55H中的闹钟设定时间,显示式样为00:
00:
—,其中高2位代表时,低2位将代表分,在定时闹铃时精确到分。
按下P1.2键分加1,按P1.0键分减1;若再按P1.3键进入时调整状态,显示式样为00:
00:
—,按P1.2键时加1,按P1.0键时减1,按P1.1键闹铃有效,显示式样变为00:
00:
—0,再按P1.1键闹铃无效(显示式样又为00:
00:
—)。
再按P1.3键调整闹钟时间结束,恢复正常时间的显示。
在闹铃时可按一下P1.3口按键使蜂鸣停止,不按,则蜂鸣器将鸣叫1分钟后自行中止。
在设定闹钟后若要取消闹时功能,可按一下P1.3键,可听到一声“滴”声表明已取消了闹铃功能。
六、系统调试
6.1硬件调试
由于本次设计没有通过实际硬件做出电路,故没有硬件调试,只在Proteus软件上仿真。
6.2软件调试
在Proteus软件上画好电路后先要进行硬件线路的测试。
(1)先测试LED数码管是否会亮,方法是写一段小程序(P0口为#00H,P2口为#0FFH),装入单片机后运行看8个数码管是否能显示8个“8”,如不会亮或部分不会亮应检查硬件连接线路。
(2)按键小开关的检查是用鼠标按下小开关看对应口的发光管是否会亮(经调试可以运行后发光管已省略)。
(3)蜂鸣器电路接在P3.7口,在按下P3.7口小开关时应能听到蜂鸣声。
6.3综合调试
将设计好的程序装入主控制芯片,进行功能的观察与调试。
七、指标测试
7.1测试仪器
由于本次设计没有通过实际硬件做出电路,故不用进行仪器的测试。
7.2指标测试
基本要求:
(1)具有正常的时钟功能。
(2)具有秒表功能。
(3)具有时钟校时功能。
发挥部分:
(1)具有校时段的闪烁功能。
(2)具有开机上电时滚屏显示年月日及班级学号的功能
创新部分:
(1)具有整点闹铃功能。
(2)具有倒计时结束时闹铃提醒功能。
(3)具有定时闹铃功能。
八、设计总结
通过这一周的学习,我感觉有很大的收获:
首先,通过这次课程设计使自己对课本上的知识可以应用于实际,使理论与实际相结合,加深自己对课本知识的更好理解,同时也段练了自己的动手能力:
能够充分利用电脑去查阅资料,增加了许多课本以外的知识。
更加了解了单片机的设计步骤及方法。
增加了对AT89C52芯片和7SEG共阳八位LED数码管引脚结构和功能的理解及运用,在设计电路过程中,要考虑到整体的美观性,连接电路时对各线路的连接要细致。
在验证面电路效果时,出现了很多问题,其主要问题各个接线点之间错接没接上等。
在这个过程中,锻炼了我的细心和耐性。
九、参考文献
[1].楼然苗、李光飞,单片机课程设计指导[M],北京,北京航空航天大学出版社,2007.07.
[2].蔡美琴等,MCS-51系列单片机系统及其应用(第二版)[M],高等教学出版社,2004.06.
[3]、楼然苗、胡佳文等,单片机实验与课程设计(PROTEUS仿真版)[M],杭州,
浙江大学出版社,2010.10
附带程序:
DISPFIRSTEQU30H;显示首址存放单元
BELLEQUP3.7;小喇叭
CONBSEQU2FH;存放报时次数
SONGCONEQU31H;唱歌程序计数器
CONR2EQU32H;以下为唱歌寄存器
CONR3EQU33H
CONR4EQU34H
CONR6EQU36H
CONR7EQU37H
CONR5EQU35H
DELAYR3EQU38H;以下为延时寄存器
DELAYR5EQU39H
DELAYR6EQU3AH
DELAYR7EQU3BH
;
;***********************************;
;中断程序入口;
;***********************************;
;
ORG0000H;程序执行开始地址
LJMPSTART;跳到标号START执行
ORG0003H;外中断0中断入口
RETI;外中断0中断返回
ORG000BH;定时器T0中断入口
LJMPINTT0
ORG0013H
RETI
ORG001BH
LJMPINTT1
ORG0023H
RETI
;
;***********************************;
;以下程序开始;
;***********************************;
;
;整点报时功能程序
ZDBS:
MOVA,#10
MOVB,79H
MULAB
ADDA,78H
MOVCONBS,A
JZOUT00
BSLOOP:
LCALLDS20ms
MOVP3,#00H
LCALLDL1S
LCALLDL1S
MOVP3,#0FFH
LCALLDL1S
DJNZCONBS,BSLOOP
OUT00:
CLR08H
AJMPSTART1
;以下为闹钟功能时的唱歌程序
SPPP:
;LCALLMUSICO
MOVB,#10
BLOOP:
LCALLDS20ms
LCALLDL1S
LCALLDL1S
DJNZB,BLOOP
CLR0AH
CLR05H
AJMPSTART1
;倒计时程序进入程序
DJS:
LCALLDS20ms
JBP1.4,START1
WAITH111:
JNBP1.4,WAITH111
LJMPDJSST
;
;***********************************;
;主程序开始;
;***********************************;
;
START:
MOVSP,#80H
LCALLST
LCALLSTFUN0
LCALLSTMEN
SETBEA
SETBET0
SETBTR0
MOVR4,#14H
MOVDISPFIRST,#70H
LCALLMUSICO
;以下为主程序循环
START1:
LCALLDISPLAY
JNBP1.0,SETMM1
JNBP1.1,FUNSS
JNBP1.2,FUNPT
JNBP1.3,TSFUN
JNBP1.4,DJS
JB08H,ZDBS
JB0AH,SPPP
AJMPSTART1
;
FUNPT:
LJMPFUNPTT
;以下为闹钟时间设定程序,按下p1.3进入设定
TSFUN:
LCALLDS20ms
JBP1.3,START1
WAIT113:
JNBP1.3,WAIT113
JB05H,CLOSESP
MOVDISPFIRST,#50H
MOV50H,#0CH
MOV51H,#0AH
;
DSWAIT:
SETBEA
LCALLDISPLAY
JNBP1.2,DSFINC
JNBP1.0,DSDEC
JNBP1.3,DSSFU
AJMPDSWAIT
;
CLOSESP:
CLR05H
CLRBELL
AJMPSTART1
DSSFU:
LCALLDS20ms
JBP1.3,DSWAIT
LJMPDSSFUNN
;
SETMM1:
LJMPSETMM
;
DSFINC:
LCALLDS20ms
JBP1.2,DSWAIT
DSWAIT12:
LCALLDISPLAY
JNBP1.2,DSWAIT12
CLREA
MOVR0,#53H
LCALLADD1
MOVA,R3
CLRC
CJNEA,#60H,ADDHH22
ADDHH22:
JCDSWAIT
ACALLCLR0
AJMPDSWAIT
DSDEC:
LCALLDS20ms
JBP1.0,DSWAIT
DSWAITEE:
LCALLDISPLAY
JNBP1.0,DSWAITEE
CLREA
MOVR0,#53H
LCALLsub1
LJMPDSWAIT
;以下为秒表功能/时钟转化功能程序
;按下p1.1可进行功能转换
FUNSS:
LCALLDS20ms
JBP1.1,START11
WAIT11:
JNBP1.1,WAIT11
CPL03H
JNB03H,TIMFUN
MOVDISPFIRST,#60H
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
MOVTL1,#0F0H
MOVTL1,#0D8H
SETBTR1
SETBET1
START11:
LJMPSTART1
TIMFUN:
MOVDISPFIRST,#70H
CLRET1
CLRTR1
START12:
LJMPSTART1
;以下为秒表暂停/清零功能程序
;按下p1.2清零,p1.1推出秒表回到时钟计时
FUNPTT:
LCALLDS20ms
JBP1.2,START12
WAIT22:
JNBP1.2,WAIT21
CLRET1
CLRTR1
WAIT33:
JNBP1.1,FUNSS
JBP1.2,WAIT31
LCALLDS20ms
JBP1.2,WAIT33
WAIT66:
JNBP1.2,WAIT61
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
WAIT44:
JNBP1.1,FUNSS
JBP1.2,WAIT41
LCALLDS20ms
JBP1.2,WAIT44
WAIT55:
JNBP1.2,WAIT51
SETBET1
SETBTR1
AJMPSTART1
;以下为键等待释放时显示不会熄灭程序
WAIT21:
LCALLDISPLAY
AJMPWAIT22
WAIT31:
LCALLDISPLAY
AJMPWAIT33
WAIT41:
LCALLDISPLAY
AJMPWAIT44
WAIT51:
LCALLDISPLAY
AJMPWAIT55
WAIT61:
LCALLDISPLAY
AJMPWAIT66
;
;
;***********************************;
;一秒计时程序
;***********************************;
;t0中断服务程序
INTT0:
PUSHACC
PUSHPSW
CLRET0
CLRTR0
MOVA,#0B7H
ADDA,TL0
MOVTL0,A
MOVA,#3CH
ADDCA,TH0
MOVTH0,A
SETBTR0
SETBP3.6
SETBP3.5
DJNZR4,OUTT0
ADDSS:
MOVR4,#14H
CLRP3.6
CLRP3.5
CPL07H
MOVR0,#71H
ACALLADD1
MOVA,R3
CLRC
CJNEA,#60H,ADDMM
ADDMM:
JCOUTT0
ACALLCLR0
MOVR0,#77H
ACALLADD1
MOVA,R3
CLRC
CJNEA,#60H,ADDHH
ADDHH:
JCOUTT0
ACALLCLR0
LCALLDS20ms
SETB08H
MOVR0,#79H
ACALLADD1
MOVA,R3
CLRC
CJNEA,#24H,HOUR
HOUR:
JCOUTT0
ACALLCLR0
OUTT0:
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,79H
LCALLBAOJ
POPPSW
POPACC
SETBET0
RETI
;
;***********************************;
;闪动调时程序/秒表功能;
;***********************************;
;t1中断服务程序,用于时间调整单元闪烁指示或秒表计时
INTT1:
PUSHACC
PUSHPSW
JB09H,SPCC
JB06H,DJSFUN
JB03H,MMFUN
MOVTL1,#0B0H
MOVTH1,#3CH
DJNZR2,INTT1OUT
MOVR2,#06H
CPL02H
JB02H,FLASH1
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,7AH
INTT1OUT:
POPPSW
POPACC
RETI
FLASH1:
JB01H,FLASH2
MOV72H,7AH
MOV73H,7AH
MOV74H,78H
MOV75H,79H
AJMPINTT1OUT
FLASH2:
MOV72H,76H
MOV73H,77H
MOV74H,7AH
MOV75H,7AH
AJMPINTT1OUT
;
SPCC:
INCSONGCON
MOVTH1,#0D8H
MOVTL1,#0EFH
AJMPINTT1OUT
DJSFUN:
LJMPDJSS
MMFUN:
CLRTR1
MOVA,#0F7H
ADDA,TL1
MOVTL1,A
MOVA,#0D8H
ADDCA,TL1
MOVTL1,A
S