单片机汇编语言源程序如下:- //R1 秒 R2 分 R3 时
- SETUP BIT P3.0
- UP BIT P3.3
- OK BIT P3.5
- FLAG EQU 30H //0不设置 1设置时 2设置分 3设置秒
- ORG 0000H
- AJMP AA
- ORG 001BH
- LJMP DINGSHI
- ORG 0045H
- AA:
- MOV SP,#60H
- MOV TMOD,#10H
- MOV TH1,#3CH
- MOV TL1,#0B0H ;定时器1定时50毫秒
- MOV IE,#88H
- SETB TR1
- SETB F0
- LOOP:
- LCALL XIANSHI
- ACALL SHEZHI;设置时间
- SJMP LOOP
- DINGSHI:
- PUSH ACC
- PUSH PSW
- MOV TH1,#3CH
- MOV TL1,#0B0H
- INC R7
- CJNE R7,#14H,FH ;20次为1秒
- MOV R7,#00H
-
- INC R1
- CJNE R1,#3CH,FH ;60
- MOV R1,#00H
- INC R2
- CJNE R2,#3CH,FH ;60
- MOV R2,#00H
- INC R3
- CJNE R3,#18H,FH ;24
- MOV R3,#00H
- FH:
- POP PSW
- POP ACC
- RETI
- XIANSHI:
- MOV DPTR,#TABLE;共阳段码表
- INC R4
- MOV A,FLAG
- CJNE A,#1,XS //设置时的时候闪烁
- CLR C
- CJNE R4,#128,XS1 //相比较 看标志位
- XS1:
- JC XS2 //R4小于128的时候不显示时 大于等于128的时候显示
- XS:
- MOV A,R3 //将时拆分为个位和十位 分别用一位数码管显示
- MOV B,#0AH
- DIV AB
- MOVC A,@A+DPTR //按数值取相应的段码
- MOV P0,A
- MOV P2,#0FEH
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
-
- MOV A,B
- MOVC A,@A+DPTR
- MOV P0,A
- MOV P2,#0FDH
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
-
- XS2:
- MOV P0,#40H //显示横杠‘-’
- MOV P2,#0FBH
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
-
-
- MOV A,FLAG
- CJNE A,#2,XF //设置分的时候闪烁
- CLR C
- CJNE R4,#128,XF1 //相比较 看标志位
- XF1:
- JC XF2 //R4小于128的时候不显示分 大于等于128的时候显示
- XF:
- MOV A,R2 //将分拆分为个位和十位 分别用一位数码管显示
- MOV B,#0AH
- DIV AB
- MOVC A,@A+DPTR //按数值取相应的段码
- MOV P0,A
- MOV P2,#0F7H
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
-
- MOV A,B
- MOVC A,@A+DPTR
- MOV P0,A
- MOV P2,#0EFH
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
-
- XF2:
- MOV P0,#40H //显示横杠‘-’
- MOV P2,#0DFH
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
-
-
- MOV A,FLAG
- CJNE A,#3,XM //设置秒的时候闪烁
- CLR C
- CJNE R4,#128,XM1 //相比较 看标志位
- XM1:
- JC XM2 //R4小于128的时候不显示秒 大于等于128的时候显示
- XM:
- MOV A,R1 //将秒拆分为个位和十位 分别用一位数码管显示
- MOV B,#0AH
- DIV AB
- MOVC A,@A+DPTR //按数值取相应的段码
- MOV P0,A
- MOV P2,#0BFH
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
-
- MOV A,B
- MOVC A,@A+DPTR
- MOV P0,A
- MOV P2,#7FH
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp;
- MOV P2,#0FFH
- XM2:
- RET
- SHEZHI:
- JB SETUP,K0
- JNB SETUP,$
- CLR TR1 //设置的时候停止定时器
- INC FLAG
- MOV A,FLAG
- CJNE A,#4,SR
- MOV FLAG,#1
- SJMP SR
- K0:
- JB OK,K1
- JNB OK,$
- MOV FLAG,#0 //退出设置模式
- SETB TR1 //设置完之后启动定时器
- SJMP SR
- K1:
- MOV A,FLAG
- JZ SR //A为0则跳转到SR
- JB UP,SR
- JNB UP,$
- CJNE A,#1,K2
- INC R3
- CJNE R3,#24,SR
- MOV R3,#0
- SJMP SR
- K2:
- CJNE A,#2,K3
- INC R2
- CJNE R2,#60,SR
- MOV R2,#0
- SJMP SR
- K3:
- CJNE A,#3,SR
- INC R1
- CJNE R1,#60,SR
- MOV R1,#0
- SJMP SR
- SR:
- RET
-
- TABLE:
- DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0-9
- END
复制代码
汇编Keil代码与Proteus8.8仿真下载:
仿真代码.7z
(49.45 KB, 下载次数: 69)
|