数码管数字时钟电路的设计_第1页
数码管数字时钟电路的设计_第2页
数码管数字时钟电路的设计_第3页
数码管数字时钟电路的设计_第4页
数码管数字时钟电路的设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

10.3.2数码管数字时钟电路的设计1.系统硬件电路的设计单片机限制的数码管时钟电路如图10-6所示,它接受的是AT89C51单片机,只用了P1口和P2口,P0、P3口可用于扩展显示年、月、日等功能。为了简化硬件电路,LED显示接受动态扫描方式实现,P1口输出段码数据,P2.0~P2.5端作扫描输出限制端,P2.7作功能转换按键输入端。LED接受共阳极数码管,由三极管9012供应驱动电流。为了提高计时精度,所接受的晶振频率为12MHz。图10-6AT89C51数字时钟电路图2.系统软件的设计1)主程序主程序功能主要是初始化、正常显示时间和推断功能转换键。显示时间调用显示子程序。当P2.7端口按键按下时,转入调时功能程序。主程序流程图如图10-7所示。图10-7主程序流程图2)显示子程序数码管显示的数据存放在50H~55H内存单元中,其中50H、51H单元存放秒数据,52H、53H单元存放分数据,54H、55H单元存放时数据。时间数据接受BCD码表示,对应的显示用段码表存放在ROM中。3)定时器T0中断服务程序时钟的最小计时单位是秒,60s进位1min,60min进位1h。定时器T0用于产生最小单位1s,定时时间为50ms,中断累计20次即为1s。计数单元中的十进制BCD数每逢60进位。程序流程图如图10-8所示。图10-8T0中断服务程序4)定时器T1中断服务程序进行时间调整时,正在被调整的时间以闪烁形式表现,定时器T1用于产生闪烁的时间间隔,每隔0.3s闪烁一次。程序流程图略。5)调时功能程序调整时间程序的方法是:按下功能键,当按下时间小于1 s时,进入省电状态,大于1s时,进入调分状态,等待操作,此时计时器停止走动。6)延时程序系统运用三个延时程序。因为系统是动态显示,为了确保系统在有效显示时间范围内(约50ms)必需执行显示程序,所以0.5s的延时程序是通过执行显示程序约81遍实现的。程序如下: ORG 0000H AJMP MAINT ;转主程序 NOP ORG 000BH AJMP INT01 ;转定时器T0中断程序 NOP ORG 001BH AJMP INT11 ;转定时器T1中断程序NOP******主程序******MAINT: MOV R0,#7FH ;00H~7FH单元清零 CLR AWZ1:MOV@R0,A DJNZ R0,WZ1 MOV SP,#30H ;置堆栈指针 MOV 5AH,#0AH ;放入“熄灭符”数据 MOV TMOD,#11H ;设T0,T1为16位定时器MOVTL0,#0B0H ;置50ms定时初值 MOV TH0,#3CH MOV TL1,#0B0H MOV TH1,#3CH SETB EA ;开中断 SETB ET0 ;允许T0中断 SETB TR0 ;启动T0 MOV R4,#14H;用于产生1s定时MAINT1: LCALL XSZCX ;调用显示子程序 JNB P2.7,SJTZ0 ;功能键按下,进入调时程序 SJMP MAINT1SJTZ0: LCALL XSZCX ;通过调用显示时间程序延时消抖动 JNB P2.7,SJTZ1 SJMP MAINT1 ;功能键没有按下,显示时间SJTZ1: CLR ET0;关闭T0中断 CLR TR0;关闭T0 LCALLYS1S;调用1s延时程序 JB P2.7,KMTES ;按键时间小于1s,进入省电状态 MOV R2,#06H ;进入调时状态,置闪烁定时初值 SETB ET1 ;允许T1中断 SETB TR1 ;启动T1XYZ2:JNBP2.7,XYZ1 ;P2.7端为0,等待 CLR01H ;置调分标记位为1XYZ4:JBP2.7,XYZ3 ;等待键按下 LCALL YS05S ;延时0.5s JNB P2.7,XYZHH ;按键时间大于0.5s,转到调小时状态 MOV R0,#53H ;按键时间小于0.5s,进入调分状态 LCALL ADD1 ;调时间加1子程序MOVA,R3 ;取要调整的单元数据CLR CCJNEA,#60,QWE;调整单元数据与60比较JCXYZ4 ;小于60转到XYZ4循环QWE:CLR A;大于或等于60,清零 MOV @R0,A DEC R0 MOV @R0,A CLR C AJMP XYZ4 ;转到XYZ4循环KMTES: SETBET0;省电状态,开T0中断 SETBTR0;启动T0(开时钟)KMA:JBP2.7,$;无按键按下,等待 LCALLXSZCX;通过调用显示时间程序延时消抖动 JBP2.7,KMA;是干扰返回等待KMA1: JNBP2.7,$;等待键释放 LJMPMAINT1;返回主程序,显示时间XYZHH: JNBP2.7,XYZ5;等待键释放 SETB01H;置调小时标记位XYZ6: JB P2.7,XYZ7;等待键按下 LCALLYS05S;有键按下,延时0.5s JNBP2.7,XYZOUT ;按下时间大于0.5s,退出调整状态 MOVR0,#55H ;小于0.5s,调整小时 LCALLADD1;调加1子程序 MOVA,R3CLRC CJNEA,#24,KMB1 ;计时单元与24比较 JC XYZ6,;小于24转XYZ6循环KMB1: CLRA;大于或等于24,则清零 MOV @R,A DEC R0 MOV @R0,A AJMP XYZ6 ;转XYZ6循环XYZOUT: JNB P2.7,XYZOUT1 ;退出调时状态,等待键释放 LCALL XSZCX;通过调用显示程序延时消抖动 JNB P2.7,XYZOUT ;是抖动,返回XYZOUT等待 MOV 20H,#00H ;清调时标记位 CLR TR1 ;关闭T1 CLR ET1 ;关T1中断 SETB TR0 ;启动T0 SETB ET0 ;开T0中断 LJMP MAINT1 ;返回主程序XYZ1: LCALL XSZCX ;键释放等待时,调用显示子程序 AJMP XYZ2 ;防止此时无时钟显示XYZ3: LCALL XSZCX AJMP XYZ4XYZ5: LCALL XSZCX AJMP XYZHHXYZ7: LCALL XSZCX AJMP XYZ6XYZOUT1:LCALLXSZCX AJMP XYZOUT

