📄 test8led.asm
字号:
LEDBUF1 DATA 70H
LEDBUF2 DATA 78H
LEDSP DATA 6FH
OVERTIME EQU 400
TIMECOU DATA 6EH
;********************************************
NUL1 EQU 37H ;空置单元
NUL0 EQU 36H ;空置单元
HOU1 EQU 35H ;时高位存储单元
HOU0 EQU 34H ;时低位存储单元
MIN1 EQU 33H ;分高位存储单元
MIN0 EQU 32H ;分低位存储单元
SEC1 EQU 31H ;秒高位存储单元
SEC0 EQU 30H ;秒低位存储单元
;********************主程序*********************
ORG 0000H ;主程序入口
LJMP MAIN
ORG 002BH ;T2中断入口
LJMP CTC2
;*****************主程序开始********************
;*************设置初值显示*23时*59分*00秒********
MAIN:
MOV NUL1,#0FFH
MOV NUL0,#0FFH
MOV HOU1,#2
MOV HOU0,#3
MOV MIN1,#5
MOV MIN0,#9
MOV SEC1,#0
MOV SEC0,#0
;*************定时器T2每2.5mS中断一次************
CTC0:
MOV SP, #0DFH ;对于具有256字节内部RAM芯片来说,
;将0E0H-0FFH,共计32字节作为堆栈区
MOV TIMECOU,#OVERTIME
MOV TH2,#0F7H ;初值0F700送定时器T2
MOV TL2,#00H
MOV RCAP2H,#0F7H
MOV RCAP2L,#00H
MOV T2CON,#04H ;初始化T2工作方式(自动重装初值、定时)并启动T2
SETB ET2 ;允许定时器T2中断
SETB EA ;开中断
SETB TR2
SJMP $
;****************定时器T2中断********************************
PROC CTC2
CTC2:
PUSH PSW
PUSH ACC
LCALL DISPC
LCALL DISPLAY
DJNZ TIMECOU,NEXT20
MOV TIMECOU,#OVERTIME
LCALL TIMEUP ;1秒定时到,调用计时子程序
NEXT20:
POP ACC
POP PSW
CLR TF2
RETI
END
;**************时间计时子程序***************
PROC TIMEUP
TIMEUP:
INC SEC0
MOV A,SEC0
CJNE A,#10,TIMEREXIT
MOV SEC0,#00H
INC SEC1
MOV A,SEC1
CJNE A,#6,TIMEREXIT
MOV SEC1,#00H
INC MIN0
MOV A,MIN0
CJNE A,#10,TIMEREXIT
MOV MIN0,#00H
INC MIN1
MOV A,MIN1
CJNE A,#6,TIMEREXIT
MOV MIN1,#00H
INC HOU0
MOV A,HOU1
CJNE A,#2,HOUR1
MOV A,HOU0
CJNE A,#4,TIMEREXIT
MOV HOU1,#00H
MOV HOU0,#00H
HOUR1:
MOV A,HOU0
CJNE A,#10,TIMEREXIT
MOV HOU0,#00H
INC HOU1
TIMEREXIT:
RET
END
;*****************以下为LED显示程序*************
PROC DISPLAY
DISPLAY:
SETB RS1
SETB RS0
INC LEDSP
MOV A,LEDSP
ANL A,#07
ADD A,#LEDBUF2
MOV R0,A
MOV P2,#000H ;黄师傅加的这条指令有点神呀!!!
MOV P0,@R0
MOV A,LEDSP
ANL A,#07H
CJNE A,#7,NEXT1
NEXT0:
MOV P2, #00000001B
SJMP EXIT
NEXT1:
CJNE A, #6, NEXT2
MOV P2,#00000010B
SJMP EXIT
NEXT2:
CJNE A, #5, NEXT3
MOV P2,#00000100B
SJMP EXIT
NEXT3:
CJNE A, #4, NEXT4
MOV P2,#00001000B
SJMP EXIT
NEXT4:
CJNE A, #3, NEXT5
MOV P2,#00010000B
SJMP EXIT
NEXT5:
CJNE A, #2, NEXT6
MOV P2,#00100000B
SJMP EXIT
NEXT6:
CJNE A, #1, NEXT7
MOV P2,#01000000B
SJMP EXIT
NEXT7:
MOV P2,#10000000B
EXIT:
RET
END
;******************************************************************************
PROC DISPC
DISPC:
SETB RS1
CLR RS0
MOV R0,#LEDBUF1
MOV R1,#SEC0
MOV R2,#8
LOOP21:
MOV A,@R1
MOV @R0, A
INC R0
INC R1
DJNZ R2,LOOP21
LOOP22:
MOV R0,#LEDBUF1
MOV R1,#LEDBUF2
MOV R2,#8
MOV DPTR, #DISPTAB
LOOP23:
MOV A ,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP23
RET
END
;*********************共阳数码管************************************************
DISPTAB:
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -