发布网友 发布时间:2022-05-01 05:47
共4个回答
热心网友 时间:2022-06-25 04:57
HOUR EQU 40H ;存放时信息的单元 MINUTE EQU 41H ;存放分信息的单元 SECOND EQU 42H ;存放秒信息的单元 NUM EQU 43H ;存放T0溢出次数的单元 ORG 0000H ;程序入口 AJMP MAIN ORG 0030H ;主程序入口 MAIN:MOV SP,#60H ;指定堆栈栈底 MOV HOUR,#00H MOV MINUTE,#00H MOV SECOND,#00H ;将时、分、秒分别清零 MOV NUM,#0 MOV TMOD,#01H ;T0工作于方式1,用于定时 MOV TH0,#4CH ;设置T0的初始值 MOV TL0,#00H MOV IE,#00H ;关中断 SETB TR0 ;开启定时器T0 LOOP:NOP NOP ACALL DISPLAY ;调用显示子程序 NOP NOP LOOP1:JB TF0,TIME ;等待定时溢出 LJMP LOOP1 TIME:CLR TR0 ;关闭定时器 PUSH DPL ;保护现场 PUSH DPH PUSH ACC MOV TH0,#4CH ;重新设置T0的值 MOV TL0,#00H SETB TR0 ;开启T0 MOV A,NUM INC A ;溢出次数+1 MOV NUM,A CJNE A,#0AH,TT1 ;检测键盘 MOV P1,#0FH ;设键盘初值 MOV R0,#04H ;延时消抖 LCALL DELAY JNB P1.0,T0C1 ;为0表示P1.0按下,转T0C1调整秒 JNB P1.1,T0C2 ;为0表示P1.1按下,转T0C2调整分 JNB P1.2,T0C3 ;为0表示P1.2按下,转T0C3调整时 TT1: CJNE A,#140,RR4 MOV NUM,#00H T0C1:MOV A,SECOND INC A ;秒单元内容加1 DA A ;调整为BCD码 MOV SECOND,A CJNE A,#60H,RR4 ;不为60秒继续等待 setb flag: clr flag RR1: MOV SECOND,#00H ;为60秒将秒单元清零 T0C2:MOV A,MINUTE INC A ;分单元内容加1 DA A ;调整为BCD码 MOV MINUTE,A CJNE A,#60H,RR4 ;不为60分继续等待 RR2: MOV MINUTE,#00H ;为60分,分单元清零 T0C3:MOV P1,#0F0H ; 1小时闪一次 LCALL DELAY ;延时 MOV P1,#0FH MOV A,HOUR INC A ;时单元内容加1 DA A ;调整为BCD码 MOV HOUR,A CJNE A,#24H,RR4 ;不为24小时继续等待 RR3: MOV HOUR,#00H ;为24小时,时单元清零 RR4: POP ACC ;恢复现场 POP DPH POP DPL LJMP LOOP DELAY:MOV R1,#10H ;延时子程序 DELAY1:MOV R2,#20H DJNZ R2,$ DJNZ R1,DELAY1 DJNZ R0,DELAY RET DISPLAY:MOV DPTR,#TAB ;送表头基地址 MOV A,HOUR ANL A,#0FH ;屏蔽时高位 MOVC A,@A+DPTR ;查时高位 MOV P0,A CLR P2.6 ;开显示 MOV R0,#1 ;延时消除鬼影 LCALL DELAY SETB P2.6 ;关显示 MOV A,HOUR ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV P0,A CLR P2.7 MOV R0,#1 LCALL DELAY SETB P2.7 MOV A,MINUTE ANL A,#0FH MOVC A,@A+DPTR MOV P0,A CLR P2.4 MOV R0,#1 LCALL DELAY SETB P2.4 MOV A,MINUTE ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV P0,A CLR P2.5 MOV R0,#1 LCALL DELAY SETB P2.5 MOV A,SECOND ANL A,#0FH MOVC A,@A+DPTR MOV P0,A CLR P2.2 MOV R0,#1 LCALL DELAY SETB P2.2 MOV A,SECOND ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV P0,A CLR P2.3 MOV R0,#1 LCALL DELAY SETB P2.3 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END热心网友 时间:2022-06-25 04:58
开始--启动定时器--用中断显示和计时---每次中断为50毫秒---每中断一次毫秒加一--判断一秒有没有到了没有---到就为0,分钟加一....等60分就变0,时钟加一----到就等0----结束热心网友 时间:2022-06-25 04:58
这是我曾为汽车录音机做的一个89C2051的时钟代码,看看吧,能能不有点帮助.热心网友 时间:2022-06-25 04:59
看楼上的不错啊!你自己调试一下!