******显示子程序******

XSZCX:MOVR1,#50H;显示数据首址 MOV R5,#0FEH ;扫描限制字初值MAXY: MOV A,R5;扫描限制字送A MOV P2,A ;输出扫描限制字 MOV A,@R1 ;取显示数据 MOV DPTR,#ABC;取段码表首地址 MOVCA,@A+DPTR;取对应段码 MOV P1,A ;P1口输出段码 LCALLYS1MS ;延时1msINC R1;显示地址增1 MOV A,R5;扫描限制字送A JNB ACC.5,ENDOUT ;ACC.5为0时一次显示结束 RL A ;限制字左移 MOV R5,A ;制字送回R5中 AJMP MAXY ;循环显示下一个数据ENDOUT:MOVP2,#0FFH;一次显示结束,P2口复位 MOV P1,#0FFH ;P1口复位 RET ;子程序返回

******T0中断服务程序******

INT01:PUSHACC;疼惜现场 PUSHPSW CLR ET0 ;关T0中断 CLR TR0 ;关定时器T0 MOV A,#0B7H;修正中断响应时间 ADD A,TL0 MOV TL0,AMOV A,#3CH ADDC A,TH0 SETB TR0 ;启动定时器T0 DJNZ R4,INT0U ;20次中断未到退出中断AD1: MOV R4,#14H ;R4重新赋值 MOV R0,#51H ;指向秒计时单元(50H,51H) LCALLADD1;调用加1s程序 MOV A,R3 ;秒数据放入A CLR C ;清进位标记CJNE A,#60,AD2;小于60s吗 JC INT0U ;小于60s退出中断AD2: CLR A;大于或等于60s,清秒计数单元 MOV @R0,A DEC R0 MOV @R0,A MOV R0,#57H ;指向分计时单元(56H,57H) ACALLADD1;调用加1min程序 MOV A,R3;分数据放入A CLR C CJNE A,#60,AD3;小于60min吗 JC INT0U ;小于60min退出中断AD3: CLR A;大于或等于60min,清分计数单元 MOV @R0,A DEC R0 MOV @R0,A MOV R0,#59H ;指向小时计时单元(58H,59H) ACALLADD1 ;调用加1h程序 MOV A,R3 ;小时数据放入A CLR C CJNE A,#24,AD4 ;小于24h吗 JC INT0U ;小于24h退出中断AD4: CLR A ;大于或等于24h清小时计数单元 MOV @R0,A DEC R0 MOV @R0,AINT0U: MOV 52H,56H ;中断退出时将分、时计时单元数据 MOV 53H,57H ;移入对应显示单元 MOV 54H,58H MOV 55H,59HPOP PSW ;复原现场 POP ACC SETBET0 ;开放T0中断 RETI ;中断返回******T1中断服务程序******

INT11: PUSH ACC ;疼惜现场 PUSH PSW MOV TL1,#0B0H ;装定时器T1初值 MOV TH1,#3CH DJNZ R2,INT1U ;0.3s未到退出中断 MOV R2,#06H ;重装0.3s定时用初值 CPL 02H ;0.3s定时到,对闪烁标记取反JB 02H,CCC1 ;02H位为1时显示单元“熄灭” MOV 52H,56H ;02H位为0时显示正常 MOV 53H,57H MOV 54H,58H MOV 55H,59HINT1U: POP PSW ;复原现场 POP ACCRETI ;退出中断

CCC1: JB 01H,CCC2 ;01H位为1时转小时熄灭限制 MOV 52H,5AH ;01H位为0时“熄灭符”放入分计时单元 MOV 53H,5AH MOV 54H,58H MOV 55H,59H AJMP INT1U ;转中断退出CCC2: MOV 52H,56H ;01H位为1时“熄灭符”放入小时计时单元 MOV 53H,57H MOV 54H,5AH MOV 55H,5AH AJMP INT1U ;转中断退出ADD1: MOV A,@R0 ;取出现计时数据放入A DEC R0;指向前一单元SWAP A;A中高

温馨提示

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

评论

0/150

提交评论