单片机课程设计数字钟实验报告_第1页
单片机课程设计数字钟实验报告_第2页
单片机课程设计数字钟实验报告_第3页
单片机课程设计数字钟实验报告_第4页
单片机课程设计数字钟实验报告_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计:电子钟一、实现功能1、能够实现准确计时,以数字形式显示时、分、秒的时间。2、小时以24小时计时形式,分秒计时为60进位,能够调节时钟时间。3、闹钟功能,一旦走时到该时间,能以声或光的形式告警提示。4、能够实现按键启动与停止功能。5、能够实现整点报时功能。6、能够实现秒表功能。二、设计思路1、芯片介绍234678B门12;143119ISgVCC:P10/TPOOPll/TP01P12P02P13P03P14P04P15P05P16P06P17P07INTLP2OINTOP21P22T1P23TOP24P25EAATP26P27XIX2RESETRXD电源。TXDALE-PPSE

2、X373635弭33322122232425262728LO113039GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校

3、验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门

4、电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能RXD(串行输入口)TXD(串行输出口)/INTO(外部中断0)/INT1(外部中断1)TO(记时器0外部输入)T1(记时器1外部输入)/WR(外部数据存储器写选通)/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于

5、锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VP

6、P:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。2、显示电路就时钟而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。另外,89C2051本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。数

7、码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。对于实时时钟而言,显示显然是另一个重要的环节。通常LED显示有两种方式:动态显示和静态显示。静态显示的优点是程序简单、显示亮度有保证、单片机CPU的开销小,节约CPU的工作时间。但占有I/O口线多,每一个LED都要占有一个I/O口,硬件开销大,电路复杂。需要几个LED就必须占有几个并行口,比较适用于LED数量较少的场合。当然当LED数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。LED动态显示硬件连接简单,但动态扫描的显示方式需要占有CPU较多的时间,在单片机没

8、有太多实时测控任务的情况下可以采用。本系统需要采用6位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路用6个共阴数码管分别显示,小时、分钟和秒,通过动态扫描进行显示,从而避免了译码器的使用,同时节约了I/0端口,使电路更加简单。单片机采用AT89S51系列,这种单片机应用简单,适合电子钟设计。针对要实现的功能,采用AT89S51单片机进行设计,AT89S51单片机是一款低功耗,高性能CM0S8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采

9、用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。这样,既能做到经济合理又能实现预期的功能。在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。程序可分为闹钟的声音程序、时间显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序、整点报时等。运用这种方法,关键在于各模块的兼容和配合,以免各模块不匹配会出现意想不到的错误。首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。这是前期准备工作。第二部分是硬件部分:依据想要的功能分块设计设计,

10、比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。在已经正确的设计基础上,添加额外的功能!在设计的的过程中,主要采用分块设计的方法,进行分块调试在进行整体组合。在设计实时显示时间和秒表时主要是时间的计算,才能精确计时间,和两个定时器的优先级问题才能进行两个模块的切换。三、设计流程图Uy呆护

