单片机汇编设计数字钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORG0000H
AJMP MAIN
ORG000BH
AJMP PTF0
ORG0033H
TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;不带小数点
TAB1:DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH;带小数点
TAB2:DB01H,02H,04H,08H,10H,20H,40H,80H,00H;自检a--h
PTF0:PUSH PSW;保护现场PSW,ACC进栈PUSH ACC;选工作寄存器1区
MOV TH0,#0ECH;T0初始化
MOV TL0,#78H
DJNZ36H,PTFOR
MOV36H,#92;判断中断次数计数单元减1是否为0
XRL33H,#0FFH
DJNZ37H,PTFOR;中断次数计数单元36H,37H
MOV37H,#2
MOV A,32H;秒单元32H加1
ADD A,#1
DA A;十进制调整
MOV32H,A
CJNE A,#60H,PTFOR;判断单元是否计数到60
MOV32H,#0
MOV A,31H;分单元31H加1
ADD A,#1
DA A
MOV31H,A
CJNE A,#60H,PTFOR
MOV31H,#0
MOV32H,#0
MOV A,30H;时单元30H加1
ADD A,#1
DA A
MOV30H,A
CJNE A,#24H,PTFOR;判断计数单元是否到24
MOV30H,#0
MOV31H,#0
MOV32H,#0
PTFOR:POP ACC;恢复现场,ACC,PSW退栈POP PSW
RETI
MAIN:
MOV P2,#0FH;数码管自检
MOV DPTR,#TAB2
SS:MOV R2,#00H
SST:MOV A,R2
MOVC A,@A+DPTR
JZ SS
MOV P0,A
INC R2
ACALL DEL3
MOV A,P0
CJNE A,#80H,SST
MOV30H,#00H;状态数初始化
MOV31H,#00H
MOV32H,#00H
MOV33H,#00H
MOV36H,#92
MOV37H,#2
MOV SP,#0EFH;栈指针初始化
MOV TH0,#0ECH
MOV TL0,#78H
MOV TMOD,#1
MOV IP,#2
MOV IE,#82H;中断初始化
SETB TR0;允许T0计数
LOOP:ACALL LOP0
JB P1.0,XX;校时按键按下但未松开(低电平)转移到校时模块ACALL JS1
XX:JB P1.1,YY;校分按键按下但未松开(低电平)转移到校分模块ACALL JF1
ACALL LOP0
YY:AJMP LOOP
JS1:LCALL DEL
JS2:JB P1.0,JS3;校时按键松开(高电平)校时
ACALL LOP0
AJMP JS2
JS3:MOV A,30H
ADD A,#1
DA A
MOV30H,A
CJNE A,#24H,RT;校时到24时,采用24进制计时
MOV30H,#0
JF1:LCALL DEL
JF2:JB P1.1,JF3;校分按键松开(高电平)校分
ACALL LOP0
AJMP JF2
JF3:MOV A,31H
ADD A,#1
DA A
MOV31H,A
CJNE A,#60H,RT;分为60进制计时
MOV31H,#0
MOV A,30H
INC A,
MOV30H,A;分校时到60时,时自加一
RT:RET
LOP0:MOV R6,33H
CJNE R6,#00H,ZZ;保证秒的闪烁,采用小数点的闪烁
MOV DPTR,#TAB1
LJMP LOP1
ZZ:MOV DPTR,#TAB
LOP1:MOV A,31H
ANL A,#0FH;利用与0F从中取出分个位,显示分个位
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0FFH
MOV P2,#0EFH;保证数码管的显示不变,原理来源于任务5 ACALL DEL
MOV A,31H
ANL A,#0F0H;利用与F0相与取出分十位,显示分十位
SWAP A;交换高低半字节
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0FFH
MOV P2,#0DFH
ACALL DEL
MOV A,30H;时个位的显示(原理与分同)
ANL A,#00FH
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0FFH
MOV P2,#0BFH
ACALL DEL
MOV A,30H;时十位的显示
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#0FFH
MOV P2,#7FH
ACALL DEL
RET
DEL:MOV R4,#20;延时程序1
DEL1:MOV R5,#40
DEL2:DJNZ R5,DEL2
DJNZ R4,DEL1
RET
DEL3:MOV R7,#0FFH;延时程序2
DEL4:MOV R6,#0FFH
DEL5:DJNZ R6,DEL5
DJNZ R7,DEL4
RET
END