11、现场”7重装定时器初值四、设计功能模块1、时间调整模块s4按键按下(进入时间调整状态,判断S4键,若再次按下开始进行小时调整,每次按下s4键时小时加一,若S4键未按下判断so键是否按下,若so键按下,分钟加一,若so未按下,判断S1键,若si键按下,返回主程序,进行时间与闹钟的切换。2、闹钟模块若so键按下,开启闹钟,进入闹钟判断模块,若满足闹钟的分钟与时钟的分钟相等,并且闹钟的小时与时钟的小时相等,进入喇叭响应模块。so键释放则关闭闹钟。3、秒表模块若S2键()按下,进入秒表模块,显示秒表初始值。若S5键按下,显示秒表初始值并开始秒表计时。若弹起s5键则停止秒表计数并复位。若弹起s2键重新进

12、行时间显示。4、整点报时模块26H中存放整点报时的标志位,若时间模块中存放分钟的地址中数为60,则将存放小时的数传递给A并使A自增1,若A不等于0,,进入喇叭响应模块,若A为0返回主程序。5、时钟定时模块定时50ms,定时为T0方式1,初始值TH0=3CHTL0=0B0H,X=155366、秒表定时模块由于使用两个定时器,T0的自然优先级高于T1的,所以在执行秒表按键时,T1的优先级应高于T0,应对IP进行设置,使IP为08H。定时10ms,定时为T1方式1,初始值TH0=0FCHTL0=18H,X=645367、延时模块延时25msDELAY:MOVR4,#015HDLOO:MOVR5,#0

13、FFHDL11:MOVR6,#9HDL12:DJNZR6,DL12DJNZR5,DL11DJNZR4,DL00RET四、proteus程序仿真图五、仿真结果分析通过S1、S0、S3和S4四个按键,对时间进行修改和闹钟的设置S0控制闹钟的启动和停止。通过S2来进入秒表模式,按下S5进行秒表正确计时。弹起S5和S2进入时间显示。按下S1键显示闹钟,松开后显示时间;按进入时间修改模式,再按S4键时间的时加1,按S2分加1,调整结束后按下S1恢复正常显示;按下S3键进入闹钟修改模式,再按S3键闹钟的时加1,按S2分加1,调整结束后按下S1恢复正常显示。六、设计心得体会本次课程设计,即将告一段落,但收获

14、却是弥足珍贵。一分耕耘,一分收获。部亲自去尝试,你很难去体验那份开心。我们经过了这半年对单片机由一无所知到逐步了解,现在开始了一些小的制作。课程设计是一项好的方向,让我们去自我提高,很有裨益。实验开始前,同组的同伴就开始了收集资料,尝试着去努力实现一些功能。起初,我对单片机知道很少,还是经过看看细节性的东西,才渐渐有些入门。当然,实验的过程中也遇到了许多的难题。1、实现电子钟的数码显示,在这一过程中,显示部分总是会出现这样那样的问题。2、按键问题我的设计中,大部分功能选择是通过按键开关实现的。在仿真中发现,调整数值时,有时按键反应太快,按一次,跳了几下,使设置时间很不方便。但是仿真多了之后,找

15、到了按键(实际上是按鼠标)的节奏,对按键的掌控力提高了不少,不怎么会出现跳变的情况了。有些开关我采用了长按键的方式来防抖,效果不错,但是每次都要长按键,调整效率太低,我没有普及。本来想把所有的按键都加延时防抖电路,但仿真中感觉对键盘的控制力没提高多少。3、定时/计数器的使用问题。在实验过程中多次运用到定时器T0T1,我们在使用时忽略了中断的优先级,从而使同级的中断存在时,而不能很好的达到目的。程序:ORG0000HLJMPSTARTORG000BHLJMPTIMEORG001BHLJMPTIMEA;*初始化*START:MOVSP,#50HMOV20H,#00HMOV21H,#00HMOV22

16、H,#00HMOV23H,#01HMOV24H,#01HMOV25H,#00HMOV26H,#00H;定义秒;定义分;定义时;定义闹钟分钟;定义闹钟小时MOV30H,#00HMOV31H,#00HMOV32H,#00HMOV33H,#00HMOV34H,#00HMOV35H,#00HMOV36H,#01HMOV37H,#00H;时间SECOND送显缓冲区;时间MINUTE送显缓冲区;时间HOUR送显缓冲区;闹钟分钟送显缓冲区MOV38H,#01HMOV39H,#00HMOV50H,#00HMOV27H,#00HMOV28H,#00HMOV29H,#00HMOVTMOD,#11HMOVTH0,#

17、03CHMOVTL0,#0B0HMOVTH1,#0FCHMOVTL1,#018HMOVIE,#8AHSETBTR0;闹钟小时十位送显缓冲区;闹钟小时个位送显缓冲区;按键次数;秒表最低两位;秒表秒计数单元;秒表分计数单元;16位计数器;赋初值;赋初值;中断允许;启动T0MOVR2,#14HMOVR1,#0AHMOVP2,#0FFH*主程序MAIN:JB,M1;=1时转移S4没有按JB,GBLCALLTIMEPROGB:LCALLDISPLAY1;调用闹钟判断;调用时间显示LCALLSETTIME程序LJMPMAINM1:JB,M2LCALLSETATIMELJMPMAINM2:JB,M4LCAL

18、LLOOKATIME示闹钟子程序LJMPMAINM4:JB,M5LCALLDISPLAY1LCALLLOOKM5:LJMPMAIN;*存时间程序*M7:MOVA,20HMOVB,#0AHDIVABMOV31H,A31单元MOV30H,B;调用SETTIME调时子;P1=1时转移S3;调用SETATIME子程序;=1时转移S1;调用LOOKATIME显;=1时转移主程序;调用秒表显示;将A的低4位存入;将A的高4位存入30单元MOVA,21HMOVB,#0AHDIVABMOV33H,A;将A的低4位存入33单元MOV32H,B;将A的高4位存入32单元MOVA,22HMOVB,#0AHDIVAB

19、MOV35H,A;将A的低4位存入35单元MOV34H,BM8:RET;*秒表送出始值到显示缓冲区*MJ:MOV27H,#00HMOV28H,#00HMOV29H,#00HMOVA,27HMOVB,#0AHDIVABMOV31H,A31单元MOV30H,B30单元MOVA,28HMOVB,#0AHDIVABMOV33H,A33单元MOV32H,B32单元MOVA,29HMOVB,#0AHDIVABMOV35H,A35单元MOV34H,BMK:RET;将A的低4位存入;将A的高4位存入;将A的低4位存入;将A的高4位存入;将A的低4位存入;*延时子程序LOOK:LCALLDISPLAY1MM1:

20、JNB,LERLCALLM7LCALLMJCLRTR1CLRPT1LCALLDISPLAY1LJMPM6LER:MOVIP,#08HSETBTR1LCALLDISPLAY1M6:RET.*ktrnli*SETTIME:;设置时间L0:LCALLDISPLAY1JB,L1;=1时转移MOVC,JCMM1LCALLDELAY1;延时JCMM1MSTOP1:MOVC,;为0时转移JNCMSTOP1LCALLDELAY1;延时MOVA,50HINC50HCJNEA,#00H,HJ1LJMPL0HJ1:INC22HMOVA,22HCJNEA,#18H,GO12MOV22H,#00HMOV34H,#00H

21、MOV35H,#00HLJMPL0L1:JB,L2MOVC,JCL1LCALLDELAY1JCL1MSTOP2:MOVC,JNCMSTOP2LCALLDELAY1MOVC,JNCMSTOP2INC21H;小时自加一;小时计数循环;复位;=1时转移;延时;=0时转移;延时;分钟加一MOVA,21HMOVA,21HCJNEA,#3CH,GO11MOV21H,#00H;分钟计数循环;复位MOV32H,#00HMOV33H,#00HLJMPL0GO11:MOVB,#0AHDIVABMOV32H,B;将A的低4位存入32单元MOV33H,ALJMPL0;将A的高4位存入33单元GO12:MOVB,#0A

22、HDIVABMOV34H,B;将A的低4位存入34单元MOV35H,ALJMPL0;将A的高4位存入35单元L2:JB,L0;MOVC,JCL2=1时转移LCALLDELAY1MOVC,;延时JCL2STOP1:MOVC,;=0时转移JNCSTOP1LCALLDELAY1;延时MOVC,JNCSTOP1MOV50H,#00HMMM:LJMPMAIN;*设置闹钟SETATIME:LCALLDISPLAY2N0:LCALLDISPLAY2MM2:JB,N1MOVC,;调用DISPLAY2显示闹钟;=1时转移JCMM2LCALLDELAY1;延时JCMM2MSTOP3:MOVC,;=0时转移JNCM

23、STOP3LCALLDELAY1;延时MOVA,50HINC50HCJNEA,#00H,HJ2LJMPN0HJ2:INC24H;小时加一MOVA,24HCJNEA,#24,GO22MOV24H,#00HMOV38H,#00HMOV39H,#00HLJMPN0N1:JB,N2MOVC,JCN1LCALLDELAY1JCN1MSTOP4:MOVC,JNCMSTOP4LCALLDELAY1MOVC,JNCMSTOP4INC23HMOVA,23HCJNEA,#60,GO21;小时计数循环;复位;=1时转移;延时;=0时转移;延时;分钟加一;分钟计数循环;复位MOV23H,#00HMOV36H,#00H

24、MOV36H,#00HMOV37H,#00HLJMPN0GO21:MOVB,#0AHDIVABMOV36H,B;将A的低4位存入36单元MOV37H,ALJMPN0;将A的高4位存入37单元GO22:MOVB,#0AHDIVABMOV38H,B;将A的低4位存入38单元MOV39H,ALJMPN0;将A的高4位存入39单元N2:JB,N0MOVC,JCN2;=1时转移LCALLDELAY1MOVC,JCN2;延时STOP2:MOVC,JNCSTOP2LCALLDELAY1BZ:MOVC,BZ:MOVC,MOVC,JNCSTOP2MOV50H,#00HLJMPMAIN;*闹钟判断TIMEPRO:

25、MOVA,21HMOVB,23HCJNEA,B,BKMOVA,22HMOVB,24HCJNEA,B,BKSETBMOVC,LCALLTIMEOUTBK:RET;判断定时闹钟的分钟;判断定时闹钟的小时;调用TIMEOUT;*喇叭报警*TIMEOUT:CLR26HX1:LCALLBZ;调用喇叭响应程序CLR;调用喇叭响应程序结束LCALLDELAY;延时CLRLJMPDISPLAY1MOV,CCLRMOVR7,#0FFH;喇叭响应时间T2:MOVR6,#0FFHT3:DJNZR6,T3DJNZR7,T2SETBRET;*显示闹钟时间*LOOKATIME:LCALLDISPLAY2MM:JNB,LO

26、OKATIMELCALLDELAY1LJMPMAINDELAY1:MOVR4,#15H;时间延时DL001:MOVR5,#0FFHDL111:DJNZR5,DL111DJNZR4,DL001RETI、r;保护现场9/OHJTIME:PUSHACCPUSHPSWMOVTH0,#03CH;初值MOVTH0,#03CH;初值MOVA,22HMOVA,22HMOVTL0,#0B0HDJNZR2,RET0MOVR2,#14HMOVA,20HINCACJNEA,#3CH,GO1MOV20H,#0MOV30H,#0MOV31H,#0MOVA,21HINCACJNEA,#3CH,GO2SETB26HJB26H

27、,AAAA:LCALLTIMEOUT1CLR26HMOV21H,#0HMOV32H,#0MOV33H,#0;秒自加一;秒计数循环;复位;分钟自加一;分钟计数循环;复位INCCJNEMOVMOVMOVAJMPGO1:MOVMOVDIVMOV31单元MOV30单元AJMPGO2:MOVMOVDIVMOV单元MOVAA,#18H,GO322H,#00H34H,#035H,#0RET020H,AB,#0AHAB31H,A30H,BRET021H,AB,#0AHAB33H,A32H,B;小时自加一;小时计数循环;复位;将A的低4位存入;将A的高4位存入;将A的低4位存入33;将A的高4位存入32单元AJ

28、MPRET0MOVR7,#0FFH;喇叭响应时间MOVR7,#0FFH;喇叭响应时间GO3:MOV22H,AMOVB,#0AHDIVABMOV35H,A单元MOV34H,B单元AJMPRET0RET0:POPPSWPOPACCRETITIMEOUT1:MOVR1,22HINCR1X11:LCALLBZ1LJMPDISPLAY1LCALLDELAY2LJMPDISPLAY1BZ1:MOVC,MOV,CCLR;将A的低4位存入35;将A的高4位存入34;恢复现场;调用喇叭响应程序MOV27H,#0;复位MOV30H,B;将A的高4位存入T21:MOVR6,#0FFHT31:DJNZR6,T31DJ

29、NZR7,T21SETBDJNZR1,X11RETDELAY:MOVR4,#015HDL00:MOVR5,#0FFHDL11:MOVR6,#9HDL12:DJNZR6,DL12DJNZR5,DL11DJNZR4,DL00RET*1*1*al*al*al*al*匚I*JAk_l*al*al*1*!;*秒表定时*TIMEA:;初值MOVTH1,#0FCHMOVTL1,#018HDJNZR1,RET0MOVR1,#0AHMOVA,27H;毫秒自加一;毫秒秒计数循环INCACJNEA,#60H,GO1A;秒自加一;复位;分钟自加一;分钟计数循环;复位;将A的低4位存入MOV30H,#0MOV31H,#0MOVA,28HINCACJNEA,#3CH,GO2AMOV28H,#0HMOV32H,#0MOV33H,#0MOVA,29HINCACJNEA,#3CH,GO3AMOV29H,#00HMOV34H,#0MOV35H,#0AJMPRET0GO1A:MOV27H,AMOVB,#0AHDIVABMOV31H,A31单元30单元AJMPRET0GO2A:MOV28H,AMOVB,#0AHDIVABMOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论